blob: f1e65890a59a740ad711ec2d6ecace69ce9cf680 [file] [log] [blame]
# Copyright 2017 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 itertools
import json
import os
import sys
import unittest
sys.path.append(os.path.dirname(__file__))
from driver import *
Log.silence = True
class ConfigTest(unittest.TestCase):
COPY_MAP = {
'/x': ['file1', 'file2'],
'/y': ['file3'],
}
CONFIG_TREE = {
'tests': [
{'name': 'test1', 'exec': 'command'},
{'name': 'test2', 'exec': 'command', 'copy': COPY_MAP},
],
}
def test_get_all_tests(self):
tests = get_tests(self.CONFIG_TREE)
self.assertEqual(len(tests), 2)
self.assertItemsEqual(tests[0]['copy'], [])
expected_files = [
('file1', '/x'),
('file2', '/x'),
('file3', '/y'),
]
self.assertItemsEqual(tests[1]['copy'], expected_files)
def test_get_one_test(self):
tests = get_tests(self.CONFIG_TREE, 'test2')
self.assertEqual(len(tests), 1)
self.assertEqual(tests[0]['name'], 'test2')
def test_no_matching_test(self):
with self.assertRaisesRegexp(NoMatchingTest, 'test3'):
get_tests(self.CONFIG_TREE, 'test3')
class GetDefaultDeviceTest(unittest.TestCase):
NETLS_SINGLE = 'device step-atom-yard-juicy (fe80::5054:4d:fe63:5e7a/7)\n'
NETLS_DOUBLE = ('device step-atom-yard-juicy (fe80::5054:4d:fe63:5e7a/7)\n'
'device brush-santa-rail-creme (fe80::8eae:4c4d:fef4:350d/7)\n')
def test_success(self):
device = get_default_device(self.NETLS_SINGLE)
self.assertEqual(device, 'step-atom-yard-juicy')
def test_multiple_devices(self):
expected_msg = 'step-atom-yard-juicy, brush-santa-rail-creme'
with self.assertRaisesRegexp(MultipleDevicesFound, expected_msg):
get_default_device(self.NETLS_DOUBLE)
class FuchsiaToolsTest(unittest.TestCase):
ENV = {'FUCHSIA_OUT_DIR': 'out', 'FUCHSIA_BUILD_DIR': 'build'}
def test_netaddr(self):
tools = FuchsiaTools(self.ENV)
self.assertEqual(
tools.netaddr('friend')[1:],
['netaddr', '--fuchsia', 'friend'])
def test_netls(self):
tools = FuchsiaTools(self.ENV)
self.assertEqual(tools.netls()[1], 'netls')
# TODO(jimbe) This test should test the contents of the batch file
def test_sftp(self):
tools = FuchsiaTools(self.ENV)
tuple = tools.sftp('server', [('file', '/x')])
tuple[1].close()
tuple[0][3] = 'batch';
self.assertEqual(
tuple[0][1:],
['sftp', '-b', 'batch', 'server'])
def test_missing_out_dir(self):
tools = FuchsiaTools({})
tools.netls()
def test_missing_build_dir(self):
tools = FuchsiaTools({})
with self.assertRaisesRegexp(MissingEnvironmentVariable, 'FUCHSIA_BUILD_DIR'):
tools.sftp('server', [('file', '/x')])
class DriverTest(unittest.TestCase):
TEST = {'name': 'test', 'exec': 'whatever'}
def fake_log(self):
log = []
Log.print_ = log.append
return log
def result_msg(self, test_id, **result):
return '%s result %s' % (test_id, json.dumps(result))
def test_run_many(self):
log = self.fake_log()
driver = Driver()
messages = [
self.result_msg('111', name='x', elapsed=0, failed=True, message='!'),
self.result_msg('111', name='y', elapsed=0, failed=False, message=''),
'111 teardown fail',
]
driver.start_test('111', self.TEST)
driver.wait_for_teardown(messages)
self.assertEqual(driver.passed, 1)
self.assertEqual(driver.failed, 1)
self.assertEqual(driver.failed_results[0]['message'], '!')
messages = [
self.result_msg('222', name='z', elapsed=0, failed=False, message=''),
'222 teardown pass',
]
driver.start_test('222', self.TEST)
driver.wait_for_teardown(messages)
self.assertEqual(driver.passed, 2)
self.assertEqual(driver.failed, 1)
driver.print_summary()
self.assertIn('Ran 3 total tests: 2 passed, 1 failed', log)
def test_empty_passed_result(self):
log = self.fake_log()
driver = Driver()
driver.start_test('111', self.TEST)
driver.wait_for_teardown(['111 teardown pass'])
self.assertEqual(driver.passed, 1)
self.assertEqual(driver.failed, 0)
self.assertIn('[passed] test', log)
def test_empty_failed_result(self):
log = self.fake_log()
driver = Driver()
driver.start_test('111', self.TEST)
driver.wait_for_teardown(['111 teardown fail'])
self.assertEqual(driver.passed, 0)
self.assertEqual(driver.failed, 1)
self.assertIn('[failed] test', log)
def test_log(self):
log = self.fake_log()
driver = Driver()
driver.start_test('111', self.TEST)
driver.wait_for_teardown(['111 log hello', '111 teardown pass'])
self.assertIn('[log] hello', log)
def test_wrong_test_id(self):
driver = Driver()
driver.start_test('111', self.TEST)
with self.assertRaisesRegexp(WrongTestId, 'expected 111 got 222'):
driver.wait_for_teardown(['222 teardown pass'])
def test_bad_op_code(self):
driver = Driver()
driver.start_test('111', self.TEST)
with self.assertRaisesRegexp(BadOpCode, 'party'):
driver.wait_for_teardown(['111 party !'])
def test_missing_teardown(self):
driver = Driver()
driver.start_test('111', self.TEST)
with self.assertRaises(MissingTeardown):
driver.wait_for_teardown([])
if __name__ == '__main__':
unittest.main()