shill: Static IP: Save DHCP-supplied IP parameters
Before Static IP parameters are applied to an IPConfig, save
all DHCP-supplied parameters to corresponding "SavedIP.*"
values in the service. This way the UI can display:
* The current IP address confgured on the interface by
showing the IPConfig value.
* The current user-supplied static IP parameter by showing
the "StaticIP.*" parameter.
* The DHCP-supplied IP parameter by first checking for a
"SavedIP.*" parameter, failing that, using the IPConfig
parameter.
BUG=chromium-os:33223
TEST=New unit test + manual (set StaticIP.Address parameter,
reconnect, and confirm that both SavedIP.Address and StaticIP.Address
parameters are set on the service)
Change-Id: I6410b003bbdc63097a193cfb09881c862dcef5bd
Reviewed-on: https://gerrit.chromium.org/gerrit/29130
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/static_ip_parameters_unittest.cc b/static_ip_parameters_unittest.cc
index 73397c7..649f5fe 100644
--- a/static_ip_parameters_unittest.cc
+++ b/static_ip_parameters_unittest.cc
@@ -38,8 +38,6 @@
public:
StaticIpParametersTest() {}
- void PopulateParams();
- void PopulateProps();
void ExpectEmpty() {
EXPECT_TRUE(props_.address.empty());
EXPECT_TRUE(props_.gateway.empty());
@@ -172,4 +170,65 @@
static_params_.Save(&store, kID);
}
+TEST_F(StaticIpParametersTest, SavedParameters) {
+ const int32 kOffset = 1234;
+ const string kPrefix("xxx");
+ PropertyStore store;
+ static_params_.PlumbPropertyStore(&store);
+ Error error;
+ store.SetStringProperty("StaticIP.Address", kPrefix + kAddress, &error);
+ store.SetStringProperty("StaticIP.Gateway", kPrefix + kGateway, &error);
+ store.SetInt32Property("StaticIP.Mtu", kOffset + kMtu, &error);
+ store.SetStringProperty(
+ "StaticIP.NameServers", kPrefix + kNameServers, &error);
+ store.SetStringProperty(
+ "StaticIP.PeerAddress", kPrefix + kPeerAddress, &error);
+ store.SetInt32Property("StaticIP.Prefixlen", kOffset + kPrefixLen, &error);
+ Populate();
+ static_params_.ApplyTo(&props_);
+
+ PropertyStoreInspector inspector(&store);
+ string string_value;
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.Address", &string_value));
+ EXPECT_EQ(kAddress, string_value);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.Gateway", &string_value));
+ EXPECT_EQ(kGateway, string_value);
+ int32 int_value;
+ EXPECT_TRUE(inspector.GetInt32Property("SavedIP.Mtu", &int_value));
+ EXPECT_EQ(kMtu, int_value);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.NameServers",
+ &string_value));
+ EXPECT_EQ(kNameServers, string_value);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.PeerAddress",
+ &string_value));
+ EXPECT_EQ(kPeerAddress, string_value);
+ EXPECT_TRUE(inspector.GetInt32Property("SavedIP.Prefixlen",
+ &int_value));
+ EXPECT_EQ(kPrefixLen, int_value);
+
+ store.ClearProperty("StaticIP.Address", &error);
+ store.ClearProperty("StaticIP.Gateway", &error);
+ store.ClearProperty("StaticIP.Mtu", &error);
+ store.ClearProperty( "StaticIP.NameServers", &error);
+ store.ClearProperty( "StaticIP.PeerAddress", &error);
+ store.ClearProperty("StaticIP.Prefixlen", &error);
+
+ static_params_.ApplyTo(&props_);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.Address", &string_value));
+ EXPECT_EQ(kPrefix + kAddress, string_value);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.Gateway", &string_value));
+ EXPECT_EQ(kPrefix + kGateway, string_value);
+ EXPECT_TRUE(inspector.GetInt32Property("SavedIP.Mtu", &int_value));
+ EXPECT_EQ(kOffset + kMtu, int_value);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.NameServers",
+ &string_value));
+ EXPECT_EQ(kPrefix + kNameServers, string_value);
+ EXPECT_TRUE(inspector.GetStringProperty("SavedIP.PeerAddress",
+ &string_value));
+ EXPECT_EQ(kPrefix + kPeerAddress, string_value);
+ EXPECT_TRUE(inspector.GetInt32Property("SavedIP.Prefixlen",
+ &int_value));
+ EXPECT_EQ(kOffset + kPrefixLen, int_value);
+}
+
} // namespace shill