gpu_info_unittest.py revision 3551c9c881056c480085172ff9840cab31610854
13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved.
23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# found in the LICENSE file.
43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)import unittest
53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from telemetry.core import gpu_info
73551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from telemetry.core import gpu_device
83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class TestGPUInfo(unittest.TestCase):
103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  def testConstruction(self):
113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    data = {
123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      'devices': [
133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        { 'vendor_id': 1000, 'device_id': 2000,
143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          'vendor_string': 'a', 'device_string': 'b' },
153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        { 'vendor_id': 3000, 'device_id': 4000,
163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          'vendor_string': 'k', 'device_string': 'l' }
173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      ],
183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      'aux_attributes': {
193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'optimus': False,
203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'amd_switchable': False,
213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'lenovo_dcute': False,
223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'driver_vendor': 'c',
233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'driver_version': 'd',
243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'driver_date': 'e',
253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'gl_version_string': 'g',
263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'gl_vendor': 'h',
273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'gl_renderer': 'i',
283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        'gl_extensions': 'j',
293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      }
303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    info = gpu_info.GPUInfo.FromDict(data)
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertTrue(len(info.devices) == 2)
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertTrue(isinstance(info.devices[0], gpu_device.GPUDevice))
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[0].vendor_id, 1000)
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[0].device_id, 2000)
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[0].vendor_string, 'a')
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[0].device_string, 'b')
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertTrue(isinstance(info.devices[1], gpu_device.GPUDevice))
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[1].vendor_id, 3000)
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[1].device_id, 4000)
413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[1].vendor_string, 'k')
423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.devices[1].device_string, 'l')
433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['optimus'], False)
443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['amd_switchable'], False)
453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['lenovo_dcute'], False)
463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['driver_vendor'], 'c')
473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['driver_version'], 'd')
483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['driver_date'], 'e')
493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['gl_version_string'], 'g')
503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['gl_vendor'], 'h')
513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['gl_renderer'], 'i')
523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    self.assertEquals(info.aux_attributes['gl_extensions'], 'j')
533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  def testMissingAttrsFromDict(self):
553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    data = {
563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      'devices': [{ 'vendor_id': 1000, 'device_id': 2000,
573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                    'vendor_string': 'a', 'device_string': 'b' }]
583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    for k in data:
613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      data_copy = data.copy()
623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      del data_copy[k]
633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      try:
643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        gpu_info.GPUInfo.FromDict(data_copy)
653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        self.fail('Should raise exception if attribute "%s" is missing' % k)
663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      except AssertionError:
673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        raise
683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      except:
693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)        pass
703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  def testMissingDevices(self):
723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    data = {
733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      'devices': []
743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    }
753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    try:
773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      gpu_info.GPUInfo.FromDict(data)
783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      self.fail('Should raise exception if devices array is empty')
793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    except AssertionError:
803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      raise
813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)    except:
823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      pass
83