1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// found in the LICENSE file. 4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/local_discovery/cloud_device_list.h" 6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include <set> 8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "base/json/json_reader.h" 10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "chrome/browser/local_discovery/cloud_device_list_delegate.h" 11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using testing::Mock; 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using testing::SaveArg; 16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using testing::StrictMock; 17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)using testing::_; 18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace local_discovery { 20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)namespace { 22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)const char kSampleSuccessResponseOAuth[] = 24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "{" 25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "\"kind\": \"clouddevices#devicesListResponse\"," 26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "\"devices\": [{" 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"kind\": \"clouddevices#device\"," 28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"id\": \"someID\"," 29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"deviceKind\": \"someType\"," 30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"creationTimeMs\": \"123\"," 31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"systemName\": \"someDisplayName\"," 32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"owner\": \"user@domain.com\"," 33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"description\": \"someDescription\"," 34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"state\": {" 35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"base\": {" 36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"connectionStatus\": \"offline\"" 37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " }" 38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " }," 39cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"channel\": {" 40cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"supportedType\": \"xmpp\"" 41cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " }," 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"personalizedInfo\": {" 43cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " \"maxRole\": \"owner\"" 44cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) " }}]}"; 45cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class MockDelegate : public CloudDeviceListDelegate { 47cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public: 48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MOCK_METHOD1(OnDeviceListReady, void(const DeviceList&)); 49cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) MOCK_METHOD0(OnDeviceListUnavailable, void()); 50cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)}; 51cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 52cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(CloudDeviceListTest, Params) { 53cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CloudDeviceList device_list(NULL); 54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(GURL("https://www.googleapis.com/clouddevices/v1/devices"), 55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) device_list.GetURL()); 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ("https://www.googleapis.com/auth/clouddevices", 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) device_list.GetOAuthScope()); 58cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ(net::URLFetcher::GET, device_list.GetRequestType()); 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_TRUE(device_list.GetExtraRequestHeaders().empty()); 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 61cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 62cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)TEST(CloudDeviceListTest, Parsing) { 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) StrictMock<MockDelegate> delegate; 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CloudDeviceList device_list(&delegate); 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) CloudDeviceListDelegate::DeviceList devices; 66cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_CALL(delegate, OnDeviceListReady(_)).WillOnce(SaveArg<0>(&devices)); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 68cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) scoped_ptr<base::Value> value( 69cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::JSONReader::Read(kSampleSuccessResponseOAuth)); 70cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const base::DictionaryValue* dictionary = NULL; 71cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_TRUE(value->GetAsDictionary(&dictionary)); 72cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) device_list.OnGCDAPIFlowComplete(*dictionary); 73cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) Mock::VerifyAndClear(&delegate); 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::set<std::string> ids_found; 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) std::set<std::string> ids_expected; 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ids_expected.insert("someID"); 79cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 80cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (size_t i = 0; i != devices.size(); ++i) { 81cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ids_found.insert(devices[i].id); 82cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 83cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 84cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ASSERT_EQ(ids_expected, ids_found); 85cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 86cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ("someID", devices[0].id); 87cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ("someDisplayName", devices[0].display_name); 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ("someDescription", devices[0].description); 89cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) EXPECT_EQ("someType", devices[0].type); 90cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 91cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 92cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace 93cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 94cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} // namespace local_discovery 95