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