15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_tcp_server_socket_private_disallowed.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <cstddef>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/module.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/private/net_address_private.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/test_utils.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/tests/testing_instance.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REGISTER_TEST_CASE(TCPServerSocketPrivateDisallowed);
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestTCPServerSocketPrivateDisallowed::TestTCPServerSocketPrivateDisallowed(
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    TestingInstance* instance)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : TestCase(instance),
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      core_interface_(NULL),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tcp_server_socket_private_interface_(NULL) {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestTCPServerSocketPrivateDisallowed::Init() {
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  core_interface_ = static_cast<const PPB_Core*>(
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!core_interface_)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    instance_->AppendError("PPB_Core interface not available");
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  tcp_server_socket_private_interface_ =
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      static_cast<const PPB_TCPServerSocket_Private*>(
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          pp::Module::Get()->GetBrowserInterface(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              PPB_TCPSERVERSOCKET_PRIVATE_INTERFACE));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!tcp_server_socket_private_interface_) {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    instance_->AppendError(
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        "PPB_TCPServerSocket_Private interface not available");
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool net_address_private_is_available = pp::NetAddressPrivate::IsAvailable();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!net_address_private_is_available)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    instance_->AppendError("PPB_NetAddress_Private interface not available");
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return core_interface_ &&
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tcp_server_socket_private_interface_ &&
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      net_address_private_is_available &&
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      CheckTestingInterface();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestTCPServerSocketPrivateDisallowed::RunTests(const std::string& filter) {
49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  RUN_CALLBACK_TEST(TestTCPServerSocketPrivateDisallowed, Listen, filter);
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string TestTCPServerSocketPrivateDisallowed::TestListen() {
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_Resource socket =
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      tcp_server_socket_private_interface_->Create(instance_->pp_instance());
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(socket != 0);
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(tcp_server_socket_private_interface_->IsTCPServerSocket(socket));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  PP_NetAddress_Private base_address, address;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pp::NetAddressPrivate::GetAnyAddress(false, &base_address);
6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_TRUE(pp::NetAddressPrivate::ReplacePort(
6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      base_address, 0, &address));
6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  TestCompletionCallback callback(instance_->pp_instance());
6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  callback.WaitForResult(tcp_server_socket_private_interface_->Listen(
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      socket,
6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      &address,
6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      1,
6790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      callback.GetCallback().pp_completion_callback()));
6890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  CHECK_CALLBACK_BEHAVIOR(callback);
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ASSERT_NE(PP_OK, callback.result());
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PASS();
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
72