blob: 804b11a563fff1421386f234636a6da7f5a49f4f [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))
Ben Chan8799a4a2013-04-13 16:00:13 -070067 .WillOnce(Return(kWatcher + 1));
Darin Petkov137884a2011-10-26 18:52:47 +020068 modem_info_.provider_db_path_ = kTestMobileProviderDBPath;
Darin Petkov887f2982011-07-14 16:10:17 -070069 modem_info_.Start();
Ben Chan8799a4a2013-04-13 16:00:13 -070070 EXPECT_EQ(2, modem_info_.modem_managers_.size());
Darin Petkov137884a2011-10-26 18:52:47 +020071 EXPECT_TRUE(modem_info_.provider_db_);
72 EXPECT_TRUE(mobile_provider_lookup_by_name(modem_info_.provider_db_, "AT&T"));
73 EXPECT_FALSE(mobile_provider_lookup_by_name(modem_info_.provider_db_, "xyz"));
Darin Petkov887f2982011-07-14 16:10:17 -070074
David Rochberg7cb06f62012-03-05 11:23:44 -050075 EXPECT_CALL(glib_, BusUnwatchName(kWatcher)).Times(1);
76 EXPECT_CALL(glib_, BusUnwatchName(kWatcher + 1)).Times(1);
Darin Petkov887f2982011-07-14 16:10:17 -070077 modem_info_.Stop();
78 EXPECT_EQ(0, modem_info_.modem_managers_.size());
Darin Petkov137884a2011-10-26 18:52:47 +020079 EXPECT_FALSE(modem_info_.provider_db_);
Darin Petkov887f2982011-07-14 16:10:17 -070080}
81
82TEST_F(ModemInfoTest, RegisterModemManager) {
83 const int kWatcher = 123;
84 static const char kService[] = "some.dbus.service";
85 EXPECT_CALL(glib_, BusWatchName(_, _, _, _, _, _, _))
86 .WillOnce(Return(kWatcher));
Darin Petkov137884a2011-10-26 18:52:47 +020087 // Passes ownership of the database.
88 modem_info_.provider_db_ = mobile_provider_open_db(kTestMobileProviderDBPath);
89 EXPECT_TRUE(modem_info_.provider_db_);
Ben Chan8799a4a2013-04-13 16:00:13 -070090 modem_info_.RegisterModemManager(
91 new ModemManagerClassic(kService, "/dbus/service/path", &modem_info_));
Darin Petkov887f2982011-07-14 16:10:17 -070092 ASSERT_EQ(1, modem_info_.modem_managers_.size());
93 ModemManager *manager = modem_info_.modem_managers_[0];
94 EXPECT_EQ(kService, manager->service_);
95 EXPECT_EQ(kWatcher, manager->watcher_id_);
Prathmesh Prabhu27526f12013-03-25 19:42:18 -070096 EXPECT_EQ(&modem_info_, manager->modem_info_);
Darin Petkov887f2982011-07-14 16:10:17 -070097 manager->watcher_id_ = 0;
98}
99
Darin Petkov75f201f2013-03-19 13:01:28 +0100100#endif // DISABLE_CELLULAR
101
Darin Petkov887f2982011-07-14 16:10:17 -0700102} // namespace shill