blob: 4df3150c80a3c08ab7ca2d7e880445aa0e6b06e3 [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 Petkove0a312e2011-07-20 13:45:28 -07007#include <mm/mm-modem.h>
Darin Petkov887f2982011-07-14 16:10:17 -07008
9#include "shill/manager.h"
10#include "shill/mock_control.h"
11#include "shill/mock_glib.h"
Chris Masone2ae797d2011-08-23 20:41:00 -070012#include "shill/mock_manager.h"
Thieu Le3426c8f2012-01-11 17:35:11 -080013#include "shill/mock_metrics.h"
Darin Petkovc90fe522011-07-15 13:59:47 -070014#include "shill/mock_modem_manager_proxy.h"
Darin Petkove0a312e2011-07-20 13:45:28 -070015#include "shill/modem.h"
Darin Petkov887f2982011-07-14 16:10:17 -070016#include "shill/modem_manager.h"
Darin Petkovc90fe522011-07-15 13:59:47 -070017#include "shill/proxy_factory.h"
Darin Petkov887f2982011-07-14 16:10:17 -070018
Darin Petkovc90fe522011-07-15 13:59:47 -070019using std::string;
Darin Petkov5c97ac52011-07-19 16:30:49 -070020using std::vector;
Darin Petkov887f2982011-07-14 16:10:17 -070021using testing::_;
22using testing::Return;
23using testing::StrEq;
24using testing::Test;
25
26namespace shill {
27
28class ModemManagerTest : public Test {
29 public:
30 ModemManagerTest()
Thieu Le3426c8f2012-01-11 17:35:11 -080031 : manager_(&control_interface_, &dispatcher_, &metrics_, &glib_),
Darin Petkov887f2982011-07-14 16:10:17 -070032 modem_manager_(kService,
33 kPath,
34 &control_interface_,
35 &dispatcher_,
Thieu Le3426c8f2012-01-11 17:35:11 -080036 &metrics_,
Darin Petkov887f2982011-07-14 16:10:17 -070037 &manager_,
Darin Petkov137884a2011-10-26 18:52:47 +020038 &glib_,
39 NULL),
Darin Petkov3b292332011-07-28 14:17:24 -070040 proxy_(new MockModemManagerProxy()),
41 proxy_factory_(this) {
Darin Petkovc90fe522011-07-15 13:59:47 -070042 }
Darin Petkov887f2982011-07-14 16:10:17 -070043
Darin Petkovab565bb2011-10-06 02:55:51 -070044 virtual void SetUp();
Darin Petkove0a312e2011-07-20 13:45:28 -070045 virtual void TearDown();
Darin Petkov887f2982011-07-14 16:10:17 -070046
47 protected:
Darin Petkovc90fe522011-07-15 13:59:47 -070048 class TestProxyFactory : public ProxyFactory {
49 public:
Paul Stewart7355ce12011-09-02 10:47:01 -070050 explicit TestProxyFactory(ModemManagerTest *test) : test_(test) {}
Darin Petkov5c97ac52011-07-19 16:30:49 -070051
Darin Petkovc90fe522011-07-15 13:59:47 -070052 virtual ModemManagerProxyInterface *CreateModemManagerProxy(
David Rochberg81030ea2012-03-02 15:44:25 -050053 ModemManagerClassic */*manager*/,
mukesh agrawal1830fa12011-09-26 14:31:40 -070054 const string &/*path*/,
55 const string &/*service*/) {
Darin Petkov3b292332011-07-28 14:17:24 -070056 return test_->proxy_.release();
Darin Petkovc90fe522011-07-15 13:59:47 -070057 }
58
59 private:
Darin Petkov3b292332011-07-28 14:17:24 -070060 ModemManagerTest *test_;
Darin Petkovc90fe522011-07-15 13:59:47 -070061 };
62
Darin Petkov887f2982011-07-14 16:10:17 -070063 static const char kService[];
64 static const char kPath[];
Darin Petkov5c97ac52011-07-19 16:30:49 -070065 static const char kOwner[];
66 static const char kModemPath[];
Darin Petkov887f2982011-07-14 16:10:17 -070067
68 MockGLib glib_;
69 MockControl control_interface_;
70 EventDispatcher dispatcher_;
Thieu Le3426c8f2012-01-11 17:35:11 -080071 MockMetrics metrics_;
Chris Masone2ae797d2011-08-23 20:41:00 -070072 MockManager manager_;
David Rochberg81030ea2012-03-02 15:44:25 -050073 ModemManagerClassic modem_manager_;
Darin Petkov3b292332011-07-28 14:17:24 -070074 scoped_ptr<MockModemManagerProxy> proxy_;
Darin Petkovc90fe522011-07-15 13:59:47 -070075 TestProxyFactory proxy_factory_;
Darin Petkov887f2982011-07-14 16:10:17 -070076};
77
Darin Petkov5c97ac52011-07-19 16:30:49 -070078const char ModemManagerTest::kService[] = "org.chromium.ModemManager";
79const char ModemManagerTest::kPath[] = "/org/chromium/ModemManager";
80const char ModemManagerTest::kOwner[] = ":1.17";
81const char ModemManagerTest::kModemPath[] = "/org/chromium/ModemManager/Gobi/0";
Darin Petkov887f2982011-07-14 16:10:17 -070082
Darin Petkovab565bb2011-10-06 02:55:51 -070083void ModemManagerTest::SetUp() {
84 modem_manager_.proxy_factory_ = &proxy_factory_;
85}
86
Darin Petkove0a312e2011-07-20 13:45:28 -070087void ModemManagerTest::TearDown() {
88 modem_manager_.watcher_id_ = 0;
Darin Petkovab565bb2011-10-06 02:55:51 -070089 modem_manager_.proxy_factory_ = NULL;
Darin Petkove0a312e2011-07-20 13:45:28 -070090}
91
Darin Petkov887f2982011-07-14 16:10:17 -070092TEST_F(ModemManagerTest, Start) {
93 const int kWatcher = 123;
94 EXPECT_CALL(glib_, BusWatchName(G_BUS_TYPE_SYSTEM,
95 StrEq(kService),
96 G_BUS_NAME_WATCHER_FLAGS_NONE,
97 ModemManager::OnAppear,
98 ModemManager::OnVanish,
99 &modem_manager_,
100 NULL))
101 .WillOnce(Return(kWatcher));
102 EXPECT_EQ(0, modem_manager_.watcher_id_);
103 modem_manager_.Start();
104 EXPECT_EQ(kWatcher, modem_manager_.watcher_id_);
105}
106
107TEST_F(ModemManagerTest, Stop) {
108 const int kWatcher = 345;
Darin Petkov887f2982011-07-14 16:10:17 -0700109 modem_manager_.watcher_id_ = kWatcher;
110 modem_manager_.owner_ = kOwner;
111 EXPECT_CALL(glib_, BusUnwatchName(kWatcher)).Times(1);
112 modem_manager_.Stop();
113 EXPECT_EQ(0, modem_manager_.watcher_id_);
114 EXPECT_EQ("", modem_manager_.owner_);
115}
116
117TEST_F(ModemManagerTest, Connect) {
118 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700119 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700120 .WillOnce(Return(vector<DBus::Path>(1, kModemPath)));
Darin Petkov887f2982011-07-14 16:10:17 -0700121 modem_manager_.Connect(kOwner);
122 EXPECT_EQ(kOwner, modem_manager_.owner_);
Darin Petkov5c97ac52011-07-19 16:30:49 -0700123 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700124 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
Darin Petkov887f2982011-07-14 16:10:17 -0700125}
126
127TEST_F(ModemManagerTest, Disconnect) {
Darin Petkov887f2982011-07-14 16:10:17 -0700128 modem_manager_.owner_ = kOwner;
129 modem_manager_.Disconnect();
130 EXPECT_EQ("", modem_manager_.owner_);
131}
132
133TEST_F(ModemManagerTest, OnAppear) {
134 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700135 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700136 .WillOnce(Return(vector<DBus::Path>()));
137 ModemManager::OnAppear(NULL, kService, kOwner, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700138 EXPECT_EQ(kOwner, modem_manager_.owner_);
139}
140
141TEST_F(ModemManagerTest, OnVanish) {
Darin Petkov887f2982011-07-14 16:10:17 -0700142 modem_manager_.owner_ = kOwner;
Darin Petkov5c97ac52011-07-19 16:30:49 -0700143 ModemManager::OnVanish(NULL, kService, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700144 EXPECT_EQ("", modem_manager_.owner_);
145}
146
Darin Petkov5c97ac52011-07-19 16:30:49 -0700147TEST_F(ModemManagerTest, AddRemoveModem) {
148 modem_manager_.owner_ = kOwner;
149 modem_manager_.AddModem(kModemPath);
150 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700151 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
Darin Petkove0a312e2011-07-20 13:45:28 -0700152
Darin Petkov5c97ac52011-07-19 16:30:49 -0700153 modem_manager_.RemoveModem(kModemPath);
154 EXPECT_EQ(0, modem_manager_.modems_.size());
155}
156
Darin Petkov887f2982011-07-14 16:10:17 -0700157} // namespace shill