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
3// found in the LICENSE file.
4
5#include "ppapi/tests/test_tcp_server_socket_private_disallowed.h"
6
7#include <cstddef>
8
9#include "ppapi/cpp/module.h"
10#include "ppapi/cpp/private/net_address_private.h"
11#include "ppapi/tests/test_utils.h"
12#include "ppapi/tests/testing_instance.h"
13
14namespace {
15
16const uint16_t kPortScanFrom = 1024;
17const uint16_t kPortScanTo = 1280;
18
19}  // namespace
20
21REGISTER_TEST_CASE(TCPServerSocketPrivateDisallowed);
22
23TestTCPServerSocketPrivateDisallowed::TestTCPServerSocketPrivateDisallowed(
24    TestingInstance* instance)
25    : TestCase(instance),
26      core_interface_(NULL),
27      tcp_server_socket_private_interface_(NULL) {
28}
29
30bool TestTCPServerSocketPrivateDisallowed::Init() {
31  core_interface_ = static_cast<const PPB_Core*>(
32      pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
33  if (!core_interface_)
34    instance_->AppendError("PPB_Core interface not available");
35
36  tcp_server_socket_private_interface_ =
37      static_cast<const PPB_TCPServerSocket_Private*>(
38          pp::Module::Get()->GetBrowserInterface(
39              PPB_TCPSERVERSOCKET_PRIVATE_INTERFACE));
40  if (!tcp_server_socket_private_interface_) {
41    instance_->AppendError(
42        "PPB_TCPServerSocket_Private interface not available");
43  }
44
45  bool net_address_private_is_available = pp::NetAddressPrivate::IsAvailable();
46  if (!net_address_private_is_available)
47    instance_->AppendError("PPB_NetAddress_Private interface not available");
48
49  return core_interface_ &&
50      tcp_server_socket_private_interface_ &&
51      net_address_private_is_available &&
52      CheckTestingInterface();
53}
54
55void TestTCPServerSocketPrivateDisallowed::RunTests(const std::string& filter) {
56  RUN_CALLBACK_TEST(TestTCPServerSocketPrivateDisallowed, Listen, filter);
57}
58
59std::string TestTCPServerSocketPrivateDisallowed::TestListen() {
60  PP_Resource socket =
61      tcp_server_socket_private_interface_->Create(instance_->pp_instance());
62  ASSERT_TRUE(socket != 0);
63  ASSERT_TRUE(tcp_server_socket_private_interface_->IsTCPServerSocket(socket));
64
65  PP_NetAddress_Private base_address, address;
66  pp::NetAddressPrivate::GetAnyAddress(false, &base_address);
67  ASSERT_TRUE(pp::NetAddressPrivate::ReplacePort(
68      base_address, 0, &address));
69  TestCompletionCallback callback(instance_->pp_instance());
70  callback.WaitForResult(tcp_server_socket_private_interface_->Listen(
71      socket,
72      &address,
73      1,
74      callback.GetCallback().pp_completion_callback()));
75  CHECK_CALLBACK_BEHAVIOR(callback);
76  ASSERT_NE(PP_OK, callback.result());
77  PASS();
78}
79