Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(726)

Unified Diff: chrome/browser/chrome_to_mobile/receive/chrome_to_mobile_receive_device_manager_unittest.cc

Issue 11038063: Support chrome_to_mobile job receiving Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix format Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chrome_to_mobile/receive/chrome_to_mobile_receive_device_manager_unittest.cc
diff --git a/chrome/browser/chrome_to_mobile/receive/chrome_to_mobile_receive_device_manager_unittest.cc b/chrome/browser/chrome_to_mobile/receive/chrome_to_mobile_receive_device_manager_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..cace8e624420bfb02ba2753f3fa793bddb449320
--- /dev/null
+++ b/chrome/browser/chrome_to_mobile/receive/chrome_to_mobile_receive_device_manager_unittest.cc
@@ -0,0 +1,367 @@
+// Copyright 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.
+
+#include "base/memory/scoped_ptr.h"
+#include "base/stringprintf.h"
+#include "chrome/common/cloud_print/test_cloud_print_utils.h"
+#include "chrome/browser/chrome_to_mobile/receive/chrome_to_mobile_receive_device_manager.h"
+#include "chrome/browser/chrome_to_mobile/receive/testing_chrome_to_mobile_receive.h"
+
+using namespace chrome_to_mobile_receive;
+using namespace cloud_print;
+
+namespace {
+
+const std::string kTestValidListResponseData = std::string(
+ "{"
+ " \"success\": true,"
+ " \"printers\": [{"
+ " \"id\": \"5249\","
+ " \"name\": \"iPhone Sim\","
+ " \"description\": \"iPhone Sim\","
+ " \"proxy\": \"Chr918A-1302D05D3\","
+ " \"status\": \"\","
+ " \"capsHash\": \"07d2d8f876156f15adbb98076\","
+ " \"createTime\": \"134175880454\","
+ " \"updateTime\": \"13175880454\","
+ " \"accessTime\": \"114175880454\","
+ " \"numberOfDocuments\": \"0\","
+ " \"numberOfPages\": \"0\","
+ " \"tags\": ["
+ " \"__apns__device_token=7266850dc29a5b65d55e\","
+ " \"__apns__package=test.test.test\","
+ " \"__apns__tagshash=b23d5ccd911d14d273c57f8d2a24\","
+ " \"^own\""
+ " ]"
+ " }]"
+ "}"
+);
+
+const std::string kTestValidListMultResponseData = std::string(
+ "{"
+ " \"success\": true,"
+ " \"printers\": ["
+ " {"
+ " \"id\": \"5249\","
+ " \"name\": \"iPhone Sim\","
+ " \"description\": \"iPhone Sim\","
+ " \"proxy\": \"Chr918A-1302D05D3\","
+ " \"status\": \"\","
+ " \"capsHash\": \"07d2d8f876156f15adbb98076\","
+ " \"createTime\": \"134175880454\","
+ " \"updateTime\": \"13175880454\","
+ " \"accessTime\": \"114175880454\","
+ " \"numberOfDocuments\": \"0\","
+ " \"numberOfPages\": \"0\","
+ " \"tags\": ["
+ " \"__apns__device_token=7266850dc29a5b65d55e\","
+ " \"__apns__package=test.test.test\","
+ " \"__apns__tagshash=b23d5ccd911d14d273c57f8d2a24\","
+ " \"^own\""
+ " ]"
+ " }, "
+ " {"
+ " \"id\": \"58888888249\","
+ " \"name\": \"iPhone Sim\","
+ " \"description\": \"iPhone Sim\","
+ " \"proxy\": \"Chr918A-1302D05D3\","
+ " \"status\": \"\","
+ " \"capsHash\": \"07d2d8f876156f15adbb98076\","
+ " \"createTime\": \"134175880454\","
+ " \"updateTime\": \"13175880454\","
+ " \"accessTime\": \"114175880454\","
+ " \"numberOfDocuments\": \"0\","
+ " \"numberOfPages\": \"0\","
+ " \"tags\": ["
+ " \"__apns__device_token=7266850dc29a5b65d55e\","
+ " \"__apns__package=test.test.test\","
+ " \"__apns__tagshash=b23d5ccd911d14d273c57f8d2a24\","
+ " \"^own\""
+ " ]"
+ " }"
+ "]"
+ "}"
+);
+
+class MockDeviceManagerDelegate
+ : public ChromeToMobileReceiveDeviceManager::Delegate {
+ public:
+ MockDeviceManagerDelegate();
+ virtual ~MockDeviceManagerDelegate();
+ virtual void OnStartDeviceComplete(
+ ChromeToMobileReceiveDeviceManager* source) OVERRIDE;
+
+ bool IsSuccess() const;
+ std::string GetPrinterId() const;
+ bool HasCompleted() const;
+
+ private:
+ bool success_;
+ std::string printer_id_;
+ bool has_completed_;
+};
+
+MockDeviceManagerDelegate::MockDeviceManagerDelegate()
+ : success_(false), printer_id_(std::string()), has_completed_(false) {
+}
+
+MockDeviceManagerDelegate::~MockDeviceManagerDelegate() {
+}
+
+void MockDeviceManagerDelegate::OnStartDeviceComplete(
+ ChromeToMobileReceiveDeviceManager* source) {
+ success_ = source->IsSuccess();
+ printer_id_ = source->GetStartedPrinterId();
+ has_completed_ = true;
+}
+
+bool MockDeviceManagerDelegate::IsSuccess() const {
+ return success_;
+}
+
+std::string MockDeviceManagerDelegate::GetPrinterId() const {
+ return printer_id_;
+}
+
+bool MockDeviceManagerDelegate::HasCompleted() const {
+ return has_completed_;
+}
+
+} // namespace
+
+class ChromeToMobileReceiveDeviceManagerTest :
+ public ChromeToMobileReceiveTest {
+ public:
+ ChromeToMobileReceiveDeviceManagerTest();
+ virtual ~ChromeToMobileReceiveDeviceManagerTest();
+
+ virtual void SetUp() OVERRIDE;
+ void ResetManagerAndStart(const std::string& existing_printer_id);
+
+ scoped_ptr<ChromeToMobileReceiveDeviceManager> manager_;
+ scoped_ptr<MockDeviceManagerDelegate> delegate_;
+};
+
+ChromeToMobileReceiveDeviceManagerTest
+ ::ChromeToMobileReceiveDeviceManagerTest() {
+}
+
+ChromeToMobileReceiveDeviceManagerTest
+ ::~ChromeToMobileReceiveDeviceManagerTest() {
+}
+
+void ChromeToMobileReceiveDeviceManagerTest::SetUp() {
+ ChromeToMobileReceiveTest::SetUp();
+ delegate_.reset(new MockDeviceManagerDelegate());
+}
+
+void ChromeToMobileReceiveDeviceManagerTest::ResetManagerAndStart(
+ const std::string& existing_printer_id) {
+ std::map<std::string, std::string> test_printer_tags;
+ test_printer_tags[std::string("tag1")] = std::string("value of tag1");
+ test_printer_tags[std::string("tag2")] = std::string("value of tag2");
+ manager_.reset(ChromeToMobileReceiveDeviceManager::CreateAndStart(
+ cloud_print_server_url_,
+ existing_printer_id,
+ test_printer_tags,
+ settings_,
+ delegate_.get()));
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ NoExistingPrinterNoSuccessfulPrintRegisteration) {
+ ResetManagerAndStart(std::string());
+ EXPECT_TRUE(
+ factory_.GetPendingRequests().size() == 1 &&
+ factory_.GetPendingRequestsAtPath("/list").size() == 1)
+ << "The first request should list all the relevant printers.";
+
+ factory_.CompleteRequestAtPath("/list", 0, true);
+ EXPECT_TRUE(
+ factory_.GetPendingRequests().size() == 1 &&
+ factory_.GetPendingRequestsAtPath("/register").size() == 1)
+ << "A new printer should be registered as there is no existing one.";
+
+ // An empty registration response.
+ factory_.CompleteRequestAtPath("/register", 0, true);
+
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_FALSE(delegate_->IsSuccess());
+ EXPECT_TRUE(delegate_->GetPrinterId().empty());
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ InvalidExistingPrinterNoSuccessfulPrinterRegisteration) {
+ ResetManagerAndStart(std::string("printer id"));
+
+ factory_.CompleteRequestAtPath("/list", 0, true);
+ EXPECT_TRUE(factory_.GetPendingRequests().size() == 2);
+ EXPECT_EQ(1U, factory_.GetPendingRequestsAtPath("/delete").size())
+ << "The existing printer should be deleted.";
+ EXPECT_EQ(
+ 1U, factory_.GetPendingRequestsAtPath("/register").size())
+ << "A new printer should be registered.";
+
+ factory_.CompleteRequestAtPath("/register", 0, true);
+ factory_.CompleteRequestAtPath("/delete", 0, true);
+
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_FALSE(delegate_->IsSuccess());
+ EXPECT_TRUE(delegate_->GetPrinterId().empty());
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ InvalidExistingPrinterSuccessfulPrinterRegisteration) {
+ ResetManagerAndStart(std::string("printer id"));
+
+ factory_.CompleteRequestAtPath("/list", 0, true);
+ EXPECT_TRUE(factory_.GetPendingRequests().size() == 2);
+ EXPECT_EQ(1U, factory_.GetPendingRequestsAtPath("/delete").size())
+ << "The existing printer should be deleted.";
+ EXPECT_EQ(
+ 1U, factory_.GetPendingRequestsAtPath("/register").size())
+ << "A new printer should be registered.";
+
+ factory_.CompleteRequestAtPath("/register", 0,
+ GenerateRegistrationResponse(true, "51249"), std::string(), true, false,
+ false);
+ factory_.CompleteRequestAtPath("/delete", 0, true);
+
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_TRUE(delegate_->IsSuccess());
+ EXPECT_TRUE(delegate_->GetPrinterId().compare("51249") == 0);
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ ValidExistingPrinterSuccessfulPrinterUpdate) {
+ ResetManagerAndStart(std::string("5249"));
+
+ factory_.CompleteRequestAtPath("/list", 0,
+ kTestValidListResponseData, std::string(), true, false, false);
+ EXPECT_TRUE(
+ factory_.GetPendingRequests().size() == 1 &&
+ factory_.GetPendingRequestsAtPath("/update").size() == 1)
+ << "The existing printer is valid and should be updated";
+
+ factory_.CompleteRequestAtPath("/update", 0, true);
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_TRUE(delegate_->IsSuccess());
+ EXPECT_TRUE(delegate_->GetPrinterId().compare("5249") == 0);
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ ValidExistingPrinterFailToUpdateSuccessfulRegistration) {
+ ResetManagerAndStart(std::string("5249"));
+
+ factory_.CompleteRequestAtPath("/list", 0,
+ kTestValidListResponseData, std::string(), true, false, false);
+ EXPECT_TRUE(
+ factory_.GetPendingRequests().size() == 1 &&
+ factory_.GetPendingRequestsAtPath("/update").size() == 1)
+ << "The existing printer is valid and should be updated";
+
+ factory_.CompleteRequestAtPath("/update", 0, false);
+ EXPECT_EQ(2U, factory_.GetPendingRequests().size());
+ EXPECT_EQ(1U, factory_.GetPendingRequestsAtPath("/delete").size())
+ << "Fail to update the existing printer and it should be deleted.";
+ EXPECT_EQ(1U,
+ factory_.GetPendingRequestsAtPath("/register").size())
+ << "A new printer should be registered as there exists no valid one.";
+ EXPECT_FALSE(delegate_->HasCompleted());
+
+ factory_.CompleteRequestAtPath("/register", 0,
+ GenerateRegistrationResponse(true, "51249"), std::string(), true, false,
+ false);
+ factory_.CompleteRequestAtPath("/delete", 0, false);
+
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_TRUE(delegate_->IsSuccess());
+ EXPECT_TRUE(delegate_->GetPrinterId().compare("51249") == 0);
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ ValidExistingPrinterFailToUpdateFailToRegistration) {
+ ResetManagerAndStart(std::string("5249"));
+
+ factory_.CompleteRequestAtPath("/list", 0,
+ kTestValidListResponseData, std::string(), true, false, false);
+ EXPECT_TRUE(
+ factory_.GetPendingRequests().size() == 1 &&
+ factory_.GetPendingRequestsAtPath("/update").size() == 1)
+ << "The existing printer is valid and should be updated";
+
+ factory_.CompleteRequestAtPath("/update", 0, false);
+ EXPECT_TRUE(factory_.GetPendingRequests().size() == 2);
+ EXPECT_EQ(1U, factory_.GetPendingRequestsAtPath("/delete").size())
+ << "Fail to update the existing one; it should be deleted";
+ EXPECT_EQ(
+ 1U, factory_.GetPendingRequestsAtPath("/register").size())
+ << "A new printer should be registered due to update failure.";
+ EXPECT_FALSE(delegate_->HasCompleted());
+
+ factory_.CompleteRequestAtPath("/register", 0, false);
+ factory_.CompleteRequestAtPath("/delete", 0, false);
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_FALSE(delegate_->IsSuccess());
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest,
+ ValidExistingPrinterMulitpleListPrintersUpdateFailure) {
+ ResetManagerAndStart(std::string("5249"));
+
+ factory_.CompleteRequestAtPath("/list", 0,
+ kTestValidListMultResponseData, std::string(), true, false, false);
+ EXPECT_EQ(2U, factory_.GetPendingRequests().size());
+ EXPECT_EQ(1U, factory_.GetPendingRequestsAtPath("/update").size())
+ << "The existing printer is valid and should be updated";
+ EXPECT_EQ(1U, factory_.GetPendingRequestsAtPath("/delete").size())
+ << "The unexpected printer should be deleted";
+
+ factory_.CompleteRequestAtPath("/update", 0, false);
+ EXPECT_TRUE(factory_.GetPendingRequests().size() == 3);
+ EXPECT_EQ(2U, factory_.GetPendingRequestsAtPath("/delete").size())
+ << "Fail to update the existing one; it should be deleted";
+ EXPECT_EQ(
+ 1U, factory_.GetPendingRequestsAtPath("/register").size())
+ << "A new printer should be registered due to update failure.";
+ EXPECT_FALSE(delegate_->HasCompleted());
+
+ factory_.CompleteRequestAtPath("/register", 0, false);
+ factory_.CompleteRequestAtPath("/delete", 0, true);
+ EXPECT_FALSE(delegate_->HasCompleted())
+ << "Needs to wait for all deletion to complete";
+ factory_.CompleteRequestAtPath("/delete", 0, true);
+
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_FALSE(delegate_->IsSuccess());
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest, AuthFail) {
+ ResetManagerAndStart(std::string("5249"));
+
+ factory_.CompleteRequestAtPath("/list", 0,
+ kTestValidListResponseData, std::string(), true, false, true);
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_FALSE(delegate_->IsSuccess());
+}
+
+TEST_F(ChromeToMobileReceiveDeviceManagerTest, DeletedWhenStarting) {
+ ResetManagerAndStart(std::string("5249"));
+ factory_.CompleteRequestAtPath("/list", 0,
+ kTestValidListMultResponseData, std::string(), true, false, false);
+ factory_.CompleteRequestAtPath("/update", 0, false);
+
+ manager_.reset();
+ EXPECT_EQ(0U, factory_.GetPendingRequests().size());
+ EXPECT_TRUE(delegate_->HasCompleted());
+ EXPECT_FALSE(delegate_->IsSuccess());
+}

Powered by Google App Engine
This is Rietveld 408576698