blob: 0eebd343144d5b4b3071eb6e65bff9fc8f9df75e [file] [log] [blame]
Darin Petkov887f2982011-07-14 16:10:17 -07001// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Darin Petkov5c97ac52011-07-19 16:30:49 -07005#include <base/stl_util-inl.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"
Darin Petkovc90fe522011-07-15 13:59:47 -070013#include "shill/mock_modem_manager_proxy.h"
Darin Petkove0a312e2011-07-20 13:45:28 -070014#include "shill/modem.h"
Darin Petkov887f2982011-07-14 16:10:17 -070015#include "shill/modem_manager.h"
Darin Petkovc90fe522011-07-15 13:59:47 -070016#include "shill/proxy_factory.h"
Darin Petkov887f2982011-07-14 16:10:17 -070017
Darin Petkovc90fe522011-07-15 13:59:47 -070018using std::string;
Darin Petkov5c97ac52011-07-19 16:30:49 -070019using std::vector;
Darin Petkov887f2982011-07-14 16:10:17 -070020using testing::_;
21using testing::Return;
22using testing::StrEq;
23using testing::Test;
24
25namespace shill {
26
27class ModemManagerTest : public Test {
28 public:
29 ModemManagerTest()
30 : manager_(&control_interface_, &dispatcher_, &glib_),
31 modem_manager_(kService,
32 kPath,
33 &control_interface_,
34 &dispatcher_,
35 &manager_,
Darin Petkovc90fe522011-07-15 13:59:47 -070036 &glib_),
Darin Petkov3b292332011-07-28 14:17:24 -070037 proxy_(new MockModemManagerProxy()),
38 proxy_factory_(this) {
Darin Petkovc90fe522011-07-15 13:59:47 -070039 }
Darin Petkov887f2982011-07-14 16:10:17 -070040
Darin Petkovab565bb2011-10-06 02:55:51 -070041 virtual void SetUp();
Darin Petkove0a312e2011-07-20 13:45:28 -070042 virtual void TearDown();
Darin Petkov887f2982011-07-14 16:10:17 -070043
44 protected:
Darin Petkovc90fe522011-07-15 13:59:47 -070045 class TestProxyFactory : public ProxyFactory {
46 public:
Paul Stewart7355ce12011-09-02 10:47:01 -070047 explicit TestProxyFactory(ModemManagerTest *test) : test_(test) {}
Darin Petkov5c97ac52011-07-19 16:30:49 -070048
Darin Petkovc90fe522011-07-15 13:59:47 -070049 virtual ModemManagerProxyInterface *CreateModemManagerProxy(
mukesh agrawal1830fa12011-09-26 14:31:40 -070050 ModemManager */*manager*/,
51 const string &/*path*/,
52 const string &/*service*/) {
Darin Petkov3b292332011-07-28 14:17:24 -070053 return test_->proxy_.release();
Darin Petkovc90fe522011-07-15 13:59:47 -070054 }
55
56 private:
Darin Petkov3b292332011-07-28 14:17:24 -070057 ModemManagerTest *test_;
Darin Petkovc90fe522011-07-15 13:59:47 -070058 };
59
Darin Petkov887f2982011-07-14 16:10:17 -070060 static const char kService[];
61 static const char kPath[];
Darin Petkov5c97ac52011-07-19 16:30:49 -070062 static const char kOwner[];
63 static const char kModemPath[];
Darin Petkov887f2982011-07-14 16:10:17 -070064
65 MockGLib glib_;
66 MockControl control_interface_;
67 EventDispatcher dispatcher_;
Chris Masone2ae797d2011-08-23 20:41:00 -070068 MockManager manager_;
Darin Petkov887f2982011-07-14 16:10:17 -070069 ModemManager modem_manager_;
Darin Petkov3b292332011-07-28 14:17:24 -070070 scoped_ptr<MockModemManagerProxy> proxy_;
Darin Petkovc90fe522011-07-15 13:59:47 -070071 TestProxyFactory proxy_factory_;
Darin Petkov887f2982011-07-14 16:10:17 -070072};
73
Darin Petkov5c97ac52011-07-19 16:30:49 -070074const char ModemManagerTest::kService[] = "org.chromium.ModemManager";
75const char ModemManagerTest::kPath[] = "/org/chromium/ModemManager";
76const char ModemManagerTest::kOwner[] = ":1.17";
77const char ModemManagerTest::kModemPath[] = "/org/chromium/ModemManager/Gobi/0";
Darin Petkov887f2982011-07-14 16:10:17 -070078
Darin Petkovab565bb2011-10-06 02:55:51 -070079void ModemManagerTest::SetUp() {
80 modem_manager_.proxy_factory_ = &proxy_factory_;
81}
82
Darin Petkove0a312e2011-07-20 13:45:28 -070083void ModemManagerTest::TearDown() {
84 modem_manager_.watcher_id_ = 0;
Darin Petkovab565bb2011-10-06 02:55:51 -070085 modem_manager_.proxy_factory_ = NULL;
Darin Petkove0a312e2011-07-20 13:45:28 -070086}
87
Darin Petkov887f2982011-07-14 16:10:17 -070088TEST_F(ModemManagerTest, Start) {
89 const int kWatcher = 123;
90 EXPECT_CALL(glib_, BusWatchName(G_BUS_TYPE_SYSTEM,
91 StrEq(kService),
92 G_BUS_NAME_WATCHER_FLAGS_NONE,
93 ModemManager::OnAppear,
94 ModemManager::OnVanish,
95 &modem_manager_,
96 NULL))
97 .WillOnce(Return(kWatcher));
98 EXPECT_EQ(0, modem_manager_.watcher_id_);
99 modem_manager_.Start();
100 EXPECT_EQ(kWatcher, modem_manager_.watcher_id_);
101}
102
103TEST_F(ModemManagerTest, Stop) {
104 const int kWatcher = 345;
Darin Petkov887f2982011-07-14 16:10:17 -0700105 modem_manager_.watcher_id_ = kWatcher;
106 modem_manager_.owner_ = kOwner;
107 EXPECT_CALL(glib_, BusUnwatchName(kWatcher)).Times(1);
108 modem_manager_.Stop();
109 EXPECT_EQ(0, modem_manager_.watcher_id_);
110 EXPECT_EQ("", modem_manager_.owner_);
111}
112
113TEST_F(ModemManagerTest, Connect) {
114 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700115 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700116 .WillOnce(Return(vector<DBus::Path>(1, kModemPath)));
Darin Petkov887f2982011-07-14 16:10:17 -0700117 modem_manager_.Connect(kOwner);
118 EXPECT_EQ(kOwner, modem_manager_.owner_);
Darin Petkov5c97ac52011-07-19 16:30:49 -0700119 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700120 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
121 EXPECT_FALSE(modem_manager_.modems_[kModemPath]->task_factory_.empty());
Darin Petkov887f2982011-07-14 16:10:17 -0700122}
123
124TEST_F(ModemManagerTest, Disconnect) {
Darin Petkov887f2982011-07-14 16:10:17 -0700125 modem_manager_.owner_ = kOwner;
126 modem_manager_.Disconnect();
127 EXPECT_EQ("", modem_manager_.owner_);
128}
129
130TEST_F(ModemManagerTest, OnAppear) {
131 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700132 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700133 .WillOnce(Return(vector<DBus::Path>()));
134 ModemManager::OnAppear(NULL, kService, kOwner, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700135 EXPECT_EQ(kOwner, modem_manager_.owner_);
136}
137
138TEST_F(ModemManagerTest, OnVanish) {
Darin Petkov887f2982011-07-14 16:10:17 -0700139 modem_manager_.owner_ = kOwner;
Darin Petkov5c97ac52011-07-19 16:30:49 -0700140 ModemManager::OnVanish(NULL, kService, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700141 EXPECT_EQ("", modem_manager_.owner_);
142}
143
Darin Petkov5c97ac52011-07-19 16:30:49 -0700144TEST_F(ModemManagerTest, AddRemoveModem) {
145 modem_manager_.owner_ = kOwner;
146 modem_manager_.AddModem(kModemPath);
147 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700148 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
149 EXPECT_FALSE(modem_manager_.modems_[kModemPath]->task_factory_.empty());
Darin Petkove0a312e2011-07-20 13:45:28 -0700150
Darin Petkov5c97ac52011-07-19 16:30:49 -0700151 modem_manager_.RemoveModem(kModemPath);
152 EXPECT_EQ(0, modem_manager_.modems_.size());
153}
154
Darin Petkov887f2982011-07-14 16:10:17 -0700155} // namespace shill