1 // Copyright 2020 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 "services/network/trust_tokens/trust_token_database_owner.h"
6 #include "base/task/post_task.h"
7 #include "base/test/bind.h"
8 #include "base/test/task_environment.h"
9 #include "base/threading/thread_task_runner_handle.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11
12 namespace network {
13
TEST(TrustTokenDatabaseOwner,Initializes)14 TEST(TrustTokenDatabaseOwner, Initializes) {
15 base::test::TaskEnvironment env;
16 std::unique_ptr<TrustTokenDatabaseOwner> owner;
17 TrustTokenDatabaseOwner::Create(
18 /*db_opener=*/base::BindOnce([](sql::Database* db) {
19 CHECK(db->OpenInMemory());
20 return true;
21 }),
22 base::ThreadTaskRunnerHandle::Get(),
23 /*flush_delay_for_writes=*/base::TimeDelta(),
24 /*on_done_initializing=*/
25 base::BindLambdaForTesting(
26 [&owner](std::unique_ptr<TrustTokenDatabaseOwner> created) {
27 owner = std::move(created);
28 base::RunLoop().Quit();
29 }));
30 env.RunUntilIdle();
31 ASSERT_TRUE(owner);
32 EXPECT_TRUE(owner->IssuerData());
33 EXPECT_TRUE(owner->IssuerToplevelPairData());
34 EXPECT_TRUE(owner->ToplevelData());
35
36 owner.reset();
37 // Wait until TrustTokenDatabaseOwner finishes closing its database
38 // asynchronously, so as not to leak after the test concludes.
39 env.RunUntilIdle();
40 }
41
TEST(TrustTokenDatabaseOwner,StillInitializesOnDbOpenFailure)42 TEST(TrustTokenDatabaseOwner, StillInitializesOnDbOpenFailure) {
43 base::test::TaskEnvironment env;
44
45 // The database opener callback returning failure should still lead to a
46 // usable state (albeit not one that writes through to a database).
47 std::unique_ptr<TrustTokenDatabaseOwner> owner;
48 TrustTokenDatabaseOwner::Create(
49 /*db_opener=*/base::BindOnce([](sql::Database* unused) { return false; }),
50 base::ThreadTaskRunnerHandle::Get(),
51 /*flush_delay_for_writes=*/base::TimeDelta(),
52 /*on_done_initializing=*/
53 base::BindLambdaForTesting(
54 [&owner](std::unique_ptr<TrustTokenDatabaseOwner> created) {
55 owner = std::move(created);
56 base::RunLoop().Quit();
57 }));
58 env.RunUntilIdle();
59
60 ASSERT_TRUE(owner);
61 EXPECT_TRUE(owner->IssuerData());
62 EXPECT_TRUE(owner->IssuerToplevelPairData());
63 EXPECT_TRUE(owner->ToplevelData());
64
65 owner.reset();
66 // Wait until TrustTokenDatabaseOwner finishes closing its database
67 // asynchronously, so as not to leak after the test concludes.
68 env.RunUntilIdle();
69 }
70
71 } // namespace network
72