def test_dmidecode(self): SubProcess.reset(True, [b'bar\n']) self.assertEqual(model.dmidecode('foo'), 'bar') self.assertEqual(SubProcess.calls, [ ('check_output', ['dmidecode', '-s', 'foo'], {}), ]) self.assertEqual(SubProcess.outputs, [])
def test_PRODUCTS(self): self.assertIsInstance(products.PRODUCTS, dict) self.assertEqual(len(products.PRODUCTS), 173) for (key, value) in products.PRODUCTS.items(): SubProcess.reset(True, OUTPUTS) self.assertIsInstance(key, str) self.assertIsInstance(value, dict) self.assertIn('name', value) self.assertIsInstance(value['name'], str) self.assertTrue(value['name']) self.assertIsInstance(value['drivers'], list) for action in value['drivers']: self.assertTrue(issubclass(action, actions.Action)) inst = action() text = inst.describe() self.assertIsInstance(text, str) self.assertTrue(text, text) if 'screens' in value: screens = value['screens'] self.assertIsInstance(screens, dict) for (edid_md5, description) in screens.items(): self.assertIsInstance(edid_md5, str) self.assertIsInstance(description, str)
def test_reset(self): calls = SubProcess.calls outputs = SubProcess.outputs SubProcess.calls.extend(['foo', 'bar']) SubProcess.outputs.append(b'baz') self.assertIsNone(SubProcess.reset()) self.assertIs(SubProcess.mocking, False) self.assertEqual(SubProcess.calls, []) self.assertIs(SubProcess.calls, calls) self.assertEqual(SubProcess.outputs, []) self.assertIs(SubProcess.outputs, outputs) SubProcess.calls.extend(['foo', 'bar']) SubProcess.outputs.append(b'baz') self.assertIsNone(SubProcess.reset(True)) self.assertIs(SubProcess.mocking, True) self.assertEqual(SubProcess.calls, []) self.assertIs(SubProcess.calls, calls) self.assertEqual(SubProcess.outputs, []) self.assertIs(SubProcess.outputs, outputs) SubProcess.calls.extend(['foo', 'bar']) SubProcess.outputs.append(b'baz') self.assertIsNone(SubProcess.reset(True, [b'stuff', b'junk'])) self.assertIs(SubProcess.mocking, True) self.assertEqual(SubProcess.calls, []) self.assertIs(SubProcess.calls, calls) self.assertEqual(SubProcess.outputs, [b'stuff', b'junk']) self.assertIs(SubProcess.outputs, outputs)
def test_get_dmi_info(self): SubProcess.reset(True, OUTPUTS) self.assertEqual(model.get_dmi_info(), dict(EXPECTED)) self.assertEqual(SubProcess.calls, [ ('check_output', ['dmidecode', '-s', 'system-uuid'], {}), ('check_output', ['dmidecode', '-s', 'baseboard-product-name'], {}), ('check_output', ['dmidecode', '-s', 'system-product-name'], {}), ('check_output', ['dmidecode', '-s', 'system-version'], {}), ]) self.assertEqual(SubProcess.outputs, [])
def test_determine_model_1(self): """ Test `determine_model()` when *info* is not provided. """ SubProcess.reset(True, OUTPUTS) self.assertEqual(model.determine_model(), 'gazp7') self.assertEqual(SubProcess.calls, [ ('check_output', ['dmidecode', '-s', 'system-uuid'], {}), ('check_output', ['dmidecode', '-s', 'baseboard-product-name'], {}), ('check_output', ['dmidecode', '-s', 'system-product-name'], {}), ('check_output', ['dmidecode', '-s', 'system-version'], {}), ]) self.assertEqual(SubProcess.outputs, [])
def test_create_tmp_logs(self): SubProcess.reset(mocking=False) (tmp, tgz) = util.create_tmp_logs(func=None) self.assertTrue(path.isdir(tmp)) self.assertTrue(tmp.startswith('/tmp/logs.')) self.assertEqual( sorted(os.listdir(tmp)), ['system76-logs', 'system76-logs.tgz'], ) self.assertEqual(tgz, path.join(tmp, 'system76-logs.tgz')) self.assertTrue(path.isfile(tgz)) self.assertTrue(path.isdir(path.join(tmp, 'system76-logs'))) shutil.rmtree(tmp)
def test_determine_model_new(self): for val in model.TABLES['system-version']: tmp = TempDir() tmp.makedirs('class', 'dmi', 'id') tmp.write(val.encode(), 'class', 'dmi', 'id', 'product_version') self.assertEqual(model.determine_model_new(sysdir=tmp.dir), val) tmp = TempDir() tmp.makedirs('class', 'dmi', 'id') tmp.write(b'nope', 'class', 'dmi', 'id', 'product_version') SubProcess.reset(True, OUTPUTS) self.assertEqual(model.determine_model_new(sysdir=tmp.dir), 'gazp7') self.assertEqual(SubProcess.calls, [ ('check_output', ['dmidecode', '-s', 'system-uuid'], {}), ('check_output', ['dmidecode', '-s', 'baseboard-product-name'], {}), ('check_output', ['dmidecode', '-s', 'system-product-name'], {}), ('check_output', ['dmidecode', '-s', 'system-version'], {}), ]) self.assertEqual(SubProcess.outputs, [])
def test_open_ec(self): SubProcess.reset(mocking=True) tmp = TempDir() tmp.mkdir('kernel') tmp.mkdir('kernel', 'debug') tmp.mkdir('kernel', 'debug', 'ec') tmp.mkdir('kernel', 'debug', 'ec', 'ec0') data = os.urandom(256) name = tmp.write(data, 'kernel', 'debug', 'ec', 'ec0', 'io') fp = daemon.open_ec(sysdir=tmp.dir) self.assertIsInstance(fp, io.FileIO) self.assertEqual(fp.name, name) self.assertIs(fp.closed, False) self.assertEqual(fp.mode, 'rb+') self.assertEqual(SubProcess.calls, [ ('check_call', ['modprobe', 'ec_sys', 'write_support'], {}), ]) self.assertEqual(fp.tell(), 0) self.assertEqual(fp.read(), data)
def test_determine_model_2(self): """ Test `determine_model()` when *info* is provided. """ SubProcess.reset(True) # system-uuid: info = {'system-uuid': '00000000-0000-0000-0000-000000000001'} self.assertEqual(model.determine_model(info), 'koap1') # baseboard-product-name: info = {'system-uuid': 'nope', 'baseboard-product-name': 'Z35FM'} self.assertEqual(model.determine_model(info), 'daru1') info = {'system-uuid': 'nope', 'baseboard-product-name': 'Z35F'} self.assertEqual(model.determine_model(info), 'daru1') info = {'system-uuid': 'nope', 'baseboard-product-name': 'MS-1221'} self.assertEqual(model.determine_model(info), 'daru2') info = {'system-uuid': 'nope', 'baseboard-product-name': 'MS-1221'} self.assertEqual(model.determine_model(info), 'daru2') # system-uuid: for (key, value) in model.TABLES['system-uuid'].items(): info = {'system-uuid': key} self.assertEqual(model.determine_model(info), value) # baseboard-product-name: for (key, value) in model.TABLES['baseboard-product-name'].items(): info = { 'system-uuid': 'nope', 'baseboard-product-name': key, } self.assertEqual(model.determine_model(info), value) # system-product-name: for (key, value) in model.TABLES['system-product-name'].items(): info = { 'system-uuid': 'nope', 'baseboard-product-name': 'nope', 'system-product-name': key, } self.assertEqual(model.determine_model(info), value) # system-version: for (key, value) in model.TABLES['system-version'].items(): info = { 'system-uuid': 'nope', 'baseboard-product-name': 'nope', 'system-product-name': 'nope', 'system-version': key, } self.assertEqual(model.determine_model(info), value) # non-System76: info = { 'system-uuid': 'nope', 'baseboard-product-name': 'nope', 'system-product-name': 'nope', 'system-version': 'nope', } self.assertEqual(model.determine_model(info), 'nonsystem76') # No calls should have resulted: self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, [])
def test_create_logs(self): SubProcess.reset(mocking=False) tmp = TempDir() tgz = util.create_logs(tmp.dir, func=None) self.assertEqual(tgz, tmp.join('system76-logs.tgz')) self.assertTrue(path.isfile(tgz))
def test_check_output(self): SubProcess.reset(mocking=True, outputs=[b'one', b'two']) self.assertEqual(SubProcess.check_output(['/no/such', 'thing']), b'one') self.assertEqual(SubProcess.calls, [ ('check_output', ['/no/such', 'thing'], {}), ]) self.assertEqual(SubProcess.outputs, [b'two']) self.assertEqual(SubProcess.check_output(['/nope'], foo='bar'), b'two') self.assertEqual(SubProcess.calls, [ ('check_output', ['/no/such', 'thing'], {}), ('check_output', ['/nope'], {'foo': 'bar'}), ]) self.assertEqual(SubProcess.outputs, []) SubProcess.reset(mocking=False) self.assertEqual( SubProcess.check_output(['/bin/echo', 'hello world']), b'hello world\n' ) self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, []) with self.assertRaises(subprocess.CalledProcessError) as cm: SubProcess.check_output(['/bin/false']) self.assertEqual(cm.exception.cmd, ['/bin/false']) self.assertEqual(cm.exception.returncode, 1) self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, []) with self.assertRaises(subprocess.TimeoutExpired) as cm: SubProcess.check_output(['/bin/sleep', '2'], timeout=0.5) self.assertEqual(cm.exception.cmd, ['/bin/sleep', '2']) self.assertEqual(cm.exception.timeout, 0.5) self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, [])
def test_check_call(self): SubProcess.reset(mocking=True) self.assertIsNone(SubProcess.check_call(['/no/such', 'thing'])) self.assertEqual(SubProcess.calls, [ ('check_call', ['/no/such', 'thing'], {}), ]) self.assertEqual(SubProcess.outputs, []) self.assertIsNone(SubProcess.check_call(['/nope'], foo='bar')) self.assertEqual(SubProcess.calls, [ ('check_call', ['/no/such', 'thing'], {}), ('check_call', ['/nope'], {'foo': 'bar'}), ]) self.assertEqual(SubProcess.outputs, []) SubProcess.reset(mocking=False) self.assertEqual(SubProcess.check_call(['/bin/true']), 0) self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, []) with self.assertRaises(subprocess.CalledProcessError) as cm: SubProcess.check_call(['/bin/false']) self.assertEqual(cm.exception.cmd, ['/bin/false']) self.assertEqual(cm.exception.returncode, 1) self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, []) with self.assertRaises(subprocess.TimeoutExpired) as cm: SubProcess.check_call(['/bin/sleep', '2'], timeout=0.5) self.assertEqual(cm.exception.cmd, ['/bin/sleep', '2']) self.assertEqual(cm.exception.timeout, 0.5) self.assertEqual(SubProcess.calls, []) self.assertEqual(SubProcess.outputs, [])