12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/tests/test_host_resolver_private_disallowed.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/module.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/cpp/private/net_address_private.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/tests/test_utils.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ppapi/tests/testing_instance.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)REGISTER_TEST_CASE(HostResolverPrivateDisallowed);
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TestHostResolverPrivateDisallowed::TestHostResolverPrivateDisallowed(
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    TestingInstance* instance)
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : TestCase(instance) {
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool TestHostResolverPrivateDisallowed::Init() {
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool host_resolver_private_is_available =
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      pp::HostResolverPrivate::IsAvailable();
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!host_resolver_private_is_available)
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    instance_->AppendError("PPB_HostResolver_Private interface not available");
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool init_host_port =
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      GetLocalHostPort(instance_->pp_instance(), &host_, &port_);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!init_host_port)
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    instance_->AppendError("Can't init host and port");
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return host_resolver_private_is_available &&
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      init_host_port &&
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      EnsureRunningOverHTTP();
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void TestHostResolverPrivateDisallowed::RunTests(const std::string& filter) {
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  RUN_CALLBACK_TEST(TestHostResolverPrivateDisallowed, Resolve, filter);
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)std::string TestHostResolverPrivateDisallowed::TestResolve() {
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  pp::HostResolverPrivate host_resolver(instance_);
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PP_HostResolver_Private_Hint hint;
42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  hint.family = PP_NETADDRESSFAMILY_PRIVATE_UNSPECIFIED;
43eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  hint.flags = PP_HOST_RESOLVER_PRIVATE_FLAGS_CANONNAME;
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TestCompletionCallback callback(instance_->pp_instance(), callback_type());
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  callback.WaitForResult(
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      host_resolver.Resolve(host_, port_, hint, callback.GetCallback()));
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  CHECK_CALLBACK_BEHAVIOR(callback);
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ASSERT_EQ(PP_ERROR_FAILED, callback.result());
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PASS();
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
51