Home | History | Annotate | Download | only in shill
      1 //
      2 // Copyright (C) 2014 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/device_claimer.h"
     18 
     19 #include <string>
     20 
     21 #include <gtest/gtest.h>
     22 
     23 #include "shill/error.h"
     24 #include "shill/mock_control.h"
     25 #include "shill/mock_device_info.h"
     26 
     27 using std::string;
     28 using ::testing::_;
     29 using ::testing::Mock;
     30 using ::testing::Return;
     31 
     32 namespace shill {
     33 
     34 const char kServiceName[] = "org.chromium.TestService";
     35 const char kTestDevice1Name[] = "test_device1";
     36 const char kTestDevice2Name[] = "test_device2";
     37 
     38 class DeviceClaimerTest : public testing::Test {
     39  public:
     40   DeviceClaimerTest()
     41      : device_info_(nullptr, nullptr, nullptr, nullptr),
     42        device_claimer_(kServiceName, &device_info_, false) {}
     43 
     44  protected:
     45   MockDeviceInfo device_info_;
     46   DeviceClaimer device_claimer_;
     47 };
     48 
     49 TEST_F(DeviceClaimerTest, ClaimAndReleaseDevices) {
     50   // Should not have any device claimed initially.
     51   EXPECT_FALSE(device_claimer_.DevicesClaimed());
     52 
     53   // Claim device 1.
     54   Error error;
     55   EXPECT_CALL(device_info_, AddDeviceToBlackList(kTestDevice1Name)).Times(1);
     56   EXPECT_TRUE(device_claimer_.Claim(kTestDevice1Name, &error));
     57   EXPECT_EQ(Error::kSuccess, error.type());
     58   EXPECT_TRUE(device_claimer_.DevicesClaimed());
     59   Mock::VerifyAndClearExpectations(&device_info_);
     60 
     61   // Claim device 2.
     62   error.Reset();
     63   EXPECT_CALL(device_info_, AddDeviceToBlackList(kTestDevice2Name)).Times(1);
     64   EXPECT_TRUE(device_claimer_.Claim(kTestDevice2Name, &error));
     65   EXPECT_EQ(Error::kSuccess, error.type());
     66   EXPECT_TRUE(device_claimer_.DevicesClaimed());
     67   Mock::VerifyAndClearExpectations(&device_info_);
     68 
     69   // Claim device 1 again, should fail since it is already claimed.
     70   const char kDuplicateDevice1Error[] =
     71       "Device test_device1 had already been claimed";
     72   error.Reset();
     73   EXPECT_CALL(device_info_, AddDeviceToBlackList(_)).Times(0);
     74   EXPECT_FALSE(device_claimer_.Claim(kTestDevice1Name, &error));
     75   EXPECT_EQ(string(kDuplicateDevice1Error), error.message());
     76   Mock::VerifyAndClearExpectations(&device_info_);
     77 
     78   // Release device 1.
     79   error.Reset();
     80   EXPECT_CALL(device_info_,
     81               RemoveDeviceFromBlackList(kTestDevice1Name)).Times(1);
     82   EXPECT_TRUE(device_claimer_.Release(kTestDevice1Name, &error));
     83   EXPECT_EQ(Error::kSuccess, error.type());
     84   // Should still have one device claimed.
     85   EXPECT_TRUE(device_claimer_.DevicesClaimed());
     86   Mock::VerifyAndClearExpectations(&device_info_);
     87 
     88   // Release device 1 again, should fail since device 1 is not currently
     89   // claimed.
     90   const char kDevice1NotClaimedError[] =
     91       "Device test_device1 have not been claimed";
     92   error.Reset();
     93   EXPECT_CALL(device_info_, RemoveDeviceFromBlackList(_)).Times(0);
     94   EXPECT_FALSE(device_claimer_.Release(kTestDevice1Name, &error));
     95   EXPECT_EQ(string(kDevice1NotClaimedError), error.message());
     96   // Should still have one device claimed.
     97   EXPECT_TRUE(device_claimer_.DevicesClaimed());
     98   Mock::VerifyAndClearExpectations(&device_info_);
     99 
    100   // Release device 2
    101   error.Reset();
    102   EXPECT_CALL(device_info_,
    103               RemoveDeviceFromBlackList(kTestDevice2Name)).Times(1);
    104   EXPECT_TRUE(device_claimer_.Release(kTestDevice2Name, &error));
    105   EXPECT_EQ(Error::kSuccess, error.type());
    106   Mock::VerifyAndClearExpectations(&device_info_);
    107 
    108   // Should not have any claimed devices.
    109   EXPECT_FALSE(device_claimer_.DevicesClaimed());
    110 }
    111 
    112 }  // namespace shill
    113