| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "remoting/host/pairing_registry_delegate_linux.h" |
| |
| #include "base/files/file_util.h" |
| #include "base/values.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace remoting { |
| |
| using protocol::PairingRegistry; |
| |
| class PairingRegistryDelegateLinuxTest : public testing::Test { |
| public: |
| void SetUp() override { |
| // Create a temporary directory in order to get a unique name and use a |
| // subdirectory to ensure that PairingRegistryDelegateLinux::Save() creates |
| // the parent directory if it doesn't exist. |
| base::CreateNewTempDirectory("chromoting-test", &temp_dir_); |
| temp_registry_ = temp_dir_.Append("paired-clients"); |
| } |
| |
| void TearDown() override { base::DeleteFile(temp_dir_, true); } |
| |
| protected: |
| base::FilePath temp_dir_; |
| base::FilePath temp_registry_; |
| }; |
| |
| TEST_F(PairingRegistryDelegateLinuxTest, SaveAndLoad) { |
| std::unique_ptr<PairingRegistryDelegateLinux> delegate( |
| new PairingRegistryDelegateLinux()); |
| delegate->SetRegistryPathForTesting(temp_registry_); |
| |
| // Check that registry is initially empty. |
| EXPECT_TRUE(delegate->LoadAll()->empty()); |
| |
| // Add a couple of pairings. |
| PairingRegistry::Pairing pairing1(base::Time::Now(), "xxx", "xxx", "xxx"); |
| PairingRegistry::Pairing pairing2(base::Time::Now(), "yyy", "yyy", "yyy"); |
| EXPECT_TRUE(delegate->Save(pairing1)); |
| EXPECT_TRUE(delegate->Save(pairing2)); |
| |
| // Verify that there are two pairings in the store now. |
| EXPECT_EQ(delegate->LoadAll()->GetSize(), 2u); |
| |
| // Verify that they can be retrieved. |
| EXPECT_EQ(delegate->Load(pairing1.client_id()), pairing1); |
| EXPECT_EQ(delegate->Load(pairing2.client_id()), pairing2); |
| |
| // Delete the first pairing. |
| EXPECT_TRUE(delegate->Delete(pairing1.client_id())); |
| |
| // Verify that there is only one pairing left. |
| EXPECT_EQ(delegate->Load(pairing1.client_id()), PairingRegistry::Pairing()); |
| EXPECT_EQ(delegate->Load(pairing2.client_id()), pairing2); |
| |
| // Verify that the only value that left is |pairing2|. |
| EXPECT_EQ(delegate->LoadAll()->GetSize(), 1u); |
| std::unique_ptr<base::ListValue> pairings = delegate->LoadAll(); |
| base::DictionaryValue* json; |
| EXPECT_TRUE(pairings->GetDictionary(0, &json)); |
| EXPECT_EQ(PairingRegistry::Pairing::CreateFromValue(*json), pairing2); |
| |
| // Delete the rest and verify. |
| EXPECT_TRUE(delegate->DeleteAll()); |
| EXPECT_TRUE(delegate->LoadAll()->empty()); |
| } |
| |
| // Verifies that the delegate is stateless by using two different instances. |
| TEST_F(PairingRegistryDelegateLinuxTest, Stateless) { |
| std::unique_ptr<PairingRegistryDelegateLinux> save_delegate( |
| new PairingRegistryDelegateLinux()); |
| std::unique_ptr<PairingRegistryDelegateLinux> load_delegate( |
| new PairingRegistryDelegateLinux()); |
| save_delegate->SetRegistryPathForTesting(temp_registry_); |
| load_delegate->SetRegistryPathForTesting(temp_registry_); |
| |
| PairingRegistry::Pairing pairing(base::Time::Now(), "xxx", "xxx", "xxx"); |
| EXPECT_TRUE(save_delegate->Save(pairing)); |
| EXPECT_EQ(load_delegate->Load(pairing.client_id()), pairing); |
| } |
| |
| } // namespace remoting |