1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "remoting/host/pairing_registry_delegate_linux.h" 6 7 #include "base/file_util.h" 8 #include "base/timer/timer.h" 9 #include "base/values.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 namespace remoting { 13 14 using protocol::PairingRegistry; 15 16 class PairingRegistryDelegateLinuxTest : public testing::Test { 17 public: 18 virtual void SetUp() OVERRIDE { 19 // Create a temporary directory in order to get a unique name and use a 20 // subdirectory to ensure that PairingRegistryDelegateLinux::Save() creates 21 // the parent directory if it doesn't exist. 22 file_util::CreateNewTempDirectory("chromoting-test", &temp_dir_); 23 temp_registry_ = temp_dir_.Append("paired-clients"); 24 } 25 26 virtual void TearDown() OVERRIDE { 27 base::DeleteFile(temp_dir_, true); 28 } 29 30 protected: 31 base::FilePath temp_dir_; 32 base::FilePath temp_registry_; 33 }; 34 35 TEST_F(PairingRegistryDelegateLinuxTest, SaveAndLoad) { 36 scoped_ptr<PairingRegistryDelegateLinux> delegate( 37 new PairingRegistryDelegateLinux()); 38 delegate->SetRegistryPathForTesting(temp_registry_); 39 40 // Check that registry is initially empty. 41 EXPECT_TRUE(delegate->LoadAll()->empty()); 42 43 // Add a couple of pairings. 44 PairingRegistry::Pairing pairing1(base::Time::Now(), "xxx", "xxx", "xxx"); 45 PairingRegistry::Pairing pairing2(base::Time::Now(), "yyy", "yyy", "yyy"); 46 EXPECT_TRUE(delegate->Save(pairing1)); 47 EXPECT_TRUE(delegate->Save(pairing2)); 48 49 // Verify that there are two pairings in the store now. 50 EXPECT_EQ(delegate->LoadAll()->GetSize(), 2u); 51 52 // Verify that they can be retrieved. 53 EXPECT_EQ(delegate->Load(pairing1.client_id()), pairing1); 54 EXPECT_EQ(delegate->Load(pairing2.client_id()), pairing2); 55 56 // Delete the first pairing. 57 EXPECT_TRUE(delegate->Delete(pairing1.client_id())); 58 59 // Verify that there is only one pairing left. 60 EXPECT_EQ(delegate->Load(pairing1.client_id()), PairingRegistry::Pairing()); 61 EXPECT_EQ(delegate->Load(pairing2.client_id()), pairing2); 62 63 // Verify that the only value that left is |pairing2|. 64 EXPECT_EQ(delegate->LoadAll()->GetSize(), 1u); 65 scoped_ptr<base::ListValue> pairings = delegate->LoadAll(); 66 base::DictionaryValue* json; 67 EXPECT_TRUE(pairings->GetDictionary(0, &json)); 68 EXPECT_EQ(PairingRegistry::Pairing::CreateFromValue(*json), pairing2); 69 70 // Delete the rest and verify. 71 EXPECT_TRUE(delegate->DeleteAll()); 72 EXPECT_TRUE(delegate->LoadAll()->empty()); 73 } 74 75 // Verifies that the delegate is stateless by using two different instances. 76 TEST_F(PairingRegistryDelegateLinuxTest, Stateless) { 77 scoped_ptr<PairingRegistryDelegateLinux> save_delegate( 78 new PairingRegistryDelegateLinux()); 79 scoped_ptr<PairingRegistryDelegateLinux> load_delegate( 80 new PairingRegistryDelegateLinux()); 81 save_delegate->SetRegistryPathForTesting(temp_registry_); 82 load_delegate->SetRegistryPathForTesting(temp_registry_); 83 84 PairingRegistry::Pairing pairing(base::Time::Now(), "xxx", "xxx", "xxx"); 85 EXPECT_TRUE(save_delegate->Save(pairing)); 86 EXPECT_EQ(load_delegate->Load(pairing.client_id()), pairing); 87 } 88 89 } // namespace remoting 90