NarInfoDiskCache: Prepare reproducer for #3898
This commit is contained in:
parent
79f62d2dda
commit
2ceece3ef3
3 changed files with 96 additions and 0 deletions
|
@ -207,6 +207,7 @@ public:
|
|||
if (!cache)
|
||||
return std::nullopt;
|
||||
return CacheInfo {
|
||||
.id = cache->id,
|
||||
.wantMassQuery = cache->wantMassQuery,
|
||||
.priority = cache->priority
|
||||
};
|
||||
|
@ -370,4 +371,9 @@ ref<NarInfoDiskCache> getNarInfoDiskCache()
|
|||
return cache;
|
||||
}
|
||||
|
||||
ref<NarInfoDiskCache> getTestNarInfoDiskCache(Path dbPath)
|
||||
{
|
||||
return make_ref<NarInfoDiskCacheImpl>(dbPath);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,7 @@ public:
|
|||
|
||||
struct CacheInfo
|
||||
{
|
||||
int id;
|
||||
bool wantMassQuery;
|
||||
int priority;
|
||||
};
|
||||
|
@ -45,4 +46,6 @@ public:
|
|||
multiple threads. */
|
||||
ref<NarInfoDiskCache> getNarInfoDiskCache();
|
||||
|
||||
ref<NarInfoDiskCache> getTestNarInfoDiskCache(Path dbPath);
|
||||
|
||||
}
|
||||
|
|
87
src/libstore/tests/nar-info-disk-cache.cc
Normal file
87
src/libstore/tests/nar-info-disk-cache.cc
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue