1a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// 2a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// Copyright (C) 2015 The Android Open Source Project 3a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// 4a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// Licensed under the Apache License, Version 2.0 (the "License"); 5a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// you may not use this file except in compliance with the License. 6a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// You may obtain a copy of the License at 7a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// 8a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// http://www.apache.org/licenses/LICENSE-2.0 9a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// 10a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// Unless required by applicable law or agreed to in writing, software 11a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// distributed under the License is distributed on an "AS IS" BASIS, 12a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// See the License for the specific language governing permissions and 14a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// limitations under the License. 15a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein// 16a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 17a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein#include "shill/dhcp_properties.h" 18a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 1962d57630fe05899743f319326bd99168fc2cd69cRebecca Silberstein#if defined(__ANDROID__) 2062d57630fe05899743f319326bd99168fc2cd69cRebecca Silberstein#include <dbus/service_constants.h> 2162d57630fe05899743f319326bd99168fc2cd69cRebecca Silberstein#else 22a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein#include <chromeos/dbus/service_constants.h> 2362d57630fe05899743f319326bd99168fc2cd69cRebecca Silberstein#endif // __ANDROID__ 24a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein#include <gtest/gtest.h> 25a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 26a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein#include "shill/mock_property_store.h" 27a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein#include "shill/mock_store.h" 28a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 29a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing std::string; 30a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing std::unique_ptr; 31a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing testing::_; 32a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing testing::DoAll; 33a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing testing::Mock; 34a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing testing::Return; 35a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing testing::SetArgumentPointee; 36a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinusing testing::Test; 37a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 38a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinnamespace shill { 39a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 40a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinnamespace { 41a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinconst char kVendorClass[] = "Chromebook"; 42a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinconst char kHostname[] = "TestHost"; 43a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinconst char kStorageID[] = "dhcp_service_id"; 44a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinconst char kOverrideValue[] = "override"; 45a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 46a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 47a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silbersteinclass DhcpPropertiesTest : public Test { 48a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein public: 49a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpPropertiesTest() { } 50a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 51a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein virtual ~DhcpPropertiesTest() { } 52a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 53a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein protected: 54a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties dhcp_properties_; 55a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein}; 56a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 57a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, Ctor) { 58a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(dhcp_properties_.properties_.IsEmpty()); 59a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 60a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 61a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, InitPropertyStore) { 62a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 63a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 64a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 65a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 66a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein string value_in_prop_store; 67a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein // DHCPProperty.Hostname is a valid option. 68a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(store.GetStringProperty("DHCPProperty.Hostname", 69a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein &value_in_prop_store, 70a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein &error)); 71a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(Error::kNotFound, error.type()); 72a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 73a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein // DHCPProperty.VendorClass is a valid option. 74a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(store.GetStringProperty("DHCPProperty.VendorClass", 75a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein &value_in_prop_store, 76a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein &error)); 77a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(Error::kNotFound, error.type()); 78a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 79a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein // DhcpProperty.NotAProp is not a valid option. 80a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(store.GetStringProperty("DHCPProperty.NotAProp", 81a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein &value_in_prop_store, 82a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein &error)); 83a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(Error::kInvalidProperty, error.type()); 84a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 85a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 86a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, SetMappedStringPropertyOverrideExisting) { 87a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 88a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 89a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 90a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 91a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 92a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(store.SetStringProperty("DHCPProperty.Hostname", kOverrideValue, &error)); 93a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kOverrideValue, dhcp_properties_.properties_.GetString("Hostname")); 94a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 95a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 96a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, SetMappedStringPropertyNoExistingValue) { 97a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 98a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 99a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 100a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 101a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(store.SetStringProperty("DHCPProperty.Hostname", kHostname, &error)); 102a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kHostname, dhcp_properties_.properties_.GetString("Hostname")); 103a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 104a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 105a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, SetMappedStringPropertySameAsExistingValue) { 106a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 107a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 108a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 109a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 110a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 111a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(store.SetStringProperty("DHCPProperty.Hostname", kHostname, &error)); 112a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kHostname, dhcp_properties_.properties_.GetString("Hostname")); 113a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 114a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 115a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, GetMappedStringPropertyWithSetValue) { 116a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 117a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 118a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 119a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 120a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 121a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein string value_in_prop_store; 122a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein store.GetStringProperty("DHCPProperty.Hostname", &value_in_prop_store, &error); 123a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kHostname, value_in_prop_store); 124a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 125a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 126a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, GetMappedStringPropertyNoExistingValue) { 127a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 128a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 129a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 130a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 131a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein string value_in_prop_store; 132a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein store.GetStringProperty("DHCPProperty.Hostname", &value_in_prop_store, &error); 133a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(Error::kNotFound, error.type()); 134a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 135a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 136a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, ClearMappedStringPropertyWithSetValue) { 137a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 138a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 139a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 140a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 141a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 142a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein string value_in_prop_store; 143a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein store.ClearProperty("DHCPProperty.Hostname", &error); 144a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(dhcp_properties_.properties_.ContainsString("Hostname")); 145a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 146a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 147a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, ClearMappedStringPropertyNoExistingValue) { 148a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein PropertyStore store; 149a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.InitPropertyStore(&store); 150a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 151a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Error error; 152a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein string value_in_prop_store; 153a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein store.ClearProperty("DHCPProperty.Hostname", &error); 154a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(Error::kNotFound, error.type()); 155a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 156a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 157a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, LoadEmpty) { 158a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein MockStore storage; 159a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, GetString(kStorageID, "DHCPProperty.VendorClass", _)) 160a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(false)); 161a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, GetString(kStorageID, "DHCPProperty.Hostname", _)) 162a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(false)); 163a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.Load(&storage, kStorageID); 164a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(dhcp_properties_.properties_.IsEmpty()); 165a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 166a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 167a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, Load) { 168a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein MockStore storage; 169a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, GetString(kStorageID, "DHCPProperty.VendorClass", _)) 170a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(DoAll(SetArgumentPointee<2>(string(kVendorClass)), 171a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Return(true))); 172a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, GetString(kStorageID, "DHCPProperty.Hostname", _)) 173a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(DoAll(SetArgumentPointee<2>(string(kHostname)), 174a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Return(true))); 175a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.Load(&storage, kStorageID); 176a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kVendorClass, 177a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.GetString("VendorClass")); 178a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kHostname, dhcp_properties_.properties_.GetString("Hostname")); 179a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 180a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 181a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, LoadWithValuesSetAndClearRequired) { 182a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein MockStore storage; 183a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 184a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 185a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, GetString(kStorageID, "DHCPProperty.VendorClass", _)) 186a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(DoAll(SetArgumentPointee<2>(string(kVendorClass)), 187a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein Return(true))); 188a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, GetString(kStorageID, "DHCPProperty.Hostname", _)) 189a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(false)); 190a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.Load(&storage, kStorageID); 191a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kVendorClass, dhcp_properties_.properties_.GetString("VendorClass")); 192a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(dhcp_properties_.properties_.Contains("Hostname")); 193a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 194a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 195a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, SaveWithValuesSet) { 196a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein MockStore storage; 197a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("VendorClass", kVendorClass); 198a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", ""); 199a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 200a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, 201a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein SetString(kStorageID, "DHCPProperty.VendorClass", kVendorClass)) 202a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(true)); 203a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, 204a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein SetString(kStorageID, "DHCPProperty.Hostname", "")) 205a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(true)); 206a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.Save(&storage, kStorageID); 207a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 208a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 209a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, SavePropertyNotSetShouldBeDeleted) { 210a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein MockStore storage; 211a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("VendorClass", kVendorClass); 212a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 213a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, SetString(_, _, _)).Times(0); 214a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, 215a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein SetString(kStorageID, "DHCPProperty.VendorClass", kVendorClass)) 216a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(true)); 217a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_CALL(storage, 218a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DeleteKey(kStorageID, "DHCPProperty.Hostname")) 219a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein .WillOnce(Return(true)); 220a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.Save(&storage, kStorageID); 221a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 222a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 223a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, CombineIntoEmpty) { 224a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties to_merge; 225a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein to_merge.properties_.SetString("VendorClass", kVendorClass); 226a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein to_merge.properties_.SetString("Hostname", kHostname); 227a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 228a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein unique_ptr<DhcpProperties> merged_props = 229a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties::Combine(dhcp_properties_, to_merge); 230a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(merged_props->properties_, to_merge.properties_); 231a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 232a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 233a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, CombineEmptyIntoExisting) { 234a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties to_merge; 235a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("VendorClass", kVendorClass); 236a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 237a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 238a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein unique_ptr<DhcpProperties> merged_props = 239a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties::Combine(dhcp_properties_, to_merge); 240a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(merged_props->properties_, dhcp_properties_.properties_); 241a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 242a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 243a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, CombineConflicting) { 244a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties to_merge; 245a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein to_merge.properties_.SetString("VendorClass", kOverrideValue); 246a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein to_merge.properties_.SetString("Hostname", kHostname); 247a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("VendorClass", kVendorClass); 248a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 249a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein unique_ptr<DhcpProperties> merged_props = 250a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein DhcpProperties::Combine(dhcp_properties_, to_merge); 251a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kOverrideValue, merged_props->properties_.GetString("VendorClass")); 252a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kHostname, merged_props->properties_.GetString("Hostname")); 253a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 254a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 255a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca SilbersteinTEST_F(DhcpPropertiesTest, GetValueForProperty) { 256a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein string value; 257a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(dhcp_properties_.GetValueForProperty("VendorClass", &value)); 258a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(dhcp_properties_.GetValueForProperty("Hostname", &value)); 259a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 260a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("VendorClass", kVendorClass); 261a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(dhcp_properties_.GetValueForProperty("VendorClass", &value)); 262a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kVendorClass, value); 263a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_FALSE(dhcp_properties_.GetValueForProperty("Hostname", &value)); 264a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 265a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein dhcp_properties_.properties_.SetString("Hostname", kHostname); 266a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(dhcp_properties_.GetValueForProperty("VendorClass", &value)); 267a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kVendorClass, value); 268a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_TRUE(dhcp_properties_.GetValueForProperty("Hostname", &value)); 269a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein EXPECT_EQ(kHostname, value); 270a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} 271a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein 272a77c5e24c871e2b25b2ca4def689388ba6c6892bRebecca Silberstein} // namespace shill 273