diff options
author | adlr@google.com <adlr@google.com@06c00378-0e64-4dae-be16-12b19f9950a1> | 2009-12-04 20:57:17 +0000 |
---|---|---|
committer | adlr@google.com <adlr@google.com@06c00378-0e64-4dae-be16-12b19f9950a1> | 2009-12-04 20:57:17 +0000 |
commit | 3defe6acb3609e70e851a6eff062577d25a2af9d (patch) | |
tree | 341e979027fde117dd8906483db7a5c703a2e1cf /omaha_request_prep_action_unittest.cc | |
parent | c98a7edf648aad88b3f66df3b5a7d43d6a6d7fa9 (diff) |
Missed new files in last commit
Review URL: http://codereview.chromium.org/465067
git-svn-id: svn://chrome-svn/chromeos/trunk@336 06c00378-0e64-4dae-be16-12b19f9950a1
Diffstat (limited to 'omaha_request_prep_action_unittest.cc')
-rw-r--r-- | omaha_request_prep_action_unittest.cc | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/omaha_request_prep_action_unittest.cc b/omaha_request_prep_action_unittest.cc new file mode 100644 index 00000000..19da5e57 --- /dev/null +++ b/omaha_request_prep_action_unittest.cc @@ -0,0 +1,175 @@ +// Copyright (c) 2009 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. + +#include <stdio.h> +#include <string> +#include <gtest/gtest.h> +#include "update_engine/install_plan.h" +#include "update_engine/omaha_request_prep_action.h" +#include "update_engine/test_utils.h" +#include "update_engine/utils.h" + +using std::string; + +namespace chromeos_update_engine { + +class OmahaRequestPrepActionTest : public ::testing::Test { + public: + // Return true iff the OmahaResponseHandlerAction succeeded. + // if out is non-NULL, it's set w/ the response from the action. + bool DoTest(bool force_full_update, UpdateCheckParams* out); + static const string kTestDir; +}; + +const string OmahaRequestPrepActionTest::kTestDir = "request_prep_action-test"; + +class OmahaRequestPrepActionProcessorDelegate + : public ActionProcessorDelegate { + public: + OmahaRequestPrepActionProcessorDelegate() + : success_(false), + success_set_(false) {} + void ActionCompleted(ActionProcessor* processor, + AbstractAction* action, + bool success) { + if (action->Type() == OmahaRequestPrepAction::StaticType()) { + success_ = success; + success_set_ = true; + } + } + bool success_; + bool success_set_; +}; + +bool OmahaRequestPrepActionTest::DoTest(bool force_full_update, + UpdateCheckParams* out) { + ActionProcessor processor; + OmahaRequestPrepActionProcessorDelegate delegate; + processor.set_delegate(&delegate); + + OmahaRequestPrepAction request_prep_action(force_full_update); + request_prep_action.set_root(string("./") + kTestDir); + ObjectCollectorAction<UpdateCheckParams> collector_action; + BondActions(&request_prep_action, &collector_action); + processor.EnqueueAction(&request_prep_action); + processor.EnqueueAction(&collector_action); + processor.StartProcessing(); + EXPECT_TRUE(!processor.IsRunning()) + << "Update test to handle non-asynch actions"; + if (out) + *out = collector_action.object(); + EXPECT_TRUE(delegate.success_set_); + return delegate.success_; +} + +namespace { +// Returns true iff str is formatted as a mac address +bool IsValidMac(const string& str) { + if (str.size() != (3 * 6 - 1)) + return false; + for (unsigned int i = 0; i < str.size(); i++) { + char c = str[i]; + switch (i % 3) { + case 0: // fall through + case 1: + if ((c >= '0') && (c <= '9')) + break; + if ((c >= 'a') && (c <= 'f')) + break; + if ((c >= 'A') && (c <= 'F')) + break; + return false; + case 2: + if (c == ':') + break; + return false; + } + } + return true; +} +string GetMachineType() { + FILE* fp = popen("uname -m", "r"); + if (!fp) + return ""; + string ret; + for (;;) { + char buffer[10]; + size_t r = fread(buffer, 1, sizeof(buffer), fp); + if (r == 0) + break; + ret.insert(ret.begin(), buffer, buffer + r); + } + // strip trailing '\n' if it exists + if ((*ret.rbegin()) == '\n') + ret.resize(ret.size() - 1); + fclose(fp); + return ret; +} +} // namespace {} + +TEST_F(OmahaRequestPrepActionTest, SimpleTest) { + ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc")); + { + ASSERT_TRUE(WriteFileString( + kTestDir + "/etc/lsb-release", + "GOOGLE_FOO=bar\nGOOGLE_RELEASE=0.2.2.3\nGOOGLE_TRACK=footrack")); + UpdateCheckParams out; + EXPECT_TRUE(DoTest(false, &out)); + EXPECT_TRUE(IsValidMac(out.machine_id)); + // for now we're just using the machine id here + EXPECT_TRUE(IsValidMac(out.user_id)); + EXPECT_EQ("Chrome OS", out.os_platform); + EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp); + EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id); + EXPECT_EQ("0.2.2.3", out.app_version); + EXPECT_EQ("en-US", out.app_lang); + EXPECT_EQ("footrack", out.app_track); + } + EXPECT_EQ(0, System(string("rm -rf ") + kTestDir)); +} + +TEST_F(OmahaRequestPrepActionTest, MissingTrackTest) { + ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc")); + { + ASSERT_TRUE(WriteFileString( + kTestDir + "/etc/lsb-release", + "GOOGLE_FOO=bar\nGOOGLE_RELEASE=0.2.2.3\nGOOGLE_TRXCK=footrack")); + UpdateCheckParams out; + EXPECT_TRUE(DoTest(false, &out)); + EXPECT_TRUE(IsValidMac(out.machine_id)); + // for now we're just using the machine id here + EXPECT_TRUE(IsValidMac(out.user_id)); + EXPECT_EQ("Chrome OS", out.os_platform); + EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp); + EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id); + EXPECT_EQ("0.2.2.3", out.app_version); + EXPECT_EQ("en-US", out.app_lang); + EXPECT_EQ("", out.app_track); + } + EXPECT_EQ(0, System(string("rm -rf ") + kTestDir)); +} + +TEST_F(OmahaRequestPrepActionTest, ConfusingReleaseTest) { + ASSERT_EQ(0, System(string("mkdir -p ") + kTestDir + "/etc")); + { + ASSERT_TRUE(WriteFileString( + kTestDir + "/etc/lsb-release", + "GOOGLE_FOO=GOOGLE_RELEASE=1.2.3.4\n" + "GOOGLE_RELEASE=0.2.2.3\nGOOGLE_TRXCK=footrack")); + UpdateCheckParams out; + EXPECT_TRUE(DoTest(false, &out)); + EXPECT_TRUE(IsValidMac(out.machine_id)); + // for now we're just using the machine id here + EXPECT_TRUE(IsValidMac(out.user_id)); + EXPECT_EQ("Chrome OS", out.os_platform); + EXPECT_EQ(string("0.2.2.3_") + GetMachineType(), out.os_sp); + EXPECT_EQ("{87efface-864d-49a5-9bb3-4b050a7c227a}", out.app_id); + EXPECT_EQ("0.2.2.3", out.app_version); + EXPECT_EQ("en-US", out.app_lang); + EXPECT_EQ("", out.app_track); + } + EXPECT_EQ(0, System(string("rm -rf ") + kTestDir)); +} + +} // namespace chromeos_update_engine |