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_device 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.core import gpu_info 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class TestGPUInfo(unittest.TestCase): 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testConstruction(self): 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) data = { 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'devices': [ 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 'vendor_id': 1000, 'device_id': 2000, 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'vendor_string': 'a', 'device_string': 'b' }, 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) { 'vendor_id': 3000, 'device_id': 4000, 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'vendor_string': 'k', 'device_string': 'l' } 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ], 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'aux_attributes': { 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'optimus': False, 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'amd_switchable': False, 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'lenovo_dcute': False, 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'driver_vendor': 'c', 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'driver_version': 'd', 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'driver_date': 'e', 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'gl_version_string': 'g', 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'gl_vendor': 'h', 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'gl_renderer': 'i', 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'gl_extensions': 'j', 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) info = gpu_info.GPUInfo.FromDict(data) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(len(info.devices) == 2) 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(isinstance(info.devices[0], gpu_device.GPUDevice)) 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[0].vendor_id, 1000) 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[0].device_id, 2000) 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[0].vendor_string, 'a') 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[0].device_string, 'b') 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertTrue(isinstance(info.devices[1], gpu_device.GPUDevice)) 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[1].vendor_id, 3000) 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[1].device_id, 4000) 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[1].vendor_string, 'k') 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.devices[1].device_string, 'l') 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['optimus'], False) 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['amd_switchable'], False) 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['lenovo_dcute'], False) 473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['driver_vendor'], 'c') 483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['driver_version'], 'd') 493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['driver_date'], 'e') 503551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['gl_version_string'], 'g') 513551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['gl_vendor'], 'h') 523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['gl_renderer'], 'i') 533551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.assertEquals(info.aux_attributes['gl_extensions'], 'j') 543551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testMissingAttrsFromDict(self): 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) data = { 573551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'devices': [{ 'vendor_id': 1000, 'device_id': 2000, 583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'vendor_string': 'a', 'device_string': 'b' }] 593551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 603551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 613551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for k in data: 623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) data_copy = data.copy() 633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) del data_copy[k] 643551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) try: 653551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gpu_info.GPUInfo.FromDict(data_copy) 663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.fail('Should raise exception if attribute "%s" is missing' % k) 673551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) except AssertionError: 683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) raise 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) except: 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pass 713551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 723551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def testMissingDevices(self): 733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) data = { 743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 'devices': [] 753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 763551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 773551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) try: 783551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) gpu_info.GPUInfo.FromDict(data) 793551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self.fail('Should raise exception if devices array is empty') 803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) except AssertionError: 813551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) raise 823551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) except: 833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) pass 84