blob: f2246e8fee6a15e04ca5c031f824d79d76a7a70f [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:convert';
import 'package:sl4f/sl4f.dart';
import 'package:test/test.dart';
import 'package:logging/logging.dart';
final _log = Logger('ermine_e2e_ask_test');
/// Tests that the DUT running ermine can do the following:
/// - login as guest (unauthenticated login)
/// - show the ask_bar
/// - execute commands via the ask_bar
void main() {
Sl4f sl4fDriver;
setUp(() async {
sl4fDriver = Sl4f.fromEnvironment();
await sl4fDriver.startServer();
});
tearDown(() async {
await sl4fDriver.stopServer();
sl4fDriver.close();
});
test('ermine session shell guest login', () async {
// TODO: note that 'user picker' screen is changing/going away
// so here we use sessionctl to do guest login. Once final
// OOBE UI is established for Ermine, this could be revisited
// so as to provide for more robust testing of no-auth login.
await sl4fDriver.ssh.run('sessionctl restart_session');
final result = await sl4fDriver.ssh.run('sessionctl login_guest');
if (result.exitCode != 0) {
fail('unable to login guest - check user already logged in?');
}
// allow time for shell to startup and ask bar to show
await Future.delayed(Duration(seconds: 5));
// Launch simple_browser
await sl4fDriver.ssh.run('sessionctl add_mod simple_browser');
// allow time for simple_browser to startup
await Future.delayed(Duration(seconds: 10));
// verify that simple_browser is active
bool browserActive =
await _checkActiveComponent(driver: sl4fDriver, name: 'simple_browser');
if (!browserActive) {
fail('simple_browser is not active');
}
// Logout for next test
await sl4fDriver.ssh.run('sessionctl restart_session');
});
}
/// checks to see if the component associated with [name] is running.
Future<bool> _checkActiveComponent({Sl4f driver, String name}) async {
Future<String> getComponents() async {
// Note: using 'cs' here as iquery doesn't appear to actually provide a
// list of these active components via the hub.
final process = await driver.ssh.start('cs');
final exitCode = await process.exitCode;
final stdout = await process.stdout.transform(utf8.decoder).join();
if (exitCode != 0) {
final stderr = await process.stderr.transform(utf8.decoder).join();
_log.severe('cs failed with exit code $exitCode');
if (stdout.isNotEmpty) {
_log.severe('cs stdout: $stdout');
}
if (stderr.isNotEmpty) {
_log.severe('cs stderr: $stderr');
}
return null;
}
return stdout;
}
final activeComponents = await getComponents();
if (activeComponents == null) {
return false;
}
final matchingActiveComponentList =
activeComponents.split('\n').where((line) {
return line.contains(name);
}).toList();
return matchingActiveComponentList.isNotEmpty;
}