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

Side by Side 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, 9 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 unified diff | Download patch | Annotate | Revision Log
« 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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_network_monitor_private.h"
6
7 #include <string.h>
8
9 #include "ppapi/cpp/private/network_list_private.h"
10 #include "ppapi/cpp/private/network_monitor_private.h"
11 #include "ppapi/tests/testing_instance.h"
12 #include "ppapi/tests/test_utils.h"
13 #include "ppapi/cpp/module.h"
14
15 REGISTER_TEST_CASE(NetworkMonitorPrivate);
16
17 namespace {
18
19 struct CallbackData {
20 explicit CallbackData(PP_Instance instance)
21 : call_counter(0),
22 completion_callback(instance),
23 list_resource(0) {
24 }
25 ~CallbackData() {
26 if (list_resource)
27 pp::Module::Get()->core()->ReleaseResource(list_resource);
28 }
29 int call_counter;
30 TestCompletionCallback completion_callback;
31 PP_Resource list_resource;
32 };
33
34 void TestCallback(void* user_data, PP_Resource network_list) {
35 CallbackData* data = static_cast<CallbackData*>(user_data);
36 data->call_counter++;
37
38 if (data->list_resource)
39 pp::Module::Get()->core()->ReleaseResource(data->list_resource);
40 data->list_resource = network_list;
41
42 // Invoke completion callback only for the first change notification.
43 if (data->call_counter == 1)
44 static_cast<pp::CompletionCallback>(data->completion_callback).Run(PP_OK);
45 }
46
47 } // namespace
48
49 TestNetworkMonitorPrivate::TestNetworkMonitorPrivate(TestingInstance* instance)
50 : TestCase(instance) {
51 }
52
53 bool TestNetworkMonitorPrivate::Init() {
54 if (!pp::NetworkMonitorPrivate::IsAvailable())
55 return false;
56
57 return true;
58 }
59
60 void TestNetworkMonitorPrivate::RunTests(const std::string& filter) {
61 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter);
62 RUN_TEST_FORCEASYNC_AND_NOT(2Monitors, filter);
63 }
64
65 std::string TestNetworkMonitorPrivate::VerifyNetworkList(
66 PP_Resource network_resource) {
67 pp::NetworkListPrivate network_list(network_resource);
68
69 // Verify that there is at least one network interface.
70 size_t count = network_list.GetCount();
71 ASSERT_TRUE(count >= 1U);
72
73 // Iterate over all interfaces and verify their properties.
74 for (size_t iface = 0; iface < count; ++iface) {
75 // Verify that the first interface has at least one address.
76 std::vector<PP_NetAddress_Private> addresses;
77 network_list.GetIpAddresses(iface, &addresses);
78 ASSERT_TRUE(addresses.size() >= 1U);
79 // Verify that the addresses are valid.
80 for (size_t i = 0; i < addresses.size(); ++i) {
81 ASSERT_TRUE(addresses[i].size == 4 || addresses[i].size == 16);
82
83 // Verify that the address is not zero.
84 size_t j;
85 for (j = 0; j < addresses[i].size; ++j) {
86 if (addresses[i].data[j] != 0)
87 break;
88 }
89 ASSERT_TRUE(j != addresses[i].size);
90 }
91
92 // Verify that each interface has a unique name and a display name.
93 ASSERT_FALSE(network_list.GetName(iface).empty());
94 ASSERT_FALSE(network_list.GetDisplayName(iface).empty());
95
96 PP_NetworkListType_Private type = network_list.GetType(iface);
97 ASSERT_TRUE(type >= PP_NETWORKLIST_UNKNOWN);
98 ASSERT_TRUE(type <= PP_NETWORKLIST_CELLULAR);
99
100 PP_NetworkListState_Private state = network_list.GetState(iface);
101 ASSERT_TRUE(state >= PP_NETWORKLIST_DOWN);
102 ASSERT_TRUE(state <= PP_NETWORKLIST_UP);
103 }
104
105 // Try to call GetIpAddresses() without C++ wrapper and verify that
106 // it always returns correct value.
107 const PPB_NetworkList_Private* interface =
108 static_cast<const PPB_NetworkList_Private*>(
109 pp::Module::Get()->GetBrowserInterface(
110 PPB_NETWORKLIST_PRIVATE_INTERFACE));
111 ASSERT_TRUE(interface);
112 std::vector<PP_NetAddress_Private> addresses;
113 network_list.GetIpAddresses(0, &addresses);
114 size_t address_count = addresses.size();
115 addresses.resize(addresses.size() + 3);
116 for (size_t i = 0; i < addresses.size(); ++i) {
117 const char kFillValue = 123;
118 memset(&addresses.front(), kFillValue,
119 addresses.size() * sizeof(PP_NetAddress_Private));
120 int result = interface->GetIpAddresses(network_resource, 0,
121 &addresses.front(), i);
122 ASSERT_EQ(result, static_cast<int>(address_count));
123
124 // Verify that nothing outside the buffer was touched.
125 for (char* pos = reinterpret_cast<char*>(&addresses[result]);
126 pos != reinterpret_cast<char*>(&addresses[0] + addresses.size());
127 ++pos) {
128 ASSERT_TRUE(*pos == kFillValue);
129 }
130 }
131
132 PASS();
133 }
134
135 std::string TestNetworkMonitorPrivate::TestBasic() {
136 CallbackData callback_data(instance_->pp_instance());
137
138 pp::NetworkMonitorPrivate network_monitor(
139 instance_, &TestCallback, reinterpret_cast<void*>(&callback_data));
140 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK);
141 ASSERT_EQ(callback_data.call_counter, 1);
142
143 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource));
144
145 PASS();
146 }
147
148 std::string TestNetworkMonitorPrivate::Test2Monitors() {
149 CallbackData callback_data(instance_->pp_instance());
150
151 pp::NetworkMonitorPrivate network_monitor(
152 instance_, &TestCallback, reinterpret_cast<void*>(&callback_data));
153 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK);
154 ASSERT_EQ(callback_data.call_counter, 1);
155
156 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource));
157
158 CallbackData callback_data_2(instance_->pp_instance());
159
160 pp::NetworkMonitorPrivate network_monitor_2(
161 instance_, &TestCallback, reinterpret_cast<void*>(&callback_data_2));
162 ASSERT_EQ(callback_data_2.completion_callback.WaitForResult(), PP_OK);
163 ASSERT_EQ(callback_data_2.call_counter, 1);
164
165 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data_2.list_resource));
166
167 PASS();
168 }
OLDNEW
« 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