1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/common/cloud_print/cloud_print_helpers.h" 6 7 #include "base/md5.h" 8 #include "base/strings/stringprintf.h" 9 #include "base/sys_info.h" 10 #include "chrome/common/chrome_version_info.h" 11 #include "testing/gtest/include/gtest/gtest.h" 12 #include "url/gurl.h" 13 14 namespace cloud_print { 15 16 namespace { 17 18 void CheckURLs(const GURL& server_base_url) { 19 std::string expected_url_base = server_base_url.spec(); 20 if (expected_url_base[expected_url_base.length() - 1] != '/') 21 expected_url_base += "/"; 22 23 EXPECT_EQ(base::StringPrintf("%ssearch", expected_url_base.c_str()), 24 GetUrlForSearch(server_base_url).spec()); 25 26 EXPECT_EQ(base::StringPrintf("%ssubmit", expected_url_base.c_str()), 27 GetUrlForSubmit(server_base_url).spec()); 28 29 EXPECT_EQ(base::StringPrintf("%slist?proxy=demoproxy", 30 expected_url_base.c_str()), 31 GetUrlForPrinterList( 32 server_base_url, std::string("demoproxy")).spec()); 33 34 EXPECT_EQ(base::StringPrintf("%sregister", expected_url_base.c_str()), 35 GetUrlForPrinterRegistration(server_base_url).spec()); 36 37 EXPECT_EQ(base::StringPrintf("%supdate?printerid=printeridfoo", 38 expected_url_base.c_str()), 39 GetUrlForPrinterUpdate(server_base_url, "printeridfoo").spec()); 40 41 EXPECT_EQ(base::StringPrintf("%sdelete?printerid=printeridbar&reason=deleted", 42 expected_url_base.c_str()), 43 GetUrlForPrinterDelete( 44 server_base_url, "printeridbar", "deleted").spec()); 45 46 EXPECT_EQ(base::StringPrintf("%sfetch?printerid=myprinter&deb=nogoodreason", 47 expected_url_base.c_str()), 48 GetUrlForJobFetch( 49 server_base_url, "myprinter", "nogoodreason").spec()); 50 51 EXPECT_EQ(base::StringPrintf("%sdeletejob?jobid=myprinter", 52 expected_url_base.c_str()), 53 GetUrlForJobDelete(server_base_url, "myprinter").spec()); 54 55 EXPECT_EQ(base::StringPrintf("%scontrol?jobid=myprinter&status=s1", 56 expected_url_base.c_str()), 57 GetUrlForJobStatusUpdate( 58 server_base_url, "myprinter", "s1").spec()); 59 60 EXPECT_EQ(base::StringPrintf("%smessage?code=testmsg", 61 expected_url_base.c_str()), 62 GetUrlForUserMessage(server_base_url, "testmsg").spec()); 63 64 EXPECT_EQ(base::StringPrintf( 65 "%screaterobot?oauth_client_id=democlientid&proxy=demoproxy", 66 expected_url_base.c_str()), 67 GetUrlForGetAuthCode( 68 server_base_url, "democlientid", "demoproxy").spec()); 69 } 70 71 } // namespace 72 73 TEST(CloudPrintHelpersTest, GetURLs) { 74 CheckURLs(GURL("https://www.google.com/cloudprint")); 75 CheckURLs(GURL("https://www.google.com/cloudprint/")); 76 CheckURLs(GURL("http://www.myprinterserver.com")); 77 CheckURLs(GURL("http://www.myprinterserver.com/")); 78 } 79 80 TEST(CloudPrintHelpersTest, GetHashOfPrinterTags) { 81 PrinterTags printer_tags; 82 printer_tags["tag1"] = std::string("value1"); 83 printer_tags["tag2"] = std::string("value2"); 84 85 chrome::VersionInfo version_info; 86 std::string expected_list_string = base::StringPrintf( 87 "chrome_version%ssystem_name%ssystem_version%stag1value1tag2value2", 88 version_info.CreateVersionString().c_str(), 89 base::SysInfo::OperatingSystemName().c_str(), 90 base::SysInfo::OperatingSystemVersion().c_str()); 91 EXPECT_EQ(base::MD5String(expected_list_string), 92 GetHashOfPrinterTags(printer_tags)); 93 } 94 95 TEST(CloudPrintHelpersTest, GetPostDataForPrinterTags) { 96 PrinterTags printer_tags; 97 printer_tags["tag1"] = std::string("value1"); 98 printer_tags["tag2"] = std::string("value2"); 99 100 chrome::VersionInfo version_info; 101 std::string expected = base::StringPrintf( 102 "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" 103 "\r\n\r\n__test__chrome_version=%s\r\n" 104 "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" 105 "\r\n\r\n__test__system_name=%s\r\n" 106 "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" 107 "\r\n\r\n__test__system_version=%s\r\n" 108 "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" 109 "\r\n\r\n__test__tag1=value1\r\n" 110 "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" 111 "\r\n\r\n__test__tag2=value2\r\n" 112 "--test_mime_boundary\r\nContent-Disposition: form-data; name=\"tag\"" 113 "\r\n\r\n__test__tagshash=%s\r\n", 114 version_info.CreateVersionString().c_str(), 115 base::SysInfo::OperatingSystemName().c_str(), 116 base::SysInfo::OperatingSystemVersion().c_str(), 117 GetHashOfPrinterTags(printer_tags).c_str()); 118 119 EXPECT_EQ(expected, GetPostDataForPrinterTags( 120 printer_tags, 121 std::string("test_mime_boundary"), 122 std::string("__test__"), 123 std::string("__test__tagshash"))); 124 } 125 126 TEST(CloudPrintHelpersTest, GetCloudPrintAuthHeader) { 127 std::string test_auth("testauth"); 128 EXPECT_EQ("Authorization: OAuth testauth", 129 GetCloudPrintAuthHeader(test_auth)); 130 } 131 132 } // namespace cloud_print 133