Home | History | Annotate | Download | only in shill
      1 //
      2 // Copyright (C) 2012 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #include "shill/rpc_task.h"
     18 
     19 #include <gtest/gtest.h>
     20 
     21 #include "shill/mock_adaptors.h"
     22 #include "shill/nice_mock_control.h"
     23 
     24 using std::map;
     25 using std::string;
     26 using std::vector;
     27 
     28 namespace shill {
     29 
     30 class RPCTaskTest : public testing::Test,
     31                     public RPCTaskDelegate {
     32  public:
     33   RPCTaskTest()
     34       : get_login_calls_(0),
     35         notify_calls_(0),
     36         task_(&control_, this) {}
     37 
     38   // Inherited from RPCTaskDelegate.
     39   virtual void GetLogin(string* user, string* password);
     40   virtual void Notify(const string& reason, const map<string, string>& dict);
     41 
     42  protected:
     43   int get_login_calls_;
     44   int notify_calls_;
     45   string* last_user_;
     46   string* last_password_;
     47   string last_notify_reason_;
     48   map<string, string> last_notify_dict_;
     49   NiceMockControl control_;
     50   RPCTask task_;
     51 };
     52 
     53 void RPCTaskTest::GetLogin(string* user, string* password) {
     54   get_login_calls_++;
     55   last_user_ = user;
     56   last_password_ = password;
     57 }
     58 
     59 void RPCTaskTest::Notify(const string& reason,
     60                          const map<string, string>& dict) {
     61   notify_calls_++;
     62   last_notify_reason_ = reason;
     63   last_notify_dict_ = dict;
     64 }
     65 
     66 TEST_F(RPCTaskTest, GetEnvironment) {
     67   map<string, string> env = task_.GetEnvironment();
     68   ASSERT_EQ(2, env.size());
     69   EXPECT_EQ(env[kRPCTaskServiceVariable], RPCTaskMockAdaptor::kRpcConnId);
     70   EXPECT_EQ(env[kRPCTaskPathVariable], RPCTaskMockAdaptor::kRpcId);
     71 }
     72 
     73 TEST_F(RPCTaskTest, GetRpcIdentifiers) {
     74   EXPECT_EQ(RPCTaskMockAdaptor::kRpcId, task_.GetRpcIdentifier());
     75   EXPECT_EQ(RPCTaskMockAdaptor::kRpcConnId, task_.GetRpcConnectionIdentifier());
     76 }
     77 
     78 TEST_F(RPCTaskTest, GetLogin) {
     79   string user, password;
     80   task_.GetLogin(&user, &password);
     81   EXPECT_EQ(1, get_login_calls_);
     82   EXPECT_EQ(&user, last_user_);
     83   EXPECT_EQ(&password, last_password_);
     84 }
     85 
     86 TEST_F(RPCTaskTest, Notify) {
     87   static const char kReason[] = "up";
     88   map<string, string> dict;
     89   dict["foo"] = "bar";
     90   task_.Notify(kReason, dict);
     91   EXPECT_EQ(1, notify_calls_);
     92   EXPECT_EQ(kReason, last_notify_reason_);
     93   EXPECT_EQ("bar", last_notify_dict_["foo"]);
     94 }
     95 
     96 }  // namespace shill
     97