-
Notifications
You must be signed in to change notification settings - Fork 510
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
pmem: add pmem_log_[get/set]_treshold functions + UT
- Loading branch information
Showing
12 changed files
with
407 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
pmem_log_get_treshold |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
# Copyright 2024, Intel Corporation | ||
# | ||
|
||
# | ||
# src/test/pmem_log_get_treshold/Makefile -- build pmem_log_get_treshold unit test | ||
# | ||
|
||
TARGET = pmem_log_get_treshold | ||
OBJS = pmem_log_get_treshold.o | ||
|
||
BUILD_STATIC_DEBUG=n | ||
BUILD_STATIC_NONDEBUG=n | ||
|
||
# required for proper mock integration | ||
LIBPMEMCOMMON=internal-debug | ||
LIBPMEM=internal-debug | ||
|
||
include ../Makefile.inc | ||
LDFLAGS += $(call extract_funcs, pmem_log_get_treshold.c) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 PMEM_LOG(t.BaseTest): | ||
test_type = t.Short | ||
|
||
def run(self, ctx): | ||
ctx.exec('pmem_log_get_treshold', self.test_case) | ||
|
||
|
||
class TEST0(PMEM_LOG): | ||
test_case = 'test_log_get_treshold' | ||
|
||
|
||
class TEST1(PMEM_LOG): | ||
test_case = 'test_log_get_treshold_EAGAIN' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,116 @@ | ||
// SPDX-License-Identifier: BSD-3-Clause | ||
/* Copyright 2024, Intel Corporation */ | ||
|
||
/* | ||
* pmem_log_get_treshold.c -- unit test for pmem_log_get_treshold | ||
*/ | ||
|
||
#include "unittest.h" | ||
#include "log_internal.h" | ||
#include "libpmem.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 = 0; | ||
Core_log_get_treshold.ret = error == NO_ERRNO ? 0 : error; | ||
for (enum pmem_log_threshold treshold = PMEM_LOG_THRESHOLD; | ||
treshold <= PMEM_LOG_THRESHOLD_AUX; treshold++) { | ||
Core_log_get_treshold.exp_threshold = core_tresholds[treshold]; | ||
for (enum pmem_log_level exp_level = PMEM_LOG_LEVEL_HARK; | ||
exp_level <= PMEM_LOG_LEVEL_DEBUG; exp_level++) { | ||
enum pmem_log_level level; | ||
Core_log_get_treshold.level = core_levels[exp_level]; | ||
FUNC_MOCK_RCOUNTER_SET(core_log_get_threshold, | ||
VALIDATED_CALL); | ||
int ret = pmem_log_get_threshold(treshold, &level); | ||
if (error == NO_ERRNO) { | ||
UT_ASSERTeq(ret, 0); | ||
UT_ASSERTeq(level, exp_level); | ||
} 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 pmem_log_get_treshold return 0 (no error) | ||
* - if each PMEM_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 pmem_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, "_log_get_treshold"); | ||
TEST_CASE_PROCESS(argc, argv, test_cases, ARRAY_SIZE(test_cases)); | ||
DONE(NULL); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
pmem_log_set_treshold |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
# SPDX-License-Identifier: BSD-3-Clause | ||
# Copyright 2024, Intel Corporation | ||
|
||
TARGET = pmem_log_set_treshold | ||
OBJS = pmem_log_set_treshold.o | ||
|
||
BUILD_STATIC_DEBUG=n | ||
BUILD_STATIC_NONDEBUG=n | ||
|
||
# required for proper mock integration | ||
LIBPMEMCOMMON=internal-debug | ||
LIBPMEM=internal-debug | ||
|
||
include ../Makefile.inc | ||
LDFLAGS += $(call extract_funcs, pmem_log_set_treshold.c) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
#!../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 PMEM_LOG(t.BaseTest): | ||
test_type = t.Short | ||
|
||
def run(self, ctx): | ||
ctx.exec('pmem_log_set_treshold', self.test_case) | ||
|
||
|
||
class TEST0(PMEM_LOG): | ||
test_case = 'test_log_set_treshold' | ||
|
||
|
||
class TEST1(PMEM_LOG): | ||
test_case = 'test_log_set_treshold_EAGAIN' | ||
|
||
|
||
class TEST2(PMEM_LOG): | ||
test_case = 'test_log_set_treshold_EINVAL' |
Oops, something went wrong.