// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// A test application for the MachineDealCode class.
//
// These tests should not be executed on the build server:
// - They assert for the failed cases.
// - They modify machine state (registry).
//
// These tests require write access to HKLM and HKCU, unless
// rlz_lib::CreateMachineState() has been successfully called.
#include "base/logging.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "rlz/test/rlz_test_helpers.h"
#include "rlz/win/lib/machine_deal.h"
class MachineDealCodeHelper : public rlz_lib::MachineDealCode {
public:
static bool Clear() { return rlz_lib::MachineDealCode::Clear(); }
private:
MachineDealCodeHelper() {}
~MachineDealCodeHelper() {}
};
class MachineDealCodeTest : public RlzLibTestBase {
};
TEST_F(MachineDealCodeTest, CreateMachineState) {
EXPECT_TRUE(rlz_lib::CreateMachineState());
}
TEST_F(MachineDealCodeTest, Set) {
MachineDealCodeHelper::Clear();
char dcc_50[50];
dcc_50[0] = 0;
EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("dcc_value", dcc_50);
EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value_2"));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("dcc_value_2", dcc_50);
}
TEST_F(MachineDealCodeTest, Get) {
MachineDealCodeHelper::Clear();
char dcc_50[50], dcc_2[2];
dcc_50[0] = 0;
dcc_2[0] = 0;
EXPECT_FALSE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("dcc_value", dcc_50);
EXPECT_FALSE(rlz_lib::MachineDealCode::Get(dcc_2, 2));
}
TEST_F(MachineDealCodeTest, SetFromPingResponse) {
rlz_lib::MachineDealCode::Set("MyDCCode");
char dcc_50[50];
// Bad responses
char* kBadDccResponse =
"dcc: NotMyDCCode \r\n"
"set_dcc: NewDCCode\r\n"
"crc32: 1B4D6BB3";
EXPECT_FALSE(rlz_lib::MachineDealCode::SetFromPingResponse(
kBadDccResponse));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("MyDCCode", dcc_50);
char* kBadCrcResponse =
"dcc: MyDCCode \r\n"
"set_dcc: NewDCCode\r\n"
"crc32: 90707106";
EXPECT_FALSE(rlz_lib::MachineDealCode::SetFromPingResponse(
kBadCrcResponse));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("MyDCCode", dcc_50);
// Good responses
char* kMissingSetResponse =
"dcc: MyDCCode \r\n"
"crc32: 35F2E717";
EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
kMissingSetResponse));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("MyDCCode", dcc_50);
char* kGoodResponse =
"dcc: MyDCCode \r\n"
"set_dcc: NewDCCode\r\n"
"crc32: C8540E02";
EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
kGoodResponse));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("NewDCCode", dcc_50);
char* kGoodResponse2 =
"set_dcc: NewDCCode2 \r\n"
"dcc: NewDCCode \r\n"
"crc32: 60B6409A";
EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
kGoodResponse2));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("NewDCCode2", dcc_50);
MachineDealCodeHelper::Clear();
char* kGoodResponse3 =
"set_dcc: NewDCCode \r\n"
"crc32: 374C1C47";
EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
kGoodResponse3));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("NewDCCode", dcc_50);
MachineDealCodeHelper::Clear();
char* kGoodResponse4 =
"dcc: \r\n"
"set_dcc: NewDCCode \r\n"
"crc32: 0AB1FB39";
EXPECT_TRUE(rlz_lib::MachineDealCode::SetFromPingResponse(
kGoodResponse4));
EXPECT_TRUE(rlz_lib::MachineDealCode::Get(dcc_50, 50));
EXPECT_STREQ("NewDCCode", dcc_50);
}
TEST_F(MachineDealCodeTest, GetAsCgi) {
MachineDealCodeHelper::Clear();
char cgi_50[50], cgi_2[2];
cgi_50[0] = 0;
cgi_2[0] = 0;
EXPECT_FALSE(rlz_lib::MachineDealCode::GetAsCgi(cgi_50, 50));
EXPECT_STREQ("", cgi_50);
EXPECT_TRUE(rlz_lib::MachineDealCode::Set("dcc_value"));
EXPECT_TRUE(rlz_lib::MachineDealCode::GetAsCgi(cgi_50, 50));
EXPECT_STREQ("dcc=dcc_value", cgi_50);
EXPECT_FALSE(rlz_lib::MachineDealCode::GetAsCgi(cgi_2, 2));
}