15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A test application for the MachineDealCode class. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests should not be executed on the build server: 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - They assert for the failed cases. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// - They modify machine state (registry). 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// These tests require write access to HKLM and HKCU, unless 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// rlz_lib::CreateMachineState() has been successfully called. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/test/rlz_test_helpers.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "rlz/win/lib/machine_deal.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MachineDealCodeHelper : public rlz_lib::MachineDealCode { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool Clear() { return rlz_lib::MachineDealCode::Clear(); } 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper() {} 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~MachineDealCodeHelper() {} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MachineDealCodeTest : public RlzLibTestBase { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MachineDealCodeTest, CreateMachineState) { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::CreateMachineState()); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MachineDealCodeTest, Set) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char dcc_50[50]; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dcc_50[0] = 0; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("dcc_value", dcc_50); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value_2")); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("dcc_value_2", dcc_50); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MachineDealCodeTest, Get) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char dcc_50[50], dcc_2[2]; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dcc_50[0] = 0; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dcc_2[0] = 0; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("dcc_value", dcc_50); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::MachineDealCode::Get(dcc_2, 2)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MachineDealCodeTest, SetFromPingResponse) { 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rlz_lib::MachineDealCode::Set("MyDCCode"); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char dcc_50[50]; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bad responses 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kBadDccResponse[] = 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: NotMyDCCode \r\n" 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "set_dcc: NewDCCode\r\n" 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 1B4D6BB3"; 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::MachineDealCode::SetFromPingResponse( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBadDccResponse)); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("MyDCCode", dcc_50); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kBadCrcResponse[] = 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: MyDCCode \r\n" 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "set_dcc: NewDCCode\r\n" 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 90707106"; 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::MachineDealCode::SetFromPingResponse( 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kBadCrcResponse)); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("MyDCCode", dcc_50); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Good responses 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kMissingSetResponse[] = 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: MyDCCode \r\n" 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 35F2E717"; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kMissingSetResponse)); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("MyDCCode", dcc_50); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kGoodResponse[] = 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: MyDCCode \r\n" 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "set_dcc: NewDCCode\r\n" 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: C8540E02"; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse( 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGoodResponse)); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("NewDCCode", dcc_50); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kGoodResponse2[] = 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "set_dcc: NewDCCode2 \r\n" 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: NewDCCode \r\n" 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 60B6409A"; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGoodResponse2)); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("NewDCCode2", dcc_50); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kGoodResponse3[] = 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "set_dcc: NewDCCode \r\n" 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 374C1C47"; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGoodResponse3)); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("NewDCCode", dcc_50); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const char kGoodResponse4[] = 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "dcc: \r\n" 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "set_dcc: NewDCCode \r\n" 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "crc32: 0AB1FB39"; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kGoodResponse4)); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50)); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("NewDCCode", dcc_50); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(MachineDealCodeTest, GetAsCgi) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MachineDealCodeHelper::Clear(); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char cgi_50[50], cgi_2[2]; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_50[0] = 0; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cgi_2[0] = 0; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::MachineDealCode::GetAsCgi(cgi_50, 50)); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("", cgi_50); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value")); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(rlz_lib::MachineDealCode::GetAsCgi(cgi_50, 50)); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ("dcc=dcc_value", cgi_50); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(rlz_lib::MachineDealCode::GetAsCgi(cgi_2, 2)); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 157