Index: src/platform/update_engine/omaha_request_prep_action_unittest.cc |
diff --git a/src/platform/update_engine/omaha_request_prep_action_unittest.cc b/src/platform/update_engine/omaha_request_prep_action_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..19da5e574edafda447afd05d1734dbf9a166ea2a |
--- /dev/null |
+++ b/src/platform/update_engine/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 |