1 // Copyright 2014 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 <stdint.h>
6
7 #include "base/strings/utf_string_conversions.h"
8 #include "storage/common/database/database_connections.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10
11 using base::ASCIIToUTF16;
12
13 namespace storage {
14
TEST(DatabaseConnectionsTest,DatabaseConnectionsTest)15 TEST(DatabaseConnectionsTest, DatabaseConnectionsTest) {
16 const std::string kOriginId("origin_id");
17 const base::string16 kName(ASCIIToUTF16("database_name"));
18 const base::string16 kName2(ASCIIToUTF16("database_name2"));
19 const int64_t kSize = 1000;
20
21 DatabaseConnections connections;
22
23 EXPECT_TRUE(connections.IsEmpty());
24 EXPECT_FALSE(connections.IsDatabaseOpened(kOriginId, kName));
25 EXPECT_FALSE(connections.IsOriginUsed(kOriginId));
26
27 connections.AddConnection(kOriginId, kName);
28 EXPECT_FALSE(connections.IsEmpty());
29 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName));
30 EXPECT_TRUE(connections.IsOriginUsed(kOriginId));
31 EXPECT_EQ(0, connections.GetOpenDatabaseSize(kOriginId, kName));
32 connections.SetOpenDatabaseSize(kOriginId, kName, kSize);
33 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
34
35 connections.RemoveConnection(kOriginId, kName);
36 EXPECT_TRUE(connections.IsEmpty());
37 EXPECT_FALSE(connections.IsDatabaseOpened(kOriginId, kName));
38 EXPECT_FALSE(connections.IsOriginUsed(kOriginId));
39
40 connections.AddConnection(kOriginId, kName);
41 connections.SetOpenDatabaseSize(kOriginId, kName, kSize);
42 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
43 connections.AddConnection(kOriginId, kName);
44 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
45 EXPECT_FALSE(connections.IsEmpty());
46 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName));
47 EXPECT_TRUE(connections.IsOriginUsed(kOriginId));
48 connections.AddConnection(kOriginId, kName2);
49 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName2));
50
51 DatabaseConnections another;
52 another.AddConnection(kOriginId, kName);
53 another.AddConnection(kOriginId, kName2);
54
55 std::vector<std::pair<std::string, base::string16>> closed_dbs =
56 connections.RemoveConnections(another);
57 EXPECT_EQ(1u, closed_dbs.size());
58 EXPECT_EQ(kOriginId, closed_dbs[0].first);
59 EXPECT_EQ(kName2, closed_dbs[0].second);
60 EXPECT_FALSE(connections.IsDatabaseOpened(kOriginId, kName2));
61 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName));
62 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
63 another.RemoveAllConnections();
64 connections.RemoveAllConnections();
65 EXPECT_TRUE(connections.IsEmpty());
66
67 // Ensure the return value properly indicates the initial
68 // addition and final removal.
69 EXPECT_TRUE(connections.AddConnection(kOriginId, kName));
70 EXPECT_FALSE(connections.AddConnection(kOriginId, kName));
71 EXPECT_FALSE(connections.AddConnection(kOriginId, kName));
72 EXPECT_FALSE(connections.RemoveConnection(kOriginId, kName));
73 EXPECT_FALSE(connections.RemoveConnection(kOriginId, kName));
74 EXPECT_TRUE(connections.RemoveConnection(kOriginId, kName));
75 }
76
77 } // namespace storage
78