blob: f9f335a2c4c00b7abcbd5024c635747a7b878dd4 [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:io';
import 'package:collection/collection.dart';
import 'package:test/test.dart';
import 'package:sl4f/sl4f.dart' as sl4f;
void main() {
sl4f.Sl4f sl4fDriver;
sl4f.Scenic scenicDriver;
HttpServer server;
setUp(() async {
sl4fDriver = sl4f.Sl4f.fromEnvironment();
await sl4fDriver.startServer();
scenicDriver = sl4f.Scenic(sl4fDriver);
final serverIp = Platform.environment['SERVER_IP'];
if (serverIp == null) {
fail('SERVER_IP environment variable not set.');
}
// TODO(fxbug.dev/10031): Figure out how to get data into CI to actually test. For
// now, we'll just leave that to the user.
final fileName = Platform.environment['MEDIA_FILE'];
if (fileName == null) {
fail('MEDIA_FILE environment variable not set.');
}
final file = File(fileName);
final filesize = await file.length();
server = await HttpServer.bind(serverIp, 8000)
..listen((HttpRequest request) {
request.response.statusCode = HttpStatus.ok;
request.response.headers.contentType = ContentType.parse('video/mp4');
request.response.contentLength = filesize;
Future f = file.readAsBytes();
request.response.addStream(f.asStream()).whenComplete(() {
request.response.close();
});
});
});
tearDown(() async {
await sl4fDriver.stopServer();
sl4fDriver.close();
if (server != null) {
await server.close(force: true);
}
});
test('play video', () async {
final before = await scenicDriver.takeScreenshot(dumpName: 'before');
await scenicDriver.takeScreenshot(dumpName: 'before');
var cmd = 'sessionctl add_mod http://${server.address.address}:8000/';
await sl4fDriver.ssh.run(cmd);
await Future.delayed(
Duration(seconds: 5)); // Wait for video to start playing
final after = await scenicDriver.takeScreenshot(dumpName: 'after');
await Future.delayed(Duration(seconds: 5));
final after2 = await scenicDriver.takeScreenshot(dumpName: 'after2');
if (DeepCollectionEquality().equals(before.data, after.data)) {
fail('Playing video did not cause the screen to change');
}
if (DeepCollectionEquality().equals(after.data, after2.data)) {
fail('Got identical frames 5s apart in the video');
}
// TODO: How do we dismiss the mod we added above?
},
// This is a large test that waits for the DUT to come up and to start
// rendering something.
timeout: Timeout.none);
}