diff options
author | Robert Hensing <robert@roberthensing.nl> | 2023-01-30 22:15:23 +0100 |
---|---|---|
committer | Robert Hensing <robert@roberthensing.nl> | 2023-02-07 23:34:36 +0100 |
commit | 2ceece3ef384385d886f6aed5311d9b6dbbdd6dd (patch) | |
tree | ae598195b919806ce65a35ca885fdeb4354a1f51 /src/libstore/tests | |
parent | 79f62d2dda8603c1f2f471ce20557548db932296 (diff) |
NarInfoDiskCache: Prepare reproducer for #3898
Diffstat (limited to 'src/libstore/tests')
-rw-r--r-- | src/libstore/tests/nar-info-disk-cache.cc | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/libstore/tests/nar-info-disk-cache.cc b/src/libstore/tests/nar-info-disk-cache.cc new file mode 100644 index 000000000..1e9cbaa78 --- /dev/null +++ b/src/libstore/tests/nar-info-disk-cache.cc @@ -0,0 +1,87 @@ +#include "nar-info-disk-cache.hh" + +#include <gtest/gtest.h> +#include <rapidcheck/gtest.h> +#include "sqlite.hh" +#include <sqlite3.h> + + +namespace nix { + +RC_GTEST_PROP( + NarInfoDiskCacheImpl, + create_and_read, + (int prio, bool wantMassQuery) + ) +{ + Path tmpDir = createTempDir(); + AutoDelete delTmpDir(tmpDir); + Path dbPath(tmpDir + "/test-narinfo-disk-cache.sqlite"); + auto cache = getTestNarInfoDiskCache(dbPath); + + cache->createCache("other://uri", "/nix/storedir", wantMassQuery, prio); + cache->createCache("other://uri-2", "/nix/storedir", wantMassQuery, prio); + + cache->createCache("the://uri", "/nix/storedir", wantMassQuery, prio); + + { + auto r = cache->upToDateCacheExists("the://uri"); + ASSERT_TRUE(r); + ASSERT_EQ(r->priority, prio); + ASSERT_EQ(r->wantMassQuery, wantMassQuery); + } + + SQLite db(dbPath); + SQLiteStmt getIds; + getIds.create(db, "SELECT id FROM BinaryCaches WHERE url = 'the://uri'"); + + int savedId; + { + auto q(getIds.use()); + ASSERT_TRUE(q.next()); + savedId = q.getInt(0); + ASSERT_FALSE(q.next()); + } + + + db.exec("UPDATE BinaryCaches SET timestamp = timestamp - 1 - 7 * 24 * 3600;"); + + // Relies on memory cache + { + auto r = cache->upToDateCacheExists("the://uri"); + ASSERT_TRUE(r); + ASSERT_EQ(r->priority, prio); + ASSERT_EQ(r->wantMassQuery, wantMassQuery); + } + + auto cache2 = getTestNarInfoDiskCache(dbPath); + + { + auto r = cache2->upToDateCacheExists("the://uri"); + ASSERT_FALSE(r); + } + + cache2->createCache("the://uri", "/nix/storedir", wantMassQuery, prio); + + { + auto r = cache->upToDateCacheExists("the://uri"); + ASSERT_TRUE(r); + ASSERT_EQ(r->priority, prio); + ASSERT_EQ(r->wantMassQuery, wantMassQuery); + // FIXME, reproduces #3898 + // ASSERT_EQ(r->id, savedId); + (void) savedId; + } + + { + auto q(getIds.use()); + ASSERT_TRUE(q.next()); + auto currentId = q.getInt(0); + ASSERT_FALSE(q.next()); + // FIXME, reproduces #3898 + // ASSERT_EQ(currentId, savedId); + (void) currentId; + } +} + +} |