OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/local_discovery/privetv3_session.h" | 5 #include "chrome/browser/local_discovery/privetv3_session.h" |
6 | 6 |
7 #include "base/base64.h" | 7 #include "base/base64.h" |
8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
9 #include "chrome/browser/local_discovery/privet_http.h" | 9 #include "chrome/browser/local_discovery/privet_http.h" |
10 #include "content/public/test/test_utils.h" | 10 #include "content/public/test/test_utils.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 } // namespace | 73 } // namespace |
74 | 74 |
75 class PrivetV3SessionTest : public testing::Test { | 75 class PrivetV3SessionTest : public testing::Test { |
76 public: | 76 public: |
77 PrivetV3SessionTest() | 77 PrivetV3SessionTest() |
78 : fetcher_factory_(nullptr), | 78 : fetcher_factory_(nullptr), |
79 session_(make_scoped_ptr(new MockPrivetHTTPClient())) {} | 79 session_(make_scoped_ptr(new MockPrivetHTTPClient())) {} |
80 | 80 |
81 ~PrivetV3SessionTest() override {} | 81 ~PrivetV3SessionTest() override {} |
82 | 82 |
83 MOCK_METHOD2(OnInitialized, void(Result, const std::vector<PairingType>&)); | 83 void OnInitialized(Result result, const base::DictionaryValue& info) { |
| 84 info_.MergeDictionary(&info); |
| 85 OnInitializedMock(result, info); |
| 86 } |
| 87 |
| 88 MOCK_METHOD2(OnInitializedMock, void(Result, const base::DictionaryValue&)); |
84 MOCK_METHOD1(OnPairingStarted, void(Result)); | 89 MOCK_METHOD1(OnPairingStarted, void(Result)); |
85 MOCK_METHOD1(OnCodeConfirmed, void(Result)); | 90 MOCK_METHOD1(OnCodeConfirmed, void(Result)); |
86 MOCK_METHOD2(OnMessageSend, void(Result, const base::DictionaryValue& value)); | 91 MOCK_METHOD2(OnMessageSend, void(Result, const base::DictionaryValue&)); |
87 MOCK_METHOD1(OnPostData, void(const base::DictionaryValue& data)); | 92 MOCK_METHOD1(OnPostData, void(const base::DictionaryValue&)); |
88 | 93 |
89 protected: | 94 protected: |
90 void SetUp() override { | 95 void SetUp() override { |
91 EXPECT_CALL(*this, OnInitialized(_, _)).Times(0); | 96 EXPECT_CALL(*this, OnInitializedMock(_, _)).Times(0); |
92 EXPECT_CALL(*this, OnPairingStarted(_)).Times(0); | 97 EXPECT_CALL(*this, OnPairingStarted(_)).Times(0); |
93 EXPECT_CALL(*this, OnCodeConfirmed(_)).Times(0); | 98 EXPECT_CALL(*this, OnCodeConfirmed(_)).Times(0); |
94 EXPECT_CALL(*this, OnMessageSend(_, _)).Times(0); | 99 EXPECT_CALL(*this, OnMessageSend(_, _)).Times(0); |
95 EXPECT_CALL(*this, OnPostData(_)).Times(0); | 100 EXPECT_CALL(*this, OnPostData(_)).Times(0); |
96 session_.on_post_data_ = | 101 session_.on_post_data_ = |
97 base::Bind(&PrivetV3SessionTest::OnPostData, base::Unretained(this)); | 102 base::Bind(&PrivetV3SessionTest::OnPostData, base::Unretained(this)); |
98 } | 103 } |
99 | 104 |
| 105 base::DictionaryValue info_; |
100 base::MessageLoop loop_; | 106 base::MessageLoop loop_; |
101 base::Closure quit_closure_; | 107 base::Closure quit_closure_; |
102 net::FakeURLFetcherFactory fetcher_factory_; | 108 net::FakeURLFetcherFactory fetcher_factory_; |
103 PrivetV3Session session_; | 109 PrivetV3Session session_; |
104 }; | 110 }; |
105 | 111 |
106 TEST_F(PrivetV3SessionTest, InitError) { | 112 TEST_F(PrivetV3SessionTest, InitError) { |
107 EXPECT_CALL(*this, OnInitialized(Result::STATUS_CONNECTIONERROR, _)).Times(1); | 113 EXPECT_CALL(*this, OnInitializedMock(Result::STATUS_CONNECTIONERROR, _)) |
| 114 .Times(1); |
108 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), "", | 115 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), "", |
109 net::HTTP_OK, net::URLRequestStatus::FAILED); | 116 net::HTTP_OK, net::URLRequestStatus::FAILED); |
110 session_.Init( | 117 session_.Init( |
111 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); | 118 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); |
112 base::RunLoop().RunUntilIdle(); | 119 base::RunLoop().RunUntilIdle(); |
113 } | 120 } |
114 | 121 |
115 TEST_F(PrivetV3SessionTest, VersionError) { | 122 TEST_F(PrivetV3SessionTest, VersionError) { |
116 std::string response(kInfoResponse); | 123 std::string response(kInfoResponse); |
117 ReplaceFirstSubstringAfterOffset(&response, 0, "3.0", "4.1"); | 124 ReplaceFirstSubstringAfterOffset(&response, 0, "3.0", "4.1"); |
118 | 125 |
119 EXPECT_CALL(*this, OnInitialized(Result::STATUS_SESSIONERROR, _)).Times(1); | 126 EXPECT_CALL(*this, OnInitializedMock(Result::STATUS_SESSIONERROR, _)) |
| 127 .Times(1); |
120 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), response, | 128 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), response, |
121 net::HTTP_OK, | 129 net::HTTP_OK, |
122 net::URLRequestStatus::SUCCESS); | 130 net::URLRequestStatus::SUCCESS); |
123 session_.Init( | 131 session_.Init( |
124 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); | 132 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); |
125 base::RunLoop().RunUntilIdle(); | 133 base::RunLoop().RunUntilIdle(); |
126 } | 134 } |
127 | 135 |
128 TEST_F(PrivetV3SessionTest, ModeError) { | 136 TEST_F(PrivetV3SessionTest, ModeError) { |
129 std::string response(kInfoResponse); | 137 std::string response(kInfoResponse); |
130 ReplaceFirstSubstringAfterOffset(&response, 0, "mode", "mode_"); | 138 ReplaceFirstSubstringAfterOffset(&response, 0, "mode", "mode_"); |
131 | 139 |
132 EXPECT_CALL(*this, OnInitialized(Result::STATUS_SESSIONERROR, _)).Times(1); | 140 EXPECT_CALL(*this, OnInitializedMock(Result::STATUS_SESSIONERROR, _)) |
| 141 .Times(1); |
133 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), response, | 142 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), response, |
134 net::HTTP_OK, | 143 net::HTTP_OK, |
135 net::URLRequestStatus::SUCCESS); | 144 net::URLRequestStatus::SUCCESS); |
136 session_.Init( | 145 session_.Init( |
137 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); | 146 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); |
138 base::RunLoop().RunUntilIdle(); | 147 base::RunLoop().RunUntilIdle(); |
139 } | 148 } |
140 | 149 |
141 TEST_F(PrivetV3SessionTest, Pairing) { | 150 TEST_F(PrivetV3SessionTest, Pairing) { |
142 std::vector<PairingType> pairings; | 151 EXPECT_CALL(*this, OnInitializedMock(Result::STATUS_SUCCESS, _)) |
143 EXPECT_CALL(*this, OnInitialized(Result::STATUS_SUCCESS, _)) | 152 .Times(1); |
144 .WillOnce(SaveArg<1>(&pairings)); | |
145 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), | 153 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), |
146 kInfoResponse, net::HTTP_OK, | 154 kInfoResponse, net::HTTP_OK, |
147 net::URLRequestStatus::SUCCESS); | 155 net::URLRequestStatus::SUCCESS); |
148 | 156 |
149 session_.Init( | 157 session_.Init( |
150 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); | 158 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); |
151 base::RunLoop().RunUntilIdle(); | 159 base::RunLoop().RunUntilIdle(); |
152 | 160 |
153 EXPECT_EQ(2u, pairings.size()); | 161 const base::ListValue* pairing = nullptr; |
154 EXPECT_EQ(PairingType::PAIRING_TYPE_PINCODE, pairings[0]); | 162 ASSERT_TRUE(info_.GetList("authentication.pairing", &pairing)); |
155 EXPECT_EQ(PairingType::PAIRING_TYPE_EMBEDDEDCODE, pairings[1]); | 163 |
| 164 std::string pairing_string; |
| 165 ASSERT_TRUE(pairing->GetString(0, &pairing_string)); |
| 166 EXPECT_EQ("pinCode", pairing_string); |
| 167 |
| 168 ASSERT_TRUE(pairing->GetString(1, &pairing_string)); |
| 169 EXPECT_EQ("embeddedCode", pairing_string); |
156 | 170 |
157 crypto::P224EncryptedKeyExchange spake( | 171 crypto::P224EncryptedKeyExchange spake( |
158 crypto::P224EncryptedKeyExchange::kPeerTypeServer, "testPin"); | 172 crypto::P224EncryptedKeyExchange::kPeerTypeServer, "testPin"); |
159 | 173 |
160 EXPECT_CALL(*this, OnPairingStarted(Result::STATUS_SUCCESS)).Times(1); | 174 EXPECT_CALL(*this, OnPairingStarted(Result::STATUS_SUCCESS)).Times(1); |
161 EXPECT_CALL(*this, OnPostData(_)) | 175 EXPECT_CALL(*this, OnPostData(_)) |
162 .WillOnce( | 176 .WillOnce( |
163 testing::Invoke([this, &spake](const base::DictionaryValue& data) { | 177 testing::Invoke([this, &spake](const base::DictionaryValue& data) { |
164 std::string pairing_type; | 178 std::string pairing_type; |
165 EXPECT_TRUE(data.GetString("pairing", &pairing_type)); | 179 EXPECT_TRUE(data.GetString("pairing", &pairing_type)); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
247 session_.ConfirmCode("testPin", | 261 session_.ConfirmCode("testPin", |
248 base::Bind(&PrivetV3SessionTest::OnCodeConfirmed, | 262 base::Bind(&PrivetV3SessionTest::OnCodeConfirmed, |
249 base::Unretained(this))); | 263 base::Unretained(this))); |
250 base::RunLoop().RunUntilIdle(); | 264 base::RunLoop().RunUntilIdle(); |
251 | 265 |
252 EXPECT_FALSE(session_.fingerprint_.empty()); | 266 EXPECT_FALSE(session_.fingerprint_.empty()); |
253 EXPECT_EQ("testType 567", session_.privet_auth_token_); | 267 EXPECT_EQ("testType 567", session_.privet_auth_token_); |
254 } | 268 } |
255 | 269 |
256 TEST_F(PrivetV3SessionTest, Cancel) { | 270 TEST_F(PrivetV3SessionTest, Cancel) { |
257 EXPECT_CALL(*this, OnInitialized(Result::STATUS_SUCCESS, _)); | 271 EXPECT_CALL(*this, OnInitializedMock(Result::STATUS_SUCCESS, _)).Times(1);; |
258 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), | 272 fetcher_factory_.SetFakeResponse(GURL("http://host/privet/info"), |
259 kInfoResponse, net::HTTP_OK, | 273 kInfoResponse, net::HTTP_OK, |
260 net::URLRequestStatus::SUCCESS); | 274 net::URLRequestStatus::SUCCESS); |
261 | 275 |
262 session_.Init( | 276 session_.Init( |
263 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); | 277 base::Bind(&PrivetV3SessionTest::OnInitialized, base::Unretained(this))); |
264 base::RunLoop().RunUntilIdle(); | 278 base::RunLoop().RunUntilIdle(); |
265 | 279 |
266 EXPECT_CALL(*this, OnPairingStarted(Result::STATUS_SUCCESS)).Times(1); | 280 EXPECT_CALL(*this, OnPairingStarted(Result::STATUS_SUCCESS)).Times(1); |
267 EXPECT_CALL(*this, OnPostData(_)) | 281 EXPECT_CALL(*this, OnPostData(_)) |
(...skipping 19 matching lines...) Expand all Loading... |
287 .WillOnce(testing::Invoke([this](const base::DictionaryValue& data) { | 301 .WillOnce(testing::Invoke([this](const base::DictionaryValue& data) { |
288 std::string session_id; | 302 std::string session_id; |
289 EXPECT_TRUE(data.GetString("sessionId", &session_id)); | 303 EXPECT_TRUE(data.GetString("sessionId", &session_id)); |
290 })); | 304 })); |
291 } | 305 } |
292 | 306 |
293 // TODO(vitalybuka): replace PrivetHTTPClient with regular URL fetcher and | 307 // TODO(vitalybuka): replace PrivetHTTPClient with regular URL fetcher and |
294 // implement SendMessage test. | 308 // implement SendMessage test. |
295 | 309 |
296 } // namespace local_discovery | 310 } // namespace local_discovery |
OLD | NEW |