blob: 5cd1d97ce2e2ce68d66f895f48bde89a94732bd5 [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"
Darin Petkovc90fe522011-07-15 13:59:47 -070012#include "shill/mock_modem_manager_proxy.h"
Darin Petkove0a312e2011-07-20 13:45:28 -070013#include "shill/modem.h"
Darin Petkov887f2982011-07-14 16:10:17 -070014#include "shill/modem_manager.h"
Darin Petkovc90fe522011-07-15 13:59:47 -070015#include "shill/proxy_factory.h"
Darin Petkov887f2982011-07-14 16:10:17 -070016
Darin Petkovc90fe522011-07-15 13:59:47 -070017using std::string;
Darin Petkov5c97ac52011-07-19 16:30:49 -070018using std::vector;
Darin Petkov887f2982011-07-14 16:10:17 -070019using testing::_;
20using testing::Return;
21using testing::StrEq;
22using testing::Test;
23
24namespace shill {
25
26class ModemManagerTest : public Test {
27 public:
28 ModemManagerTest()
29 : manager_(&control_interface_, &dispatcher_, &glib_),
30 modem_manager_(kService,
31 kPath,
32 &control_interface_,
33 &dispatcher_,
34 &manager_,
Darin Petkovc90fe522011-07-15 13:59:47 -070035 &glib_),
Darin Petkov3b292332011-07-28 14:17:24 -070036 proxy_(new MockModemManagerProxy()),
37 proxy_factory_(this) {
Darin Petkovc90fe522011-07-15 13:59:47 -070038 ProxyFactory::set_factory(&proxy_factory_);
39 }
Darin Petkov887f2982011-07-14 16:10:17 -070040
Darin Petkove0a312e2011-07-20 13:45:28 -070041 virtual void TearDown();
Darin Petkov887f2982011-07-14 16:10:17 -070042
43 protected:
Darin Petkovc90fe522011-07-15 13:59:47 -070044 class TestProxyFactory : public ProxyFactory {
45 public:
Darin Petkov3b292332011-07-28 14:17:24 -070046 TestProxyFactory(ModemManagerTest *test) : test_(test) {}
Darin Petkov5c97ac52011-07-19 16:30:49 -070047
Darin Petkovc90fe522011-07-15 13:59:47 -070048 virtual ModemManagerProxyInterface *CreateModemManagerProxy(
49 ModemManager *manager,
50 const string &path,
51 const string &service) {
Darin Petkov3b292332011-07-28 14:17:24 -070052 return test_->proxy_.release();
Darin Petkovc90fe522011-07-15 13:59:47 -070053 }
54
55 private:
Darin Petkov3b292332011-07-28 14:17:24 -070056 ModemManagerTest *test_;
Darin Petkovc90fe522011-07-15 13:59:47 -070057 };
58
Darin Petkov887f2982011-07-14 16:10:17 -070059 static const char kService[];
60 static const char kPath[];
Darin Petkov5c97ac52011-07-19 16:30:49 -070061 static const char kOwner[];
62 static const char kModemPath[];
Darin Petkov887f2982011-07-14 16:10:17 -070063
64 MockGLib glib_;
65 MockControl control_interface_;
66 EventDispatcher dispatcher_;
67 Manager manager_;
68 ModemManager modem_manager_;
Darin Petkov3b292332011-07-28 14:17:24 -070069 scoped_ptr<MockModemManagerProxy> proxy_;
Darin Petkovc90fe522011-07-15 13:59:47 -070070 TestProxyFactory proxy_factory_;
Darin Petkov887f2982011-07-14 16:10:17 -070071};
72
Darin Petkov5c97ac52011-07-19 16:30:49 -070073const char ModemManagerTest::kService[] = "org.chromium.ModemManager";
74const char ModemManagerTest::kPath[] = "/org/chromium/ModemManager";
75const char ModemManagerTest::kOwner[] = ":1.17";
76const char ModemManagerTest::kModemPath[] = "/org/chromium/ModemManager/Gobi/0";
Darin Petkov887f2982011-07-14 16:10:17 -070077
Darin Petkove0a312e2011-07-20 13:45:28 -070078void ModemManagerTest::TearDown() {
79 modem_manager_.watcher_id_ = 0;
Darin Petkove0a312e2011-07-20 13:45:28 -070080 ProxyFactory::set_factory(NULL);
81}
82
Darin Petkov887f2982011-07-14 16:10:17 -070083TEST_F(ModemManagerTest, Start) {
84 const int kWatcher = 123;
85 EXPECT_CALL(glib_, BusWatchName(G_BUS_TYPE_SYSTEM,
86 StrEq(kService),
87 G_BUS_NAME_WATCHER_FLAGS_NONE,
88 ModemManager::OnAppear,
89 ModemManager::OnVanish,
90 &modem_manager_,
91 NULL))
92 .WillOnce(Return(kWatcher));
93 EXPECT_EQ(0, modem_manager_.watcher_id_);
94 modem_manager_.Start();
95 EXPECT_EQ(kWatcher, modem_manager_.watcher_id_);
96}
97
98TEST_F(ModemManagerTest, Stop) {
99 const int kWatcher = 345;
Darin Petkov887f2982011-07-14 16:10:17 -0700100 modem_manager_.watcher_id_ = kWatcher;
101 modem_manager_.owner_ = kOwner;
102 EXPECT_CALL(glib_, BusUnwatchName(kWatcher)).Times(1);
103 modem_manager_.Stop();
104 EXPECT_EQ(0, modem_manager_.watcher_id_);
105 EXPECT_EQ("", modem_manager_.owner_);
106}
107
108TEST_F(ModemManagerTest, Connect) {
109 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700110 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700111 .WillOnce(Return(vector<DBus::Path>(1, kModemPath)));
Darin Petkov887f2982011-07-14 16:10:17 -0700112 modem_manager_.Connect(kOwner);
113 EXPECT_EQ(kOwner, modem_manager_.owner_);
Darin Petkov5c97ac52011-07-19 16:30:49 -0700114 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700115 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
116 EXPECT_FALSE(modem_manager_.modems_[kModemPath]->task_factory_.empty());
Darin Petkov887f2982011-07-14 16:10:17 -0700117}
118
119TEST_F(ModemManagerTest, Disconnect) {
Darin Petkov887f2982011-07-14 16:10:17 -0700120 modem_manager_.owner_ = kOwner;
121 modem_manager_.Disconnect();
122 EXPECT_EQ("", modem_manager_.owner_);
123}
124
125TEST_F(ModemManagerTest, OnAppear) {
126 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700127 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700128 .WillOnce(Return(vector<DBus::Path>()));
129 ModemManager::OnAppear(NULL, kService, kOwner, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700130 EXPECT_EQ(kOwner, modem_manager_.owner_);
131}
132
133TEST_F(ModemManagerTest, OnVanish) {
Darin Petkov887f2982011-07-14 16:10:17 -0700134 modem_manager_.owner_ = kOwner;
Darin Petkov5c97ac52011-07-19 16:30:49 -0700135 ModemManager::OnVanish(NULL, kService, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700136 EXPECT_EQ("", modem_manager_.owner_);
137}
138
Darin Petkov5c97ac52011-07-19 16:30:49 -0700139TEST_F(ModemManagerTest, AddRemoveModem) {
140 modem_manager_.owner_ = kOwner;
141 modem_manager_.AddModem(kModemPath);
142 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700143 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
144 EXPECT_FALSE(modem_manager_.modems_[kModemPath]->task_factory_.empty());
Darin Petkove0a312e2011-07-20 13:45:28 -0700145
Darin Petkov5c97ac52011-07-19 16:30:49 -0700146 modem_manager_.RemoveModem(kModemPath);
147 EXPECT_EQ(0, modem_manager_.modems_.size());
148}
149
Darin Petkov887f2982011-07-14 16:10:17 -0700150} // namespace shill