1// Copyright (c) 2012 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.
4
5#include "gpu/config/gpu_info.h"
6#include "gpu/config/gpu_test_config.h"
7#include "testing/gtest/include/gtest/gtest.h"
8
9namespace gpu {
10
11class GPUTestConfigTest : public testing::Test {
12 public:
13  GPUTestConfigTest() { }
14
15  virtual ~GPUTestConfigTest() { }
16
17 protected:
18  virtual void SetUp() { }
19
20  virtual void TearDown() { }
21};
22
23TEST_F(GPUTestConfigTest, EmptyValues) {
24  GPUTestConfig config;
25  EXPECT_EQ(GPUTestConfig::kOsUnknown, config.os());
26  EXPECT_EQ(0u, config.gpu_vendor().size());
27  EXPECT_EQ(0u, config.gpu_device_id());
28  EXPECT_EQ(GPUTestConfig::kBuildTypeUnknown, config.build_type());
29}
30
31TEST_F(GPUTestConfigTest, SetGPUInfo) {
32  GPUInfo gpu_info;
33  gpu_info.gpu.vendor_id = 0x10de;
34  gpu_info.gpu.device_id = 0x0640;
35  GPUTestBotConfig config;
36  EXPECT_TRUE(config.SetGPUInfo(gpu_info));
37  EXPECT_EQ(1u, config.gpu_vendor().size());
38  EXPECT_EQ(gpu_info.gpu.vendor_id, config.gpu_vendor()[0]);
39  EXPECT_EQ(gpu_info.gpu.device_id, config.gpu_device_id());
40
41  gpu_info.gpu.vendor_id = 0x8086;
42  gpu_info.gpu.device_id = 0x0046;
43  EXPECT_TRUE(config.SetGPUInfo(gpu_info));
44  EXPECT_EQ(1u, config.gpu_vendor().size());
45  EXPECT_EQ(gpu_info.gpu.vendor_id, config.gpu_vendor()[0]);
46  EXPECT_EQ(gpu_info.gpu.device_id, config.gpu_device_id());
47}
48
49TEST_F(GPUTestConfigTest, IsValid) {
50  {
51    GPUTestConfig config;
52    config.set_gpu_device_id(0x0640);
53    EXPECT_FALSE(config.IsValid());
54    config.AddGPUVendor(0x10de);
55    EXPECT_TRUE(config.IsValid());
56  }
57
58  {
59    GPUTestBotConfig config;
60    config.set_build_type(GPUTestConfig::kBuildTypeRelease);
61    config.set_os(GPUTestConfig::kOsWin7);
62    config.set_gpu_device_id(0x0640);
63    EXPECT_FALSE(config.IsValid());
64    config.AddGPUVendor(0x10de);
65    EXPECT_TRUE(config.IsValid());
66
67    config.set_gpu_device_id(0);
68    EXPECT_FALSE(config.IsValid());
69    config.set_gpu_device_id(0x0640);
70    EXPECT_TRUE(config.IsValid());
71
72    config.set_os(GPUTestConfig::kOsWin);
73    EXPECT_FALSE(config.IsValid());
74    config.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsWinXP);
75    EXPECT_FALSE(config.IsValid());
76    config.set_os(GPUTestConfig::kOsWin7);
77    EXPECT_TRUE(config.IsValid());
78
79    config.set_build_type(GPUTestConfig::kBuildTypeUnknown);
80    EXPECT_FALSE(config.IsValid());
81    config.set_build_type(GPUTestConfig::kBuildTypeRelease);
82    EXPECT_TRUE(config.IsValid());
83  }
84}
85
86TEST_F(GPUTestConfigTest, Matches) {
87  GPUTestBotConfig config;
88  config.set_os(GPUTestConfig::kOsWin7);
89  config.set_build_type(GPUTestConfig::kBuildTypeRelease);
90  config.AddGPUVendor(0x10de);
91  config.set_gpu_device_id(0x0640);
92  EXPECT_TRUE(config.IsValid());
93
94  {  // os matching
95    GPUTestConfig config2;
96    EXPECT_TRUE(config.Matches(config2));
97    config2.set_os(GPUTestConfig::kOsWin);
98    EXPECT_TRUE(config.Matches(config2));
99    config2.set_os(GPUTestConfig::kOsWin7);
100    EXPECT_TRUE(config.Matches(config2));
101    config2.set_os(GPUTestConfig::kOsMac);
102    EXPECT_FALSE(config.Matches(config2));
103    config2.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsLinux);
104    EXPECT_TRUE(config.Matches(config2));
105  }
106
107  {  // gpu vendor matching
108    {
109      GPUTestConfig config2;
110      config2.AddGPUVendor(0x10de);
111      EXPECT_TRUE(config.Matches(config2));
112      config2.AddGPUVendor(0x1004);
113      EXPECT_TRUE(config.Matches(config2));
114    }
115    {
116      GPUTestConfig config2;
117      config2.AddGPUVendor(0x8086);
118      EXPECT_FALSE(config.Matches(config2));
119    }
120  }
121
122  {  // build type matching
123    GPUTestConfig config2;
124    config2.set_build_type(GPUTestConfig::kBuildTypeRelease);
125    EXPECT_TRUE(config.Matches(config2));
126    config2.set_build_type(GPUTestConfig::kBuildTypeRelease |
127                           GPUTestConfig::kBuildTypeDebug);
128    EXPECT_TRUE(config.Matches(config2));
129    config2.set_build_type(GPUTestConfig::kBuildTypeDebug);
130    EXPECT_FALSE(config.Matches(config2));
131  }
132
133  {  // exact matching
134    GPUTestConfig config2;
135    config2.set_os(GPUTestConfig::kOsWin7);
136    config2.set_build_type(GPUTestConfig::kBuildTypeRelease);
137    config2.AddGPUVendor(0x10de);
138    config2.set_gpu_device_id(0x0640);
139    EXPECT_TRUE(config.Matches(config2));
140    config2.set_gpu_device_id(0x0641);
141    EXPECT_FALSE(config.Matches(config2));
142  }
143}
144
145TEST_F(GPUTestConfigTest, StringMatches) {
146  GPUTestBotConfig config;
147  config.set_os(GPUTestConfig::kOsWin7);
148  config.set_build_type(GPUTestConfig::kBuildTypeRelease);
149  config.AddGPUVendor(0x10de);
150  config.set_gpu_device_id(0x0640);
151  EXPECT_TRUE(config.IsValid());
152
153  EXPECT_TRUE(config.Matches(std::string()));
154
155  // os matching
156  EXPECT_TRUE(config.Matches("WIN"));
157  EXPECT_TRUE(config.Matches("WIN7"));
158  EXPECT_FALSE(config.Matches("MAC"));
159  EXPECT_TRUE(config.Matches("WIN7 LINUX"));
160
161  // gpu vendor matching
162  EXPECT_TRUE(config.Matches("NVIDIA"));
163  EXPECT_TRUE(config.Matches("NVIDIA AMD"));
164  EXPECT_FALSE(config.Matches("INTEL"));
165
166  // build type matching
167  EXPECT_TRUE(config.Matches("RELEASE"));
168  EXPECT_TRUE(config.Matches("RELEASE DEBUG"));
169  EXPECT_FALSE(config.Matches("DEBUG"));
170
171  // exact matching
172  EXPECT_TRUE(config.Matches("WIN7 RELEASE NVIDIA 0X0640"));
173  EXPECT_FALSE(config.Matches("WIN7 RELEASE NVIDIA 0X0641"));
174}
175
176TEST_F(GPUTestConfigTest, OverlapsWith) {
177  {  // os
178    // win vs win7
179    GPUTestConfig config;
180    config.set_os(GPUTestConfig::kOsWin);
181    GPUTestConfig config2;
182    config2.set_os(GPUTestConfig::kOsWin7);
183    EXPECT_TRUE(config.OverlapsWith(config2));
184    EXPECT_TRUE(config2.OverlapsWith(config));
185    // win vs win7+linux
186    config2.set_os(GPUTestConfig::kOsWin7 | GPUTestConfig::kOsLinux);
187    EXPECT_TRUE(config.OverlapsWith(config2));
188    EXPECT_TRUE(config2.OverlapsWith(config));
189    // win vs mac
190    config2.set_os(GPUTestConfig::kOsMac);
191    EXPECT_FALSE(config.OverlapsWith(config2));
192    EXPECT_FALSE(config2.OverlapsWith(config));
193    // win vs unknown
194    config2.set_os(GPUTestConfig::kOsUnknown);
195    EXPECT_TRUE(config.OverlapsWith(config2));
196    EXPECT_TRUE(config2.OverlapsWith(config));
197  }
198
199  {  // gpu vendor
200    GPUTestConfig config;
201    config.AddGPUVendor(0x10de);
202    // nvidia vs unknown
203    GPUTestConfig config2;
204    EXPECT_TRUE(config.OverlapsWith(config2));
205    EXPECT_TRUE(config2.OverlapsWith(config));
206    // nvidia vs intel
207    config2.AddGPUVendor(0x1086);
208    EXPECT_FALSE(config.OverlapsWith(config2));
209    EXPECT_FALSE(config2.OverlapsWith(config));
210    // nvidia vs nvidia+intel
211    config2.AddGPUVendor(0x10de);
212    EXPECT_TRUE(config.OverlapsWith(config2));
213    EXPECT_TRUE(config2.OverlapsWith(config));
214  }
215
216  {  // build type
217    // release vs debug
218    GPUTestConfig config;
219    config.set_build_type(GPUTestConfig::kBuildTypeRelease);
220    GPUTestConfig config2;
221    config2.set_build_type(GPUTestConfig::kBuildTypeDebug);
222    EXPECT_FALSE(config.OverlapsWith(config2));
223    EXPECT_FALSE(config2.OverlapsWith(config));
224    // release vs release+debug
225    config2.set_build_type(GPUTestConfig::kBuildTypeRelease |
226                           GPUTestConfig::kBuildTypeDebug);
227    EXPECT_TRUE(config.OverlapsWith(config2));
228    EXPECT_TRUE(config2.OverlapsWith(config));
229    // release vs unknown
230    config2.set_build_type(GPUTestConfig::kBuildTypeUnknown);
231    EXPECT_TRUE(config.OverlapsWith(config2));
232    EXPECT_TRUE(config2.OverlapsWith(config));
233  }
234
235  {  // win7 vs nvidia
236    GPUTestConfig config;
237    config.set_os(GPUTestConfig::kOsWin7);
238    GPUTestConfig config2;
239    config2.AddGPUVendor(0x10de);
240    EXPECT_TRUE(config.OverlapsWith(config2));
241    EXPECT_TRUE(config2.OverlapsWith(config));
242  }
243}
244
245TEST_F(GPUTestConfigTest, LoadCurrentConfig) {
246  GPUTestBotConfig config;
247  GPUInfo gpu_info;
248  gpu_info.gpu.vendor_id = 0x10de;
249  gpu_info.gpu.device_id = 0x0640;
250  EXPECT_TRUE(config.LoadCurrentConfig(&gpu_info));
251  EXPECT_TRUE(config.IsValid());
252}
253
254}  // namespace gpu
255
256