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 // Unit tests for implementation of google_api_keys namespace. 6 // 7 // Because the file deals with a lot of preprocessor defines and 8 // optionally includes an internal header, the way we test is by 9 // including the .cc file multiple times with different defines set. 10 // This is a little unorthodox, but it lets us test the behavior as 11 // close to unmodified as possible. 12 13 #include "google_apis/google_api_keys.h" 14 15 #include "build/build_config.h" 16 #include "google_apis/gaia/gaia_switches.h" 17 #include "testing/gtest/include/gtest/gtest.h" 18 19 // The Win builders fail (with a linker crash) when trying to link 20 // unit_tests, and the Android builders complain about multiply 21 // defined symbols (likely they don't do name decoration as well as 22 // the Mac and Linux linkers). Therefore these tests are only built 23 // and run on Mac and Linux, which should provide plenty of coverage 24 // since there are no platform-specific bits in this code. 25 #if defined(OS_LINUX) || defined(OS_MACOSX) 26 27 // We need to include everything included by google_api_keys.cc once 28 // at global scope so that things like STL and classes from base don't 29 // get defined when we re-include the google_api_keys.cc file 30 // below. We used to include that file in its entirety here, but that 31 // can cause problems if the linker decides the version of symbols 32 // from that file included here is the "right" version. 33 #include <string> 34 #include "base/command_line.h" 35 #include "base/environment.h" 36 #include "base/lazy_instance.h" 37 #include "base/logging.h" 38 #include "base/memory/scoped_ptr.h" 39 #include "base/strings/stringize_macros.h" 40 41 // This is the default baked-in value for OAuth IDs and secrets. 42 static const char kDummyToken[] = "dummytoken"; 43 44 struct EnvironmentCache { 45 public: 46 EnvironmentCache() : variable_name(NULL), was_set(false) {} 47 48 const char* variable_name; 49 bool was_set; 50 std::string value; 51 }; 52 53 class GoogleAPIKeysTest : public testing::Test { 54 public: 55 GoogleAPIKeysTest() : env_(base::Environment::Create()) { 56 env_cache_[0].variable_name = "GOOGLE_API_KEY"; 57 env_cache_[1].variable_name = "GOOGLE_CLIENT_ID_MAIN"; 58 env_cache_[2].variable_name = "GOOGLE_CLIENT_SECRET_MAIN"; 59 env_cache_[3].variable_name = "GOOGLE_CLIENT_ID_CLOUD_PRINT"; 60 env_cache_[4].variable_name = "GOOGLE_CLIENT_SECRET_CLOUD_PRINT"; 61 env_cache_[5].variable_name = "GOOGLE_CLIENT_ID_REMOTING"; 62 env_cache_[6].variable_name = "GOOGLE_CLIENT_SECRET_REMOTING"; 63 env_cache_[7].variable_name = "GOOGLE_CLIENT_ID_REMOTING_HOST"; 64 env_cache_[8].variable_name = "GOOGLE_CLIENT_SECRET_REMOTING_HOST"; 65 env_cache_[9].variable_name = "GOOGLE_DEFAULT_CLIENT_ID"; 66 env_cache_[10].variable_name = "GOOGLE_DEFAULT_CLIENT_SECRET"; 67 } 68 69 virtual void SetUp() { 70 // Unset all environment variables that can affect these tests, 71 // for the duration of the tests. 72 for (size_t i = 0; i < arraysize(env_cache_); ++i) { 73 EnvironmentCache& cache = env_cache_[i]; 74 cache.was_set = env_->HasVar(cache.variable_name); 75 cache.value.clear(); 76 if (cache.was_set) { 77 env_->GetVar(cache.variable_name, &cache.value); 78 env_->UnSetVar(cache.variable_name); 79 } 80 } 81 } 82 83 virtual void TearDown() { 84 // Restore environment. 85 for (size_t i = 0; i < arraysize(env_cache_); ++i) { 86 EnvironmentCache& cache = env_cache_[i]; 87 if (cache.was_set) { 88 env_->SetVar(cache.variable_name, cache.value); 89 } 90 } 91 } 92 93 private: 94 scoped_ptr<base::Environment> env_; 95 96 // Why 3? It is for GOOGLE_API_KEY, GOOGLE_DEFAULT_CLIENT_ID and 97 // GOOGLE_DEFAULT_CLIENT_SECRET. 98 // 99 // Why 2 times CLIENT_NUM_ITEMS? This is the number of different 100 // clients in the OAuth2Client enumeration, and for each of these we 101 // have both an ID and a secret. 102 EnvironmentCache env_cache_[3 + 2 * google_apis::CLIENT_NUM_ITEMS]; 103 }; 104 105 #if defined(GOOGLE_CHROME_BUILD) || defined(USE_OFFICIAL_GOOGLE_API_KEYS) 106 // Test official build behavior, since we are in a checkout where this 107 // is possible. 108 namespace official_build { 109 110 // We start every test by creating a clean environment for the 111 // preprocessor defines used in google_api_keys.cc 112 #undef DUMMY_API_TOKEN 113 #undef GOOGLE_API_KEY 114 #undef GOOGLE_CLIENT_ID_MAIN 115 #undef GOOGLE_CLIENT_SECRET_MAIN 116 #undef GOOGLE_CLIENT_ID_CLOUD_PRINT 117 #undef GOOGLE_CLIENT_SECRET_CLOUD_PRINT 118 #undef GOOGLE_CLIENT_ID_REMOTING 119 #undef GOOGLE_CLIENT_SECRET_REMOTING 120 #undef GOOGLE_CLIENT_ID_REMOTING_HOST 121 #undef GOOGLE_CLIENT_SECRET_REMOTING_HOST 122 #undef GOOGLE_DEFAULT_CLIENT_ID 123 #undef GOOGLE_DEFAULT_CLIENT_SECRET 124 125 // Try setting some keys, these should be ignored since it's a build 126 // with official keys. 127 #define GOOGLE_API_KEY "bogus api_key" 128 #define GOOGLE_CLIENT_ID_MAIN "bogus client_id_main" 129 130 // Undef include guard so things get defined again, within this namespace. 131 #undef GOOGLE_APIS_GOOGLE_API_KEYS_H_ 132 #undef GOOGLE_APIS_INTERNAL_GOOGLE_CHROME_API_KEYS_ 133 #include "google_apis/google_api_keys.cc" 134 135 } // namespace official_build 136 137 TEST_F(GoogleAPIKeysTest, OfficialKeys) { 138 namespace testcase = official_build::google_apis; 139 140 EXPECT_TRUE(testcase::HasKeysConfigured()); 141 142 std::string api_key = testcase::g_api_key_cache.Get().api_key(); 143 std::string id_main = testcase::g_api_key_cache.Get().GetClientID( 144 testcase::CLIENT_MAIN); 145 std::string secret_main = testcase::g_api_key_cache.Get().GetClientSecret( 146 testcase::CLIENT_MAIN); 147 std::string id_cloud_print = 148 testcase::g_api_key_cache.Get().GetClientID( 149 testcase::CLIENT_CLOUD_PRINT); 150 std::string secret_cloud_print = 151 testcase::g_api_key_cache.Get().GetClientSecret( 152 testcase::CLIENT_CLOUD_PRINT); 153 std::string id_remoting = testcase::g_api_key_cache.Get().GetClientID( 154 testcase::CLIENT_REMOTING); 155 std::string secret_remoting = 156 testcase::g_api_key_cache.Get().GetClientSecret( 157 testcase::CLIENT_REMOTING); 158 std::string id_remoting_host = testcase::g_api_key_cache.Get().GetClientID( 159 testcase::CLIENT_REMOTING_HOST); 160 std::string secret_remoting_host = 161 testcase::g_api_key_cache.Get().GetClientSecret( 162 testcase::CLIENT_REMOTING_HOST); 163 164 EXPECT_NE(0u, api_key.size()); 165 EXPECT_NE(DUMMY_API_TOKEN, api_key); 166 EXPECT_NE("bogus api_key", api_key); 167 EXPECT_NE(kDummyToken, api_key); 168 169 EXPECT_NE(0u, id_main.size()); 170 EXPECT_NE(DUMMY_API_TOKEN, id_main); 171 EXPECT_NE("bogus client_id_main", id_main); 172 EXPECT_NE(kDummyToken, id_main); 173 174 EXPECT_NE(0u, secret_main.size()); 175 EXPECT_NE(DUMMY_API_TOKEN, secret_main); 176 EXPECT_NE(kDummyToken, secret_main); 177 178 EXPECT_NE(0u, id_cloud_print.size()); 179 EXPECT_NE(DUMMY_API_TOKEN, id_cloud_print); 180 EXPECT_NE(kDummyToken, id_cloud_print); 181 182 EXPECT_NE(0u, secret_cloud_print.size()); 183 EXPECT_NE(DUMMY_API_TOKEN, secret_cloud_print); 184 EXPECT_NE(kDummyToken, secret_cloud_print); 185 186 EXPECT_NE(0u, id_remoting.size()); 187 EXPECT_NE(DUMMY_API_TOKEN, id_remoting); 188 EXPECT_NE(kDummyToken, id_remoting); 189 190 EXPECT_NE(0u, secret_remoting.size()); 191 EXPECT_NE(DUMMY_API_TOKEN, secret_remoting); 192 EXPECT_NE(kDummyToken, secret_remoting); 193 194 EXPECT_NE(0u, id_remoting_host.size()); 195 EXPECT_NE(DUMMY_API_TOKEN, id_remoting_host); 196 EXPECT_NE(kDummyToken, id_remoting_host); 197 198 EXPECT_NE(0u, secret_remoting_host.size()); 199 EXPECT_NE(DUMMY_API_TOKEN, secret_remoting_host); 200 EXPECT_NE(kDummyToken, secret_remoting_host); 201 } 202 #endif // defined(GOOGLE_CHROME_BUILD) || defined(USE_OFFICIAL_GOOGLE_API_KEYS) 203 204 // After this test, for the remainder of this compilation unit, we 205 // need official keys to not be used. 206 #undef GOOGLE_CHROME_BUILD 207 #undef USE_OFFICIAL_GOOGLE_API_KEYS 208 209 // Test the set of keys temporarily baked into Chromium by default. 210 namespace default_keys { 211 212 // We start every test by creating a clean environment for the 213 // preprocessor defines used in google_api_keys.cc 214 #undef DUMMY_API_TOKEN 215 #undef GOOGLE_API_KEY 216 #undef GOOGLE_CLIENT_ID_MAIN 217 #undef GOOGLE_CLIENT_SECRET_MAIN 218 #undef GOOGLE_CLIENT_ID_CLOUD_PRINT 219 #undef GOOGLE_CLIENT_SECRET_CLOUD_PRINT 220 #undef GOOGLE_CLIENT_ID_REMOTING 221 #undef GOOGLE_CLIENT_SECRET_REMOTING 222 #undef GOOGLE_CLIENT_ID_REMOTING_HOST 223 #undef GOOGLE_CLIENT_SECRET_REMOTING_HOST 224 #undef GOOGLE_DEFAULT_CLIENT_ID 225 #undef GOOGLE_DEFAULT_CLIENT_SECRET 226 227 // Undef include guard so things get defined again, within this namespace. 228 #undef GOOGLE_APIS_GOOGLE_API_KEYS_H_ 229 #undef GOOGLE_APIS_INTERNAL_GOOGLE_CHROME_API_KEYS_ 230 #include "google_apis/google_api_keys.cc" 231 232 } // namespace default_keys 233 234 TEST_F(GoogleAPIKeysTest, DefaultKeys) { 235 namespace testcase = default_keys::google_apis; 236 237 EXPECT_FALSE(testcase::HasKeysConfigured()); 238 239 std::string api_key = testcase::g_api_key_cache.Get().api_key(); 240 std::string id_main = testcase::g_api_key_cache.Get().GetClientID( 241 testcase::CLIENT_MAIN); 242 std::string secret_main = testcase::g_api_key_cache.Get().GetClientSecret( 243 testcase::CLIENT_MAIN); 244 std::string id_cloud_print = 245 testcase::g_api_key_cache.Get().GetClientID( 246 testcase::CLIENT_CLOUD_PRINT); 247 std::string secret_cloud_print = 248 testcase::g_api_key_cache.Get().GetClientSecret( 249 testcase::CLIENT_CLOUD_PRINT); 250 std::string id_remoting = testcase::g_api_key_cache.Get().GetClientID( 251 testcase::CLIENT_REMOTING); 252 std::string secret_remoting = 253 testcase::g_api_key_cache.Get().GetClientSecret( 254 testcase::CLIENT_REMOTING); 255 std::string id_remoting_host = testcase::g_api_key_cache.Get().GetClientID( 256 testcase::CLIENT_REMOTING_HOST); 257 std::string secret_remoting_host = 258 testcase::g_api_key_cache.Get().GetClientSecret( 259 testcase::CLIENT_REMOTING_HOST); 260 261 EXPECT_EQ(kDummyToken, api_key); 262 EXPECT_EQ(kDummyToken, id_main); 263 EXPECT_EQ(kDummyToken, secret_main); 264 EXPECT_EQ(kDummyToken, id_cloud_print); 265 EXPECT_EQ(kDummyToken, secret_cloud_print); 266 EXPECT_EQ(kDummyToken, id_remoting); 267 EXPECT_EQ(kDummyToken, secret_remoting); 268 EXPECT_EQ(kDummyToken, id_remoting_host); 269 EXPECT_EQ(kDummyToken, secret_remoting_host); 270 } 271 272 // Override a couple of keys, leave the rest default. 273 namespace override_some_keys { 274 275 // We start every test by creating a clean environment for the 276 // preprocessor defines used in google_api_keys.cc 277 #undef DUMMY_API_TOKEN 278 #undef GOOGLE_API_KEY 279 #undef GOOGLE_CLIENT_ID_MAIN 280 #undef GOOGLE_CLIENT_SECRET_MAIN 281 #undef GOOGLE_CLIENT_ID_CLOUD_PRINT 282 #undef GOOGLE_CLIENT_SECRET_CLOUD_PRINT 283 #undef GOOGLE_CLIENT_ID_REMOTING 284 #undef GOOGLE_CLIENT_SECRET_REMOTING 285 #undef GOOGLE_CLIENT_ID_REMOTING_HOST 286 #undef GOOGLE_CLIENT_SECRET_REMOTING_HOST 287 #undef GOOGLE_DEFAULT_CLIENT_ID 288 #undef GOOGLE_DEFAULT_CLIENT_SECRET 289 290 #define GOOGLE_API_KEY "API_KEY override" 291 #define GOOGLE_CLIENT_ID_REMOTING "CLIENT_ID_REMOTING override" 292 293 // Undef include guard so things get defined again, within this namespace. 294 #undef GOOGLE_APIS_GOOGLE_API_KEYS_H_ 295 #undef GOOGLE_APIS_INTERNAL_GOOGLE_CHROME_API_KEYS_ 296 #include "google_apis/google_api_keys.cc" 297 298 } // namespace override_some_keys 299 300 TEST_F(GoogleAPIKeysTest, OverrideSomeKeys) { 301 namespace testcase = override_some_keys::google_apis; 302 303 EXPECT_FALSE(testcase::HasKeysConfigured()); 304 305 std::string api_key = testcase::g_api_key_cache.Get().api_key(); 306 std::string id_main = testcase::g_api_key_cache.Get().GetClientID( 307 testcase::CLIENT_MAIN); 308 std::string secret_main = testcase::g_api_key_cache.Get().GetClientSecret( 309 testcase::CLIENT_MAIN); 310 std::string id_cloud_print = 311 testcase::g_api_key_cache.Get().GetClientID( 312 testcase::CLIENT_CLOUD_PRINT); 313 std::string secret_cloud_print = 314 testcase::g_api_key_cache.Get().GetClientSecret( 315 testcase::CLIENT_CLOUD_PRINT); 316 std::string id_remoting = testcase::g_api_key_cache.Get().GetClientID( 317 testcase::CLIENT_REMOTING); 318 std::string secret_remoting = 319 testcase::g_api_key_cache.Get().GetClientSecret( 320 testcase::CLIENT_REMOTING); 321 std::string id_remoting_host = testcase::g_api_key_cache.Get().GetClientID( 322 testcase::CLIENT_REMOTING_HOST); 323 std::string secret_remoting_host = 324 testcase::g_api_key_cache.Get().GetClientSecret( 325 testcase::CLIENT_REMOTING_HOST); 326 327 EXPECT_EQ("API_KEY override", api_key); 328 EXPECT_EQ(kDummyToken, id_main); 329 EXPECT_EQ(kDummyToken, secret_main); 330 EXPECT_EQ(kDummyToken, id_cloud_print); 331 EXPECT_EQ(kDummyToken, secret_cloud_print); 332 EXPECT_EQ("CLIENT_ID_REMOTING override", id_remoting); 333 EXPECT_EQ(kDummyToken, secret_remoting); 334 EXPECT_EQ(kDummyToken, id_remoting_host); 335 EXPECT_EQ(kDummyToken, secret_remoting_host); 336 } 337 338 // Override all keys. 339 namespace override_all_keys { 340 341 // We start every test by creating a clean environment for the 342 // preprocessor defines used in google_api_keys.cc 343 #undef DUMMY_API_TOKEN 344 #undef GOOGLE_API_KEY 345 #undef GOOGLE_CLIENT_ID_MAIN 346 #undef GOOGLE_CLIENT_SECRET_MAIN 347 #undef GOOGLE_CLIENT_ID_CLOUD_PRINT 348 #undef GOOGLE_CLIENT_SECRET_CLOUD_PRINT 349 #undef GOOGLE_CLIENT_ID_REMOTING 350 #undef GOOGLE_CLIENT_SECRET_REMOTING 351 #undef GOOGLE_CLIENT_ID_REMOTING_HOST 352 #undef GOOGLE_CLIENT_SECRET_REMOTING_HOST 353 #undef GOOGLE_DEFAULT_CLIENT_ID 354 #undef GOOGLE_DEFAULT_CLIENT_SECRET 355 356 #define GOOGLE_API_KEY "API_KEY" 357 #define GOOGLE_CLIENT_ID_MAIN "ID_MAIN" 358 #define GOOGLE_CLIENT_SECRET_MAIN "SECRET_MAIN" 359 #define GOOGLE_CLIENT_ID_CLOUD_PRINT "ID_CLOUD_PRINT" 360 #define GOOGLE_CLIENT_SECRET_CLOUD_PRINT "SECRET_CLOUD_PRINT" 361 #define GOOGLE_CLIENT_ID_REMOTING "ID_REMOTING" 362 #define GOOGLE_CLIENT_SECRET_REMOTING "SECRET_REMOTING" 363 #define GOOGLE_CLIENT_ID_REMOTING_HOST "ID_REMOTING_HOST" 364 #define GOOGLE_CLIENT_SECRET_REMOTING_HOST "SECRET_REMOTING_HOST" 365 366 // Undef include guard so things get defined again, within this namespace. 367 #undef GOOGLE_APIS_GOOGLE_API_KEYS_H_ 368 #undef GOOGLE_APIS_INTERNAL_GOOGLE_CHROME_API_KEYS_ 369 #include "google_apis/google_api_keys.cc" 370 371 } // namespace override_all_keys 372 373 TEST_F(GoogleAPIKeysTest, OverrideAllKeys) { 374 namespace testcase = override_all_keys::google_apis; 375 376 EXPECT_TRUE(testcase::HasKeysConfigured()); 377 378 std::string api_key = testcase::g_api_key_cache.Get().api_key(); 379 std::string id_main = testcase::g_api_key_cache.Get().GetClientID( 380 testcase::CLIENT_MAIN); 381 std::string secret_main = testcase::g_api_key_cache.Get().GetClientSecret( 382 testcase::CLIENT_MAIN); 383 std::string id_cloud_print = 384 testcase::g_api_key_cache.Get().GetClientID( 385 testcase::CLIENT_CLOUD_PRINT); 386 std::string secret_cloud_print = 387 testcase::g_api_key_cache.Get().GetClientSecret( 388 testcase::CLIENT_CLOUD_PRINT); 389 std::string id_remoting = testcase::g_api_key_cache.Get().GetClientID( 390 testcase::CLIENT_REMOTING); 391 std::string secret_remoting = 392 testcase::g_api_key_cache.Get().GetClientSecret( 393 testcase::CLIENT_REMOTING); 394 std::string id_remoting_host = testcase::g_api_key_cache.Get().GetClientID( 395 testcase::CLIENT_REMOTING_HOST); 396 std::string secret_remoting_host = 397 testcase::g_api_key_cache.Get().GetClientSecret( 398 testcase::CLIENT_REMOTING_HOST); 399 400 EXPECT_EQ("API_KEY", api_key); 401 EXPECT_EQ("ID_MAIN", id_main); 402 EXPECT_EQ("SECRET_MAIN", secret_main); 403 EXPECT_EQ("ID_CLOUD_PRINT", id_cloud_print); 404 EXPECT_EQ("SECRET_CLOUD_PRINT", secret_cloud_print); 405 EXPECT_EQ("ID_REMOTING", id_remoting); 406 EXPECT_EQ("SECRET_REMOTING", secret_remoting); 407 EXPECT_EQ("ID_REMOTING_HOST", id_remoting_host); 408 EXPECT_EQ("SECRET_REMOTING_HOST", secret_remoting_host); 409 } 410 411 // Override all keys using both preprocessor defines and environment 412 // variables. The environment variables should win. 413 namespace override_all_keys_env { 414 415 // We start every test by creating a clean environment for the 416 // preprocessor defines used in google_api_keys.cc 417 #undef DUMMY_API_TOKEN 418 #undef GOOGLE_API_KEY 419 #undef GOOGLE_CLIENT_ID_MAIN 420 #undef GOOGLE_CLIENT_SECRET_MAIN 421 #undef GOOGLE_CLIENT_ID_CLOUD_PRINT 422 #undef GOOGLE_CLIENT_SECRET_CLOUD_PRINT 423 #undef GOOGLE_CLIENT_ID_REMOTING 424 #undef GOOGLE_CLIENT_SECRET_REMOTING 425 #undef GOOGLE_CLIENT_ID_REMOTING_HOST 426 #undef GOOGLE_CLIENT_SECRET_REMOTING_HOST 427 #undef GOOGLE_DEFAULT_CLIENT_ID 428 #undef GOOGLE_DEFAULT_CLIENT_SECRET 429 430 #define GOOGLE_API_KEY "API_KEY" 431 #define GOOGLE_CLIENT_ID_MAIN "ID_MAIN" 432 #define GOOGLE_CLIENT_SECRET_MAIN "SECRET_MAIN" 433 #define GOOGLE_CLIENT_ID_CLOUD_PRINT "ID_CLOUD_PRINT" 434 #define GOOGLE_CLIENT_SECRET_CLOUD_PRINT "SECRET_CLOUD_PRINT" 435 #define GOOGLE_CLIENT_ID_REMOTING "ID_REMOTING" 436 #define GOOGLE_CLIENT_SECRET_REMOTING "SECRET_REMOTING" 437 #define GOOGLE_CLIENT_ID_REMOTING_HOST "ID_REMOTING_HOST" 438 #define GOOGLE_CLIENT_SECRET_REMOTING_HOST "SECRET_REMOTING_HOST" 439 440 // Undef include guard so things get defined again, within this namespace. 441 #undef GOOGLE_APIS_GOOGLE_API_KEYS_H_ 442 #undef GOOGLE_APIS_INTERNAL_GOOGLE_CHROME_API_KEYS_ 443 #include "google_apis/google_api_keys.cc" 444 445 } // namespace override_all_keys_env 446 447 TEST_F(GoogleAPIKeysTest, OverrideAllKeysUsingEnvironment) { 448 namespace testcase = override_all_keys_env::google_apis; 449 450 scoped_ptr<base::Environment> env(base::Environment::Create()); 451 env->SetVar("GOOGLE_API_KEY", "env-API_KEY"); 452 env->SetVar("GOOGLE_CLIENT_ID_MAIN", "env-ID_MAIN"); 453 env->SetVar("GOOGLE_CLIENT_ID_CLOUD_PRINT", "env-ID_CLOUD_PRINT"); 454 env->SetVar("GOOGLE_CLIENT_ID_REMOTING", "env-ID_REMOTING"); 455 env->SetVar("GOOGLE_CLIENT_ID_REMOTING_HOST", "env-ID_REMOTING_HOST"); 456 env->SetVar("GOOGLE_CLIENT_SECRET_MAIN", "env-SECRET_MAIN"); 457 env->SetVar("GOOGLE_CLIENT_SECRET_CLOUD_PRINT", "env-SECRET_CLOUD_PRINT"); 458 env->SetVar("GOOGLE_CLIENT_SECRET_REMOTING", "env-SECRET_REMOTING"); 459 env->SetVar("GOOGLE_CLIENT_SECRET_REMOTING_HOST", "env-SECRET_REMOTING_HOST"); 460 461 EXPECT_TRUE(testcase::HasKeysConfigured()); 462 463 // It's important that the first call to Get() only happen after the 464 // environment variables have been set. 465 std::string api_key = testcase::g_api_key_cache.Get().api_key(); 466 std::string id_main = testcase::g_api_key_cache.Get().GetClientID( 467 testcase::CLIENT_MAIN); 468 std::string secret_main = testcase::g_api_key_cache.Get().GetClientSecret( 469 testcase::CLIENT_MAIN); 470 std::string id_cloud_print = 471 testcase::g_api_key_cache.Get().GetClientID( 472 testcase::CLIENT_CLOUD_PRINT); 473 std::string secret_cloud_print = 474 testcase::g_api_key_cache.Get().GetClientSecret( 475 testcase::CLIENT_CLOUD_PRINT); 476 std::string id_remoting = testcase::g_api_key_cache.Get().GetClientID( 477 testcase::CLIENT_REMOTING); 478 std::string secret_remoting = 479 testcase::g_api_key_cache.Get().GetClientSecret( 480 testcase::CLIENT_REMOTING); 481 std::string id_remoting_host = testcase::g_api_key_cache.Get().GetClientID( 482 testcase::CLIENT_REMOTING_HOST); 483 std::string secret_remoting_host = 484 testcase::g_api_key_cache.Get().GetClientSecret( 485 testcase::CLIENT_REMOTING_HOST); 486 487 EXPECT_EQ("env-API_KEY", api_key); 488 EXPECT_EQ("env-ID_MAIN", id_main); 489 EXPECT_EQ("env-SECRET_MAIN", secret_main); 490 EXPECT_EQ("env-ID_CLOUD_PRINT", id_cloud_print); 491 EXPECT_EQ("env-SECRET_CLOUD_PRINT", secret_cloud_print); 492 EXPECT_EQ("env-ID_REMOTING", id_remoting); 493 EXPECT_EQ("env-SECRET_REMOTING", secret_remoting); 494 EXPECT_EQ("env-ID_REMOTING_HOST", id_remoting_host); 495 EXPECT_EQ("env-SECRET_REMOTING_HOST", secret_remoting_host); 496 } 497 498 #endif // defined(OS_LINUX) || defined(OS_MACOSX) 499