OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "remoting/protocol/negotiating_authenticator.h" | 5 #include "remoting/protocol/negotiating_authenticator.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "net/base/net_errors.h" | 8 #include "net/base/net_errors.h" |
9 #include "remoting/protocol/authenticator_test_base.h" | 9 #include "remoting/protocol/authenticator_test_base.h" |
10 #include "remoting/protocol/channel_authenticator.h" | 10 #include "remoting/protocol/channel_authenticator.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 } // namespace | 34 } // namespace |
35 | 35 |
36 class NegotiatingAuthenticatorTest : public AuthenticatorTestBase { | 36 class NegotiatingAuthenticatorTest : public AuthenticatorTestBase { |
37 public: | 37 public: |
38 NegotiatingAuthenticatorTest() { | 38 NegotiatingAuthenticatorTest() { |
39 } | 39 } |
40 virtual ~NegotiatingAuthenticatorTest() { | 40 virtual ~NegotiatingAuthenticatorTest() { |
41 } | 41 } |
42 | 42 |
43 protected: | 43 protected: |
| 44 class MockTokenFetcher |
| 45 : public protocol::ThirdPartyAuthenticator::TokenFetcher { |
| 46 public: |
| 47 MOCK_METHOD4(FetchThirdPartyToken, void( |
| 48 const std::string& token_url, |
| 49 const std::string& host_public_key, |
| 50 const std::string& scope, |
| 51 const base::Callback<void( |
| 52 const std::string& token, |
| 53 const std::string& shared_secret)>& on_token_fetched)); |
| 54 }; |
| 55 |
44 void InitAuthenticators( | 56 void InitAuthenticators( |
45 const std::string& client_secret, | 57 const std::string& client_secret, |
46 const std::string& host_secret, | 58 const std::string& host_secret, |
47 AuthenticationMethod::HashFunction hash_function, | 59 AuthenticationMethod::HashFunction hash_function, |
48 bool client_hmac_only) { | 60 bool client_hmac_only) { |
49 std::string host_secret_hash = AuthenticationMethod::ApplyHashFunction( | 61 std::string host_secret_hash = AuthenticationMethod::ApplyHashFunction( |
50 hash_function, kTestHostId, host_secret); | 62 hash_function, kTestHostId, host_secret); |
51 host_ = NegotiatingAuthenticator::CreateForHost( | 63 host_ = NegotiatingAuthenticator::CreateForHostSharedSecret( |
52 host_cert_, key_pair_->Copy(), host_secret_hash, hash_function); | 64 host_cert_, key_pair_->Copy(), host_secret_hash, hash_function); |
53 | 65 |
54 std::vector<AuthenticationMethod> methods; | 66 std::vector<AuthenticationMethod> methods; |
55 methods.push_back(AuthenticationMethod::Spake2( | 67 methods.push_back(AuthenticationMethod::Spake2( |
56 AuthenticationMethod::HMAC_SHA256)); | 68 AuthenticationMethod::HMAC_SHA256)); |
57 if (!client_hmac_only) { | 69 if (!client_hmac_only) { |
58 methods.push_back(AuthenticationMethod::Spake2( | 70 methods.push_back(AuthenticationMethod::Spake2( |
59 AuthenticationMethod::NONE)); | 71 AuthenticationMethod::NONE)); |
60 } | 72 } |
61 client_ = NegotiatingAuthenticator::CreateForClient( | 73 client_ = NegotiatingAuthenticator::CreateForClient( |
62 kTestHostId, client_secret, methods); | 74 kTestHostId, client_secret, host_public_key_, methods, |
| 75 &mock_token_fetcher_); |
63 } | 76 } |
64 | 77 |
65 void VerifyRejected(Authenticator::RejectionReason reason) { | 78 void VerifyRejected(Authenticator::RejectionReason reason) { |
66 ASSERT_TRUE((client_->state() == Authenticator::REJECTED && | 79 ASSERT_TRUE((client_->state() == Authenticator::REJECTED && |
67 (client_->rejection_reason() == reason)) || | 80 (client_->rejection_reason() == reason)) || |
68 (host_->state() == Authenticator::REJECTED && | 81 (host_->state() == Authenticator::REJECTED && |
69 (host_->rejection_reason() == reason))); | 82 (host_->rejection_reason() == reason))); |
70 } | 83 } |
71 | 84 |
| 85 MockTokenFetcher mock_token_fetcher_; |
72 DISALLOW_COPY_AND_ASSIGN(NegotiatingAuthenticatorTest); | 86 DISALLOW_COPY_AND_ASSIGN(NegotiatingAuthenticatorTest); |
73 }; | 87 }; |
74 | 88 |
75 TEST_F(NegotiatingAuthenticatorTest, SuccessfulAuthHmac) { | 89 TEST_F(NegotiatingAuthenticatorTest, SuccessfulAuthHmac) { |
76 ASSERT_NO_FATAL_FAILURE(InitAuthenticators( | 90 ASSERT_NO_FATAL_FAILURE(InitAuthenticators( |
77 kTestSharedSecret, kTestSharedSecret, | 91 kTestSharedSecret, kTestSharedSecret, |
78 AuthenticationMethod::HMAC_SHA256, false)); | 92 AuthenticationMethod::HMAC_SHA256, false)); |
79 ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); | 93 ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); |
80 | 94 |
81 ASSERT_EQ(Authenticator::ACCEPTED, host_->state()); | 95 ASSERT_EQ(Authenticator::ACCEPTED, host_->state()); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 ASSERT_NO_FATAL_FAILURE(InitAuthenticators( | 156 ASSERT_NO_FATAL_FAILURE(InitAuthenticators( |
143 kTestSharedSecret, kTestSharedSecretBad, | 157 kTestSharedSecret, kTestSharedSecretBad, |
144 AuthenticationMethod::NONE, true)); | 158 AuthenticationMethod::NONE, true)); |
145 ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); | 159 ASSERT_NO_FATAL_FAILURE(RunAuthExchange()); |
146 | 160 |
147 VerifyRejected(Authenticator::PROTOCOL_ERROR); | 161 VerifyRejected(Authenticator::PROTOCOL_ERROR); |
148 } | 162 } |
149 | 163 |
150 } // namespace protocol | 164 } // namespace protocol |
151 } // namespace remoting | 165 } // namespace remoting |
OLD | NEW |