summaryrefslogtreecommitdiffstats
path: root/ppapi/tests
diff options
context:
space:
mode:
authorsergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-13 00:10:41 +0000
committersergeyu@chromium.org <sergeyu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-13 00:10:41 +0000
commit2e80d054843a3c965f690ce83035363e192481b4 (patch)
treecb5a9245139e6abf93ecfeadfb3f35b84f9b055b /ppapi/tests
parente01ebcfe8ef32a51c5214b1e4db513cfcc4250b1 (diff)
downloadchromium_src-2e80d054843a3c965f690ce83035363e192481b4.zip
chromium_src-2e80d054843a3c965f690ce83035363e192481b4.tar.gz
chromium_src-2e80d054843a3c965f690ce83035363e192481b4.tar.bz2
Implement PPB_NetworkMonitor_Private Pepper interface.
The P2PSocketDispatcher::NetworkListObserver has been moved to webkit_glue:: namespace in webkit/glue/network_list_observer.h . PPB_NetworkMonitor_Private_Impl uses P2PSocketDispatcher to get notifications about network changes. BUG=114808 Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=125761 Review URL: http://codereview.chromium.org/9557006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@126274 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/tests')
-rw-r--r--ppapi/tests/test_network_monitor_private.cc168
-rw-r--r--ppapi/tests/test_network_monitor_private.h28
2 files changed, 196 insertions, 0 deletions
diff --git a/ppapi/tests/test_network_monitor_private.cc b/ppapi/tests/test_network_monitor_private.cc
new file mode 100644
index 0000000..6b7d49f
--- /dev/null
+++ b/ppapi/tests/test_network_monitor_private.cc
@@ -0,0 +1,168 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ppapi/tests/test_network_monitor_private.h"
+
+#include <string.h>
+
+#include "ppapi/cpp/private/network_list_private.h"
+#include "ppapi/cpp/private/network_monitor_private.h"
+#include "ppapi/tests/testing_instance.h"
+#include "ppapi/tests/test_utils.h"
+#include "ppapi/cpp/module.h"
+
+REGISTER_TEST_CASE(NetworkMonitorPrivate);
+
+namespace {
+
+struct CallbackData {
+ explicit CallbackData(PP_Instance instance)
+ : call_counter(0),
+ completion_callback(instance),
+ list_resource(0) {
+ }
+ ~CallbackData() {
+ if (list_resource)
+ pp::Module::Get()->core()->ReleaseResource(list_resource);
+ }
+ int call_counter;
+ TestCompletionCallback completion_callback;
+ PP_Resource list_resource;
+};
+
+void TestCallback(void* user_data, PP_Resource network_list) {
+ CallbackData* data = static_cast<CallbackData*>(user_data);
+ data->call_counter++;
+
+ if (data->list_resource)
+ pp::Module::Get()->core()->ReleaseResource(data->list_resource);
+ data->list_resource = network_list;
+
+ // Invoke completion callback only for the first change notification.
+ if (data->call_counter == 1)
+ static_cast<pp::CompletionCallback>(data->completion_callback).Run(PP_OK);
+}
+
+} // namespace
+
+TestNetworkMonitorPrivate::TestNetworkMonitorPrivate(TestingInstance* instance)
+ : TestCase(instance) {
+}
+
+bool TestNetworkMonitorPrivate::Init() {
+ if (!pp::NetworkMonitorPrivate::IsAvailable())
+ return false;
+
+ return true;
+}
+
+void TestNetworkMonitorPrivate::RunTests(const std::string& filter) {
+ RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter);
+ RUN_TEST_FORCEASYNC_AND_NOT(2Monitors, filter);
+}
+
+std::string TestNetworkMonitorPrivate::VerifyNetworkList(
+ PP_Resource network_resource) {
+ pp::NetworkListPrivate network_list(network_resource);
+
+ // Verify that there is at least one network interface.
+ size_t count = network_list.GetCount();
+ ASSERT_TRUE(count >= 1U);
+
+ // Iterate over all interfaces and verify their properties.
+ for (size_t iface = 0; iface < count; ++iface) {
+ // Verify that the first interface has at least one address.
+ std::vector<PP_NetAddress_Private> addresses;
+ network_list.GetIpAddresses(iface, &addresses);
+ ASSERT_TRUE(addresses.size() >= 1U);
+ // Verify that the addresses are valid.
+ for (size_t i = 0; i < addresses.size(); ++i) {
+ ASSERT_TRUE(addresses[i].size == 4 || addresses[i].size == 16);
+
+ // Verify that the address is not zero.
+ size_t j;
+ for (j = 0; j < addresses[i].size; ++j) {
+ if (addresses[i].data[j] != 0)
+ break;
+ }
+ ASSERT_TRUE(j != addresses[i].size);
+ }
+
+ // Verify that each interface has a unique name and a display name.
+ ASSERT_FALSE(network_list.GetName(iface).empty());
+ ASSERT_FALSE(network_list.GetDisplayName(iface).empty());
+
+ PP_NetworkListType_Private type = network_list.GetType(iface);
+ ASSERT_TRUE(type >= PP_NETWORKLIST_UNKNOWN);
+ ASSERT_TRUE(type <= PP_NETWORKLIST_CELLULAR);
+
+ PP_NetworkListState_Private state = network_list.GetState(iface);
+ ASSERT_TRUE(state >= PP_NETWORKLIST_DOWN);
+ ASSERT_TRUE(state <= PP_NETWORKLIST_UP);
+ }
+
+ // Try to call GetIpAddresses() without C++ wrapper and verify that
+ // it always returns correct value.
+ const PPB_NetworkList_Private* interface =
+ static_cast<const PPB_NetworkList_Private*>(
+ pp::Module::Get()->GetBrowserInterface(
+ PPB_NETWORKLIST_PRIVATE_INTERFACE));
+ ASSERT_TRUE(interface);
+ std::vector<PP_NetAddress_Private> addresses;
+ network_list.GetIpAddresses(0, &addresses);
+ size_t address_count = addresses.size();
+ addresses.resize(addresses.size() + 3);
+ for (size_t i = 0; i < addresses.size(); ++i) {
+ const char kFillValue = 123;
+ memset(&addresses.front(), kFillValue,
+ addresses.size() * sizeof(PP_NetAddress_Private));
+ int result = interface->GetIpAddresses(network_resource, 0,
+ &addresses.front(), i);
+ ASSERT_EQ(result, static_cast<int>(address_count));
+
+ // Verify that nothing outside the buffer was touched.
+ for (char* pos = reinterpret_cast<char*>(&addresses[result]);
+ pos != reinterpret_cast<char*>(&addresses[0] + addresses.size());
+ ++pos) {
+ ASSERT_TRUE(*pos == kFillValue);
+ }
+ }
+
+ PASS();
+}
+
+std::string TestNetworkMonitorPrivate::TestBasic() {
+ CallbackData callback_data(instance_->pp_instance());
+
+ pp::NetworkMonitorPrivate network_monitor(
+ instance_, &TestCallback, reinterpret_cast<void*>(&callback_data));
+ ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK);
+ ASSERT_EQ(callback_data.call_counter, 1);
+
+ ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource));
+
+ PASS();
+}
+
+std::string TestNetworkMonitorPrivate::Test2Monitors() {
+ CallbackData callback_data(instance_->pp_instance());
+
+ pp::NetworkMonitorPrivate network_monitor(
+ instance_, &TestCallback, reinterpret_cast<void*>(&callback_data));
+ ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK);
+ ASSERT_EQ(callback_data.call_counter, 1);
+
+ ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource));
+
+ CallbackData callback_data_2(instance_->pp_instance());
+
+ pp::NetworkMonitorPrivate network_monitor_2(
+ instance_, &TestCallback, reinterpret_cast<void*>(&callback_data_2));
+ ASSERT_EQ(callback_data_2.completion_callback.WaitForResult(), PP_OK);
+ ASSERT_EQ(callback_data_2.call_counter, 1);
+
+ ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data_2.list_resource));
+
+ PASS();
+}
diff --git a/ppapi/tests/test_network_monitor_private.h b/ppapi/tests/test_network_monitor_private.h
new file mode 100644
index 0000000..20a99d4
--- /dev/null
+++ b/ppapi/tests/test_network_monitor_private.h
@@ -0,0 +1,28 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef PAPPI_TESTS_TEST_NETWORK_MONITOR_PRIVATE_H_
+#define PAPPI_TESTS_TEST_NETWORK_MONITOR_PRIVATE_H_
+
+#include <string>
+
+#include "ppapi/c/pp_stdint.h"
+#include "ppapi/tests/test_case.h"
+
+class TestNetworkMonitorPrivate : public TestCase {
+ public:
+ explicit TestNetworkMonitorPrivate(TestingInstance* instance);
+
+ // TestCase implementation.
+ virtual bool Init();
+ virtual void RunTests(const std::string& filter);
+
+ private:
+ std::string TestBasic();
+ std::string Test2Monitors();
+
+ std::string VerifyNetworkList(PP_Resource network_resource);
+};
+
+#endif // PAPPI_TESTS_TEST_NETWORK_MONITOR_PRIVATE_H_