Skip to content
File

Blob: src/workerd/util/sqlite-metadata-test.c++

2.3 KB
1// Copyright (c) 2024 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4 
5#include "sqlite-metadata.h"
6 
7#include <kj/test.h>
8 
9namespace workerd {
10namespace {
11 
12struct GlobalInit {
13 GlobalInit() {
14 installSqliteCustomAllocator();
15 }
16};
17 
18static GlobalInit init;
19 
20KJ_TEST("SQLite-METADATA") {
21 auto dir = kj::newInMemoryDirectory(kj::nullClock());
22 SqliteDatabase::Vfs vfs(*dir);
23 SqliteDatabase db(vfs, kj::Path({"foo"}), kj::WriteMode::CREATE | kj::WriteMode::MODIFY);
24 SqliteMetadata metadata(db);
25 
26 // Initial state has empty alarm
27 KJ_EXPECT(metadata.getAlarm() == kj::none);
28 
29 // Can set alarm to an explicit time
30 constexpr kj::Date anAlarmTime1 =
31 kj::UNIX_EPOCH + 1734099316 * kj::SECONDS + 987654321 * kj::NANOSECONDS;
32 metadata.setAlarm(anAlarmTime1, /*allowUnconfirmed=*/false);
33 
34 // Can get the set alarm time
35 KJ_EXPECT(metadata.getAlarm() == anAlarmTime1);
36 
37 // Can overwrite the alarm time
38 constexpr kj::Date anAlarmTime2 = anAlarmTime1 + 1 * kj::NANOSECONDS;
39 metadata.setAlarm(anAlarmTime2, /*allowUnconfirmed=*/false);
40 KJ_EXPECT(metadata.getAlarm() != anAlarmTime1);
41 KJ_EXPECT(metadata.getAlarm() == anAlarmTime2);
42 
43 // Can clear alarm
44 metadata.setAlarm(kj::none, /*allowUnconfirmed=*/false);
45 KJ_EXPECT(metadata.getAlarm() == kj::none);
46 
47 // Zero alarm is distinct from unset (probably not important, but just checking)
48 metadata.setAlarm(kj::UNIX_EPOCH, /*allowUnconfirmed=*/false);
49 KJ_EXPECT(metadata.getAlarm() == kj::UNIX_EPOCH);
50 
51 // Can recreate table after resetting database
52 metadata.setAlarm(anAlarmTime1, /*allowUnconfirmed=*/false);
53 KJ_EXPECT(metadata.getAlarm() == anAlarmTime1);
54 db.reset();
55 KJ_EXPECT(metadata.getAlarm() == kj::none);
56 metadata.setAlarm(anAlarmTime2, /*allowUnconfirmed=*/false);
57 KJ_EXPECT(KJ_ASSERT_NONNULL(metadata.getAlarm()) == anAlarmTime2);
58 
59 // Can invalidate cache after rolling back.
60 metadata.setAlarm(anAlarmTime2, /*allowUnconfirmed=*/false);
61 db.run("BEGIN TRANSACTION");
62 metadata.setAlarm(anAlarmTime1, /*allowUnconfirmed=*/false);
63 KJ_EXPECT(metadata.getAlarm() == anAlarmTime1);
64 db.run("ROLLBACK TRANSACTION");
65 KJ_EXPECT(metadata.getAlarm() == anAlarmTime2);
66}
67 
68} // namespace
69} // namespace workerd