1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4import unittest
5
6from telemetry.core import gpu_device
7from telemetry.core import gpu_info
8
9
10class TestGPUInfo(unittest.TestCase):
11  def testConstruction(self):
12    data = {
13      'devices': [
14        { 'vendor_id': 1000, 'device_id': 2000,
15          'vendor_string': 'a', 'device_string': 'b' },
16        { 'vendor_id': 3000, 'device_id': 4000,
17          'vendor_string': 'k', 'device_string': 'l' }
18      ],
19      'aux_attributes': {
20        'optimus': False,
21        'amd_switchable': False,
22        'lenovo_dcute': False,
23        'driver_vendor': 'c',
24        'driver_version': 'd',
25        'driver_date': 'e',
26        'gl_version_string': 'g',
27        'gl_vendor': 'h',
28        'gl_renderer': 'i',
29        'gl_extensions': 'j',
30      }
31    }
32    info = gpu_info.GPUInfo.FromDict(data)
33    self.assertTrue(len(info.devices) == 2)
34    self.assertTrue(isinstance(info.devices[0], gpu_device.GPUDevice))
35    self.assertEquals(info.devices[0].vendor_id, 1000)
36    self.assertEquals(info.devices[0].device_id, 2000)
37    self.assertEquals(info.devices[0].vendor_string, 'a')
38    self.assertEquals(info.devices[0].device_string, 'b')
39    self.assertTrue(isinstance(info.devices[1], gpu_device.GPUDevice))
40    self.assertEquals(info.devices[1].vendor_id, 3000)
41    self.assertEquals(info.devices[1].device_id, 4000)
42    self.assertEquals(info.devices[1].vendor_string, 'k')
43    self.assertEquals(info.devices[1].device_string, 'l')
44    self.assertEquals(info.aux_attributes['optimus'], False)
45    self.assertEquals(info.aux_attributes['amd_switchable'], False)
46    self.assertEquals(info.aux_attributes['lenovo_dcute'], False)
47    self.assertEquals(info.aux_attributes['driver_vendor'], 'c')
48    self.assertEquals(info.aux_attributes['driver_version'], 'd')
49    self.assertEquals(info.aux_attributes['driver_date'], 'e')
50    self.assertEquals(info.aux_attributes['gl_version_string'], 'g')
51    self.assertEquals(info.aux_attributes['gl_vendor'], 'h')
52    self.assertEquals(info.aux_attributes['gl_renderer'], 'i')
53    self.assertEquals(info.aux_attributes['gl_extensions'], 'j')
54
55  def testMissingAttrsFromDict(self):
56    data = {
57      'devices': [{ 'vendor_id': 1000, 'device_id': 2000,
58                    'vendor_string': 'a', 'device_string': 'b' }]
59    }
60
61    for k in data:
62      data_copy = data.copy()
63      del data_copy[k]
64      try:
65        gpu_info.GPUInfo.FromDict(data_copy)
66        self.fail('Should raise exception if attribute "%s" is missing' % k)
67      except AssertionError:
68        raise
69      except:
70        pass
71
72  def testMissingDevices(self):
73    data = {
74      'devices': []
75    }
76
77    try:
78      gpu_info.GPUInfo.FromDict(data)
79      self.fail('Should raise exception if devices array is empty')
80    except AssertionError:
81      raise
82    except:
83      pass
84