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