Пример #1
0
 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, [])
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
 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, [])
Пример #5
0
 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, [])
Пример #6
0
 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)
Пример #7
0
 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, [])
Пример #8
0
 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)
Пример #9
0
    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, [])
Пример #10
0
 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))
Пример #11
0
    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, [])
Пример #12
0
    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, [])