| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "ppapi/tests/test_network_monitor_private.h" | 5 #include "ppapi/tests/test_network_monitor_private.h" |
| 6 | 6 |
| 7 #include <string.h> | 7 #include <string.h> |
| 8 | 8 |
| 9 #include "ppapi/cpp/instance_handle.h" |
| 10 #include "ppapi/cpp/module.h" |
| 9 #include "ppapi/cpp/private/net_address_private.h" | 11 #include "ppapi/cpp/private/net_address_private.h" |
| 10 #include "ppapi/cpp/private/network_list_private.h" | 12 #include "ppapi/cpp/private/network_list_private.h" |
| 11 #include "ppapi/cpp/private/network_monitor_private.h" | 13 #include "ppapi/cpp/private/network_monitor_private.h" |
| 12 #include "ppapi/tests/testing_instance.h" | 14 #include "ppapi/tests/testing_instance.h" |
| 13 #include "ppapi/tests/test_utils.h" | 15 #include "ppapi/tests/test_utils.h" |
| 14 #include "ppapi/cpp/module.h" | 16 #include "ppapi/utility/private/network_list_observer_private.h" |
| 15 | 17 |
| 16 REGISTER_TEST_CASE(NetworkMonitorPrivate); | 18 REGISTER_TEST_CASE(NetworkMonitorPrivate); |
| 17 | 19 |
| 18 namespace { | 20 namespace { |
| 19 | 21 |
| 20 struct CallbackData { | 22 struct CallbackData { |
| 21 explicit CallbackData(PP_Instance instance) | 23 explicit CallbackData(PP_Instance instance) |
| 22 : call_counter(0), | 24 : call_counter(0), |
| 23 completion_callback(instance), | 25 completion_callback(instance), |
| 24 list_resource(0), | 26 list_resource(0), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 45 data->list_resource = network_list; | 47 data->list_resource = network_list; |
| 46 | 48 |
| 47 if (data->delete_monitor) | 49 if (data->delete_monitor) |
| 48 delete data->monitor; | 50 delete data->monitor; |
| 49 | 51 |
| 50 // Invoke completion callback only for the first change notification. | 52 // Invoke completion callback only for the first change notification. |
| 51 if (data->call_counter == 1) | 53 if (data->call_counter == 1) |
| 52 static_cast<pp::CompletionCallback>(data->completion_callback).Run(PP_OK); | 54 static_cast<pp::CompletionCallback>(data->completion_callback).Run(PP_OK); |
| 53 } | 55 } |
| 54 | 56 |
| 57 |
| 58 class TestNetworkListObserver : public pp::NetworkListObserverPrivate { |
| 59 public: |
| 60 explicit TestNetworkListObserver(const pp::InstanceHandle& instance) |
| 61 : pp::NetworkListObserverPrivate(instance), |
| 62 completion_callback(instance.pp_instance()) { |
| 63 } |
| 64 virtual void OnNetworkListChanged(const pp::NetworkListPrivate& list) { |
| 65 current_list = list; |
| 66 static_cast<pp::CompletionCallback>(completion_callback).Run(PP_OK); |
| 67 } |
| 68 |
| 69 pp::NetworkListPrivate current_list; |
| 70 TestCompletionCallback completion_callback; |
| 71 }; |
| 72 |
| 55 } // namespace | 73 } // namespace |
| 56 | 74 |
| 57 TestNetworkMonitorPrivate::TestNetworkMonitorPrivate(TestingInstance* instance) | 75 TestNetworkMonitorPrivate::TestNetworkMonitorPrivate(TestingInstance* instance) |
| 58 : TestCase(instance) { | 76 : TestCase(instance) { |
| 59 } | 77 } |
| 60 | 78 |
| 61 bool TestNetworkMonitorPrivate::Init() { | 79 bool TestNetworkMonitorPrivate::Init() { |
| 62 if (!pp::NetworkMonitorPrivate::IsAvailable()) | 80 if (!pp::NetworkMonitorPrivate::IsAvailable()) |
| 63 return false; | 81 return false; |
| 64 | 82 |
| 65 return true; | 83 return true; |
| 66 } | 84 } |
| 67 | 85 |
| 68 void TestNetworkMonitorPrivate::RunTests(const std::string& filter) { | 86 void TestNetworkMonitorPrivate::RunTests(const std::string& filter) { |
| 69 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); | 87 RUN_TEST_FORCEASYNC_AND_NOT(Basic, filter); |
| 70 RUN_TEST_FORCEASYNC_AND_NOT(2Monitors, filter); | 88 RUN_TEST_FORCEASYNC_AND_NOT(2Monitors, filter); |
| 71 RUN_TEST_FORCEASYNC_AND_NOT(DeleteInCallback, filter); | 89 RUN_TEST_FORCEASYNC_AND_NOT(DeleteInCallback, filter); |
| 90 RUN_TEST_FORCEASYNC_AND_NOT(ListObserver, filter); |
| 91 } |
| 92 |
| 93 std::string TestNetworkMonitorPrivate::VerifyNetworkListResource( |
| 94 PP_Resource network_list_resource) { |
| 95 pp::NetworkListPrivate network_list(network_list_resource); |
| 96 return VerifyNetworkList(network_list); |
| 72 } | 97 } |
| 73 | 98 |
| 74 std::string TestNetworkMonitorPrivate::VerifyNetworkList( | 99 std::string TestNetworkMonitorPrivate::VerifyNetworkList( |
| 75 PP_Resource network_resource) { | 100 const pp::NetworkListPrivate& network_list) { |
| 76 pp::NetworkListPrivate network_list(network_resource); | |
| 77 | |
| 78 // Verify that there is at least one network interface. | 101 // Verify that there is at least one network interface. |
| 79 size_t count = network_list.GetCount(); | 102 size_t count = network_list.GetCount(); |
| 80 ASSERT_TRUE(count >= 1U); | 103 ASSERT_TRUE(count >= 1U); |
| 81 | 104 |
| 82 // Iterate over all interfaces and verify their properties. | 105 // Iterate over all interfaces and verify their properties. |
| 83 for (size_t iface = 0; iface < count; ++iface) { | 106 for (size_t iface = 0; iface < count; ++iface) { |
| 84 // Verify that the first interface has at least one address. | 107 // Verify that the first interface has at least one address. |
| 85 std::vector<PP_NetAddress_Private> addresses; | 108 std::vector<PP_NetAddress_Private> addresses; |
| 86 network_list.GetIpAddresses(iface, &addresses); | 109 network_list.GetIpAddresses(iface, &addresses); |
| 87 ASSERT_TRUE(addresses.size() >= 1U); | 110 ASSERT_TRUE(addresses.size() >= 1U); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 PPB_NETWORKLIST_PRIVATE_INTERFACE)); | 153 PPB_NETWORKLIST_PRIVATE_INTERFACE)); |
| 131 ASSERT_TRUE(interface); | 154 ASSERT_TRUE(interface); |
| 132 std::vector<PP_NetAddress_Private> addresses; | 155 std::vector<PP_NetAddress_Private> addresses; |
| 133 network_list.GetIpAddresses(0, &addresses); | 156 network_list.GetIpAddresses(0, &addresses); |
| 134 size_t address_count = addresses.size(); | 157 size_t address_count = addresses.size(); |
| 135 addresses.resize(addresses.size() + 3); | 158 addresses.resize(addresses.size() + 3); |
| 136 for (size_t i = 0; i < addresses.size(); ++i) { | 159 for (size_t i = 0; i < addresses.size(); ++i) { |
| 137 const char kFillValue = 123; | 160 const char kFillValue = 123; |
| 138 memset(&addresses.front(), kFillValue, | 161 memset(&addresses.front(), kFillValue, |
| 139 addresses.size() * sizeof(PP_NetAddress_Private)); | 162 addresses.size() * sizeof(PP_NetAddress_Private)); |
| 140 int result = interface->GetIpAddresses(network_resource, 0, | 163 int result = interface->GetIpAddresses(network_list.pp_resource(), 0, |
| 141 &addresses.front(), i); | 164 &addresses.front(), i); |
| 142 ASSERT_EQ(result, static_cast<int>(address_count)); | 165 ASSERT_EQ(result, static_cast<int>(address_count)); |
| 143 | 166 |
| 144 // Verify that nothing outside the buffer was touched. | 167 // Verify that nothing outside the buffer was touched. |
| 145 for (char* pos = reinterpret_cast<char*>(&addresses[result]); | 168 for (char* pos = reinterpret_cast<char*>(&addresses[result]); |
| 146 pos != reinterpret_cast<char*>(&addresses[0] + addresses.size()); | 169 pos != reinterpret_cast<char*>(&addresses[0] + addresses.size()); |
| 147 ++pos) { | 170 ++pos) { |
| 148 ASSERT_TRUE(*pos == kFillValue); | 171 ASSERT_TRUE(*pos == kFillValue); |
| 149 } | 172 } |
| 150 } | 173 } |
| 151 | 174 |
| 152 PASS(); | 175 PASS(); |
| 153 } | 176 } |
| 154 | 177 |
| 155 std::string TestNetworkMonitorPrivate::TestBasic() { | 178 std::string TestNetworkMonitorPrivate::TestBasic() { |
| 156 CallbackData callback_data(instance_->pp_instance()); | 179 CallbackData callback_data(instance_->pp_instance()); |
| 157 | 180 |
| 158 pp::NetworkMonitorPrivate network_monitor( | 181 pp::NetworkMonitorPrivate network_monitor( |
| 159 instance_, &TestCallback, &callback_data); | 182 instance_, &TestCallback, &callback_data); |
| 160 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); | 183 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); |
| 161 ASSERT_EQ(callback_data.call_counter, 1); | 184 ASSERT_EQ(callback_data.call_counter, 1); |
| 162 | 185 |
| 163 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource)); | 186 ASSERT_SUBTEST_SUCCESS( |
| 187 VerifyNetworkListResource(callback_data.list_resource)); |
| 164 | 188 |
| 165 PASS(); | 189 PASS(); |
| 166 } | 190 } |
| 167 | 191 |
| 168 std::string TestNetworkMonitorPrivate::Test2Monitors() { | 192 std::string TestNetworkMonitorPrivate::Test2Monitors() { |
| 169 CallbackData callback_data(instance_->pp_instance()); | 193 CallbackData callback_data(instance_->pp_instance()); |
| 170 | 194 |
| 171 pp::NetworkMonitorPrivate network_monitor( | 195 pp::NetworkMonitorPrivate network_monitor( |
| 172 instance_, &TestCallback, &callback_data); | 196 instance_, &TestCallback, &callback_data); |
| 173 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); | 197 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); |
| 174 ASSERT_EQ(callback_data.call_counter, 1); | 198 ASSERT_EQ(callback_data.call_counter, 1); |
| 175 | 199 |
| 176 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource)); | 200 ASSERT_SUBTEST_SUCCESS( |
| 201 VerifyNetworkListResource(callback_data.list_resource)); |
| 177 | 202 |
| 178 CallbackData callback_data_2(instance_->pp_instance()); | 203 CallbackData callback_data_2(instance_->pp_instance()); |
| 179 | 204 |
| 180 pp::NetworkMonitorPrivate network_monitor_2( | 205 pp::NetworkMonitorPrivate network_monitor_2( |
| 181 instance_, &TestCallback, &callback_data_2); | 206 instance_, &TestCallback, &callback_data_2); |
| 182 ASSERT_EQ(callback_data_2.completion_callback.WaitForResult(), PP_OK); | 207 ASSERT_EQ(callback_data_2.completion_callback.WaitForResult(), PP_OK); |
| 183 ASSERT_EQ(callback_data_2.call_counter, 1); | 208 ASSERT_EQ(callback_data_2.call_counter, 1); |
| 184 | 209 |
| 185 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data_2.list_resource)); | 210 ASSERT_SUBTEST_SUCCESS( |
| 211 VerifyNetworkListResource(callback_data_2.list_resource)); |
| 186 | 212 |
| 187 PASS(); | 213 PASS(); |
| 188 } | 214 } |
| 189 | 215 |
| 190 std::string TestNetworkMonitorPrivate::TestDeleteInCallback() { | 216 std::string TestNetworkMonitorPrivate::TestDeleteInCallback() { |
| 191 CallbackData callback_data(instance_->pp_instance()); | 217 CallbackData callback_data(instance_->pp_instance()); |
| 192 | 218 |
| 193 pp::NetworkMonitorPrivate* network_monitor = new pp::NetworkMonitorPrivate( | 219 pp::NetworkMonitorPrivate* network_monitor = new pp::NetworkMonitorPrivate( |
| 194 instance_, &TestCallback, &callback_data); | 220 instance_, &TestCallback, &callback_data); |
| 195 callback_data.delete_monitor = true; | 221 callback_data.delete_monitor = true; |
| 196 callback_data.monitor = network_monitor; | 222 callback_data.monitor = network_monitor; |
| 197 | 223 |
| 198 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); | 224 ASSERT_EQ(callback_data.completion_callback.WaitForResult(), PP_OK); |
| 199 ASSERT_EQ(callback_data.call_counter, 1); | 225 ASSERT_EQ(callback_data.call_counter, 1); |
| 200 | 226 |
| 201 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(callback_data.list_resource)); | 227 ASSERT_SUBTEST_SUCCESS( |
| 228 VerifyNetworkListResource(callback_data.list_resource)); |
| 202 | 229 |
| 203 PASS(); | 230 PASS(); |
| 204 } | 231 } |
| 232 |
| 233 std::string TestNetworkMonitorPrivate::TestListObserver() { |
| 234 TestNetworkListObserver observer(instance_); |
| 235 ASSERT_EQ(observer.completion_callback.WaitForResult(), PP_OK); |
| 236 ASSERT_SUBTEST_SUCCESS(VerifyNetworkList(observer.current_list)); |
| 237 PASS(); |
| 238 } |
| OLD | NEW |