Beispiel #1
0
    def test_hwid_dictionary(self):
        '''HardwareID can be used as dictionary keys'''

        d = {
            HardwareID('pci', '1234/5678'):
            'pci1',
            HardwareID('pci', '1234/5679'):
            'pci2',
            HardwareID(
                'modalias', 'pci:v0000AAAAd000012AAsv00000000sdDEADBEEFbc02sc80i00'):
            'ma1',
            HardwareID('modalias', 'pci:v00001*d00003D*sv*sd*1bc03sc00i*'):
            'ma_bc03',
            HardwareID('modalias', 'pci:v00001*d00003D*sv*sd*1bc04sc00i*'):
            'ma_bc04',
        }

        self.assertEqual(d[HardwareID('pci', '1234/5678')], 'pci1')
        self.assertRaises(KeyError, d.__getitem__,
                          HardwareID('pci', '1235/1111'))
        self.assertEqual(
            d[HardwareID(
                'modalias',
                'pci:v00001001d00003D01sv00001234sd00000001bc03sc00i00')],
            'ma_bc03')
        self.assertEqual(
            d[HardwareID(
                'modalias',
                'pci:v0000AAAAd000012AAsv00000000sdDEADBEEFbc02sc80i00')],
            'ma1')
        self.assertRaises(
            KeyError, d.__getitem__,
            HardwareID(
                'modalias',
                'pci:v0000FFF0d00000001sv00000000sd00000000bc06sc01i01'))
Beispiel #2
0
    def test_openprinting_apt_binary(self):
        '''OpenPrintingDriverDB, known printer, apt package system, binary

        Note that this test case does assumptions about the data returned by
        openprinting.org, thus it needs to be adapted over time.

        This includes fetching the GPG fingerprint URL and verifying the SSL
        certificate validity and trust.
        '''
        prn = HardwareID('printer_deviceid', 'MFG:EPSON;MDL:Epson ME 320')
        db = jockey.detection.OpenPrintingDriverDB()
        orig_pkgsys = OSLib.inst.packaging_system
        try:
            OSLib.inst.packaging_system = lambda: 'apt'
            db.update(set([prn]))
        finally:
            OSLib.inst.packaging_system = orig_pkgsys

        drv = db.query(prn)

        self.assertEqual(len(drv), 1)
        drv = drv[0].properties

        self.assertEqual(drv['driver_type'], 'printer_driver')
        self.assert_('Epson' in drv['description']['C'])
        self.assert_('lineart' in drv['long_description']['C'])
        self.assert_(drv['package'].startswith('epson-inkjet-'))
        self.assert_('Epson' in drv['driver_vendor'])
        self.assert_(drv['repository'].startswith('deb '))
        self.assertEqual(drv['fingerprint'],
                         'E522 0FB7 014D 0FBD A50D  FC2B E5E8 6C00 8AA6 5D56')
        self.assert_('license' in drv)
Beispiel #3
0
    def test_openprinting_apt_ppd(self):
        '''OpenPrintingDriverDB, known printer, apt package system, PPD only
        
        Note that this test case does assumptions about the data returned by
        openprinting.org, thus it needs to be adapted over time.
        '''
        prn = HardwareID('printer_deviceid',
                         'MFG:Hewlett-Packard;MDL:HP DesignJet 3500CP')
        db = jockey.detection.OpenPrintingDriverDB()
        orig_pkgsys = OSLib.inst.packaging_system
        try:
            OSLib.inst.packaging_system = lambda: 'apt'
            db.update(set([prn]))
        finally:
            OSLib.inst.packaging_system = orig_pkgsys

        drv = db.query(prn)

        self.assertEqual(len(drv), 1)
        drv = drv[0].properties

        self.assertEqual(drv['driver_type'], 'printer_driver')
        self.assert_('HP' in drv['description']['C'])
        self.assert_('lineart' in drv['long_description']['C'])
        self.assertEqual(drv['package'], 'openprinting-ppds-postscript-hp')
        self.assertEqual(drv['driver_vendor'], 'HP')
        self.assertEqual(drv['free'], True)
        self.assert_(drv['repository'].startswith('deb '))
        self.assert_('license' in drv)
Beispiel #4
0
    def test_openprinting_unknownprinter(self):
        '''OpenPrintingDriverDB with an unknown printer'''

        backend = jockey.backend.Backend()
        backend.hardware = set(
            [HardwareID('printer_deviceid', 'MFG:FooTech;MDL:X-12;CMD:GDI')])
        backend.driver_dbs.append(jockey.detection.OpenPrintingDriverDB())
        backend.update_driverdb()
        self.assertEqual(backend.available(), [])
Beispiel #5
0
    def test_localkernelmod_driverdb(self):
        '''LocalKernelModulesDriverDB creates appropriate handlers
        
        It should prefer custom handlers over autogenerated standard ones and
        create standard ones for detected hardware.'''

        open(os.path.join(OSLib.inst.handler_dir, 'testhandlers.py'),
             'w').write('''
import jockey.handlers

class MintWrapper(jockey.handlers.KernelModuleHandler):
    def __init__(self, backend):
        jockey.handlers.KernelModuleHandler.__init__(self, backend, 'mint',
            'I taste even mintier')
''')

        db = jockey.detection.LocalKernelModulesDriverDB()

        result = jockey.detection.get_handlers(jockey.backend.Backend(), db)

        out = '\n'.join(sorted([str(h) for h in result]))

        self.assertEqual(
            out,
            '''kmod:firmwifi([KernelModuleHandler, free, enabled] standard module which needs firmware)
kmod:foodmi([KernelModuleHandler, free, enabled] foo DMI driver for [A-1] devices)
kmod:mint([MintWrapper, nonfree, enabled] I taste even mintier)
kmod:vanilla([KernelModuleHandler, free, enabled] free module with available hardware, graphics card)
kmod:vanilla3d([KernelModuleHandler, nonfree, enabled] nonfree, replacement graphics driver for vanilla)'''
        )

        for h in result:
            self.assert_(h.enabled())

        # some invalid/unsupported queries, should not cause crashes or
        # problems
        self.assertEqual(db.query(HardwareID('unknownType', '1234')), [])
        self.assertEqual(db.query(HardwareID('modalias', 'nobus1234')), [])
Beispiel #6
0
    def test_openprinting_unknownpkg(self):
        '''OpenPrintingDriverDB, known printer, unknown package system'''

        prn = HardwareID('printer_deviceid',
                         'MFG:Hewlett-Packard;MDL:HP DesignJet 3500CP')
        db = jockey.detection.OpenPrintingDriverDB()
        orig_pkgsys = OSLib.inst.packaging_system
        try:
            OSLib.inst.packaging_system = lambda: 'foo'
            db.update(set([prn]))
        finally:
            OSLib.inst.packaging_system = orig_pkgsys

        drv = db.query(prn)
        self.assertEqual(len(drv), 0)
Beispiel #7
0
    def test_get_hardware(self):
        '''get_hardware() returns correct hardware'''

        hw = jockey.detection.get_hardware()

        #filter out printers, since we cannot predict them
        self.assertEqual(
            '\n'.join(
                sorted([str(h) for h in hw if h.type != 'printer_deviceid'])),
            '''HardwareID('modalias', 'dmi:foo[A-1]bar')
HardwareID('modalias', 'fire:1.2')
HardwareID('modalias', 'pci:v00001001d00003D01sv00001234sd00000001bc03sc00i00')
HardwareID('modalias', 'pci:v0000AAAAd000012AAsv00000000sdDEADBEEFbc02sc80i00')
HardwareID('modalias', 'pci:v0000DEAFd00009999sv00000000sd00000000bc99sc00i00')
HardwareID('modalias', 'pci:v0000FFF0d00000001sv00000000sd00000000bc06sc01i01')
HardwareID('modalias', 'ssb:v4243id0812rev05')''')
Beispiel #8
0
    def test_openprinting_handler_binary(self):
        '''OpenPrintingDriverDB: PrinterDriverHandler for binary package'''

        backend = jockey.backend.Backend()
        backend.hardware = set(
            [HardwareID('printer_deviceid', 'MFG:EPSON;MDL:Epson ME 320')])
        backend.driver_dbs.append(jockey.detection.OpenPrintingDriverDB())
        orig_pkgsys = OSLib.inst.packaging_system
        try:
            OSLib.inst.packaging_system = lambda: 'apt'
            backend.update_driverdb()
        finally:
            OSLib.inst.packaging_system = orig_pkgsys
        handlers = backend.available()
        self.assertEqual(len(handlers), 1)
        self.assertTrue(
            handlers[0].startswith('printer:epson-inkjet-printer-n10-nx127:1'))

        hi = backend.handler_info(handlers[0])
        self.assert_(hi['package'].startswith('epson-inkjet-'))
        self.assert_(hi['repository'].startswith('deb '))
        self.assert_('repository_sign_fp' in hi)
        self.assert_('driver_vendor' in hi)
Beispiel #9
0
    def test_openprinting_handler_ppd(self):
        '''OpenPrintingDriverDB: PrinterDriverHandler for PPD package'''

        backend = jockey.backend.Backend()
        backend.hardware = set([
            HardwareID('printer_deviceid',
                       'MFG:Hewlett-Packard;MDL:HP DesignJet 3500CP')
        ])
        backend.driver_dbs.append(jockey.detection.OpenPrintingDriverDB())
        orig_pkgsys = OSLib.inst.packaging_system
        try:
            OSLib.inst.packaging_system = lambda: 'apt'
            backend.update_driverdb()
        finally:
            OSLib.inst.packaging_system = orig_pkgsys
        handlers = backend.available()
        self.assertEqual(handlers,
                         ['printer:openprinting-ppds-postscript-hp:20091009'])

        hi = backend.handler_info(handlers[0])
        self.assertEqual(hi['package'], 'openprinting-ppds-postscript-hp')
        self.assertEqual(hi['free'], 'True')
        self.assert_('repository' in hi)
        self.assert_('driver_vendor' in hi)
Beispiel #10
0
    def test_hwid_equality(self):
        '''HardwareID equality implementation
        
        This tests modalias pattern matching in particular, since this is
        nontrivial.'''

        # identity
        x = HardwareID('pci', '1234/5678')
        self.assertEqual(x, x)
        self.failIf(x != x)

        # trivial equality
        x = HardwareID('pci', '1234/5678')
        y = HardwareID('pci', '1234/5678')
        self.assertEqual(x, y)
        self.failIf(x != y)
        self.assertEqual(hash(x), hash(y))

        x = HardwareID(
            'modalias',
            'pci:v00001001d00003D01sv00001234sd00000001bc03sc00i00')
        y = HardwareID(
            'modalias',
            'pci:v00001001d00003D01sv00001234sd00000001bc03sc00i00')
        self.assertEqual(x, y)
        self.failIf(x != y)
        self.assertEqual(hash(x), hash(y))

        # trivial inequality
        x = HardwareID('pci', '1234/5678')
        y = HardwareID('pci', '1234/5679')
        self.assertNotEqual(x, y)
        self.assert_(x != y)
        y = HardwareID('dmi', '42')
        self.assertNotEqual(x, y)
        self.assert_(x != y)
        y = 'IamNotAHardwareID'
        self.assertNotEqual(x, y)
        self.assert_(x != y)

        x = HardwareID(
            'modalias',
            'pci:v00001001d00003D01sv00001234sd00000001bc03sc00i00')
        y = HardwareID(
            'modalias',
            'pci:v00001001d00003D01sv00001235sd00000001bc03sc00i00')
        self.assertNotEqual(x, y)
        self.assert_(x != y)

        # modalias pattern equality
        x = HardwareID('modalias', 'pci:v00001*d00003D*sv*sd*1bc03sc00i*')
        y = HardwareID(
            'modalias',
            'pci:v00001001d00003D01sv00001234sd00000001bc03sc00i00')

        self.assertEqual(x, y)
        self.failIf(x != y)
        self.assertEqual(y, x)
        self.failIf(y != x)
        self.assertEqual(hash(x), hash(y))

        # pattern comparison; this is necessary for usage as dictionary keys,
        # but should just be string comparison
        x = HardwareID('modalias', 'pci:v00001*d00003D*sv*sd*1bc03sc00i*')
        y = HardwareID('modalias', 'pci:v00001*d00003D*sv*sd*1bc03sc00i*')
        self.assertEqual(x, y)
        self.assertEqual(hash(x), hash(y))
        y = HardwareID('modalias', 'pci:v00001*d*sv*sd*1bc03sc00i*')
        self.assertNotEqual(x, y)

        # non-modalias values should not match on patterns
        x = HardwareID('pci', '1234/5678')
        y = HardwareID('pci', '12*/56*')
        self.assertNotEqual(x, y)