Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1028)

Side by Side Diff: content/common/database_connections_unittest.cc

Issue 2827933003: Move storage tests from content/common next to the files they cover. (Closed)
Patch Set: Add missing dep. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chromecast/BUILD.gn ('k') | content/common/database_identifier_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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/bind.h"
8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "base/threading/thread.h"
11 #include "base/threading/thread_task_runner_handle.h"
12 #include "storage/common/database/database_connections.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using base::ASCIIToUTF16;
16 using storage::DatabaseConnections;
17 using storage::DatabaseConnectionsWrapper;
18
19 namespace content {
20
21 namespace {
22
23 void RemoveConnectionTask(
24 const std::string& origin_id, const base::string16& database_name,
25 scoped_refptr<DatabaseConnectionsWrapper> obj,
26 bool* did_task_execute) {
27 *did_task_execute = true;
28 obj->RemoveOpenConnection(origin_id, database_name);
29 }
30
31 } // anonymous namespace
32
33 TEST(DatabaseConnectionsTest, DatabaseConnectionsTest) {
34 const std::string kOriginId("origin_id");
35 const base::string16 kName(ASCIIToUTF16("database_name"));
36 const base::string16 kName2(ASCIIToUTF16("database_name2"));
37 const int64_t kSize = 1000;
38
39 DatabaseConnections connections;
40
41 EXPECT_TRUE(connections.IsEmpty());
42 EXPECT_FALSE(connections.IsDatabaseOpened(kOriginId, kName));
43 EXPECT_FALSE(connections.IsOriginUsed(kOriginId));
44
45 connections.AddConnection(kOriginId, kName);
46 EXPECT_FALSE(connections.IsEmpty());
47 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName));
48 EXPECT_TRUE(connections.IsOriginUsed(kOriginId));
49 EXPECT_EQ(0, connections.GetOpenDatabaseSize(kOriginId, kName));
50 connections.SetOpenDatabaseSize(kOriginId, kName, kSize);
51 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
52
53 connections.RemoveConnection(kOriginId, kName);
54 EXPECT_TRUE(connections.IsEmpty());
55 EXPECT_FALSE(connections.IsDatabaseOpened(kOriginId, kName));
56 EXPECT_FALSE(connections.IsOriginUsed(kOriginId));
57
58 connections.AddConnection(kOriginId, kName);
59 connections.SetOpenDatabaseSize(kOriginId, kName, kSize);
60 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
61 connections.AddConnection(kOriginId, kName);
62 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
63 EXPECT_FALSE(connections.IsEmpty());
64 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName));
65 EXPECT_TRUE(connections.IsOriginUsed(kOriginId));
66 connections.AddConnection(kOriginId, kName2);
67 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName2));
68
69 DatabaseConnections another;
70 another.AddConnection(kOriginId, kName);
71 another.AddConnection(kOriginId, kName2);
72
73 std::vector<std::pair<std::string, base::string16> > closed_dbs;
74 connections.RemoveConnections(another, &closed_dbs);
75 EXPECT_EQ(1u, closed_dbs.size());
76 EXPECT_EQ(kOriginId, closed_dbs[0].first);
77 EXPECT_EQ(kName2, closed_dbs[0].second);
78 EXPECT_FALSE(connections.IsDatabaseOpened(kOriginId, kName2));
79 EXPECT_TRUE(connections.IsDatabaseOpened(kOriginId, kName));
80 EXPECT_EQ(kSize, connections.GetOpenDatabaseSize(kOriginId, kName));
81 another.RemoveAllConnections();
82 connections.RemoveAllConnections();
83 EXPECT_TRUE(connections.IsEmpty());
84
85 // Ensure the return value properly indicates the initial
86 // addition and final removal.
87 EXPECT_TRUE(connections.AddConnection(kOriginId, kName));
88 EXPECT_FALSE(connections.AddConnection(kOriginId, kName));
89 EXPECT_FALSE(connections.AddConnection(kOriginId, kName));
90 EXPECT_FALSE(connections.RemoveConnection(kOriginId, kName));
91 EXPECT_FALSE(connections.RemoveConnection(kOriginId, kName));
92 EXPECT_TRUE(connections.RemoveConnection(kOriginId, kName));
93 }
94
95 TEST(DatabaseConnectionsTest, DatabaseConnectionsWrapperTest) {
96 const std::string kOriginId("origin_id");
97 const base::string16 kName(ASCIIToUTF16("database_name"));
98
99 base::MessageLoop message_loop;
100 scoped_refptr<DatabaseConnectionsWrapper> obj(new DatabaseConnectionsWrapper);
101 EXPECT_FALSE(obj->HasOpenConnections());
102 obj->AddOpenConnection(kOriginId, kName);
103 EXPECT_TRUE(obj->HasOpenConnections());
104 obj->AddOpenConnection(kOriginId, kName);
105 EXPECT_TRUE(obj->HasOpenConnections());
106 obj->RemoveOpenConnection(kOriginId, kName);
107 EXPECT_TRUE(obj->HasOpenConnections());
108 obj->RemoveOpenConnection(kOriginId, kName);
109 EXPECT_FALSE(obj->HasOpenConnections());
110 EXPECT_TRUE(obj->WaitForAllDatabasesToClose(base::TimeDelta()));
111
112 // Test WaitForAllDatabasesToClose with the last connection
113 // being removed on another thread.
114 obj->AddOpenConnection(kOriginId, kName);
115 EXPECT_FALSE(obj->WaitForAllDatabasesToClose(base::TimeDelta()));
116 base::Thread thread("WrapperTestThread");
117 thread.Start();
118 bool did_task_execute = false;
119 thread.task_runner()->PostTask(
120 FROM_HERE, base::Bind(&RemoveConnectionTask, kOriginId, kName, obj,
121 &did_task_execute));
122 // Use a long timeout value to avoid timeouts on test bots.
123 EXPECT_TRUE(obj->WaitForAllDatabasesToClose(
124 base::TimeDelta::FromSeconds(15)));
125 EXPECT_TRUE(did_task_execute);
126 EXPECT_FALSE(obj->HasOpenConnections());
127 }
128
129 } // namespace content
OLDNEW
« no previous file with comments | « chromecast/BUILD.gn ('k') | content/common/database_identifier_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698