| OLD | NEW |
| (Empty) |
| 1 // Copyright 2013 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 <deque> | |
| 6 | |
| 7 #include "content/renderer/media/webrtc_identity_service.h" | |
| 8 #include "ipc/ipc_message.h" | |
| 9 #include "testing/gtest/include/gtest/gtest.h" | |
| 10 | |
| 11 namespace content { | |
| 12 | |
| 13 namespace { | |
| 14 | |
| 15 static const char FAKE_URL[] = "http://fake.com"; | |
| 16 static const char FAKE_IDENTITY_NAME[] = "fake identity"; | |
| 17 static const char FAKE_COMMON_NAME[] = "fake common name"; | |
| 18 static const char FAKE_CERTIFICATE[] = "fake cert"; | |
| 19 static const char FAKE_PRIVATE_KEY[] = "fake private key"; | |
| 20 static const int FAKE_ERROR = 100; | |
| 21 | |
| 22 class WebRtcIdentityServiceForTest : public WebRTCIdentityService { | |
| 23 public: | |
| 24 bool Send(IPC::Message* message) override { | |
| 25 messages_.push_back(*message); | |
| 26 delete message; | |
| 27 return true; | |
| 28 } | |
| 29 | |
| 30 bool OnControlMessageReceived(const IPC::Message& message) override { | |
| 31 return WebRTCIdentityService::OnControlMessageReceived(message); | |
| 32 } | |
| 33 | |
| 34 IPC::Message GetLastMessage() { return messages_.back(); } | |
| 35 | |
| 36 int GetNumberOfMessages() { return messages_.size(); } | |
| 37 | |
| 38 void ClearMessages() { messages_.clear(); } | |
| 39 | |
| 40 private: | |
| 41 std::deque<IPC::Message> messages_; | |
| 42 }; | |
| 43 | |
| 44 class WebRtcIdentityServiceTest : public ::testing::Test { | |
| 45 public: | |
| 46 WebRtcIdentityServiceTest() | |
| 47 : service_(new WebRtcIdentityServiceForTest()), last_error_(0) {} | |
| 48 | |
| 49 protected: | |
| 50 void OnIdentityReady(const std::string& cert, const std::string& key) { | |
| 51 last_certificate_ = cert; | |
| 52 last_private_key_ = key; | |
| 53 } | |
| 54 | |
| 55 void OnRequestFailed(int error) { last_error_ = error; } | |
| 56 | |
| 57 void ResetRequestResult() { | |
| 58 last_certificate_ = ""; | |
| 59 last_private_key_ = ""; | |
| 60 last_error_ = 0; | |
| 61 } | |
| 62 | |
| 63 int RequestIdentity() { | |
| 64 return service_->RequestIdentity( | |
| 65 GURL(FAKE_URL), GURL(FAKE_URL), FAKE_IDENTITY_NAME, FAKE_COMMON_NAME, | |
| 66 base::Bind(&WebRtcIdentityServiceTest::OnIdentityReady, | |
| 67 base::Unretained(this)), | |
| 68 base::Bind(&WebRtcIdentityServiceTest::OnRequestFailed, | |
| 69 base::Unretained(this))); | |
| 70 } | |
| 71 | |
| 72 std::unique_ptr<WebRtcIdentityServiceForTest> service_; | |
| 73 std::string last_certificate_; | |
| 74 std::string last_private_key_; | |
| 75 int last_error_; | |
| 76 }; | |
| 77 | |
| 78 } // namespace | |
| 79 | |
| 80 TEST_F(WebRtcIdentityServiceTest, TestSendRequest) { | |
| 81 RequestIdentity(); | |
| 82 | |
| 83 IPC::Message ipc = service_->GetLastMessage(); | |
| 84 EXPECT_EQ(ipc.type(), WebRTCIdentityMsg_RequestIdentity::ID); | |
| 85 } | |
| 86 | |
| 87 TEST_F(WebRtcIdentityServiceTest, TestSuccessCallback) { | |
| 88 int id = RequestIdentity(); | |
| 89 | |
| 90 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 91 id, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 92 EXPECT_EQ(FAKE_CERTIFICATE, last_certificate_); | |
| 93 EXPECT_EQ(FAKE_PRIVATE_KEY, last_private_key_); | |
| 94 } | |
| 95 | |
| 96 TEST_F(WebRtcIdentityServiceTest, TestFailureCallback) { | |
| 97 int id = RequestIdentity(); | |
| 98 | |
| 99 service_->OnControlMessageReceived( | |
| 100 WebRTCIdentityHostMsg_RequestFailed(id, FAKE_ERROR)); | |
| 101 EXPECT_EQ(FAKE_ERROR, last_error_); | |
| 102 } | |
| 103 | |
| 104 TEST_F(WebRtcIdentityServiceTest, TestCancelRequest) { | |
| 105 int request_id = RequestIdentity(); | |
| 106 service_->ClearMessages(); | |
| 107 | |
| 108 service_->CancelRequest(request_id); | |
| 109 | |
| 110 IPC::Message ipc = service_->GetLastMessage(); | |
| 111 EXPECT_EQ(ipc.type(), WebRTCIdentityMsg_CancelRequest::ID); | |
| 112 } | |
| 113 | |
| 114 TEST_F(WebRtcIdentityServiceTest, TestQueuedRequestSentAfterSuccess) { | |
| 115 int id = RequestIdentity(); | |
| 116 RequestIdentity(); | |
| 117 EXPECT_EQ(1, service_->GetNumberOfMessages()); | |
| 118 service_->ClearMessages(); | |
| 119 | |
| 120 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 121 id, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 122 | |
| 123 IPC::Message ipc = service_->GetLastMessage(); | |
| 124 EXPECT_EQ(ipc.type(), WebRTCIdentityMsg_RequestIdentity::ID); | |
| 125 } | |
| 126 | |
| 127 TEST_F(WebRtcIdentityServiceTest, TestQueuedRequestSentAfterFailure) { | |
| 128 int id = RequestIdentity(); | |
| 129 RequestIdentity(); | |
| 130 EXPECT_EQ(1, service_->GetNumberOfMessages()); | |
| 131 service_->ClearMessages(); | |
| 132 | |
| 133 service_->OnControlMessageReceived( | |
| 134 WebRTCIdentityHostMsg_RequestFailed(id, FAKE_ERROR)); | |
| 135 | |
| 136 IPC::Message ipc = service_->GetLastMessage(); | |
| 137 EXPECT_EQ(ipc.type(), WebRTCIdentityMsg_RequestIdentity::ID); | |
| 138 } | |
| 139 | |
| 140 TEST_F(WebRtcIdentityServiceTest, TestQueuedRequestSentAfterCancelOutstanding) { | |
| 141 int outstand_request_id = RequestIdentity(); | |
| 142 RequestIdentity(); | |
| 143 | |
| 144 EXPECT_EQ(1, service_->GetNumberOfMessages()); | |
| 145 service_->ClearMessages(); | |
| 146 | |
| 147 service_->CancelRequest(outstand_request_id); | |
| 148 | |
| 149 // Should have two messages sent: one for cancelling the outstanding request, | |
| 150 // one for requesting the queued request. | |
| 151 EXPECT_EQ(2, service_->GetNumberOfMessages()); | |
| 152 IPC::Message ipc = service_->GetLastMessage(); | |
| 153 EXPECT_EQ(ipc.type(), WebRTCIdentityMsg_RequestIdentity::ID); | |
| 154 } | |
| 155 | |
| 156 TEST_F(WebRtcIdentityServiceTest, TestCancelQueuedRequest) { | |
| 157 int sent_id = RequestIdentity(); | |
| 158 int queued_request_id = RequestIdentity(); | |
| 159 EXPECT_EQ(1, service_->GetNumberOfMessages()); | |
| 160 service_->ClearMessages(); | |
| 161 | |
| 162 service_->CancelRequest(queued_request_id); | |
| 163 | |
| 164 // Verifies that the queued request is not sent after the outstanding request | |
| 165 // returns. | |
| 166 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 167 sent_id, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 168 | |
| 169 EXPECT_EQ(0, service_->GetNumberOfMessages()); | |
| 170 } | |
| 171 | |
| 172 TEST_F(WebRtcIdentityServiceTest, TestQueuedRequestSuccessCallback) { | |
| 173 int id1 = RequestIdentity(); | |
| 174 int id2 = RequestIdentity(); | |
| 175 | |
| 176 // Completes the outstanding request. | |
| 177 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 178 id1, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 179 EXPECT_EQ(FAKE_CERTIFICATE, last_certificate_); | |
| 180 EXPECT_EQ(FAKE_PRIVATE_KEY, last_private_key_); | |
| 181 | |
| 182 ResetRequestResult(); | |
| 183 | |
| 184 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 185 id2, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 186 EXPECT_EQ(FAKE_CERTIFICATE, last_certificate_); | |
| 187 EXPECT_EQ(FAKE_PRIVATE_KEY, last_private_key_); | |
| 188 } | |
| 189 | |
| 190 TEST_F(WebRtcIdentityServiceTest, TestQueuedRequestFailureCallback) { | |
| 191 int id1 = RequestIdentity(); | |
| 192 int id2 = RequestIdentity(); | |
| 193 | |
| 194 // Completes the outstanding request. | |
| 195 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 196 id1, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 197 EXPECT_EQ(FAKE_CERTIFICATE, last_certificate_); | |
| 198 EXPECT_EQ(FAKE_PRIVATE_KEY, last_private_key_); | |
| 199 | |
| 200 ResetRequestResult(); | |
| 201 | |
| 202 service_->OnControlMessageReceived( | |
| 203 WebRTCIdentityHostMsg_RequestFailed(id2, FAKE_ERROR)); | |
| 204 EXPECT_EQ(FAKE_ERROR, last_error_); | |
| 205 } | |
| 206 | |
| 207 // Verifies that receiving a response for a cancelled request does not incur the | |
| 208 // callbacks. | |
| 209 TEST_F(WebRtcIdentityServiceTest, TestRequestCompletedAfterCancelled) { | |
| 210 int id1 = RequestIdentity(); | |
| 211 RequestIdentity(); | |
| 212 service_->CancelRequest(id1); | |
| 213 | |
| 214 service_->OnControlMessageReceived(WebRTCIdentityHostMsg_IdentityReady( | |
| 215 id1, FAKE_CERTIFICATE, FAKE_PRIVATE_KEY)); | |
| 216 | |
| 217 EXPECT_NE(FAKE_CERTIFICATE, last_certificate_); | |
| 218 EXPECT_NE(FAKE_PRIVATE_KEY, last_private_key_); | |
| 219 | |
| 220 service_->OnControlMessageReceived( | |
| 221 WebRTCIdentityHostMsg_RequestFailed(id1, FAKE_ERROR)); | |
| 222 EXPECT_NE(FAKE_ERROR, last_error_); | |
| 223 } | |
| 224 | |
| 225 } // namespace content | |
| OLD | NEW |