blob: 74f0f34f1c7917a318d20333687265a68920e1db [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 Petkov137884a2011-10-26 18:52:47 +020036 &glib_,
37 NULL),
Darin Petkov3b292332011-07-28 14:17:24 -070038 proxy_(new MockModemManagerProxy()),
39 proxy_factory_(this) {
Darin Petkovc90fe522011-07-15 13:59:47 -070040 }
Darin Petkov887f2982011-07-14 16:10:17 -070041
Darin Petkovab565bb2011-10-06 02:55:51 -070042 virtual void SetUp();
Darin Petkove0a312e2011-07-20 13:45:28 -070043 virtual void TearDown();
Darin Petkov887f2982011-07-14 16:10:17 -070044
45 protected:
Darin Petkovc90fe522011-07-15 13:59:47 -070046 class TestProxyFactory : public ProxyFactory {
47 public:
Paul Stewart7355ce12011-09-02 10:47:01 -070048 explicit TestProxyFactory(ModemManagerTest *test) : test_(test) {}
Darin Petkov5c97ac52011-07-19 16:30:49 -070049
Darin Petkovc90fe522011-07-15 13:59:47 -070050 virtual ModemManagerProxyInterface *CreateModemManagerProxy(
mukesh agrawal1830fa12011-09-26 14:31:40 -070051 ModemManager */*manager*/,
52 const string &/*path*/,
53 const string &/*service*/) {
Darin Petkov3b292332011-07-28 14:17:24 -070054 return test_->proxy_.release();
Darin Petkovc90fe522011-07-15 13:59:47 -070055 }
56
57 private:
Darin Petkov3b292332011-07-28 14:17:24 -070058 ModemManagerTest *test_;
Darin Petkovc90fe522011-07-15 13:59:47 -070059 };
60
Darin Petkov887f2982011-07-14 16:10:17 -070061 static const char kService[];
62 static const char kPath[];
Darin Petkov5c97ac52011-07-19 16:30:49 -070063 static const char kOwner[];
64 static const char kModemPath[];
Darin Petkov887f2982011-07-14 16:10:17 -070065
66 MockGLib glib_;
67 MockControl control_interface_;
68 EventDispatcher dispatcher_;
Chris Masone2ae797d2011-08-23 20:41:00 -070069 MockManager manager_;
Darin Petkov887f2982011-07-14 16:10:17 -070070 ModemManager modem_manager_;
Darin Petkov3b292332011-07-28 14:17:24 -070071 scoped_ptr<MockModemManagerProxy> proxy_;
Darin Petkovc90fe522011-07-15 13:59:47 -070072 TestProxyFactory proxy_factory_;
Darin Petkov887f2982011-07-14 16:10:17 -070073};
74
Darin Petkov5c97ac52011-07-19 16:30:49 -070075const char ModemManagerTest::kService[] = "org.chromium.ModemManager";
76const char ModemManagerTest::kPath[] = "/org/chromium/ModemManager";
77const char ModemManagerTest::kOwner[] = ":1.17";
78const char ModemManagerTest::kModemPath[] = "/org/chromium/ModemManager/Gobi/0";
Darin Petkov887f2982011-07-14 16:10:17 -070079
Darin Petkovab565bb2011-10-06 02:55:51 -070080void ModemManagerTest::SetUp() {
81 modem_manager_.proxy_factory_ = &proxy_factory_;
82}
83
Darin Petkove0a312e2011-07-20 13:45:28 -070084void ModemManagerTest::TearDown() {
85 modem_manager_.watcher_id_ = 0;
Darin Petkovab565bb2011-10-06 02:55:51 -070086 modem_manager_.proxy_factory_ = NULL;
Darin Petkove0a312e2011-07-20 13:45:28 -070087}
88
Darin Petkov887f2982011-07-14 16:10:17 -070089TEST_F(ModemManagerTest, Start) {
90 const int kWatcher = 123;
91 EXPECT_CALL(glib_, BusWatchName(G_BUS_TYPE_SYSTEM,
92 StrEq(kService),
93 G_BUS_NAME_WATCHER_FLAGS_NONE,
94 ModemManager::OnAppear,
95 ModemManager::OnVanish,
96 &modem_manager_,
97 NULL))
98 .WillOnce(Return(kWatcher));
99 EXPECT_EQ(0, modem_manager_.watcher_id_);
100 modem_manager_.Start();
101 EXPECT_EQ(kWatcher, modem_manager_.watcher_id_);
102}
103
104TEST_F(ModemManagerTest, Stop) {
105 const int kWatcher = 345;
Darin Petkov887f2982011-07-14 16:10:17 -0700106 modem_manager_.watcher_id_ = kWatcher;
107 modem_manager_.owner_ = kOwner;
108 EXPECT_CALL(glib_, BusUnwatchName(kWatcher)).Times(1);
109 modem_manager_.Stop();
110 EXPECT_EQ(0, modem_manager_.watcher_id_);
111 EXPECT_EQ("", modem_manager_.owner_);
112}
113
114TEST_F(ModemManagerTest, Connect) {
115 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700116 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700117 .WillOnce(Return(vector<DBus::Path>(1, kModemPath)));
Darin Petkov887f2982011-07-14 16:10:17 -0700118 modem_manager_.Connect(kOwner);
119 EXPECT_EQ(kOwner, modem_manager_.owner_);
Darin Petkov5c97ac52011-07-19 16:30:49 -0700120 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700121 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
122 EXPECT_FALSE(modem_manager_.modems_[kModemPath]->task_factory_.empty());
Darin Petkov887f2982011-07-14 16:10:17 -0700123}
124
125TEST_F(ModemManagerTest, Disconnect) {
Darin Petkov887f2982011-07-14 16:10:17 -0700126 modem_manager_.owner_ = kOwner;
127 modem_manager_.Disconnect();
128 EXPECT_EQ("", modem_manager_.owner_);
129}
130
131TEST_F(ModemManagerTest, OnAppear) {
132 EXPECT_EQ("", modem_manager_.owner_);
Darin Petkov3b292332011-07-28 14:17:24 -0700133 EXPECT_CALL(*proxy_, EnumerateDevices())
Darin Petkov5c97ac52011-07-19 16:30:49 -0700134 .WillOnce(Return(vector<DBus::Path>()));
135 ModemManager::OnAppear(NULL, kService, kOwner, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700136 EXPECT_EQ(kOwner, modem_manager_.owner_);
137}
138
139TEST_F(ModemManagerTest, OnVanish) {
Darin Petkov887f2982011-07-14 16:10:17 -0700140 modem_manager_.owner_ = kOwner;
Darin Petkov5c97ac52011-07-19 16:30:49 -0700141 ModemManager::OnVanish(NULL, kService, &modem_manager_);
Darin Petkov887f2982011-07-14 16:10:17 -0700142 EXPECT_EQ("", modem_manager_.owner_);
143}
144
Darin Petkov5c97ac52011-07-19 16:30:49 -0700145TEST_F(ModemManagerTest, AddRemoveModem) {
146 modem_manager_.owner_ = kOwner;
147 modem_manager_.AddModem(kModemPath);
148 EXPECT_EQ(1, modem_manager_.modems_.size());
Darin Petkova7b89492011-07-27 12:48:17 -0700149 ASSERT_TRUE(ContainsKey(modem_manager_.modems_, kModemPath));
150 EXPECT_FALSE(modem_manager_.modems_[kModemPath]->task_factory_.empty());
Darin Petkove0a312e2011-07-20 13:45:28 -0700151
Darin Petkov5c97ac52011-07-19 16:30:49 -0700152 modem_manager_.RemoveModem(kModemPath);
153 EXPECT_EQ(0, modem_manager_.modems_.size());
154}
155
Darin Petkov887f2982011-07-14 16:10:17 -0700156} // namespace shill