1 // Copyright 2020 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "android/opengl/gpuinfo.h"
16 
17 #include "android/base/testing/TestSystem.h"
18 #include "android/base/testing/TestTempDir.h"
19 
20 #include <gtest/gtest.h>
21 
22 static const char win_noinstalleddrivers[] =
23 "\r\n"
24 "\r\n"
25 "AcceleratorCapabilities=\r\n"
26 "AdapterCompatibility=RealVNC\r\n"
27 "AdapterDACType=\r\n"
28 "AdapterRAM=\r\n"
29 "Availability=8\r\n"
30 "CapabilityDescriptions=\r\n"
31 "Caption=VNC Mirror Driver\r\n"
32 "ColorTableEntries=\r\n"
33 "ConfigManagerErrorCode=0\r\n"
34 "ConfigManagerUserConfig=FALSE\r\n"
35 "CreationClassName=Win32_VideoController\r\n"
36 "CurrentBitsPerPixel=\r\n"
37 "CurrentHorizontalResolution=\r\n"
38 "CurrentNumberOfColors=\r\n"
39 "CurrentNumberOfColumns=\r\n"
40 "CurrentNumberOfRows=\r\n"
41 "CurrentRefreshRate=\r\n"
42 "CurrentScanMode=\r\n"
43 "CurrentVerticalResolution=\r\n"
44 "Description=VNC Mirror Driver\r\n"
45 "DeviceID=VideoController1\r\n"
46 "DeviceSpecificPens=\r\n"
47 "DitherType=\r\n"
48 "DriverDate=20080314000000.000000-000\r\n"
49 "DriverVersion=1.8.0.0\r\n"
50 "ErrorCleared=\r\n"
51 "ErrorDescription=\r\n"
52 "ICMIntent=\r\n"
53 "ICMMethod=\r\n"
54 "InfFilename=oem24.inf\r\n"
55 "InfSection=vncmirror\r\n"
56 "InstallDate=\r\n"
57 "InstalledDisplayDrivers=\r\n"
58 "LastErrorCode=\r\n"
59 "MaxMemorySupported=\r\n"
60 "MaxNumberControlled=\r\n"
61 "MaxRefreshRate=\r\n"
62 "MinRefreshRate=\r\n"
63 "Monochrome=FALSE\r\n"
64 "Name=VNC Mirror Driver\r\n"
65 "NumberOfColorPlanes=\r\n"
66 "NumberOfVideoPages=\r\n"
67 "PNPDeviceID=ROOT\\DISPLAY\\0000\r\n"
68 "PowerManagementCapabilities=\r\n"
69 "PowerManagementSupported=\r\n"
70 "ProtocolSupported=\r\n"
71 "ReservedSystemPaletteEntries=\r\n"
72 "SpecificationVersion=\r\n"
73 "Status=Degraded\r\n"
74 "StatusInfo=\r\n"
75 "SystemCreationClassName=Win32_ComputerSystem\r\n"
76 "SystemName=ANDREW-PC\r\n"
77 "SystemPaletteEntries=\r\n"
78 "TimeOfLastReset=\r\n"
79 "VideoArchitecture=5\r\n"
80 "VideoMemoryType=2\r\n"
81 "VideoMode=\r\n"
82 "VideoModeDescription=\r\n"
83 "VideoProcessor=\r\n"
84 "\r\n"
85 "\r\n"
86 "AcceleratorCapabilities=\r\n"
87 "AdapterCompatibility=NVIDIA\r\n"
88 "AdapterDACType=Integrated RAMDAC\r\n"
89 "AdapterRAM=2147483648\r\n"
90 "Availability=3\r\n"
91 "CapabilityDescriptions=\r\n"
92 "Caption=NVIDIA GeForce GTX 660M \r\n"
93 "ColorTableEntries=\r\n"
94 "ConfigManagerErrorCode=0\r\n"
95 "ConfigManagerUserConfig=FALSE\r\n"
96 "CreationClassName=Win32_VideoController\r\n"
97 "CurrentBitsPerPixel=32\r\n"
98 "CurrentHorizontalResolution=1600\r\n"
99 "CurrentNumberOfColors=4294967296\r\n"
100 "CurrentNumberOfColumns=0\r\n"
101 "CurrentNumberOfRows=0\r\n"
102 "CurrentRefreshRate=60\r\n"
103 "CurrentScanMode=4\r\n"
104 "CurrentVerticalResolution=900\r\n"
105 "Description=NVIDIA GeForce GTX 660M \r\n"
106 "DeviceID=VideoController2\r\n"
107 "DeviceSpecificPens=\r\n"
108 "DitherType=0\r\n"
109 "DriverDate=20160321000000.000000-000\r\n"
110 "DriverVersion=10.18.13.6472\r\n"
111 "ErrorCleared=\r\n"
112 "ErrorDescription=\r\n"
113 "ICMIntent=\r\n"
114 "ICMMethod=\r\n"
115 "InfFilename=oem65.inf\r\n"
116 "InfSection=Section031\r\n"
117 "InstallDate=\r\n"
118 "InstalledDisplayDrivers=nvd3dumx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvd3dum,nvwgf2um,nvwgf2um,nvwgf2um\r\n"
119 "LastErrorCode=\r\n"
120 "MaxMemorySupported=\r\n"
121 "MaxNumberControlled=\r\n"
122 "MaxRefreshRate=60\r\n"
123 "MinRefreshRate=60\r\n"
124 "Monochrome=FALSE\r\n"
125 "Name=NVIDIA GeForce GTX 660M \r\n"
126 "NumberOfColorPlanes=\r\n"
127 "NumberOfVideoPages=\r\n"
128 "PNPDeviceID=PCI\\VEN_10DE&amp;DEV_0FD4&amp;SUBSYS_21151043&amp;REV_A1\\4&amp;169534F2&amp;0&amp;0008\r\n"
129 "PowerManagementCapabilities=\r\n"
130 "PowerManagementSupported=\r\n"
131 "ProtocolSupported=\r\n"
132 "ReservedSystemPaletteEntries=\r\n"
133 "SpecificationVersion=\r\n"
134 "Status=OK\r\n"
135 "StatusInfo=\r\n"
136 "SystemCreationClassName=Win32_ComputerSystem\r\n"
137 "SystemName=ANDREW-PC\r\n"
138 "SystemPaletteEntries=\r\n"
139 "TimeOfLastReset=\r\n"
140 "VideoArchitecture=5\r\n"
141 "VideoMemoryType=2\r\n"
142 "VideoMode=\r\n"
143 "VideoModeDescription=1600 x 900 x 4294967296 colors\r\n"
144 "VideoProcessor=GeForce GTX 660M\r\n";
145 
146 static const char win_single_gpu[] =
147 "\r\n"
148 "\r\n"
149 "AcceleratorCapabilities=\r\n"
150 "AdapterCompatibility=NVIDIA\r\n"
151 "AdapterDACType=Integrated RAMDAC\r\n"
152 "AdapterRAM=1073741824\r\n"
153 "Availability=3\r\n"
154 "CapabilityDescriptions=\r\n"
155 "Caption=NVIDIA Quadro K600\r\n"
156 "ColorTableEntries=\r\n"
157 "ConfigManagerErrorCode=0\r\n"
158 "ConfigManagerUserConfig=FALSE\r\n"
159 "CreationClassName=Win32_VideoController\r\n"
160 "CurrentBitsPerPixel=32\r\n"
161 "CurrentHorizontalResolution=2560\r\n"
162 "CurrentNumberOfColors=4294967296\r\n"
163 "CurrentNumberOfColumns=0\r\n"
164 "CurrentNumberOfRows=0\r\n"
165 "CurrentRefreshRate=59\r\n"
166 "CurrentScanMode=4\r\n"
167 "CurrentVerticalResolution=1600\r\n"
168 "Description=NVIDIA Quadro K600\r\n"
169 "DeviceID=VideoController1\r\n"
170 "DeviceSpecificPens=\r\n"
171 "DitherType=0\r\n"
172 "DriverDate=20130830000000.000000-000\r\n"
173 "DriverVersion=9.18.13.2086\r\n"
174 "ErrorCleared=\r\n"
175 "ErrorDescription=\r\n"
176 "ICMIntent=\r\n"
177 "ICMMethod=\r\n"
178 "InfFilename=oem39.inf\r\n"
179 "InfSection=Section078\r\n"
180 "InstallDate=\r\n"
181 "InstalledDisplayDrivers=nvd3dumx.dll,nvwgf2umx.dll,nvwgf2umx.dll,nvd3dum,nvwgf2um,nvwgf2um\r\n"
182 "LastErrorCode=\r\n"
183 "MaxMemorySupported=\r\n"
184 "MaxNumberControlled=\r\n"
185 "MaxRefreshRate=60\r\n"
186 "MinRefreshRate=50\r\n"
187 "Monochrome=FALSE\r\n"
188 "Name=NVIDIA Quadro K600\r\n"
189 "NumberOfColorPlanes=\r\n"
190 "NumberOfVideoPages=\r\n"
191 "PNPDeviceID=PCI\\VEN_10DE&amp;DEV_0FFA&amp;SUBSYS_094B103C&amp;REV_A1\\4&amp;16C9E9F9&amp;0&amp;0010\r\n"
192 "PowerManagementCapabilities=\r\n"
193 "PowerManagementSupported=\r\n"
194 "ProtocolSupported=\r\n"
195 "ReservedSystemPaletteEntries=\r\n"
196 "SpecificationVersion=\r\n"
197 "Status=OK\r\n"
198 "StatusInfo=\r\n"
199 "SystemCreationClassName=Win32_ComputerSystem\r\n"
200 "SystemPaletteEntries=\r\n"
201 "TimeOfLastReset=\r\n"
202 "VideoArchitecture=5\r\n"
203 "VideoMemoryType=2\r\n"
204 "VideoMode=\r\n"
205 "VideoModeDescription=2560 x 1600 x 4294967296 colors\r\n"
206 "VideoProcessor=Quadro K600\r\n";
207 
208 static const char win_dual_gpu[] =
209 "AcceleratorCapabilities=\r\n"
210 "AdapterCompatibility=Advanced Micro Devices, Inc.\r\n"
211 "AdapterDACType=Internal DAC(400MHz)\r\n"
212 "AdapterRAM=4293918720\r\n"
213 "Availability=8\r\n"
214 "CapabilityDescriptions=\r\n"
215 "Caption=AMD Radeon (TM) R5 M335\r\n"
216 "ColorTableEntries=\r\n"
217 "ConfigManagerErrorCode=0\r\n"
218 "ConfigManagerUserConfig=FALSE\r\n"
219 "CreationClassName=Win32_VideoController\r\n"
220 "CurrentBitsPerPixel=\r\n"
221 "CurrentHorizontalResolution=\r\n"
222 "CurrentNumberOfColors=\r\n"
223 "CurrentNumberOfColumns=\r\n"
224 "CurrentNumberOfRows=\r\n"
225 "CurrentRefreshRate=\r\n"
226 "CurrentScanMode=\r\n"
227 "CurrentVerticalResolution=\r\n"
228 "Description=AMD Radeon (TM) R5 M335\r\n"
229 "DeviceID=VideoController1\r\n"
230 "DeviceSpecificPens=\r\n"
231 "DitherType=\r\n"
232 "DriverDate=20151204000000.000000-000\r\n"
233 "DriverVersion=15.300.1025.1001\r\n"
234 "ErrorCleared=\r\n"
235 "ErrorDescription=\r\n"
236 "ICMIntent=\r\n"
237 "ICMMethod=\r\n"
238 "InfFilename=oem27.inf\r\n"
239 "InfSection=ati2mtag_R503\r\n"
240 "InstallDate=\r\n"
241 "InstalledDisplayDrivers=aticfx64.dll,aticfx64.dll,aticfx64.dll,amdxc64.dll,aticfx32,aticfx32,aticfx32,amdxc32,atiumd64.dll,atidxx64.dll,atidxx64.dll,atiumdag,atidxx32,atidxx32,atiumdva,atiumd6a.cap,atitmm64.dll\r\n"
242 "LastErrorCode=\r\n"
243 "MaxMemorySupported=\r\n"
244 "MaxNumberControlled=\r\n"
245 "MaxRefreshRate=\r\n"
246 "MinRefreshRate=\r\n"
247 "Monochrome=FALSE\r\n"
248 "Name=AMD Radeon (TM) R5 M335\r\n"
249 "NumberOfColorPlanes=\r\n"
250 "NumberOfVideoPages=\r\n"
251 "PNPDeviceID=PCI\\VEN_1002&amp;DEV_6660&amp;SUBSYS_06B21028&amp;REV_81\\4&amp;2370267D&amp;0&amp;00E0\r\n"
252 "PowerManagementCapabilities=\r\n"
253 "PowerManagementSupported=\r\n"
254 "ProtocolSupported=\r\n"
255 "ReservedSystemPaletteEntries=\r\n"
256 "SpecificationVersion=\r\n"
257 "Status=OK\r\n"
258 "StatusInfo=\r\n"
259 "SystemCreationClassName=Win32_ComputerSystem\r\n"
260 "SystemName=DESKTOP-Q7BG33N\r\n"
261 "SystemPaletteEntries=\r\n"
262 "TimeOfLastReset=\r\n"
263 "VideoArchitecture=5\r\n"
264 "VideoMemoryType=2\r\n"
265 "VideoMode=\r\n"
266 "VideoModeDescription=\r\n"
267 "VideoProcessor=AMD Radeon Graphics Processor (0x6660)\r\n"
268 "\r\n"
269 "\r\n"
270 "AcceleratorCapabilities=\r\n"
271 "AdapterCompatibility=Intel Corporation\r\n"
272 "AdapterDACType=Internal\r\n"
273 "AdapterRAM=1073741824\r\n"
274 "Availability=3\r\n"
275 "CapabilityDescriptions=\r\n"
276 "Caption=Intel(R) HD Graphics 520\r\n"
277 "ColorTableEntries=\r\n"
278 "ConfigManagerErrorCode=0\r\n"
279 "ConfigManagerUserConfig=FALSE\r\n"
280 "CreationClassName=Win32_VideoController\r\n"
281 "CurrentBitsPerPixel=32\r\n"
282 "CurrentHorizontalResolution=1920\r\n"
283 "CurrentNumberOfColors=4294967296\r\n"
284 "CurrentNumberOfColumns=0\r\n"
285 "CurrentNumberOfRows=0\r\n"
286 "CurrentRefreshRate=59\r\n"
287 "CurrentScanMode=4\r\n"
288 "CurrentVerticalResolution=1080\r\n"
289 "Description=Intel(R) HD Graphics 520\r\n"
290 "DeviceID=VideoController2\r\n"
291 "DeviceSpecificPens=\r\n"
292 "DitherType=0\r\n"
293 "DriverDate=20150831000000.000000-000\r\n"
294 "DriverVersion=10.18.15.4281\r\n"
295 "ErrorCleared=\r\n"
296 "ErrorDescription=\r\n"
297 "ICMIntent=\r\n"
298 "ICMMethod=\r\n"
299 "InfFilename=oem6.inf\r\n"
300 "InfSection=iSKLD_w10\r\n"
301 "InstallDate=\r\n"
302 "InstalledDisplayDrivers=igdumdim64.dll,igd10iumd64.dll,igd10iumd64.dll,igd12umd64.dll,igdumdim32,igd10iumd32,igd10iumd32,igd12umd32\r\n"
303 "LastErrorCode=\r\n"
304 "MaxMemorySupported=\r\n"
305 "MaxNumberControlled=\r\n"
306 "MaxRefreshRate=59\r\n"
307 "MinRefreshRate=48\r\n"
308 "Monochrome=FALSE\r\n"
309 "Name=Intel(R) HD Graphics 520\r\n"
310 "NumberOfColorPlanes=\r\n"
311 "NumberOfVideoPages=\r\n"
312 "PNPDeviceID=PCI\\VEN_8086&amp;DEV_1916&amp;SUBSYS_06B21028&amp;REV_07\\3&amp;11583659&amp;0&amp;10\r\n"
313 "PowerManagementCapabilities=\r\n"
314 "PowerManagementSupported=\r\n"
315 "ProtocolSupported=\r\n"
316 "ReservedSystemPaletteEntries=\r\n"
317 "SpecificationVersion=\r\n"
318 "Status=OK\r\n"
319 "StatusInfo=\r\n"
320 "SystemCreationClassName=Win32_ComputerSystem\r\n"
321 "SystemPaletteEntries=\r\n"
322 "TimeOfLastReset=\r\n"
323 "VideoArchitecture=5\r\n"
324 "VideoMemoryType=2\r\n"
325 "VideoMode=\r\n"
326 "VideoModeDescription=1920 x 1080 x 4294967296 colors\r\n"
327 "VideoProcessor=Intel(R) HD Graphics Family\r\n";
328 
329 static const char linux_single_gpu[] =
330 "Rev: 05\n"
331 "\n"
332 "Device: 04:00.0\n"
333 "Class:  VGA compatible controller [0300]\n"
334 "Vendor: NVIDIA Corporation [10de]\n"
335 "Device: GM107GL [Quadro K2200] [13ba]\n"
336 "SVendor:    Hewlett-Packard Company [103c]\n"
337 "SDevice:    Device [1097]\n"
338 "PhySlot:    2\n"
339 "Rev:    a2\n"
340 "\n"
341 "Device: 04:00.1\n"
342 "\n"
343 "\n"
344 "\n"
345 "\n"
346 "OpenGL version string: 4.4.0 NVIDIA 340.96\n"
347 "OpenGL shading language version string: 4.40 NVIDIA via Cg compiler\n"
348 "OpenGL context flags: (none)\n"
349 "\n";
350 
351 static const char linux_mesadri[] =
352 "Rev: 05\n"
353 "\n"
354 "Device: 04:00.0\n"
355 "Class:  VGA compatible controller [0300]\n"
356 "Vendor: NVIDIA Corporation [10de]\n"
357 "Device: GM107GL [Quadro K2200] [13ba]\n"
358 "SVendor:    Hewlett-Packard Company [103c]\n"
359 "SDevice:    Device [1097]\n"
360 "PhySlot:    2\n"
361 "Rev:    a2\n"
362 "\n"
363 "Device: 04:00.1\n"
364 "\n"
365 "\n"
366 "\n"
367 "\n"
368 "OpenGL version string: 3.0 Mesa 10.4.2 (git-)\n"
369 "\n";
370 
371 static const char linux_2[] =
372 "Rev: 05\n"
373 "\n"
374 "Device: 04:00.0\n"
375 "Class:  VGA compatible controller [0300]\n"
376 "Vendor: NVIDIA Corporation [10de]\n"
377 "Device: GM107GL [Quadro K2200] [13ba]\n"
378 "SVendor:    Hewlett-Packard Company [103c]\n"
379 "SDevice:    Device [1097]\n"
380 "PhySlot:    2\n"
381 "Rev:    a2\n"
382 "\n"
383 "Device: 04:00.1\n"
384 "\n"
385 "\n"
386 "\n"
387 "\n"
388 "\n";
389 
390 #ifdef _WIN32
391 
TEST(parse_gpu_info_list_windows,WinNoInstalledDriversContinueCase)392 TEST(parse_gpu_info_list_windows, WinNoInstalledDriversContinueCase) {
393     std::string contents(win_noinstalleddrivers);
394 
395     GpuInfoList gpulist;
396     parse_gpu_info_list_windows(contents, &gpulist);
397 
398     EXPECT_EQ(2, (int)gpulist.infos.size());
399 }
400 
TEST(parse_gpu_info_list_windows,SingleGpu)401 TEST(parse_gpu_info_list_windows, SingleGpu) {
402     std::string contents(win_single_gpu);
403 
404     GpuInfoList gpulist;
405     parse_gpu_info_list_windows(contents, &gpulist);
406 
407     EXPECT_TRUE(gpulist.infos.size() == 1);
408 
409     GpuInfo& nvidia_info = gpulist.infos[0];
410 
411     EXPECT_FALSE(nvidia_info.current_gpu);
412     EXPECT_STREQ("10de", nvidia_info.make.c_str());
413     EXPECT_STREQ("NVIDIA Quadro K600", nvidia_info.model.c_str());
414     EXPECT_STREQ("0ffa", nvidia_info.device_id.c_str());
415     EXPECT_TRUE(nvidia_info.revision_id.empty());
416     EXPECT_STREQ("9.18.13.2086", nvidia_info.version.c_str());
417     EXPECT_TRUE(nvidia_info.renderer.empty());
418 
419     EXPECT_TRUE(nvidia_info.dlls.size() == 8);
420     EXPECT_STREQ("nvd3dumx.dll", nvidia_info.dlls[0].c_str());
421     EXPECT_STREQ("nvwgf2umx.dll", nvidia_info.dlls[1].c_str());
422     EXPECT_STREQ("nvwgf2umx.dll", nvidia_info.dlls[2].c_str());
423     EXPECT_STREQ("nvd3dum", nvidia_info.dlls[3].c_str());
424     EXPECT_STREQ("nvwgf2um", nvidia_info.dlls[4].c_str());
425     EXPECT_STREQ("nvwgf2um", nvidia_info.dlls[5].c_str());
426     EXPECT_STREQ("nvoglv32.dll", nvidia_info.dlls[6].c_str());
427     EXPECT_STREQ("nvoglv64.dll", nvidia_info.dlls[7].c_str());
428 }
429 
TEST(parse_gpu_info_list_windows,DualGpu)430 TEST(parse_gpu_info_list_windows, DualGpu) {
431     std::string contents(win_dual_gpu);
432 
433     GpuInfoList gpulist;
434     parse_gpu_info_list_windows(contents, &gpulist);
435 
436     EXPECT_TRUE(gpulist.infos.size() == 2);
437 
438     GpuInfo& ati_info = gpulist.infos[0];
439     EXPECT_FALSE(ati_info.current_gpu);
440     EXPECT_STREQ("1002", ati_info.make.c_str());
441     EXPECT_STREQ("AMD Radeon (TM) R5 M335", ati_info.model.c_str());
442     EXPECT_STREQ("6660", ati_info.device_id.c_str());
443     EXPECT_TRUE(ati_info.revision_id.empty());
444     EXPECT_STREQ("15.300.1025.1001", ati_info.version.c_str());
445     EXPECT_TRUE(ati_info.renderer.empty());
446 
447     EXPECT_TRUE(ati_info.dlls.size() == 19);
448     EXPECT_STREQ("aticfx64.dll", ati_info.dlls[0].c_str());
449     EXPECT_STREQ("aticfx64.dll", ati_info.dlls[1].c_str());
450     EXPECT_STREQ("aticfx64.dll", ati_info.dlls[2].c_str());
451     EXPECT_STREQ("amdxc64.dll", ati_info.dlls[3].c_str());
452     EXPECT_STREQ("aticfx32", ati_info.dlls[4].c_str());
453     EXPECT_STREQ("aticfx32", ati_info.dlls[5].c_str());
454     EXPECT_STREQ("aticfx32", ati_info.dlls[6].c_str());
455     EXPECT_STREQ("amdxc32", ati_info.dlls[7].c_str());
456     EXPECT_STREQ("atiumd64.dll", ati_info.dlls[8].c_str());
457     EXPECT_STREQ("atidxx64.dll", ati_info.dlls[9].c_str());
458     EXPECT_STREQ("atidxx64.dll", ati_info.dlls[10].c_str());
459     EXPECT_STREQ("atiumdag", ati_info.dlls[11].c_str());
460     EXPECT_STREQ("atidxx32", ati_info.dlls[12].c_str());
461     EXPECT_STREQ("atidxx32", ati_info.dlls[13].c_str());
462     EXPECT_STREQ("atiumdva", ati_info.dlls[14].c_str());
463     EXPECT_STREQ("atiumd6a.cap", ati_info.dlls[15].c_str());
464     EXPECT_STREQ("atitmm64.dll", ati_info.dlls[16].c_str());
465     EXPECT_STREQ("atioglxx.dll", ati_info.dlls[17].c_str());
466     EXPECT_STREQ("atig6txx.dll", ati_info.dlls[18].c_str());
467 
468     GpuInfo& intel_info = gpulist.infos[1];
469     EXPECT_FALSE(intel_info.current_gpu);
470     EXPECT_STREQ("8086", intel_info.make.c_str());
471     EXPECT_STREQ("Intel(R) HD Graphics 520", intel_info.model.c_str());
472     EXPECT_STREQ("1916", intel_info.device_id.c_str());
473     EXPECT_TRUE(intel_info.revision_id.empty());
474     EXPECT_STREQ("10.18.15.4281", intel_info.version.c_str());
475     EXPECT_TRUE(intel_info.renderer.empty());
476 
477     EXPECT_TRUE(intel_info.dlls.size() == 8);
478     EXPECT_STREQ("igdumdim64.dll", intel_info.dlls[0].c_str());
479     EXPECT_STREQ("igd10iumd64.dll", intel_info.dlls[1].c_str());
480     EXPECT_STREQ("igd10iumd64.dll", intel_info.dlls[2].c_str());
481     EXPECT_STREQ("igd12umd64.dll", intel_info.dlls[3].c_str());
482     EXPECT_STREQ("igdumdim32", intel_info.dlls[4].c_str());
483     EXPECT_STREQ("igd10iumd32", intel_info.dlls[5].c_str());
484     EXPECT_STREQ("igd10iumd32", intel_info.dlls[6].c_str());
485     EXPECT_STREQ("igd12umd32", intel_info.dlls[7].c_str());
486 }
487 
488 #elif defined(__linux__)
489 
TEST(parse_gpu_info_list_linux,EmptyStr)490 TEST(parse_gpu_info_list_linux, EmptyStr) {
491     std::string contents;
492 
493     GpuInfoList gpulist;
494     parse_gpu_info_list_linux(contents, &gpulist);
495 
496     EXPECT_TRUE(gpulist.infos.size() == 0);
497 }
498 
TEST(parse_gpu_info_list_linux,NoGlxInfo)499 TEST(parse_gpu_info_list_linux, NoGlxInfo) {
500     std::string contents(linux_2);
501 
502     GpuInfoList gpulist;
503     parse_gpu_info_list_linux(contents, &gpulist);
504 
505     EXPECT_TRUE(gpulist.infos.size() == 1);
506 }
507 
TEST(parse_gpu_info_list_linux,Nolspci)508 TEST(parse_gpu_info_list_linux, Nolspci) {
509     std::string contents("\n");
510 
511     GpuInfoList gpulist;
512     parse_gpu_info_list_linux(contents, &gpulist);
513 
514     EXPECT_TRUE(gpulist.infos.size() == 0);
515 }
516 
TEST(parse_gpu_info_list_linux,SingleGpu)517 TEST(parse_gpu_info_list_linux, SingleGpu) {
518     std::string contents(linux_single_gpu);
519 
520     GpuInfoList gpulist;
521     parse_gpu_info_list_linux(contents, &gpulist);
522 
523     EXPECT_TRUE(gpulist.infos.size() == 1);
524     GpuInfo& nvidia_info = gpulist.infos[0];
525     EXPECT_FALSE(nvidia_info.current_gpu);
526     EXPECT_STREQ("10de", nvidia_info.make.c_str());
527     EXPECT_TRUE(nvidia_info.model.empty());
528     EXPECT_STREQ("13ba", nvidia_info.device_id.c_str());
529     EXPECT_TRUE(nvidia_info.revision_id.empty());
530     EXPECT_TRUE(nvidia_info.version.empty());
531     EXPECT_STREQ("OpenGL version string: 4.4.0 NVIDIA 340.96",
532             nvidia_info.renderer.c_str());
533     EXPECT_TRUE(nvidia_info.dlls.empty());
534 }
535 
TEST(parse_gpu_info_list_linux,MesaDRI)536 TEST(parse_gpu_info_list_linux, MesaDRI) {
537     std::string contents(linux_mesadri);
538 
539     GpuInfoList gpulist;
540     parse_gpu_info_list_linux(contents, &gpulist);
541 
542     EXPECT_TRUE(gpulist.infos.size() == 1);
543     GpuInfo& nvidia_info = gpulist.infos[0];
544     EXPECT_FALSE(nvidia_info.current_gpu);
545     EXPECT_STREQ("10de", nvidia_info.make.c_str());
546     EXPECT_TRUE(nvidia_info.model.empty());
547     EXPECT_STREQ("13ba", nvidia_info.device_id.c_str());
548     EXPECT_TRUE(nvidia_info.revision_id.empty());
549     EXPECT_TRUE(nvidia_info.version.empty());
550     EXPECT_STREQ("OpenGL version string: 3.0 Mesa 10.4.2 (git-)",
551             nvidia_info.renderer.c_str());
552     EXPECT_TRUE(nvidia_info.dlls.empty());
553 }
554 
555 
TEST(gpuinfo_query_blacklist,testBlacklist_Pos)556 TEST(gpuinfo_query_blacklist, testBlacklist_Pos) {
557     const BlacklistEntry test_list[] = {
558         {"10de", nullptr, "13ba", nullptr, nullptr, nullptr, nullptr}
559     };
560 
561     int test_list_len = sizeof(test_list) / sizeof(BlacklistEntry);
562 
563     std::string contents(linux_single_gpu);
564     GpuInfoList gpulist;
565     parse_gpu_info_list_linux(contents, &gpulist);
566     bool on_blacklist = gpuinfo_query_blacklist(&gpulist,
567                                                 test_list,
568                                                 test_list_len);
569 
570     EXPECT_TRUE(on_blacklist);
571 }
572 
TEST(gpuinfo_query_blacklist,testBlacklist_Neg)573 TEST(gpuinfo_query_blacklist, testBlacklist_Neg) {
574     const BlacklistEntry test_list[] = {
575         {"10dd", nullptr, "13ba", nullptr, nullptr, nullptr, nullptr},
576         {"ATI", "NVIDIA Quadro K600", nullptr, nullptr, nullptr, nullptr, nullptr},
577         {"ASDF", "Intel Iris Pro", nullptr, nullptr, nullptr, nullptr, nullptr}
578     };
579 
580     int test_list_len = sizeof(test_list) / sizeof(BlacklistEntry);
581 
582     std::string contents(linux_2);
583     GpuInfoList gpulist;
584     parse_gpu_info_list_linux(contents, &gpulist);
585     bool on_blacklist = gpuinfo_query_blacklist(&gpulist,
586                                                 test_list,
587                                                 test_list_len);
588 
589     EXPECT_FALSE(on_blacklist);
590 }
591 
592 #endif  // __linux__
593