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