greenplumn sharedsnapshot_test 源码
greenplumn sharedsnapshot_test 代码
文件路径:/src/backend/utils/time/test/sharedsnapshot_test.c
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include "cmockery.h"
#include "postgres.h"
#include "utils/memutils.h"
#include "utils/resowner.h"
#include "utils/faultinjector.h"
#include "utils/snapshot.h"
#include "storage/fd.h"
#include "../sharedsnapshot.c"
static void
test_boundaries_of_CreateSharedSnapshotArray(void **state)
{
/*
* MaxBackends is used to calculate NUM_SHARED_SNAPSHOT_SLOTS. Make
* it non-zero so that we actually allocate some local snapshot slots.
*/
MaxBackends = 2;
SharedSnapshotStruct *fakeSharedSnapshotArray = NULL;
LWLockPadded *fakeLockBase = NULL;
bool found = false;
expect_string(RequestNamedLWLockTranche, tranche_name, "SharedSnapshotLocks");
expect_value(RequestNamedLWLockTranche, num_lwlocks, NUM_SHARED_SNAPSHOT_SLOTS);
will_be_called(RequestNamedLWLockTranche);
Size sharedSnapshotShmemSize = SharedSnapshotShmemSize();
fakeSharedSnapshotArray = malloc(sharedSnapshotShmemSize);
will_return(ShmemInitStruct, fakeSharedSnapshotArray);
will_assign_value(ShmemInitStruct, foundPtr, found);
expect_any_count(ShmemInitStruct, name, 1);
expect_any_count(ShmemInitStruct, size, 1);
expect_any_count(ShmemInitStruct, foundPtr, 1);
expect_string(RequestNamedLWLockTranche, tranche_name, "SharedSnapshotLocks");
expect_value(RequestNamedLWLockTranche, num_lwlocks, NUM_SHARED_SNAPSHOT_SLOTS);
will_be_called(RequestNamedLWLockTranche);
fakeLockBase = malloc(NUM_SHARED_SNAPSHOT_SLOTS * sizeof(LWLockPadded));
will_return(GetNamedLWLockTranche, fakeLockBase);
expect_any(GetNamedLWLockTranche, tranche_name);
CreateSharedSnapshotArray();
for (int i=0; i<sharedSnapshotArray->maxSlots; i++)
{
SharedSnapshotSlot *s = &sharedSnapshotArray->slots[i];
/*
* Assert that each slot in SharedSnapshotStruct has an associated
* dynamically allocated LWLock.
*/
assert_true(s->slotLock == &fakeLockBase[i].lock);
/*
* Assert that every slot xip array falls inside the boundaries of the
* allocated shared snapshot.
*/
assert_true((uint8_t *)s->snapshot.xip > (uint8_t *)fakeSharedSnapshotArray);
assert_true((uint8_t *)s->snapshot.xip < (((uint8_t *)fakeSharedSnapshotArray) +
sharedSnapshotShmemSize));
}
}
int
main(int argc, char* argv[])
{
cmockery_parse_arguments(argc, argv);
const UnitTest tests[] = {
unit_test(test_boundaries_of_CreateSharedSnapshotArray)
};
MemoryContextInit();
InitFileAccess();
return run_tests(tests);
}
相关信息
相关文章
0
赞
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
7、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦