cloud_print_private_apitest.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
12904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// Use of this source code is governed by a BSD-style license that can be
32904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// found in the LICENSE file.
42904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
52904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.h"
62904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
72904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "base/strings/stringprintf.h"
82904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "chrome/browser/extensions/extension_apitest.h"
92904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "chrome/browser/profiles/profile.h"
102904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "chrome/browser/ui/browser.h"
112904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "chrome/common/extensions/api/cloud_print_private.h"
122904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "chrome/test/base/ui_test_utils.h"
132904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "components/cloud_devices/common/cloud_devices_switches.h"
142904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "net/dns/mock_host_resolver.h"
152904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "testing/gmock/include/gmock/gmock.h"
162904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#include "testing/gtest/include/gtest/gtest.h"
172904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
182904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgusing ::testing::Eq;
192904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgusing ::testing::Property;
202904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgusing ::testing::Return;
212904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgusing ::testing::_;
222904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
232904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// A base class for tests below.
242904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgclass ExtensionCloudPrintPrivateApiTest : public ExtensionApiTest {
252904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org public:
262904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
272904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    ExtensionApiTest::SetUpCommandLine(command_line);
282904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    command_line->AppendSwitchASCII(
292904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org        switches::kCloudPrintURL,
302904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org        "http://www.cloudprintapp.com/files/extensions/api_test/"
312904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org        "cloud_print_private");
322904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  }
332904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
342904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
352904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    // Start up the test server and get us ready for calling the install
362904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    // API functions.
372904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    host_resolver()->AddRule("www.cloudprintapp.com", "127.0.0.1");
382904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    ASSERT_TRUE(test_server()->Start());
392904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  }
402904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
412904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org protected:
422904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  // Returns a test server URL, but with host 'www.cloudprintapp.com' so it
432904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org   // matches the cloud print app's extent that we set up via command line
442904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org   // flags.
452904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  GURL GetTestServerURL(const std::string& path) {
462904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    GURL url = test_server()->GetURL(
472904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org        "files/extensions/api_test/cloud_print_private/" + path);
482904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
492904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    // Replace the host with 'www.cloudprintapp.com' so it matches the cloud
502904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    // print app's extent.
512904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    GURL::Replacements replace_host;
522904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    std::string host_str("www.cloudprintapp.com");
532904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    replace_host.SetHostStr(host_str);
542904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org    return url.ReplaceComponents(replace_host);
552904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  }
562904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org};
572904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
582904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#if !defined(OS_CHROMEOS)
592904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
602904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgusing extensions::api::cloud_print_private::UserSettings;
612904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
622904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgclass CloudPrintTestsDelegateMock : public extensions::CloudPrintTestsDelegate {
632904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org public:
642904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  CloudPrintTestsDelegateMock() {}
652904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
662904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  MOCK_METHOD4(SetupConnector,
672904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org               void(const std::string& user_email,
682904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                    const std::string& robot_email,
692904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                    const std::string& credentials,
702904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                    const UserSettings& user_settings));
712904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  MOCK_METHOD0(GetHostName, std::string());
722904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  MOCK_METHOD0(GetPrinters, std::vector<std::string>());
732904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  MOCK_METHOD0(GetClientId, std::string());
742904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
752904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org private:
762904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  DISALLOW_COPY_AND_ASSIGN(CloudPrintTestsDelegateMock);
772904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org};
782904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
792904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgMATCHER(IsExpectedUserSettings, "") {
802904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  const UserSettings& settings = arg;
812904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  return settings.connect_new_printers &&
822904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org         settings.printers.size() == 2 &&
832904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org         settings.printers[0]->name == "printer1" &&
842904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org         !settings.printers[0]->connect &&
852904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org         settings.printers[1]->name == "printer2" &&
862904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org         settings.printers[1]->connect;
872904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org}
882904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
892904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org// http://crbug.com/177163
902904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#if defined(OS_WIN) && !defined(NDEBUG)
912904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#define MAYBE_CloudPrintHosted DISABLED_CloudPrintHosted
922904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#else
932904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#define MAYBE_CloudPrintHosted CloudPrintHosted
942904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#endif
952904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.orgIN_PROC_BROWSER_TEST_F(ExtensionCloudPrintPrivateApiTest,
962904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                       MAYBE_CloudPrintHosted) {
972904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  CloudPrintTestsDelegateMock cloud_print_mock;
982904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
992904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  EXPECT_CALL(cloud_print_mock,
1002904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org              SetupConnector("foo@gmail.com",
1012904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                             "foorobot@googleusercontent.com",
1022904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                             "1/23546efa54",
1032904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org                             IsExpectedUserSettings()));
1042904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  EXPECT_CALL(cloud_print_mock, GetHostName())
1052904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org      .WillRepeatedly(Return("TestHostName"));
1062904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
1072904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  std::vector<std::string> printers;
1082904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  printers.push_back("printer1");
1092904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  printers.push_back("printer2");
1102904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  EXPECT_CALL(cloud_print_mock, GetPrinters())
1112904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org      .WillRepeatedly(Return(printers));
1122904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
1132904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  EXPECT_CALL(cloud_print_mock, GetClientId())
1142904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org      .WillRepeatedly(Return("TestAPIClient"));
1152904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
1162904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  // Run this as a hosted app. Since we have overridden the cloud print service
1172904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  // URL in the command line, this URL should match the web extent for our
1182904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  // cloud print component app and it should work.
1192904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  GURL page_url = GetTestServerURL(
1202904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org      "enable_chrome_connector/cloud_print_success_tests.html");
1212904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org  ASSERT_TRUE(RunPageTest(page_url.spec()));
1222904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org}
1232904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org
1242904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org#endif  // !defined(OS_CHROMEOS)
1252904d1a42292be3056c2dd3f98822f8e1470fa72machenbach@chromium.org