Home | History | Annotate | Download | only in lib
      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 // A test application for the MachineDealCode class.
      6 //
      7 // These tests should not be executed on the build server:
      8 // - They assert for the failed cases.
      9 // - They modify machine state (registry).
     10 //
     11 // These tests require write access to HKLM and HKCU, unless
     12 // rlz_lib::CreateMachineState() has been successfully called.
     13 
     14 #include "base/logging.h"
     15 #include "testing/gmock/include/gmock/gmock.h"
     16 #include "testing/gtest/include/gtest/gtest.h"
     17 
     18 #include "rlz/test/rlz_test_helpers.h"
     19 #include "rlz/win/lib/machine_deal.h"
     20 
     21 class MachineDealCodeHelper : public rlz_lib::MachineDealCode {
     22  public:
     23   static bool Clear() { return rlz_lib::MachineDealCode::Clear(); }
     24 
     25  private:
     26   MachineDealCodeHelper() {}
     27   ~MachineDealCodeHelper() {}
     28 };
     29 
     30 class MachineDealCodeTest : public RlzLibTestBase {
     31 };
     32 
     33 TEST_F(MachineDealCodeTest, CreateMachineState) {
     34   EXPECT_TRUE(rlz_lib::CreateMachineState());
     35 }
     36 
     37 TEST_F(MachineDealCodeTest, Set) {
     38   MachineDealCodeHelper::Clear();
     39   char dcc_50[50];
     40   dcc_50[0] = 0;
     41 
     42   EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
     43 
     44   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
     45   EXPECT_STREQ("dcc_value", dcc_50);
     46 
     47   EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value_2"));
     48 
     49   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
     50   EXPECT_STREQ("dcc_value_2", dcc_50);
     51 }
     52 
     53 TEST_F(MachineDealCodeTest, Get) {
     54   MachineDealCodeHelper::Clear();
     55   char dcc_50[50], dcc_2[2];
     56   dcc_50[0] = 0;
     57   dcc_2[0] = 0;
     58 
     59   EXPECT_FALSE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
     60 
     61   EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
     62 
     63   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
     64   EXPECT_STREQ("dcc_value", dcc_50);
     65 
     66   EXPECT_FALSE(rlz_lib::MachineDealCode::Get(dcc_2, 2));
     67 }
     68 
     69 TEST_F(MachineDealCodeTest, SetFromPingResponse) {
     70   rlz_lib::MachineDealCode::Set("MyDCCode");
     71   char dcc_50[50];
     72 
     73   // Bad responses
     74 
     75   char* kBadDccResponse =
     76     "dcc: NotMyDCCode \r\n"
     77     "set_dcc: NewDCCode\r\n"
     78     "crc32: 1B4D6BB3";
     79   EXPECT_FALSE(rlz_lib::MachineDealCode::SetFromPingResponse(
     80       kBadDccResponse));
     81   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
     82   EXPECT_STREQ("MyDCCode", dcc_50);
     83 
     84   char* kBadCrcResponse =
     85     "dcc: MyDCCode \r\n"
     86     "set_dcc: NewDCCode\r\n"
     87     "crc32: 90707106";
     88   EXPECT_FALSE(rlz_lib::MachineDealCode::SetFromPingResponse(
     89       kBadCrcResponse));
     90   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
     91   EXPECT_STREQ("MyDCCode", dcc_50);
     92 
     93   // Good responses
     94 
     95   char* kMissingSetResponse =
     96     "dcc: MyDCCode \r\n"
     97     "crc32: 35F2E717";
     98   EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
     99       kMissingSetResponse));
    100   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
    101   EXPECT_STREQ("MyDCCode", dcc_50);
    102 
    103   char* kGoodResponse =
    104     "dcc: MyDCCode \r\n"
    105     "set_dcc: NewDCCode\r\n"
    106     "crc32: C8540E02";
    107   EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
    108       kGoodResponse));
    109   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
    110   EXPECT_STREQ("NewDCCode", dcc_50);
    111 
    112   char* kGoodResponse2 =
    113     "set_dcc: NewDCCode2  \r\n"
    114     "dcc:   NewDCCode \r\n"
    115     "crc32: 60B6409A";
    116   EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
    117       kGoodResponse2));
    118   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
    119   EXPECT_STREQ("NewDCCode2", dcc_50);
    120 
    121   MachineDealCodeHelper::Clear();
    122   char* kGoodResponse3 =
    123     "set_dcc: NewDCCode  \r\n"
    124     "crc32: 374C1C47";
    125   EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
    126       kGoodResponse3));
    127   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
    128   EXPECT_STREQ("NewDCCode", dcc_50);
    129 
    130   MachineDealCodeHelper::Clear();
    131   char* kGoodResponse4 =
    132     "dcc:   \r\n"
    133     "set_dcc: NewDCCode  \r\n"
    134     "crc32: 0AB1FB39";
    135   EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
    136       kGoodResponse4));
    137   EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
    138   EXPECT_STREQ("NewDCCode", dcc_50);
    139 }
    140 
    141 TEST_F(MachineDealCodeTest, GetAsCgi) {
    142   MachineDealCodeHelper::Clear();
    143   char cgi_50[50], cgi_2[2];
    144   cgi_50[0] = 0;
    145   cgi_2[0] = 0;
    146 
    147   EXPECT_FALSE(rlz_lib::MachineDealCode::GetAsCgi(cgi_50, 50));
    148   EXPECT_STREQ("", cgi_50);
    149 
    150   EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
    151 
    152   EXPECT_TRUE(rlz_lib::MachineDealCode::GetAsCgi(cgi_50, 50));
    153   EXPECT_STREQ("dcc=dcc_value", cgi_50);
    154 
    155   EXPECT_FALSE(rlz_lib::MachineDealCode::GetAsCgi(cgi_2, 2));
    156 }
    157