shill: Purge service/wifi_service state on Unload
Clear relevant state from Service and WiFiService when manager
notifies the service that it is no longer backed by a Profile.
BUG=chromium-os:22947
TEST=New unit tests
Change-Id: I048d2692fade5b883332e727be39f86caf4ed7f0
Reviewed-on: https://gerrit.chromium.org/gerrit/13880
Commit-Ready: Paul Stewart <pstew@chromium.org>
Reviewed-by: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/wifi_service_unittest.cc b/wifi_service_unittest.cc
index 7254bd0..99bb635 100644
--- a/wifi_service_unittest.cc
+++ b/wifi_service_unittest.cc
@@ -36,6 +36,7 @@
using ::testing::Return;
using ::testing::SetArgumentPointee;
using ::testing::StrEq;
+using ::testing::StrNe;
class WiFiServiceTest : public PropertyStoreTest {
public:
@@ -431,6 +432,44 @@
false));
}
+TEST_F(WiFiServiceTest, LoadAndUnloadPassphrase) {
+ vector<uint8_t> ssid(5);
+ ssid.push_back(0xff);
+
+ WiFiServiceRefPtr service = new WiFiService(control_interface(),
+ dispatcher(),
+ manager(),
+ wifi(),
+ ssid,
+ flimflam::kModeManaged,
+ flimflam::kSecurityPsk,
+ false);
+ NiceMock<MockStore> mock_store;
+ const string storage_id = service->GetStorageIdentifier();
+ EXPECT_CALL(mock_store, ContainsGroup(StrEq(storage_id)))
+ .WillRepeatedly(Return(true));
+ EXPECT_CALL(mock_store, GetBool(_, _, _))
+ .WillRepeatedly(Return(false));
+ const string passphrase = "passphrase";
+ EXPECT_CALL(mock_store,
+ GetCryptedString(StrEq(storage_id),
+ WiFiService::kStoragePassphrase, _))
+ .WillRepeatedly(DoAll(SetArgumentPointee<2>(passphrase), Return(true)));
+ EXPECT_CALL(mock_store,
+ GetCryptedString(StrEq(storage_id),
+ StrNe(WiFiService::kStoragePassphrase), _))
+ .WillRepeatedly(Return(false));
+ EXPECT_TRUE(service->need_passphrase_);
+ EXPECT_TRUE(service->Load(&mock_store));
+ EXPECT_EQ(passphrase, service->passphrase_);
+ EXPECT_TRUE(service->connectable());
+ EXPECT_FALSE(service->need_passphrase_);
+ service->Unload();
+ EXPECT_EQ(string(""), service->passphrase_);
+ EXPECT_FALSE(service->connectable());
+ EXPECT_TRUE(service->need_passphrase_);
+}
+
TEST_F(WiFiServiceTest, ParseStorageIdentifier) {
vector<uint8_t> ssid(5);
ssid.push_back(0xff);