Skip to content

Commit

Permalink
test: split pmemobj_log* tests to separate folders
Browse files Browse the repository at this point in the history
Signed-off-by: Tomasz Gromadzki <tomasz.gromadzki@intel.com>
  • Loading branch information
grom72 committed Mar 14, 2024
1 parent b5d0eab commit 91edc02
Show file tree
Hide file tree
Showing 11 changed files with 326 additions and 199 deletions.
2 changes: 2 additions & 0 deletions src/test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ OBJ_TESTS = \
obj_list_valgrind\
obj_list_macro\
obj_locks\
obj_log_get_treshold\
obj_log_set_function\
obj_log_set_treshold\
obj_mem\
obj_memblock\
obj_memcheck\
Expand Down
1 change: 1 addition & 0 deletions src/test/obj_log_get_treshold/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
obj_log_get_treshold
14 changes: 14 additions & 0 deletions src/test/obj_log_get_treshold/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2024, Intel Corporation

TARGET = obj_log_get_treshold
OBJS = obj_log_get_treshold.o

BUILD_STATIC_DEBUG=n
BUILD_STATIC_NONDEBUG=n

# required for proper mock integration
LIBPMEMOBJ=internal-debug

include ../Makefile.inc
LDFLAGS += $(call extract_funcs, obj_log_get_treshold.c)
27 changes: 27 additions & 0 deletions src/test/obj_log_get_treshold/TESTS.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!../env.py
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2024, Intel Corporation
#


import testframework as t
from testframework import granularity as g


@g.require_granularity(g.ANY)
# The 'debug' build is chosen arbitrarily to ensure these tests are run only
# once. No dynamic libraries are used nor .static_* builds are available.
@t.require_build('debug')
class OBJ_LOG(t.BaseTest):
test_type = t.Short

def run(self, ctx):
ctx.exec('obj_log_get_treshold', self.test_case)


class TEST0(OBJ_LOG):
test_case = 'test_log_get_treshold'


class TEST1(OBJ_LOG):
test_case = 'test_log_get_treshold_EAGAIN'
117 changes: 117 additions & 0 deletions src/test/obj_log_get_treshold/obj_log_get_treshold.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
// SPDX-License-Identifier: BSD-3-Clause
/* Copyright 2024, Intel Corporation */

/*
* obj_log_get_treshold.c -- unit test for pmemobj_log_get_treshold
*/

#include "unittest.h"
#include "log_internal.h"
#include "libpmemobj/log.h"

#define NO_ARGS_CONSUMED 0

#define VALIDATED_CALL 127
#define CALLED (VALIDATED_CALL + 1)

static enum core_log_threshold core_tresholds[] = {
CORE_LOG_THRESHOLD,
CORE_LOG_THRESHOLD_AUX
};

static enum core_log_level core_levels[] = {
CORE_LOG_LEVEL_HARK,
CORE_LOG_LEVEL_FATAL,
CORE_LOG_LEVEL_ERROR,
CORE_LOG_LEVEL_WARNING,
CORE_LOG_LEVEL_NOTICE,
CORE_LOG_LEVEL_INFO,
CORE_LOG_LEVEL_DEBUG
};

/* Mock */
static struct {
enum core_log_threshold exp_threshold;
enum core_log_level level;
int ret;
} Core_log_get_treshold;

FUNC_MOCK(core_log_get_threshold, int, enum core_log_threshold threshold,
enum core_log_level *level)
FUNC_MOCK_RUN(VALIDATED_CALL) {
UT_ASSERTeq(threshold, Core_log_get_treshold.exp_threshold);
if (Core_log_get_treshold.ret == 0)
*level = Core_log_get_treshold.level;
return Core_log_get_treshold.ret;
}
FUNC_MOCK_RUN_DEFAULT {
return _FUNC_REAL(core_log_get_threshold)(threshold, level);
}
FUNC_MOCK_END

/* Helper */
static int
test_log_get_treshold_helper(int error)
{
errno = NO_ERRNO;
Core_log_get_treshold.ret = error == NO_ERRNO ? 0: error;
for (enum pmemobj_log_threshold treshold = PMEMOBJ_LOG_THRESHOLD;
treshold <= PMEMOBJ_LOG_THRESHOLD_AUX; treshold++) {
Core_log_get_treshold.exp_threshold = core_tresholds[treshold];
for (enum pmemobj_log_level exp_level = PMEMOBJ_LOG_LEVEL_HARK;
exp_level <= PMEMOBJ_LOG_LEVEL_DEBUG; exp_level++) {
enum pmemobj_log_level level;
Core_log_get_treshold.level = core_levels[exp_level];
FUNC_MOCK_RCOUNTER_SET(core_log_get_threshold,
VALIDATED_CALL);
int ret = pmemobj_log_get_threshold(treshold, &level);
if (error == NO_ERRNO) {
UT_ASSERTeq(ret, 0);
UT_ASSERTeq(level, exp_level);
UT_ASSERTeq(errno, NO_ERRNO);
} else {
UT_ASSERTeq(ret, 1);
UT_ASSERTeq(errno, error);
}
UT_ASSERTeq(RCOUNTER(core_log_get_threshold), CALLED);
/* no need to test the error path for all values */
if (error != NO_ERRNO)
return NO_ARGS_CONSUMED;
}
}
return NO_ARGS_CONSUMED;
}

/* Tests */
/*
* Check:
* - if core_log_get_treshold is called with proper arguments
* - if pmemobj_log_get_treshold return 0 (no error)
* - if each PMEMOBJ_LOG_LEVEL corespond to relevant CORE_LOG_LEVEL
* - no errno is set
*/
static int
test_log_get_treshold(const struct test_case *tc, int argc, char *argv[])
{
return test_log_get_treshold_helper(NO_ERRNO);
}

/* Check pmemobj_log_get_threshold EAGAIN error handling. */
static int
test_log_get_treshold_EAGAIN(const struct test_case *tc, int argc, char *argv[])
{
return test_log_get_treshold_helper(EAGAIN);
}

static struct test_case test_cases[] = {
TEST_CASE(test_log_get_treshold),
TEST_CASE(test_log_get_treshold_EAGAIN),
};

int
main(int argc, char *argv[])
{
START(argc, argv, "obj_log_get_treshold");
TEST_CASE_PROCESS(argc, argv, test_cases, ARRAY_SIZE(test_cases));
DONE(NULL);
}
20 changes: 0 additions & 20 deletions src/test/obj_log_set_function/TESTS.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,23 +25,3 @@ class TEST0(OBJ_LOG):

class TEST1(OBJ_LOG):
test_case = 'test_log_set_function_EAGAIN'


class TEST2(OBJ_LOG):
test_case = 'test_log_set_treshold'


class TEST3(OBJ_LOG):
test_case = 'test_log_set_treshold_EAGAIN'


class TEST4(OBJ_LOG):
test_case = 'test_log_set_treshold_EINVAL'


class TEST5(OBJ_LOG):
test_case = 'test_log_get_treshold'


class TEST6(OBJ_LOG):
test_case = 'test_log_get_treshold_EAGAIN'
180 changes: 1 addition & 179 deletions src/test/obj_log_set_function/obj_log_set_function.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
/* Copyright 2024, Intel Corporation */

/*
* obj_log_set_function.c -- unit test for pmemobj_log_set_function
* obj_log_set_function.c -- unit test for pmemobj_log_set_treshold
*/

#include "unittest.h"
Expand Down Expand Up @@ -80,187 +80,9 @@ test_log_set_function_EAGAIN(const struct test_case *tc, int argc, char *argv[])
return test_log_set_function_helper(EAGAIN);
}

/*
* *** pmemobj_log_set_treshold() tests ***
*/
static enum core_log_threshold core_tresholds[] = {
CORE_LOG_THRESHOLD,
CORE_LOG_THRESHOLD_AUX
};

static enum core_log_level core_levels[] = {
CORE_LOG_LEVEL_HARK,
CORE_LOG_LEVEL_FATAL,
CORE_LOG_LEVEL_ERROR,
CORE_LOG_LEVEL_WARNING,
CORE_LOG_LEVEL_NOTICE,
CORE_LOG_LEVEL_INFO,
CORE_LOG_LEVEL_DEBUG
};

/* Mock */
static struct {
enum core_log_threshold exp_threshold;
enum core_log_level exp_level;
int ret;
} Core_log_set_treshold;

FUNC_MOCK(core_log_set_threshold, int, enum core_log_threshold threshold,
enum core_log_level level)
FUNC_MOCK_RUN(VALIDATED_CALL) {
UT_ASSERTeq(threshold, Core_log_set_treshold.exp_threshold);
UT_ASSERTeq(level, Core_log_set_treshold.exp_level);
return Core_log_set_treshold.ret;
}
FUNC_MOCK_RUN_DEFAULT {
return _FUNC_REAL(core_log_set_threshold)(threshold, level);
}
FUNC_MOCK_END

/* Helper */
static int
test_log_set_treshold_helper(int error)
{
errno = NO_ERRNO;
Core_log_set_treshold.ret = error == NO_ERRNO ? 0: error;
for (enum pmemobj_log_threshold treshold = PMEMOBJ_LOG_THRESHOLD;
treshold <= PMEMOBJ_LOG_THRESHOLD_AUX; treshold++) {
Core_log_set_treshold.exp_threshold = core_tresholds[treshold];
for (enum pmemobj_log_level level = PMEMOBJ_LOG_LEVEL_HARK;
level <= PMEMOBJ_LOG_LEVEL_DEBUG; level++) {
Core_log_set_treshold.exp_level = core_levels[level];
FUNC_MOCK_RCOUNTER_SET(core_log_set_threshold,
VALIDATED_CALL);
int ret = pmemobj_log_set_threshold(treshold, level);
if (error == NO_ERRNO) {
UT_ASSERTeq(ret, 0);
UT_ASSERTeq(errno, NO_ERRNO);
} else {
UT_ASSERTeq(ret, 1);
UT_ASSERTeq(errno, error);
}
UT_ASSERTeq(RCOUNTER(core_log_set_threshold), CALLED);
/* no need to test the error path for all values */
if (error != NO_ERRNO)
return NO_ARGS_CONSUMED;
}
}
return NO_ARGS_CONSUMED;
}

/* Tests */
/*
* Check:
* - if core_log_set_treshold is called with proper arguments
* - if pmemobj_log_set_treshold return 0 (no error)
* - if each PMEMOBJ_LOG_LEVEL corespond to relevant CORE_LOG_LEVEL
* - no errno is set
*/
static int
test_log_set_treshold(const struct test_case *tc, int argc, char *argv[])
{
return test_log_set_treshold_helper(NO_ERRNO);
}

/* Check pmemobj_log_set_threshold EAGAIN error handling. */
static int
test_log_set_treshold_EAGAIN(const struct test_case *tc, int argc, char *argv[])
{
return test_log_set_treshold_helper(EAGAIN);
}

/* Check pmemobj_log_set_threshold EINVAL error handling. */
static int
test_log_set_treshold_EINVAL(const struct test_case *tc, int argc, char *argv[])
{
return test_log_set_treshold_helper(EINVAL);
}

/*
* *** pmemobj_log_get_treshold() tests ***
*/
/* Mock */
static struct {
enum core_log_threshold exp_threshold;
enum core_log_level level;
int ret;
} Core_log_get_treshold;

FUNC_MOCK(core_log_get_threshold, int, enum core_log_threshold threshold,
enum core_log_level *level)
FUNC_MOCK_RUN(VALIDATED_CALL) {
UT_ASSERTeq(threshold, Core_log_get_treshold.exp_threshold);
if (Core_log_get_treshold.ret == 0)
*level = Core_log_get_treshold.level;
return Core_log_get_treshold.ret;
}
FUNC_MOCK_RUN_DEFAULT {
return _FUNC_REAL(core_log_get_threshold)(threshold, level);
}
FUNC_MOCK_END

/* Helper */
static int
test_log_get_treshold_helper(int error)
{
errno = NO_ERRNO;
Core_log_get_treshold.ret = error == NO_ERRNO ? 0: error;
for (enum pmemobj_log_threshold treshold = PMEMOBJ_LOG_THRESHOLD;
treshold <= PMEMOBJ_LOG_THRESHOLD_AUX; treshold++) {
Core_log_get_treshold.exp_threshold = core_tresholds[treshold];
for (enum pmemobj_log_level exp_level = PMEMOBJ_LOG_LEVEL_HARK;
exp_level <= PMEMOBJ_LOG_LEVEL_DEBUG; exp_level++) {
enum pmemobj_log_level level;
Core_log_get_treshold.level = core_levels[exp_level];
FUNC_MOCK_RCOUNTER_SET(core_log_get_threshold,
VALIDATED_CALL);
int ret = pmemobj_log_get_threshold(treshold, &level);
if (error == NO_ERRNO) {
UT_ASSERTeq(ret, 0);
UT_ASSERTeq(level, exp_level);
UT_ASSERTeq(errno, NO_ERRNO);
} else {
UT_ASSERTeq(ret, 1);
UT_ASSERTeq(errno, error);
}
UT_ASSERTeq(RCOUNTER(core_log_get_threshold), CALLED);
/* no need to test the error path for all values */
if (error != NO_ERRNO)
return NO_ARGS_CONSUMED;
}
}
return NO_ARGS_CONSUMED;
}

/* Tests */
/*
* Check:
* - if core_log_get_treshold is called with proper arguments
* - if pmemobj_log_get_treshold return 0 (no error)
* - if each PMEMOBJ_LOG_LEVEL corespond to relevant CORE_LOG_LEVEL
* - no errno is set
*/
static int
test_log_get_treshold(const struct test_case *tc, int argc, char *argv[])
{
return test_log_get_treshold_helper(NO_ERRNO);
}

/* Check pmemobj_log_get_threshold EAGAIN error handling. */
static int
test_log_get_treshold_EAGAIN(const struct test_case *tc, int argc, char *argv[])
{
return test_log_get_treshold_helper(EAGAIN);
}

static struct test_case test_cases[] = {
TEST_CASE(test_log_set_function),
TEST_CASE(test_log_set_function_EAGAIN),
TEST_CASE(test_log_set_treshold),
TEST_CASE(test_log_set_treshold_EAGAIN),
TEST_CASE(test_log_set_treshold_EINVAL),
TEST_CASE(test_log_get_treshold),
TEST_CASE(test_log_get_treshold_EAGAIN),
};

int
Expand Down
1 change: 1 addition & 0 deletions src/test/obj_log_set_treshold/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
obj_log_set_treshold
Loading

0 comments on commit 91edc02

Please sign in to comment.