Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ISC Open Source Projects
BIND
Commits
064966f7
Commit
064966f7
authored
Oct 25, 2018
by
Joey
Committed by
Evan Hunt
Nov 15, 2018
Browse files
convert mem_test
(cherry picked from commit
683094e3
) (cherry picked from commit
15f7486d
)
parent
6040d4e9
Changes
3
Hide whitespace changes
Inline
Side-by-side
lib/isc/tests/Kyuafile
View file @
064966f7
...
...
@@ -12,7 +12,7 @@ tap_test_program{name='heap_test'}
tap_test_program{name='ht_test'}
atf_test_program{name='inet_ntop_test'}
tap_test_program{name='lex_test'}
atf
_test_program{name='mem_test'}
tap
_test_program{name='mem_test'}
tap_test_program{name='netaddr_test'}
tap_test_program{name='parse_test'}
tap_test_program{name='pool_test'}
...
...
lib/isc/tests/Makefile.in
View file @
064966f7
...
...
@@ -105,8 +105,9 @@ lex_test@EXEEXT@: lex_test.@O@ ${ISCDEPLIBS}
${ISCLIBS}
${LIBS}
${CMOCKA_LIBS}
mem_test@EXEEXT@
:
mem_test.@O@ isctest.@O@ ${ISCDEPLIBS}
${LIBTOOL_MODE_LINK}
${PURIFY}
${CC}
${CFLAGS}
${LDFLAGS}
-o
$@
\
mem_test.@O@ isctest.@O@
${ISCLIBS}
${LIBS}
${LIBTOOL_MODE_LINK}
${PURIFY}
${CC}
${CFLAGS}
${CMOCKA_CFLAGS}
\
${LDFLAGS}
-o
$@
mem_test.@O@ isctest.@O@
\
${ISCLIBS}
${LIBS}
${CMOCKA_LIBS}
netaddr_test@EXEEXT@
:
netaddr_test.@O@ ${ISCDEPLIBS}
${LIBTOOL_MODE_LINK}
${PURIFY}
${CC}
${CFLAGS}
${CMOCKA_CFLAGS}
\
...
...
lib/isc/tests/mem_test.c
View file @
064966f7
...
...
@@ -10,23 +10,55 @@
*/
#include <config.h>
#if HAVE_CMOCKA
#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <atf-c.h>
#include "isctest.h"
#define UNIT_TESTING
#include <cmocka.h>
#include <isc/mem.h>
#include <isc/print.h>
#include <isc/result.h>
#include <isc/stdio.h>
#include <isc/util.h>
#include "isctest.h"
static
int
_setup
(
void
**
state
)
{
isc_result_t
result
;
UNUSED
(
state
);
result
=
isc_test_begin
(
NULL
,
true
,
0
);
assert_int_equal
(
result
,
ISC_R_SUCCESS
);
return
(
0
);
}
static
int
_teardown
(
void
**
state
)
{
UNUSED
(
state
);
isc_test_end
();
return
(
0
);
}
static
void
*
default_memalloc
(
void
*
arg
,
size_t
size
)
{
UNUSED
(
arg
);
if
(
size
==
0U
)
if
(
size
==
0U
)
{
size
=
1
;
}
return
(
malloc
(
size
));
}
...
...
@@ -36,11 +68,6 @@ default_memfree(void *arg, void *ptr) {
free
(
ptr
);
}
ATF_TC
(
isc_mem
);
ATF_TC_HEAD
(
isc_mem
,
tc
)
{
atf_tc_set_md_var
(
tc
,
"descr"
,
"general memory system tests"
);
}
#define MP1_FREEMAX 10
#define MP1_FILLCNT 10
#define MP1_MAXALLOC 30
...
...
@@ -48,7 +75,9 @@ ATF_TC_HEAD(isc_mem, tc) {
#define MP2_FREEMAX 25
#define MP2_FILLCNT 25
ATF_TC_BODY
(
isc_mem
,
tc
)
{
/* general memory system tests */
static
void
isc_mem_test
(
void
**
state
)
{
isc_result_t
result
;
void
*
items1
[
50
];
void
*
items2
[
50
];
...
...
@@ -58,17 +87,16 @@ ATF_TC_BODY(isc_mem, tc) {
unsigned
int
i
,
j
;
int
rval
;
result
=
isc_test_begin
(
NULL
,
true
,
0
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
UNUSED
(
state
);
result
=
isc_mem_create
(
0
,
0
,
&
localmctx
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
assert_int_equal
(
result
,
ISC_R_SUCCESS
);
result
=
isc_mempool_create
(
localmctx
,
24
,
&
mp1
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
assert_int_equal
(
result
,
ISC_R_SUCCESS
);
result
=
isc_mempool_create
(
localmctx
,
31
,
&
mp2
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
assert_int_equal
(
result
,
ISC_R_SUCCESS
);
isc_mempool_setfreemax
(
mp1
,
MP1_FREEMAX
);
isc_mempool_setfillcount
(
mp1
,
MP1_FILLCNT
);
...
...
@@ -79,14 +107,14 @@ ATF_TC_BODY(isc_mem, tc) {
*/
for
(
i
=
0
;
i
<
MP1_MAXALLOC
;
i
++
)
{
items1
[
i
]
=
isc_mempool_get
(
mp1
);
ATF_CHECK
(
items1
[
i
]
!=
NULL
);
assert_non_null
(
items1
[
i
]);
}
/*
* Try to allocate one more. This should fail.
*/
tmp
=
isc_mempool_get
(
mp1
);
ATF_CHECK_EQ
(
tmp
,
NULL
);
assert_null
(
tmp
);
/*
* Free the first 11 items. Verify that there are 10 free items on
...
...
@@ -98,10 +126,10 @@ ATF_TC_BODY(isc_mem, tc) {
}
rval
=
isc_mempool_getfreecount
(
mp1
);
ATF_CHECK_EQ
(
rval
,
10
);
assert_int_equal
(
rval
,
10
);
rval
=
isc_mempool_getallocated
(
mp1
);
ATF_CHECK_EQ
(
rval
,
19
);
assert_int_equal
(
rval
,
19
);
/*
* Now, beat up on mp2 for a while. Allocate 50 items, then free
...
...
@@ -114,7 +142,7 @@ ATF_TC_BODY(isc_mem, tc) {
for
(
j
=
0
;
j
<
500000
;
j
++
)
{
for
(
i
=
0
;
i
<
50
;
i
++
)
{
items2
[
i
]
=
isc_mempool_get
(
mp2
);
ATF_CHECK
(
items2
[
i
]
!=
NULL
);
assert_non_null
(
items2
[
i
]);
}
for
(
i
=
0
;
i
<
50
;
i
++
)
{
isc_mempool_put
(
mp2
,
items2
[
i
]);
...
...
@@ -137,42 +165,40 @@ ATF_TC_BODY(isc_mem, tc) {
result
=
isc_mem_createx2
(
0
,
0
,
default_memalloc
,
default_memfree
,
NULL
,
&
localmctx
,
ISC_MEMFLAG_INTERNAL
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
assert_int_equal
(
result
,
ISC_R_SUCCESS
);
result
=
isc_mempool_create
(
localmctx
,
2
,
&
mp1
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
assert_int_equal
(
result
,
ISC_R_SUCCESS
);
tmp
=
isc_mempool_get
(
mp1
);
ATF_CHECK
(
tmp
!=
NULL
);
assert_non_null
(
tmp
);
isc_mempool_put
(
mp1
,
tmp
);
isc_mempool_destroy
(
&
mp1
);
isc_test_end
();
}
isc_mem_destroy
(
&
localmctx
);
ATF_TC
(
isc_mem_total
);
ATF_TC_HEAD
(
isc_mem_total
,
tc
)
{
atf_tc_set_md_var
(
tc
,
"descr"
,
"test TotalUse calculation"
);
}
ATF_TC_BODY
(
isc_mem_total
,
tc
)
{
/* test TotalUse calculation */
static
void
isc_mem_total_test
(
void
**
state
)
{
isc_result_t
result
;
isc_mem_t
*
mctx2
=
NULL
;
size_t
before
,
after
;
ssize_t
diff
;
int
i
;
result
=
isc_test_begin
(
NULL
,
true
,
0
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
UNUSED
(
state
);
/* Local alloc, free */
mctx2
=
NULL
;
result
=
isc_mem_createx2
(
0
,
0
,
default_memalloc
,
default_memfree
,
NULL
,
&
mctx2
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
if
(
result
!=
ISC_R_SUCCESS
)
{
goto
out
;
}
before
=
isc_mem_total
(
mctx2
);
...
...
@@ -186,11 +212,8 @@ ATF_TC_BODY(isc_mem_total, tc) {
after
=
isc_mem_total
(
mctx2
);
diff
=
after
-
before
;
printf
(
"total_before=%lu, total_after=%lu, total_diff=%lu
\n
"
,
(
unsigned
long
)
before
,
(
unsigned
long
)
after
,
(
unsigned
long
)
diff
);
/* 2048 +8 bytes extra for size_info */
ATF_CHECK_EQ
(
diff
,
(
2048
+
8
)
*
100000
);
assert_int_equal
(
diff
,
(
2048
+
8
)
*
100000
);
/* ISC_MEMFLAG_INTERNAL */
...
...
@@ -206,67 +229,77 @@ ATF_TC_BODY(isc_mem_total, tc) {
after
=
isc_mem_total
(
mctx
);
diff
=
after
-
before
;
printf
(
"total_before=%lu, total_after=%lu, total_diff=%lu
\n
"
,
(
unsigned
long
)
before
,
(
unsigned
long
)
after
,
(
unsigned
long
)
diff
);
/* 2048 +8 bytes extra for size_info */
ATF_CHECK_EQ
(
diff
,
(
2048
+
8
)
*
100000
);
assert_int_equal
(
diff
,
(
2048
+
8
)
*
100000
);
out:
if
(
mctx2
!=
NULL
)
if
(
mctx2
!=
NULL
)
{
isc_mem_destroy
(
&
mctx2
);
}
isc_test_end
();
}
ATF_TC
(
isc_mem_inuse
);
ATF_TC_HEAD
(
isc_mem_inuse
,
tc
)
{
atf_tc_set_md_var
(
tc
,
"descr"
,
"test InUse calculation"
);
}
ATF_TC_BODY
(
isc_mem_inuse
,
tc
)
{
/* test InUse calculation */
static
void
isc_mem_inuse_test
(
void
**
state
)
{
isc_result_t
result
;
isc_mem_t
*
mctx2
=
NULL
;
size_t
before
,
during
,
after
;
size_t
before
,
after
;
ssize_t
diff
;
void
*
ptr
;
result
=
isc_test_begin
(
NULL
,
true
,
0
);
ATF_REQUIRE_EQ
(
result
,
ISC_R_SUCCESS
);
UNUSED
(
state
);
mctx2
=
NULL
;
result
=
isc_mem_createx2
(
0
,
0
,
default_memalloc
,
default_memfree
,
NULL
,
&
mctx2
,
0
);
if
(
result
!=
ISC_R_SUCCESS
)
if
(
result
!=
ISC_R_SUCCESS
)
{
goto
out
;
}
before
=
isc_mem_inuse
(
mctx2
);
ptr
=
isc_mem_allocate
(
mctx2
,
1024000
);
during
=
isc_mem_inuse
(
mctx2
);
isc_mem_free
(
mctx2
,
ptr
);
after
=
isc_mem_inuse
(
mctx2
);
diff
=
after
-
before
;
printf
(
"inuse_before=%lu, inuse_during=%lu, inuse_after=%lu
\n
"
,
(
unsigned
long
)
before
,
(
unsigned
long
)
during
,
(
unsigned
long
)
after
);
ATF_REQUIRE_EQ
(
diff
,
0
);
assert_int_equal
(
diff
,
0
);
out:
if
(
mctx2
!=
NULL
)
if
(
mctx2
!=
NULL
)
{
isc_mem_destroy
(
&
mctx2
);
}
isc_test_end
();
}
/*
* Main
*/
ATF_TP_ADD_TCS
(
tp
)
{
ATF_TP_ADD_TC
(
tp
,
isc_mem
);
ATF_TP_ADD_TC
(
tp
,
isc_mem_total
);
ATF_TP_ADD_TC
(
tp
,
isc_mem_inuse
);
return
(
atf_no_error
());
int
main
(
void
)
{
const
struct
CMUnitTest
tests
[]
=
{
cmocka_unit_test_setup_teardown
(
isc_mem_test
,
_setup
,
_teardown
),
cmocka_unit_test_setup_teardown
(
isc_mem_total_test
,
_setup
,
_teardown
),
cmocka_unit_test_setup_teardown
(
isc_mem_inuse_test
,
_setup
,
_teardown
),
};
return
(
cmocka_run_group_tests
(
tests
,
NULL
,
NULL
));
}
#else
/* HAVE_CMOCKA */
#include <stdio.h>
int
main
(
void
)
{
printf
(
"1..0 # Skipped: cmocka not available
\n
"
);
return
(
0
);
}
#endif
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment