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
3// found in the LICENSE file.
4
5#include "chrome/browser/local_discovery/privetv3_session.h"
6
7#include "chrome/browser/local_discovery/privet_http.h"
8#include "content/public/test/test_utils.h"
9#include "net/url_request/test_url_fetcher_factory.h"
10#include "testing/gmock/include/gmock/gmock.h"
11#include "testing/gtest/include/gtest/gtest.h"
12
13namespace local_discovery {
14
15namespace {
16
17using testing::Invoke;
18using testing::InvokeWithoutArgs;
19using testing::StrictMock;
20using testing::_;
21
22class MockDelegate : public PrivetV3Session::Delegate {
23 public:
24  MOCK_METHOD2(OnSetupConfirmationNeeded,
25               void(const std::string&,
26                    extensions::api::gcd_private::ConfirmationType));
27  MOCK_METHOD1(OnSessionStatus, void(extensions::api::gcd_private::Status));
28};
29
30class PrivetV3SessionTest : public testing::Test {
31 public:
32  PrivetV3SessionTest()
33      : session_(scoped_ptr<PrivetHTTPClient>(), &delegate_) {}
34
35  virtual ~PrivetV3SessionTest() {}
36
37  void QuitLoop() {
38    base::MessageLoop::current()->PostTask(FROM_HERE, quit_closure_);
39  }
40
41  void ConfirmCode(const std::string& code,
42                   extensions::api::gcd_private::ConfirmationType type) {
43    session_.ConfirmCode(code);
44  }
45
46 protected:
47  virtual void SetUp() OVERRIDE {
48    quit_closure_ = run_loop_.QuitClosure();
49    EXPECT_CALL(delegate_, OnSetupConfirmationNeeded(_, _)).Times(0);
50    EXPECT_CALL(delegate_, OnSessionStatus(_)).Times(0);
51  }
52
53  StrictMock<MockDelegate> delegate_;
54  PrivetV3Session session_;
55  base::MessageLoop loop_;
56  base::RunLoop run_loop_;
57  base::Closure quit_closure_;
58};
59
60TEST_F(PrivetV3SessionTest, NotConfirmed) {
61  EXPECT_CALL(delegate_, OnSetupConfirmationNeeded(_, _)).Times(1).WillOnce(
62      InvokeWithoutArgs(this, &PrivetV3SessionTest::QuitLoop));
63  session_.Start();
64  run_loop_.Run();
65}
66
67TEST_F(PrivetV3SessionTest, Confirmed) {
68  EXPECT_CALL(delegate_,
69              OnSessionStatus(extensions::api::gcd_private::STATUS_SUCCESS))
70      .Times(1)
71      .WillOnce(InvokeWithoutArgs(this, &PrivetV3SessionTest::QuitLoop));
72  EXPECT_CALL(delegate_, OnSetupConfirmationNeeded(_, _)).Times(1).WillOnce(
73      Invoke(this, &PrivetV3SessionTest::ConfirmCode));
74  session_.Start();
75  run_loop_.Run();
76}
77
78}  // namespace
79
80}  // namespace local_discovery
81