blob: df72896112f401514ad43c733f93b773e71071e7 [file] [log] [blame]
Thieu Le3426c8f2012-01-11 17:35:11 -08001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Darin Petkov887f2982011-07-14 16:10:17 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Eric Shienbrood3e20a232012-02-16 11:35:56 -05005#include <base/stl_util.h>
Darin Petkov887f2982011-07-14 16:10:17 -07006#include <gtest/gtest.h>
Darin Petkov75f201f2013-03-19 13:01:28 +01007
8#if !defined(DISABLE_CELLULAR)
Darin Petkov137884a2011-10-26 18:52:47 +02009#include <mobile_provider.h>
Darin Petkov75f201f2013-03-19 13:01:28 +010010#endif
Darin Petkov887f2982011-07-14 16:10:17 -070011
12#include "shill/manager.h"
13#include "shill/mock_control.h"
14#include "shill/mock_glib.h"
Chris Masone2ae797d2011-08-23 20:41:00 -070015#include "shill/mock_manager.h"
Thieu Le3426c8f2012-01-11 17:35:11 -080016#include "shill/mock_metrics.h"
Darin Petkov887f2982011-07-14 16:10:17 -070017#include "shill/modem_info.h"
18#include "shill/modem_manager.h"
19
20using testing::_;
21using testing::Return;
22using testing::Test;
23
24namespace shill {
25
26class ModemInfoTest : public Test {
27 public:
28 ModemInfoTest()
Thieu Le6c1e3bb2013-02-06 15:20:35 -080029 : metrics_(&dispatcher_),
30 manager_(&control_interface_, &dispatcher_, &metrics_, &glib_),
Thieu Le3426c8f2012-01-11 17:35:11 -080031 modem_info_(&control_interface_, &dispatcher_, &metrics_, &manager_,
32 &glib_) {}
Darin Petkov887f2982011-07-14 16:10:17 -070033
34 protected:
Darin Petkov137884a2011-10-26 18:52:47 +020035 static const char kTestMobileProviderDBPath[];
36
Darin Petkov887f2982011-07-14 16:10:17 -070037 MockGLib glib_;
38 MockControl control_interface_;
39 EventDispatcher dispatcher_;
Thieu Le3426c8f2012-01-11 17:35:11 -080040 MockMetrics metrics_;
Chris Masone2ae797d2011-08-23 20:41:00 -070041 MockManager manager_;
Darin Petkov887f2982011-07-14 16:10:17 -070042 ModemInfo modem_info_;
43};
44
Darin Petkov137884a2011-10-26 18:52:47 +020045const char ModemInfoTest::kTestMobileProviderDBPath[] =
46 "provider_db_unittest.bfd";
47
Darin Petkov75f201f2013-03-19 13:01:28 +010048#if defined(DISABLE_CELLULAR)
49
50TEST_F(ModemInfoTest, StartStop) {
51 EXPECT_EQ(0, modem_info_.modem_managers_.size());
52 EXPECT_CALL(glib_, BusWatchName(_, _, _, _, _, _, _)).Times(0);
53 modem_info_.provider_db_path_ = kTestMobileProviderDBPath;
54 modem_info_.Start();
55 EXPECT_EQ(0, modem_info_.modem_managers_.size());
56 EXPECT_FALSE(modem_info_.provider_db_);
57 modem_info_.Stop();
58}
59
60#else
61
Darin Petkov887f2982011-07-14 16:10:17 -070062TEST_F(ModemInfoTest, StartStop) {
David Rochberg7cb06f62012-03-05 11:23:44 -050063 const int kWatcher = 123;
Darin Petkov887f2982011-07-14 16:10:17 -070064 EXPECT_EQ(0, modem_info_.modem_managers_.size());
65 EXPECT_CALL(glib_, BusWatchName(_, _, _, _, _, _, _))
David Rochberg7cb06f62012-03-05 11:23:44 -050066 .WillOnce(Return(kWatcher))
67 .WillOnce(Return(kWatcher + 1))
68 .WillOnce(Return(kWatcher + 2));
Darin Petkov137884a2011-10-26 18:52:47 +020069 modem_info_.provider_db_path_ = kTestMobileProviderDBPath;
Darin Petkov887f2982011-07-14 16:10:17 -070070 modem_info_.Start();
David Rochberg7cb06f62012-03-05 11:23:44 -050071 EXPECT_EQ(3, modem_info_.modem_managers_.size());
Darin Petkov137884a2011-10-26 18:52:47 +020072 EXPECT_TRUE(modem_info_.provider_db_);
73 EXPECT_TRUE(mobile_provider_lookup_by_name(modem_info_.provider_db_, "AT&T"));
74 EXPECT_FALSE(mobile_provider_lookup_by_name(modem_info_.provider_db_, "xyz"));
Darin Petkov887f2982011-07-14 16:10:17 -070075
David Rochberg7cb06f62012-03-05 11:23:44 -050076 EXPECT_CALL(glib_, BusUnwatchName(kWatcher)).Times(1);
77 EXPECT_CALL(glib_, BusUnwatchName(kWatcher + 1)).Times(1);
78 EXPECT_CALL(glib_, BusUnwatchName(kWatcher + 2)).Times(1);
Darin Petkov887f2982011-07-14 16:10:17 -070079 modem_info_.Stop();
80 EXPECT_EQ(0, modem_info_.modem_managers_.size());
Darin Petkov137884a2011-10-26 18:52:47 +020081 EXPECT_FALSE(modem_info_.provider_db_);
Darin Petkov887f2982011-07-14 16:10:17 -070082}
83
84TEST_F(ModemInfoTest, RegisterModemManager) {
85 const int kWatcher = 123;
86 static const char kService[] = "some.dbus.service";
87 EXPECT_CALL(glib_, BusWatchName(_, _, _, _, _, _, _))
88 .WillOnce(Return(kWatcher));
Darin Petkov137884a2011-10-26 18:52:47 +020089 // Passes ownership of the database.
90 modem_info_.provider_db_ = mobile_provider_open_db(kTestMobileProviderDBPath);
91 EXPECT_TRUE(modem_info_.provider_db_);
David Rochberg7cb06f62012-03-05 11:23:44 -050092 modem_info_.RegisterModemManager<ModemManagerClassic>(
93 kService,
94 "/dbus/service/path");
Darin Petkov887f2982011-07-14 16:10:17 -070095 ASSERT_EQ(1, modem_info_.modem_managers_.size());
96 ModemManager *manager = modem_info_.modem_managers_[0];
97 EXPECT_EQ(kService, manager->service_);
98 EXPECT_EQ(kWatcher, manager->watcher_id_);
Darin Petkov137884a2011-10-26 18:52:47 +020099 EXPECT_EQ(modem_info_.provider_db_, manager->provider_db_);
Darin Petkov887f2982011-07-14 16:10:17 -0700100 manager->watcher_id_ = 0;
101}
102
Darin Petkov75f201f2013-03-19 13:01:28 +0100103#endif // DISABLE_CELLULAR
104
Darin Petkov887f2982011-07-14 16:10:17 -0700105} // namespace shill