• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/remoting/directory_add_request.h"
6 #include "chrome/test/testing_profile.h"
7 #include "net/url_request/url_request_status.h"
8 #include "testing/gmock/include/gmock/gmock.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace remoting {
12 
13 namespace {
14 class MockDoneCallback {
15  public:
16   MOCK_METHOD2(OnDone,
17                void(DirectoryAddRequest::Result,
18                     const std::string& message));
19 };
20 }  // namespace
21 
22 class DirectoryAddRequestTest : public testing::Test {
23  protected:
SetUp()24   virtual void SetUp() {
25     target_.reset(new DirectoryAddRequest(profile_.GetRequestContext()));
26   }
27 
TestResult(int response_code,const std::string & data,DirectoryAddRequest::Result expected_result,const std::string & expected_message)28   void TestResult(int response_code, const std::string& data,
29                   DirectoryAddRequest::Result expected_result,
30                   const std::string& expected_message) {
31     MockDoneCallback callback;
32     EXPECT_CALL(callback, OnDone(expected_result, expected_message))
33         .Times(1);
34 
35     target_->done_callback_.reset(
36         NewCallback(&callback, &MockDoneCallback::OnDone));
37 
38     GURL url;
39     net::URLRequestStatus status_ok;
40     ResponseCookies cookies;
41     target_->OnURLFetchComplete(NULL, url, status_ok, response_code,
42                                cookies, data);
43   }
44 
45   TestingProfile profile_;
46   scoped_ptr<DirectoryAddRequest> target_;
47 };
48 
TEST_F(DirectoryAddRequestTest,Success)49 TEST_F(DirectoryAddRequestTest, Success) {
50   TestResult(200, "{\"data\":{\"kind\":\"chromoting#host\","
51              "\"hostId\":\"e64906c9-fdc9-4921-80cb-563cf7f564f3\","
52              "\"hostName\":\"host_name\",\"publicKey\":\"PUBLIC+KEY\"}}",
53              DirectoryAddRequest::SUCCESS, "");
54 }
55 
TEST_F(DirectoryAddRequestTest,Duplicate)56 TEST_F(DirectoryAddRequestTest, Duplicate) {
57   TestResult(400, "{\"error\":{\"errors\":[{\"domain\":\"global\","
58              "\"reason\":\"invalid\",\"message\":\"Attempt to register "
59              "a duplicate host.\"}],\"code\":400,\"message\":\"Attempt to "
60              "register a duplicate host.\"}}",
61              DirectoryAddRequest::ERROR_EXISTS,
62              "Attempt to register a duplicate host.");
63 }
64 
TEST_F(DirectoryAddRequestTest,InvalidRequest)65 TEST_F(DirectoryAddRequestTest, InvalidRequest) {
66   TestResult(400, "{\"error\":{\"errors\":[{\"domain\":\"global\","
67              "\"reason\":\"invalid\",\"message\":\"Invalid Value\"}],"
68              "\"code\":400,\"message\":\"Invalid Value\"}}",
69              DirectoryAddRequest::ERROR_INVALID_REQUEST,
70              "Invalid Value");
71 }
72 
TEST_F(DirectoryAddRequestTest,InvalidToken)73 TEST_F(DirectoryAddRequestTest, InvalidToken) {
74   TestResult(401, "{\"error\":{\"errors\":[{\"domain\":\"global\","
75              "\"reason\":\"invalid\",\"message\":\"Token invalid\","
76              "\"locationType\":\"header\",\"location\":\"Authorization\"}],"
77              "\"code\":401,\"message\":\"Token invalid\"}}",
78              DirectoryAddRequest::ERROR_AUTH,
79              "Token invalid");
80 }
81 
82 }  // namespace remoting
83