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