| Index: chrome/browser/chromeos/cros/cros_network_functions_unittest.cc
|
| diff --git a/chrome/browser/chromeos/cros/cros_network_functions_unittest.cc b/chrome/browser/chromeos/cros/cros_network_functions_unittest.cc
|
| index 80645bb97c41f43526896ec3a5a400a48949a7a9..f611dd2d943841481eb5b853ebf27cecfe54695b 100644
|
| --- a/chrome/browser/chromeos/cros/cros_network_functions_unittest.cc
|
| +++ b/chrome/browser/chromeos/cros/cros_network_functions_unittest.cc
|
| @@ -83,6 +83,56 @@ class MockNetworkPropertiesWatcherCallback {
|
| const base::Value& value));
|
| };
|
|
|
| +// A mock to check arguments of CellularDataPlanWatcherCallback and ensure that
|
| +// the callback is called exactly once.
|
| +class MockDataPlanUpdateWatcherCallback {
|
| + public:
|
| + // Creates a NetworkPropertiesWatcherCallback with expectations.
|
| + static DataPlanUpdateWatcherCallback CreateCallback(
|
| + const std::string& expected_modem_service_path,
|
| + const CellularDataPlanVector& expected_data_plan_vector) {
|
| + MockDataPlanUpdateWatcherCallback* mock_callback =
|
| + new MockDataPlanUpdateWatcherCallback;
|
| + mock_callback->expected_data_plan_vector_ = &expected_data_plan_vector;
|
| +
|
| + EXPECT_CALL(*mock_callback,
|
| + Run(expected_modem_service_path, _))
|
| + .WillOnce(Invoke(mock_callback,
|
| + &MockDataPlanUpdateWatcherCallback::CheckDataPlans));
|
| +
|
| + return base::Bind(&MockDataPlanUpdateWatcherCallback::Run,
|
| + base::Owned(mock_callback));
|
| + }
|
| +
|
| + MOCK_METHOD2(Run, void(const std::string& modem_service_path,
|
| + CellularDataPlanVector* data_plan_vector));
|
| +
|
| + private:
|
| + void CheckDataPlans(const std::string& modem_service_path,
|
| + CellularDataPlanVector* data_plan_vector) {
|
| + ASSERT_EQ(expected_data_plan_vector_->size(), data_plan_vector->size());
|
| + for (size_t i = 0; i != data_plan_vector->size(); ++i) {
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->plan_name,
|
| + (*data_plan_vector)[i]->plan_name);
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->plan_type,
|
| + (*data_plan_vector)[i]->plan_type);
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->update_time,
|
| + (*data_plan_vector)[i]->update_time);
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->plan_start_time,
|
| + (*data_plan_vector)[i]->plan_start_time);
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->plan_end_time,
|
| + (*data_plan_vector)[i]->plan_end_time);
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->plan_data_bytes,
|
| + (*data_plan_vector)[i]->plan_data_bytes);
|
| + EXPECT_EQ((*expected_data_plan_vector_)[i]->data_bytes_used,
|
| + (*data_plan_vector)[i]->data_bytes_used);
|
| + }
|
| + delete data_plan_vector;
|
| + }
|
| +
|
| + const CellularDataPlanVector* expected_data_plan_vector_;
|
| +};
|
| +
|
| } // namespace
|
|
|
| // Test for cros_network_functions.cc with Libcros.
|
| @@ -178,11 +228,6 @@ class CrosNetworkFunctionsLibcrosTest : public testing::Test {
|
| const char* error_message) {}
|
|
|
| // Does nothing. Used as an argument.
|
| - static void OnDataPlansUpdate(void* object,
|
| - const char* modem_service_path,
|
| - const CellularDataPlanList* dataplan) {}
|
| -
|
| - // Does nothing. Used as an argument.
|
| static void OnSmsReceived(void* object,
|
| const char* modem_device_path,
|
| const SMS* message) {}
|
| @@ -376,18 +421,42 @@ TEST_F(CrosNetworkFunctionsLibcrosTest, CrosMonitorNetworkDeviceProperties) {
|
| }
|
|
|
| TEST_F(CrosNetworkFunctionsLibcrosTest, CrosMonitorCellularDataPlan) {
|
| - MonitorDataPlanCallback callback =
|
| - &CrosNetworkFunctionsLibcrosTest::OnDataPlansUpdate;
|
| - void* object = this;
|
| + DataPlanUpdateMonitor monitor = NULL; // dummy
|
| + const std::string modem_service_path = "/modem/path";
|
| + CellularDataPlanInfo data_plan = {};
|
| + data_plan.plan_name = "plan name";
|
| + data_plan.update_time = 123456;
|
| + data_plan.plan_start_time = 234567;
|
| + data_plan.plan_end_time = 345678;
|
| + data_plan.plan_data_bytes = 1024*1024;
|
| + data_plan.data_bytes_used = 12345;
|
| + CellularDataPlanList data_plans = {};
|
| + data_plans.plans = &data_plan;
|
| + data_plans.plans_size = 1;
|
| + data_plans.data_plan_size = sizeof(data_plan);
|
| +
|
| + CellularDataPlanVector result;
|
| + result.push_back(new CellularDataPlan(data_plan));
|
| +
|
| + // Set expectations.
|
| + DataPlanUpdateWatcherCallback callback =
|
| + MockDataPlanUpdateWatcherCallback::CreateCallback(modem_service_path,
|
| + result);
|
| + MonitorDataPlanCallback arg_callback = NULL;
|
| + void* arg_object = NULL;
|
| + EXPECT_CALL(*MockChromeOSNetwork::Get(), MonitorCellularDataPlan(_, _))
|
| + .WillOnce(DoAll(SaveArg<0>(&arg_callback), SaveArg<1>(&arg_object),
|
| + Return(monitor)));
|
|
|
| // Start monitoring.
|
| - EXPECT_CALL(*MockChromeOSNetwork::Get(),
|
| - MonitorCellularDataPlan(callback, object)).Times(1);
|
| - CrosNetworkWatcher* watcher = CrosMonitorCellularDataPlan(callback, object);
|
| + CrosNetworkWatcher* watcher = CrosMonitorCellularDataPlan(callback);
|
| +
|
| + // Run callback.
|
| + arg_callback(arg_object, modem_service_path.c_str(), &data_plans);
|
|
|
| // Stop monitoring.
|
| EXPECT_CALL(*MockChromeOSNetwork::Get(),
|
| - DisconnectDataPlanUpdateMonitor(_)).Times(1);
|
| + DisconnectDataPlanUpdateMonitor(monitor)).Times(1);
|
| delete watcher;
|
| }
|
|
|
|
|