Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Unified Diff: ppapi/tests/test_network_monitor_private.cc

Issue 9557006: Implement PPB_NetworkMonitor_Private Pepper interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ppapi/tests/test_network_monitor_private.h ('k') | webkit/glue/network_list_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ppapi/tests/test_network_monitor_private.cc
diff --git a/ppapi/tests/test_network_monitor_private.cc b/ppapi/tests/test_network_monitor_private.cc
new file mode 100644
index 0000000000000000000000000000000000000000..84415134a8e0d8e0bbd2b0e919f37ccb0927a900
--- /dev/null
+++ b/ppapi/tests/test_network_monitor_private.cc
@@ -0,0 +1,174 @@
+// 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);
+
+#define ASSERT_SUCCESS(error_message) \
dmichael (off chromium) 2012/03/05 19:22:00 Please comment to explain what "SUCCESS" means her
Sergey Ulanov 2012/03/06 02:11:06 That was actually copied from the TCPServerSocket
dmichael (off chromium) 2012/03/06 16:11:28 Sure, we can do that since there are several uses.
Sergey Ulanov 2012/03/06 23:38:08 Done. I sent you a separate CL for that change.
+ if (!(error_message).empty()) \
+ return (error_message);
dmichael (off chromium) 2012/03/05 19:22:00 Maybe worth putting in a "do {...} while (false)"
Sergey Ulanov 2012/03/06 02:11:06 Done, but see my comment about RUN_SUBTEST() above
+
+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 interface
dmichael (off chromium) 2012/03/05 19:22:00 nit: might be clearer to say "network interface" o
Sergey Ulanov 2012/03/06 02:11:06 Done.
+ size_t count = network_list.GetCount();
+ ASSERT_TRUE(count >= 1U);
+
+ // Iterate over all interface and verify their properties.
dmichael (off chromium) 2012/03/05 19:22:00 nit: interface->interfaces
Sergey Ulanov 2012/03/06 02:11:06 Done.
+ for (size_t iface = 0; iface < count; ++iface) {
+
dmichael (off chromium) 2012/03/05 19:22:00 style nit: extra carriage return
Sergey Ulanov 2012/03/06 02:11:06 Done.
+ // 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);
+
+ size_t j;
+ for (j = 0; j < addresses[i].size; ++j) {
+ if (addresses[i].data[j] != 0)
+ break;
+ }
+ ASSERT_TRUE(j != addresses[i].size);
dmichael (off chromium) 2012/03/05 19:22:00 A quick comment above this loop saying "Make sure
Sergey Ulanov 2012/03/06 02:11:06 Done.
+ }
+
+ // Verify that each interface has a unique name and a display name.
+ ASSERT_TRUE(!network_list.GetName(iface).empty());
+ ASSERT_TRUE(!network_list.GetDisplayName(iface).empty());
dmichael (off chromium) 2012/03/05 19:22:00 why not use ASSERT_FALSE?
Sergey Ulanov 2012/03/06 02:11:06 Done.
+
+ 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.end()); ++pos) {
dmichael (off chromium) 2012/03/05 19:22:00 I think dereferencing end() is technically undefin
Sergey Ulanov 2012/03/06 02:11:06 Done.
+ 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);
+
+ std::string list_result = VerifyNetworkList(callback_data.list_resource);
+ ASSERT_SUCCESS(list_result);
+
+ 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);
+
+ std::string list_result = VerifyNetworkList(callback_data.list_resource);
+ ASSERT_SUCCESS(list_result);
+
+ 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);
+
+ list_result = VerifyNetworkList(callback_data_2.list_resource);
+ ASSERT_SUCCESS(list_result);
+
+ PASS();
+}
« no previous file with comments | « ppapi/tests/test_network_monitor_private.h ('k') | webkit/glue/network_list_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698