cloud_print_private_apitest.cc revision 5e3f23d412006dc4db4e659864679f29341e113f
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/stringprintf.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/extension_apitest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/common/extensions/api/cloud_print_private.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Eq; 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Property; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A base class for tests below. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ExtensionCloudPrintPrivateApiTest : public ExtensionApiTest { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExtensionApiTest::SetUpCommandLine(command_line); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchASCII(switches::kCloudPrintServiceURL, 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http://www.cloudprintapp.com/files/extensions/api_test/" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "cloud_print_private"); 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start up the test server and get us ready for calling the install 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // API functions. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host_resolver()->AddRule("www.cloudprintapp.com", "127.0.0.1"); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns a test server URL, but with host 'www.cloudprintapp.com' so it 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // matches the cloud print app's extent that we set up via command line 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // flags. 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL GetTestServerURL(const std::string& path) { 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = test_server()->GetURL( 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "files/extensions/api_test/cloud_print_private/" + path); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Replace the host with 'www.cloudprintapp.com' so it matches the cloud 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // print app's extent. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL::Replacements replace_host; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string host_str("www.cloudprintapp.com"); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) replace_host.SetHostStr(host_str); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return url.ReplaceComponents(replace_host); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if !defined(OS_CHROMEOS) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using extensions::api::cloud_print_private::UserSettings; 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CloudPrintTestsDelegateMock : public extensions::CloudPrintTestsDelegate { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintTestsDelegateMock() {} 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) MOCK_METHOD4(SetupConnector, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void(const std::string& user_email, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& robot_email, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& credentials, 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const UserSettings& user_settings)); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetHostName, std::string()); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MOCK_METHOD0(GetPrinters, std::vector<std::string>()); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(GetClientId, std::string()); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(CloudPrintTestsDelegateMock); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)MATCHER(IsExpectedUserSettings, "") { 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const UserSettings& settings = arg; 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return settings.connect_new_printers && 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.printers.size() == 2 && 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.printers[0]->name == "printer1" && 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) !settings.printers[0]->connect && 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.printers[1]->name == "printer2" && 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) settings.printers[1]->connect; 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// http://crbug.com/177163 89868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#if defined(OS_WIN) && !defined(NDEBUG) 90868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_CloudPrintHosted DISABLED_CloudPrintHosted 91868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#else 92868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MAYBE_CloudPrintHosted CloudPrintHosted 93868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionCloudPrintPrivateApiTest, 95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MAYBE_CloudPrintHosted) { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloudPrintTestsDelegateMock cloud_print_mock; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(cloud_print_mock, 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetupConnector("foo@gmail.com", 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "foorobot@googleusercontent.com", 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "1/23546efa54", 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) IsExpectedUserSettings())); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(cloud_print_mock, GetHostName()) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return("TestHostName")); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::vector<std::string> printers; 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) printers.push_back("printer1"); 108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) printers.push_back("printer2"); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(cloud_print_mock, GetPrinters()) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(Return(printers)); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(cloud_print_mock, GetClientId()) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillRepeatedly(Return("TestAPIClient")); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Run this as a hosted app. Since we have overridden the cloud print service 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // URL in the command line, this URL should match the web extent for our 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // cloud print component app and it should work. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL page_url = GetTestServerURL( 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "enable_chrome_connector/cloud_print_success_tests.html"); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(RunPageTest(page_url.spec())); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // !defined(OS_CHROMEOS) 124