146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "chrome/browser/local_discovery/gcd_registration_ticket_request.h" 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/json/json_reader.h" 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using testing::StrictMock; 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace local_discovery { 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace { 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kSampleResponse[] = 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "{" 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "\"kind\": \"clouddevices#registrationTicket\"," 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "\"id\": \"SampleTicketID\"," 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) "\"deviceId\": \"SampleDeviceID\"" 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "}"; 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)const char kErrorResponse[] = 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "{" 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "\"kind\": \"clouddevices#error\"" 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) "}"; 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(GCDRegistrationTicketRequestTest, Params) { 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GCDRegistrationTicketRequest::ResponseCallback null_callback; 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GCDRegistrationTicketRequest request(null_callback); 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ( 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GURL("https://www.googleapis.com/clouddevices/v1/registrationTickets"), 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request.GetURL()); 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ("https://www.googleapis.com/auth/clouddevices", 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request.GetOAuthScope()); 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_EQ(net::URLFetcher::POST, request.GetRequestType()); 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) EXPECT_TRUE(request.GetExtraRequestHeaders().empty()); 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class MockDelegate { 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) MOCK_METHOD2(Callback, 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) void(const std::string& ticket_id, 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::string& device_id)); 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)TEST(GCDRegistrationTicketRequestTest, Parsing) { 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) StrictMock<MockDelegate> delegate; 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) GCDRegistrationTicketRequest request( 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) base::Bind(&MockDelegate::Callback, base::Unretained(&delegate))); 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_CALL(delegate, Callback("SampleTicketID", "SampleDeviceID")); 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) scoped_ptr<base::Value> value(base::JSONReader::Read(kSampleResponse)); 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const base::DictionaryValue* dictionary = NULL; 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(value->GetAsDictionary(&dictionary)); 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request.OnGCDAPIFlowComplete(*dictionary); 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_CALL(delegate, Callback("", "")); 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) value.reset(base::JSONReader::Read(kErrorResponse)); 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) ASSERT_TRUE(value->GetAsDictionary(&dictionary)); 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) request.OnGCDAPIFlowComplete(*dictionary); 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace local_discovery 71