Merge pull request #68 from k0ekk0ek/criterion-be-gone

Replace Criterion by CUnit
This commit is contained in:
eboasson 2018-12-06 16:01:50 +01:00 committed by GitHub
commit 31cc166047
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 4486 additions and 5388 deletions

View file

@ -61,7 +61,6 @@ install:
- conan user
before_script:
- conan remote add atolab https://api.bintray.com/conan/atolab/public-conan
- conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
script:

View file

@ -30,7 +30,6 @@ install:
- conan user # Creates the conan data directory
before_build:
- conan remote add atolab https://api.bintray.com/conan/atolab/public-conan
- conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
build_script:

View file

@ -1,6 +1,5 @@
[requires]
cunit/2.1-3@bincrafters/stable
criterion/2.3.2@atolab/stable
[generators]
cmake

View file

@ -117,11 +117,10 @@ include(AnalyzeBuild)
# in the Coverage module should that ever be necessary.
include(Coverage)
set(MEMORYCHECK_COMMAND_OPTIONS "--track-origins=yes --leak-check=full --trace-children=yes --child-silent-after-fork=yes --xml=yes --xml-file=TestResultValgrind_%p.xml --tool=memcheck --show-reachable=yes --leak-resolution=high")
set(MEMORYCHECK_SUPPRESSIONS_FILE "${CMAKE_CURRENT_LIST_DIR}/valgrind.supp" CACHE FILEPATH "suppression file")
# By default building the testing tree is enabled by including CTest, but
# since not everybody has CUnit and/or Criterion installed, and because it is
# not strictly required to build the product itself, switch to off by default.
# since not everybody has CUnit, and because it is not strictly required to
# build the product itself, switch to off by default.
option(BUILD_TESTING "Build the testing tree." OFF)
include(CTest)

View file

@ -174,6 +174,7 @@ function(process_cunit_source_file SOURCE_FILE HEADER_FILE SUITES TESTS)
endforeach()
# Propagate suites, tests and theories extracted from the source file.
if(suites_wo_init_n_clean)
list(REMOVE_DUPLICATES suites_wo_init_n_clean)
list(SORT suites_wo_init_n_clean)
foreach(suite ${suites_wo_init_n_clean})
@ -188,6 +189,7 @@ function(process_cunit_source_file SOURCE_FILE HEADER_FILE SUITES TESTS)
list(APPEND suites "${suite}:${init}:${clean}")
endforeach()
endif()
if(theories)
set(${HEADER_FILE} "${header}" PARENT_SCOPE)

View file

@ -1,96 +0,0 @@
#
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
# v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#
find_package(Criterion REQUIRED)
include(Glob)
set(_criterion_dir "${CMAKE_CURRENT_LIST_DIR}/Criterion")
function(add_criterion_executable _target)
# Retrieve location of shared libary, which is need to extend the PATH
# environment variable on Microsoft Windows, so that the operating
# system can locate the .dll that it was linked against.
get_target_property(CRITERION_LIBRARY_TYPE Criterion TYPE)
get_target_property(CRITERION_IMPORTED_LOCATION Criterion IMPORTED_LOCATION)
get_filename_component(CRITERION_LIBRARY_DIR "${CRITERION_IMPORTED_LOCATION}" PATH)
set(s "[ \t\r\n]") # space
set(w "[0-9a-zA-Z_]") # word
set(b "[^0-9a-zA-Z_]") # boundary
set(arg "${s}*(${w}+)${s}*")
set(test "(^|${b})Test${s}*\\(${arg},${arg}(,[^\\)]+)?\\)") # Test
set(params "${s}*\\([^\\)]*\\)${s}*")
set(theory "(^|${b})Theory${s}*\\(${params},${arg},${arg}(,[^\\)]+)?\\)") # Theory
set(paramtest "(^|${b})ParameterizedTest${s}*\\([^,]+,${arg},${arg}(,[^\\)]+)?\\)") # ParameterizedTest
glob(_files "c" ${ARGN})
foreach(_file ${_files})
file(READ "${_file}" _contents)
string(REGEX MATCHALL "${test}" _matches "${_contents}")
list(APPEND _sources "${_file}")
list(LENGTH _matches _length)
if(_length)
foreach(_match ${_matches})
string(REGEX REPLACE "${test}" "\\2" _suite "${_match}")
string(REGEX REPLACE "${test}" "\\3" _name "${_match}")
list(APPEND _tests "${_suite}:${_name}")
endforeach()
endif()
string(REGEX MATCHALL "${theory}" _matches "${_contents}")
list(LENGTH _matches _length)
if(_length)
foreach(_match ${_matches})
string(REGEX REPLACE "${theory}" "\\2" _suite "${_match}")
string(REGEX REPLACE "${theory}" "\\3" _name "${_match}")
list(APPEND _tests "${_suite}:${_name}")
endforeach()
endif()
string(REGEX MATCHALL "${paramtest}" _matches "${_contents}")
list(LENGTH _matches _length)
if(_length)
foreach(_match ${_matches})
string(REGEX REPLACE "${paramtest}" "\\2" _suite "${_match}")
string(REGEX REPLACE "${paramtest}" "\\3" _name "${_match}")
list(APPEND _tests "${_suite}:${_name}")
endforeach()
endif()
endforeach()
add_executable(${_target} "${_criterion_dir}/src/runner.c" ${_sources})
target_link_libraries(${_target} Criterion)
foreach(_entry ${_tests})
string(REPLACE ":" ";" _entry ${_entry})
list(GET _entry 0 _suite)
list(GET _entry 1 _name)
add_test(
NAME "Criterion_${_suite}_${_name}"
COMMAND ${_target} -j1 --suite ${_suite} --test ${_name} --cunit=${_suite}-${_name} --quiet)
set_tests_properties("Criterion_${_suite}_${_name}" PROPERTIES TIMEOUT 10)
if(APPLE)
set_property(
TEST "Criterion_${_suite}_${_name}"
PROPERTY ENVIRONMENT "DYLD_LIBRARY_PATH=${CRITERION_LIBRARY_DIR}:$ENV{DYLD_LIBRARY_PATH}")
endif()
if(WIN32 AND ${CRITERION_LIBRARY_TYPE} STREQUAL "SHARED_LIBRARY")
set_property(
TEST "Criterion_${_suite}_${_name}"
PROPERTY ENVIRONMENT "PATH=${CRITERION_LIBRARY_DIR};$ENV{PATH}")
endif()
endforeach()
endfunction()

View file

@ -1,475 +0,0 @@
/*
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <criterion/criterion.h>
#include <criterion/hooks.h>
#include <criterion/internal/ordered-set.h>
#ifdef _WIN32
#include <stdlib.h>
#define LF "\r\n"
#define NAME_MAX _MAX_FNAME
#else
#define LF "\n"
#endif
static const char *suitepat = "*";
static const char *testpat = "*";
static char runfn[NAME_MAX + 1] = { 0 };
static char listfn[NAME_MAX + 1] = { 0 };
static char stamp[64] = { 0 };
static const char
run_hdr[] =
"<?xml version=\"1.0\" ?>" LF
"<?xml-stylesheet type=\"text/xsl\" href=\"CUnit-Run.xsl\" ?>" LF
"<!DOCTYPE CUNIT_TEST_RUN_REPORT SYSTEM \"CUnit-Run.dtd\">" LF
"<CUNIT_TEST_RUN_REPORT>" LF
" <CUNIT_HEADER/>" LF;
/* TODO: Criterion version number is not available in any of the header files,
but print_version() is. The function prints a message along the lines
of: Tests compiled with Criterion v2.3.2. The version number therefore
can be retrieved by temporarily swapping out stdout for a FILE handle
opened by open_memstream. However, I don't consider the version number
important enough to go through all that trouble. */
static const char
run_ftr[] =
" <CUNIT_FOOTER> File Generated By Criterion - %s </CUNIT_FOOTER>" LF
"</CUNIT_TEST_RUN_REPORT>";
static const char
run_result_hdr[] =
" <CUNIT_RESULT_LISTING>" LF;
static const char
run_result_ftr[] =
" </CUNIT_RESULT_LISTING>" LF;
static const char
run_suite_hdr[] =
" <CUNIT_RUN_SUITE>" LF
" <CUNIT_RUN_SUITE_SUCCESS>" LF
" <SUITE_NAME> %s </SUITE_NAME>" LF;
static const char
run_suite_ftr[] =
" </CUNIT_RUN_SUITE_SUCCESS>" LF
" </CUNIT_RUN_SUITE>" LF;
static const char
run_test_hdr[] =
" <CUNIT_RUN_TEST_RECORD>" LF;
static const char
run_test_ftr[] =
" </CUNIT_RUN_TEST_RECORD>" LF;
static const char
run_test_ok[] =
" <CUNIT_RUN_TEST_SUCCESS>" LF
" <TEST_NAME> %s </TEST_NAME>" LF
" </CUNIT_RUN_TEST_SUCCESS>" LF;
static const char
run_test_nok[] =
" <CUNIT_RUN_TEST_FAILURE>" LF
" <TEST_NAME> %s </TEST_NAME>" LF
" <FILE_NAME> %s </FILE_NAME>" LF
" <LINE_NUMBER> %u </LINE_NUMBER>" LF
" <CONDITION> %s </CONDITION>" LF
" </CUNIT_RUN_TEST_FAILURE>" LF;
static const char
run_stats[] =
" <CUNIT_RUN_SUMMARY>" LF
" <CUNIT_RUN_SUMMARY_RECORD>" LF
" <TYPE> Suites </TYPE>" LF
" <TOTAL> %zu </TOTAL>" LF
" <RUN> %zu </RUN>" LF
" <SUCCEEDED> - NA - </SUCCEEDED>" LF
" <FAILED> %zu </FAILED>" LF
" <INACTIVE> %zu </INACTIVE>" LF
" </CUNIT_RUN_SUMMARY_RECORD>" LF
" <CUNIT_RUN_SUMMARY_RECORD>" LF
" <TYPE> Test Cases </TYPE>" LF
" <TOTAL> %zu </TOTAL>" LF
" <RUN> %zu </RUN>" LF
" <SUCCEEDED> %zu </SUCCEEDED>" LF
" <FAILED> %zu </FAILED>" LF
" <INACTIVE> %zu </INACTIVE>" LF
" </CUNIT_RUN_SUMMARY_RECORD>" LF
" <CUNIT_RUN_SUMMARY_RECORD>" LF
" <TYPE> Assertions </TYPE>" LF
" <TOTAL> %zu </TOTAL>" LF
" <RUN> %zu </RUN>" LF
" <SUCCEEDED> %zu </SUCCEEDED>" LF
" <FAILED> %zu </FAILED>" LF
" <INACTIVE> n/a </INACTIVE>" LF
" </CUNIT_RUN_SUMMARY_RECORD>" LF
" </CUNIT_RUN_SUMMARY>" LF;
static const char
list_hdr[] =
"<?xml version=\"1.0\" ?>" LF
"<?xml-stylesheet type=\"text/xsl\" href=\"CUnit-List.xsl\" ?>" LF
"<!DOCTYPE CUNIT_TEST_LIST_REPORT SYSTEM \"CUnit-List.dtd\">" LF
"<CUNIT_TEST_LIST_REPORT>" LF
" <CUNIT_HEADER/>" LF;
/* TODO: Criterion version number not available. See previous comment. */
static const char
list_ftr[] =
" <CUNIT_FOOTER> File Generated By Criterion - %s </CUNIT_FOOTER>" LF
"</CUNIT_TEST_LIST_REPORT>";
static const char
list_stats[] =
" <CUNIT_LIST_TOTAL_SUMMARY>" LF
" <CUNIT_LIST_TOTAL_SUMMARY_RECORD>" LF
" <CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> Total Number of Suites </CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT>" LF
" <CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> %zu </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE>" LF
" </CUNIT_LIST_TOTAL_SUMMARY_RECORD>" LF
" <CUNIT_LIST_TOTAL_SUMMARY_RECORD>" LF
" <CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT> Total Number of Test Cases </CUNIT_LIST_TOTAL_SUMMARY_RECORD_TEXT>" LF
" <CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE> %zu </CUNIT_LIST_TOTAL_SUMMARY_RECORD_VALUE>" LF
" </CUNIT_LIST_TOTAL_SUMMARY_RECORD>" LF
" </CUNIT_LIST_TOTAL_SUMMARY>" LF;
static const char
list_suites_hdr[] =
" <CUNIT_ALL_TEST_LISTING_SUITE>" LF;
static const char
list_suites_ftr[] =
" </CUNIT_ALL_TEST_LISTING_SUITE>" LF;
static const char
list_suite_hdr[] =
" <CUNIT_ALL_TEST_LISTING_SUITE>" LF
" <CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION>" LF
" <SUITE_NAME> %s </SUITE_NAME>" LF
" <INITIALIZE_VALUE> %s </INITIALIZE_VALUE>" LF
" <CLEANUP_VALUE> %s </CLEANUP_VALUE>" LF
" <ACTIVE_VALUE> %s </ACTIVE_VALUE>" LF
" <TEST_COUNT_VALUE> %zu </TEST_COUNT_VALUE>" LF
" </CUNIT_ALL_TEST_LISTING_SUITE_DEFINITION>" LF
" <CUNIT_ALL_TEST_LISTING_SUITE_TESTS>" LF;
static const char
list_suite_ftr[] =
" </CUNIT_ALL_TEST_LISTING_SUITE_TESTS>" LF
" </CUNIT_ALL_TEST_LISTING_SUITE>" LF;
static const char
list_test[] =
" <TEST_CASE_DEFINITION>" LF
" <TEST_CASE_NAME> %s </TEST_CASE_NAME>" LF
" <TEST_ACTIVE_VALUE> %s </TEST_ACTIVE_VALUE>" LF
" </TEST_CASE_DEFINITION>" LF;
static void
print_run_test_stats(FILE *file, struct criterion_test_stats *stats)
{
struct criterion_assert_stats *itr;
(void)fprintf(file, run_test_hdr);
if (stats->test_status == CR_STATUS_PASSED) {
(void)fprintf(file, run_test_ok, stats->test->name);
} else if (stats->test_status == CR_STATUS_FAILED) {
for (itr = stats->asserts; itr != NULL; itr = itr->next) {
if (!itr->passed) {
(void)fprintf(
file,
run_test_nok,
stats->test->name,
itr->file,
itr->line,
itr->message);
break;
}
}
}
(void)fprintf(file, run_test_ftr);
}
static void
print_run_suite_stats(FILE *file, struct criterion_suite_stats *stats)
{
struct criterion_test_stats *itr;
(void)fprintf(file, run_suite_hdr, stats->suite->name);
for (itr = stats->tests; itr != NULL; itr = itr->next) {
if (itr->test_status != CR_STATUS_SKIPPED) {
print_run_test_stats(file, itr);
}
}
(void)fprintf(file, run_suite_ftr);
}
static void
print_run_stats(FILE *file, struct criterion_global_stats *stats)
{
size_t suites_failed = 0;
size_t suites_passed = 0;
struct criterion_suite_stats *itr;
(void)fprintf(file, run_hdr);
(void)fprintf(file, run_result_hdr);
for (itr = stats->suites; itr != NULL; itr = itr->next) {
if (itr->tests_skipped != itr->nb_tests) {
print_run_suite_stats(file, itr);
if (itr->tests_failed == itr->nb_tests) {
suites_failed++;
} else {
suites_passed++;
}
}
}
(void)fprintf(file, run_result_ftr);
(void)fprintf(
file,
run_stats,
stats->nb_suites,
suites_passed,
suites_failed,
(stats->nb_suites - (suites_passed - suites_failed)),
stats->nb_tests,
(stats->tests_passed + stats->tests_failed + stats->tests_crashed),
stats->tests_passed,
(stats->tests_failed + stats->tests_crashed),
stats->tests_skipped,
stats->nb_asserts,
(stats->asserts_passed + stats->asserts_failed),
stats->asserts_passed,
stats->asserts_failed);
(void)fprintf(file, run_ftr, stamp);
}
static void
print_list_test_stats(FILE *file, struct criterion_test_stats *stats)
{
(void)fprintf(
file,
list_test,
stats->test->name,
(stats->test_status == CR_STATUS_SKIPPED ? "No" : "Yes"));
}
static void
print_list_suite_stats(FILE *file, struct criterion_suite_stats *stats)
{
struct criterion_test_stats *itr;
(void)fprintf(
file,
list_suite_hdr,
stats->suite->name,
"No", // <INITIALIZE_VALUE />
"No", // <CLEANUP_VALUE />
(stats->nb_tests == stats->tests_skipped ? "No" : "Yes"),
stats->nb_tests);
for (itr = stats->tests; itr != NULL; itr = itr->next) {
print_list_test_stats(file, itr);
}
(void)fprintf(file, list_suite_ftr);
}
static void
print_list_stats(FILE *file, struct criterion_global_stats *stats)
{
struct criterion_suite_stats *itr;
(void)fprintf(file, list_hdr);
(void)fprintf(file, list_stats, stats->nb_suites, stats->nb_tests);
(void)fprintf(file, list_suites_hdr);
for (itr = stats->suites; itr != NULL; itr = itr->next) {
print_list_suite_stats(file, itr);
}
(void)fprintf(file, list_suites_ftr);
(void)fprintf(file, list_ftr, stamp);
}
static int
patmatch(
const char *pat,
const char *str)
{
while (*pat) {
if (*pat == '?') {
/* any character will do */
if (*str++ == 0) {
return 0;
}
pat++;
} else if (*pat == '*') {
/* collapse a sequence of wildcards, requiring as many
characters in str as there are ?s in the sequence */
while (*pat == '*' || *pat == '?') {
if (*pat == '?' && *str++ == 0) {
return 0;
}
pat++;
}
/* try matching on all positions where str matches pat */
while (*str) {
if (*str == *pat && patmatch(pat+1, str+1)) {
return 1;
}
str++;
}
return *pat == 0;
} else {
/* only an exact match */
if (*str++ != *pat++) {
return 0;
}
}
}
return *str == 0;
}
/* Criterion actually prescribes */
ReportHook(POST_ALL)(struct criterion_global_stats *stats)
{
FILE *runfh, *listfh;
if (listfn[0] != '\0' && runfn[0] != '\0') {
runfh = NULL;
listfh = NULL;
if ((runfh = fopen(runfn, "w")) != NULL &&
(listfh = fopen(listfn, "w")) != NULL)
{
print_run_stats(runfh, stats);
print_list_stats(listfh, stats);
} else {
(void)fprintf(stderr, "Cannot write results in CUnit format\n");
}
if (runfh != NULL) {
(void)fclose(runfh);
}
if (listfh != NULL) {
(void)fclose(listfh);
}
}
}
#if defined(_WIN32)
__declspec(dllexport)
#endif
int
main(int argc, char *argv[])
{
int result = 0;
int argno, cr_argc, sz;
char *pfx, **cr_argv;
const char runfmt[] = "%s-Results.xml";
const char listfmt[] = "%s-Listing.xml";
const char stampfmt[] = "%a %b %e %H:%M:%S %Y";
time_t now;
/* Before handing over argc and argv over to criterion, go over the list to
extract the custom options. Note that these are meant to be "hidden" */
cr_argc = 0;
if ((cr_argv = calloc((unsigned)argc, sizeof(*cr_argv))) == NULL) {
result = 1;
} else {
for (argno = 0; argno < argc; argno++) {
/* FIXME:
Eventually CUnit output format should be supported through an
actual logger implementation, but it will do for now.
See: http://criterion.readthedocs.io/en/master/output.html */
if (strncmp(argv[argno], "--cunit", 7) == 0) {
if ((pfx = strchr(argv[argno], '=')) != NULL) {
pfx++;
} else {
pfx = "CriterionAutomated";
}
sz = snprintf(runfn, sizeof(runfn), runfmt, pfx);
assert(sz > 0 && sz < (int)sizeof(runfn));
sz = snprintf(listfn, sizeof(listfn), listfmt, pfx);
assert(sz > 0 && sz < (int)sizeof(listfn));
now = time(NULL);
sz = (int)strftime(
stamp, sizeof(stamp), stampfmt, localtime(&now));
assert(sz != 0);
(void)sz;
} else if (strncmp(argv[argno], "--suite", 7) == 0) {
if ((argno + 1) == argc) {
fprintf(stderr, "--suite requires an argument\n");
result = 1;
goto bail;
}
suitepat = (const char *)argv[++argno];
} else if (strncmp(argv[argno], "--test", 6) == 0) {
if ((argno + 1) == argc) {
fprintf(stderr, "--test requires an argument\n");
result = 1;
goto bail;
}
testpat = (const char *)argv[++argno];
} else {
cr_argv[cr_argc++] = argv[argno];
}
}
/* FIXME: Depending on internal knowledge is not very pretty, but it is
the only way to provide a filter that will work on both *nix
and non-*nix platforms. */
struct criterion_test_set *tests = criterion_initialize();
struct criterion_ordered_set_node *suite_itr, *test_itr;
struct criterion_suite_set *suite;
struct criterion_test *test;
for (suite_itr = tests->suites->first;
suite_itr != NULL;
suite_itr = suite_itr->next)
{
suite = (struct criterion_suite_set *)(suite_itr + 1);
for (test_itr = suite->tests->first;
test_itr != NULL;
test_itr = test_itr->next)
{
test = (struct criterion_test *)(test_itr + 1);
if (!patmatch(suitepat, test->category) ||
!patmatch(testpat, test->name))
{
test->data->disabled = true;
}
}
}
if (criterion_handle_args(cr_argc, cr_argv, true)) {
result = !criterion_run_all_tests(tests);
}
criterion_finalize(tests);
bail:
free(cr_argv);
}
return result;
}

View file

@ -1,61 +0,0 @@
#
# Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0 which is available at
# http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
# v. 1.0 which is available at
# http://www.eclipse.org/org/documents/edl-v10.php.
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#
find_path(CRITERION_INCLUDE_DIR criterion/criterion.h)
find_library(CRITERION_LIBRARY criterion)
mark_as_advanced(CRITERION_INCLUDE_DIR)
# Criterion does not define the version number anywhere.
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Criterion DEFAULT_MSG CRITERION_LIBRARY CRITERION_INCLUDE_DIR)
if(CRITERION_FOUND)
set(CRITERION_INCLUDE_DIRS ${CRITERION_INCLUDE_DIR})
set(CRITERION_LIBRARIES ${CRITERION_LIBRARY})
if(WIN32)
get_filename_component(CRITERION_LIBRARY_DIR "${CRITERION_LIBRARY}}" PATH)
get_filename_component(CRITERION_BASENAME "${CRITERION_LIBRARY}}" NAME_WE)
get_filename_component(CRITERION_PREFIX "${CRITERION_LIBRARY_DIR}" PATH)
find_program(
CRITERION_DLL
"${CMAKE_SHARED_LIBRARY_PREFIX}${CRITERION_BASENAME}${CMAKE_SHARED_LIBRARY_SUFFIX}"
HINTS
${CRITERION_PREFIX}
PATH_SUFFIXES
bin
NO_DEFAULT_PATH)
mark_as_advanced(CRITERION_DLL)
if(CRITERION_DLL)
add_library(Criterion SHARED IMPORTED)
set_target_properties(
Criterion PROPERTIES IMPORTED_IMPLIB "${CRITERION_LIBRARY}")
set_target_properties(
Criterion PROPERTIES IMPORTED_LOCATION "${CRITERION_DLL}")
else()
add_library(Criterion STATIC IMPORTED)
set_target_properties(
Criterion PROPERTIES IMPORTED_LOCATION "${CRITERION_LIBRARY}")
endif()
else()
add_library(Criterion UNKNOWN IMPORTED)
set_target_properties(
Criterion PROPERTIES IMPORTED_LOCATION "${CRITERION_LIBRARY}")
endif()
set_target_properties(
Criterion PROPERTIES INTERFACE_INCLUDE_DIRECTORIES "${CRITERION_INCLUDE_DIR}")
endif()

View file

@ -9,29 +9,62 @@
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#
include(Criterion)
include(CUnit)
idlc_generate(RoundTrip RoundTrip.idl)
idlc_generate(Space Space.idl)
idlc_generate(TypesArrayKey TypesArrayKey.idl)
add_criterion_executable(criterion_ddsc .)
target_include_directories(criterion_ddsc PRIVATE
set(ddsc_test_sources
"basic.c"
"builtin_topics.c"
"config.c"
"dispose.c"
"entity_api.c"
"entity_hierarchy.c"
"entity_status.c"
"err.c"
"file_id.c"
"instance_get_key.c"
"listener.c"
"participant.c"
"publisher.c"
"qos.c"
"querycondition.c"
"readcondition.c"
"reader.c"
"reader_iterator.c"
"read_instance.c"
"register.c"
"return_loan.c"
"subscriber.c"
"take_instance.c"
"time.c"
"topic.c"
"transientlocal.c"
"types.c"
"unregister.c"
"unsupported.c"
"waitset.c"
"write.c"
"writer.c")
add_cunit_executable(cunit_ddsc ${ddsc_test_sources})
target_include_directories(cunit_ddsc PRIVATE
"$<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/src/include/>")
target_link_libraries(criterion_ddsc RoundTrip Space TypesArrayKey ddsc OSAPI)
target_link_libraries(cunit_ddsc RoundTrip Space TypesArrayKey ddsc OSAPI)
# Setup environment for config-tests
get_test_property(Criterion_ddsc_config_simple_udp ENVIRONMENT Criterion_ddsc_config_simple_udp_env)
set(Criterion_ddsc_config_simple_udp_file "${CMAKE_CURRENT_LIST_DIR}/config_simple_udp.xml")
set(Criterion_ddsc_config_simple_udp_uri "file://${Criterion_ddsc_config_simple_udp_file}")
set(Criterion_ddsc_config_simple_udp_max_participants "0")
set(Criterion_ddsc_config_simple_udp_env "${CMAKE_PROJECT_NAME_CAPS}_URI=${Criterion_ddsc_config_simple_udp_uri};MAX_PARTICIPANTS=${Criterion_ddsc_config_simple_udp_max_participants};${Criterion_ddsc_config_simple_udp_env}")
message(STATUS "ENV: ${Criterion_ddsc_config_simple_udp_env}")
get_test_property(CUnit_ddsc_config_simple_udp ENVIRONMENT CUnit_ddsc_config_simple_udp_env)
set(CUnit_ddsc_config_simple_udp_file "${CMAKE_CURRENT_LIST_DIR}/config_simple_udp.xml")
set(CUnit_ddsc_config_simple_udp_uri "file://${CUnit_ddsc_config_simple_udp_file}")
set(CUnit_ddsc_config_simple_udp_max_participants "0")
set(CUnit_ddsc_config_simple_udp_env "${CMAKE_PROJECT_NAME_CAPS}_URI=${CUnit_ddsc_config_simple_udp_uri};MAX_PARTICIPANTS=${CUnit_ddsc_config_simple_udp_max_participants};${CUnit_ddsc_config_simple_udp_env}")
set_tests_properties(
Criterion_ddsc_config_simple_udp
CUnit_ddsc_config_simple_udp
PROPERTIES
REQUIRED_FILES ${Criterion_ddsc_config_simple_udp_file}
ENVIRONMENT "${Criterion_ddsc_config_simple_udp_env}")
REQUIRED_FILES ${CUnit_ddsc_config_simple_udp_file}
ENVIRONMENT "${CUnit_ddsc_config_simple_udp_env}")
configure_file("config_env.h.in" "config_env.h")

View file

@ -10,19 +10,16 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
Test(ddsc_basic, test)
CU_Test(ddsc_basic, test)
{
dds_entity_t participant;
dds_return_t status;
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
/* TODO: CHAM-108: Add some simple read/write test(s). */
CU_ASSERT_FATAL(participant > 0);
status = dds_delete(participant);
cr_assert_eq(status, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, DDS_RETCODE_OK);
}

388
src/core/ddsc/tests/builtin_topics.c Executable file → Normal file
View file

@ -14,8 +14,8 @@
#include "ddsc/dds.h"
#include "os/os.h"
#include "test-common.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
static dds_entity_t g_participant = 0;
static dds_entity_t g_subscriber = 0;
@ -59,7 +59,7 @@ static void
qos_init(void)
{
g_qos = dds_create_qos();
cr_assert_not_null(g_qos);
CU_ASSERT_PTR_NOT_NULL_FATAL(g_qos);
g_pol_userdata.value._buffer = dds_alloc(strlen(c_userdata) + 1);
g_pol_userdata.value._length = (uint32_t)strlen(c_userdata) + 1;
@ -149,13 +149,13 @@ setup(void)
qos_init();
g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(g_participant, 0, "Failed to create prerequisite g_participant");
CU_ASSERT_FATAL(g_participant > 0);
g_topic = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, "RoundTrip", NULL, NULL);
cr_assert_gt(g_topic, 0, "Failed to create prerequisite g_topic");
CU_ASSERT_FATAL(g_topic> 0);
g_subscriber = dds_create_subscriber(g_participant, NULL, NULL);
cr_assert_gt(g_subscriber, 0, "Failed to create prerequisite g_subscriber");
CU_ASSERT_FATAL(g_subscriber> 0);
g_publisher = dds_create_publisher(g_participant, NULL, NULL);
cr_assert_gt(g_publisher, 0, "Failed to create prerequisite g_publisher");
CU_ASSERT_FATAL(g_publisher> 0);
}
static void
@ -197,10 +197,10 @@ check_default_qos_of_builtin_entity(dds_entity_t entity)
uint32_t plen;
dds_qos_t *qos = dds_create_qos();
cr_assert_not_null(qos);
CU_ASSERT_PTR_NOT_NULL_FATAL(qos);
ret = dds_get_qos(entity, qos);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to get QOS of builtin entity");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
dds_qget_durability(qos, &durability_kind);
dds_qget_presentation(qos, &presentation_access_scope_kind, &g_pol_presentation.coherent_access, &g_pol_presentation.ordered_access);
@ -217,31 +217,31 @@ check_default_qos_of_builtin_entity(dds_entity_t entity)
// no getter for ENTITY_FACTORY
if ((entity & DDS_ENTITY_KIND_MASK) == DDS_KIND_SUBSCRIBER) {
cr_expect_eq(plen, 1);
CU_ASSERT_EQUAL(plen, 1);
if (plen > 0) {
cr_expect_str_eq(partitions[0], "__BUILT-IN PARTITION__");
CU_ASSERT_STRING_EQUAL(partitions[0], "__BUILT-IN PARTITION__");
}
} else if ((entity & DDS_ENTITY_KIND_MASK) == DDS_KIND_READER) {
cr_expect_eq(durability_kind, DDS_DURABILITY_TRANSIENT_LOCAL);
cr_expect_eq(presentation_access_scope_kind, DDS_PRESENTATION_TOPIC);
cr_expect_eq(g_pol_presentation.coherent_access, false);
cr_expect_eq(g_pol_presentation.ordered_access, false);
cr_expect_eq(deadline, DDS_INFINITY);
cr_expect_eq(ownership_kind, DDS_OWNERSHIP_SHARED);
cr_expect_eq(liveliness_kind, DDS_LIVELINESS_AUTOMATIC);
cr_expect_eq(minimum_separation, 0);
cr_expect_eq(reliability_kind, DDS_RELIABILITY_RELIABLE);
cr_expect_eq(max_blocking_time, DDS_MSECS(100));
cr_expect_eq(destination_order_kind, DDS_DESTINATIONORDER_BY_RECEPTION_TIMESTAMP);
cr_expect_eq(history_kind, DDS_HISTORY_KEEP_LAST);
cr_expect_eq(g_pol_history.depth, 1);
cr_expect_eq(g_pol_resource_limits.max_instances, DDS_LENGTH_UNLIMITED);
cr_expect_eq(g_pol_resource_limits.max_samples, DDS_LENGTH_UNLIMITED);
cr_expect_eq(g_pol_resource_limits.max_samples_per_instance, DDS_LENGTH_UNLIMITED);
cr_expect_eq(autopurge_nowriter_samples_delay, DDS_INFINITY);
cr_expect_eq(autopurge_disposed_samples_delay, DDS_INFINITY);
CU_ASSERT_EQUAL(durability_kind, DDS_DURABILITY_TRANSIENT_LOCAL);
CU_ASSERT_EQUAL(presentation_access_scope_kind, DDS_PRESENTATION_TOPIC);
CU_ASSERT_EQUAL(g_pol_presentation.coherent_access, false);
CU_ASSERT_EQUAL(g_pol_presentation.ordered_access, false);
CU_ASSERT_EQUAL(deadline, DDS_INFINITY);
CU_ASSERT_EQUAL(ownership_kind, DDS_OWNERSHIP_SHARED);
CU_ASSERT_EQUAL(liveliness_kind, DDS_LIVELINESS_AUTOMATIC);
CU_ASSERT_EQUAL(minimum_separation, 0);
CU_ASSERT_EQUAL(reliability_kind, DDS_RELIABILITY_RELIABLE);
CU_ASSERT_EQUAL(max_blocking_time, DDS_MSECS(100));
CU_ASSERT_EQUAL(destination_order_kind, DDS_DESTINATIONORDER_BY_RECEPTION_TIMESTAMP);
CU_ASSERT_EQUAL(history_kind, DDS_HISTORY_KEEP_LAST);
CU_ASSERT_EQUAL(g_pol_history.depth, 1);
CU_ASSERT_EQUAL(g_pol_resource_limits.max_instances, DDS_LENGTH_UNLIMITED);
CU_ASSERT_EQUAL(g_pol_resource_limits.max_samples, DDS_LENGTH_UNLIMITED);
CU_ASSERT_EQUAL(g_pol_resource_limits.max_samples_per_instance, DDS_LENGTH_UNLIMITED);
CU_ASSERT_EQUAL(autopurge_nowriter_samples_delay, DDS_INFINITY);
CU_ASSERT_EQUAL(autopurge_disposed_samples_delay, DDS_INFINITY);
} else {
cr_assert_fail("Unsupported entity kind %s", entity_kind_str(entity));
CU_FAIL_FATAL("Unsupported entity kind");
}
if (plen > 0) {
for (uint32_t i = 0; i < plen; i++) {
@ -254,11 +254,11 @@ check_default_qos_of_builtin_entity(dds_entity_t entity)
static dds_entity_t builtin_topic_handles[10];
Test(ddsc_builtin_topics, types_allocation)
CU_Test(ddsc_builtin_topics, types_allocation)
{
#define TEST_ALLOC(type) do { \
DDS_##type##BuiltinTopicData *data = DDS_##type##BuiltinTopicData__alloc(); \
cr_expect_not_null(data, "Failed to allocate DDS_" #type "BuiltinTopicData"); \
CU_ASSERT_PTR_NOT_NULL(data); \
DDS_##type##BuiltinTopicData_free(data, DDS_FREE_ALL); \
} while(0)
@ -275,28 +275,28 @@ Test(ddsc_builtin_topics, types_allocation)
#undef TEST_ALLOC
}
Test(ddsc_builtin_topics, availability_builtin_topics, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, availability_builtin_topics, .init = setup, .fini = teardown)
{
dds_entity_t topic;
topic = dds_find_topic(g_participant, "DCPSParticipant");
cr_assert_gt(topic, 0);
CU_ASSERT_FATAL(topic > 0);
dds_delete(topic);
topic = dds_find_topic(g_participant, "DCPSTopic");
cr_assert_lt(topic, 0);
CU_ASSERT_FATAL(topic < 0);
//TODO CHAM-347: dds_delete(topic);
topic = dds_find_topic(g_participant, "DCPSType");
cr_assert_lt(topic, 0);
CU_ASSERT_FATAL(topic < 0);
//TODO CHAM-347: dds_delete(topic);
topic = dds_find_topic(g_participant, "DCPSSubscription");
cr_assert_lt(topic, 0);
CU_ASSERT_FATAL(topic < 0);
//TODO CHAM-347: dds_delete(topic);
topic = dds_find_topic(g_participant, "DCSPPublication");
cr_assert_lt(topic, 0);
CU_ASSERT_FATAL(topic < 0);
//TODO CHAM-347: dds_delete(topic);
}
Test(ddsc_builtin_topics, read_publication_data, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, read_publication_data, .init = setup, .fini = teardown)
{
dds_entity_t reader;
#if 0 /* disabled pending CHAM-347 */
@ -307,28 +307,28 @@ Test(ddsc_builtin_topics, read_publication_data, .init = setup, .fini = teardown
reader = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSPUBLICATION, NULL, NULL);
cr_assert_gt(reader, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSPUBLICATION.");
CU_ASSERT_FATAL(reader > 0);
samples[0] = DDS_PublicationBuiltinTopicData__alloc();
#if 0 /* disabled pending CHAM-347 */
ret = dds_read(reader, samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read samples DCPSPublication");
CU_ASSERT_FATAL(ret > 0);
data = (DDS_PublicationBuiltinTopicData *)samples;
cr_assert_str_eq(data->topic_name, "DCPSPublication");
CU_ASSERT_STRING_EQUAL_FATAL(data->topic_name, "DCPSPublication");
#endif
DDS_PublicationBuiltinTopicData_free(samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, create_reader)
CU_Test(ddsc_builtin_topics, create_reader)
{
dds_entity_t participant;
dds_entity_t t1;
/* Create a participant */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
/*
* The topics are created by the middleware as soon as a participant
@ -336,7 +336,7 @@ Test(ddsc_builtin_topics, create_reader)
*/
#define TEST_FIND(p, t) do { \
t1 = dds_find_topic(p, t); \
cr_expect_gt(t1, 0, "dds_find_topic(\"" t "\") returned a valid handle"); \
CU_ASSERT(t1 > 0); \
dds_delete(t1); \
} while(0);
@ -350,7 +350,7 @@ Test(ddsc_builtin_topics, create_reader)
*/
#define TEST_NOTFOUND(p, t) do { \
t1 = dds_find_topic(p, t); \
cr_expect_lt(t1, 0, "dds_find_topic(\"" t "\") returned a valid handle"); \
CU_ASSERT(t1 < 0); \
} while(0);
/* A builtin-topic proxy is created 'on demand' and should not exist before a reader is created for it */
@ -383,18 +383,18 @@ Test(ddsc_builtin_topics, create_reader)
for (int i = 0; i < 10; i++) {
readers[i] = dds_create_reader(participant, builtin_topic_handles[i], NULL, NULL);
cr_expect_gt(readers[i], 0, "Failed to created reader for builtin topic handle %d", builtin_topic_handles[i]);
CU_ASSERT(readers[i]> 0);
if (i == 0) {
/* Check the parent of reader is a subscriber */
builtin_subscriber = dds_get_parent(readers[i]);
cr_assert_gt(builtin_subscriber, 0, "Failed to get parent of first builtin-reader (%s)", dds_err_str(builtin_subscriber));
cr_assert_eq(builtin_subscriber & DDS_ENTITY_KIND_MASK, DDS_KIND_SUBSCRIBER, "Parent is not a subscriber");
CU_ASSERT_FATAL(builtin_subscriber > 0);
CU_ASSERT_EQUAL_FATAL(builtin_subscriber & DDS_ENTITY_KIND_MASK, DDS_KIND_SUBSCRIBER);
} else {
/* Check the parent of reader equals parent of first reader */
s = dds_get_parent(readers[i]);
cr_assert_gt(s, 0, "Failed to get parent of builtin-reader (%s)", dds_err_str(s));
cr_assert_eq(s, builtin_subscriber, "Parent subscriber of reader(%d) doesn't equal builtin-subscriber", i);
CU_ASSERT_FATAL(s > 0);
CU_ASSERT_EQUAL_FATAL(s, builtin_subscriber);
//dds_delete(s);
}
}
@ -402,7 +402,7 @@ Test(ddsc_builtin_topics, create_reader)
#define TEST_FOUND(p, t) do { \
t1 = dds_find_topic(p, t); \
cr_expect_gt(t1, 0, "dds_find_topic(\"" t "\") returned an invalid handle (%s)", dds_err_str(t1)); \
CU_ASSERT(t1 > 0); \
if (t1 > 0) { \
dds_delete(t1); \
} \
@ -424,7 +424,7 @@ Test(ddsc_builtin_topics, create_reader)
dds_delete(participant);
}
Test(ddsc_builtin_topics, read_subscription_data, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, read_subscription_data, .init = setup, .fini = teardown)
{
dds_entity_t reader;
#if 0 /* not supported yet */
@ -434,68 +434,66 @@ Test(ddsc_builtin_topics, read_subscription_data, .init = setup, .fini = teardow
void * samples[MAX_SAMPLES];
reader = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION, NULL, NULL);
cr_assert_gt(reader, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION.");
CU_ASSERT_FATAL(reader> 0);
samples[0] = DDS_SubscriptionBuiltinTopicData__alloc();
#if 0 /* not supported yet */
ret = dds_read(reader, samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read samples DCPSSubscription");
CU_ASSERT_FATAL(ret> 0);
data = (DDS_SubscriptionBuiltinTopicData *)samples;
cr_assert_str_eq(data->topic_name, "DCPSSubscription");
CU_ASSERT_STRING_EQUAL_FATAL(data->topic_name, "DCPSSubscription");
#endif
DDS_SubscriptionBuiltinTopicData_free(samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, read_participant_data, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, read_participant_data, .init = setup, .fini = teardown)
{
dds_entity_t reader;
dds_return_t ret;
void * samples[MAX_SAMPLES];
reader = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSPARTICIPANT, NULL, NULL);
cr_assert_gt(reader, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSPARTICIPANT.");
CU_ASSERT_FATAL(reader > 0);
samples[0] = DDS_ParticipantBuiltinTopicData__alloc();
ret = dds_read(reader, samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read samples DCPSParticipant");
CU_ASSERT_FATAL(ret > 0);
#if 0
{
DDS_ParticipantBuiltinTopicData *data = (DDS_ParticipantBuiltinTopicData*)samples[0];
cr_log_info("Participant.key: %x.%x.%x\n", data->key[0], data->key[1], data->key[2]);
cr_log_info("Participant.userdata: %s\n", data->user_data.value._buffer);
}
#endif
DDS_ParticipantBuiltinTopicData_free(samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, read_cmparticipant_data, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, read_cmparticipant_data, .init = setup, .fini = teardown)
{
dds_entity_t reader;
dds_return_t ret;
void * samples[MAX_SAMPLES];
reader = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_CMPARTICIPANT, NULL, NULL);
cr_assert_gt(reader, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSPARTICIPANT.");
CU_ASSERT_FATAL(reader > 0);
samples[0] = DDS_CMParticipantBuiltinTopicData__alloc();
ret = dds_read(reader, samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read samples CMParticipant");
CU_ASSERT_FATAL(ret > 0);
#if 0
{
DDS_CMParticipantBuiltinTopicData *data = (DDS_CMParticipantBuiltinTopicData*)samples[0];
cr_log_info("CMParticipant.key: %x.%x.%x\n", data->key[0], data->key[1], data->key[2]);
cr_log_info("CMParticipant.product: %s\n", data->product.value);
}
#endif
DDS_CMParticipantBuiltinTopicData_free(samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, read_topic_data, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, read_topic_data, .init = setup, .fini = teardown)
{
dds_entity_t reader;
#if 0 /* disabled pending CHAM-347 */
@ -506,20 +504,20 @@ Test(ddsc_builtin_topics, read_topic_data, .init = setup, .fini = teardown)
reader = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSTOPIC, NULL, NULL);
cr_assert_gt(reader, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSTOPIC.");
CU_ASSERT_FATAL(reader > 0);
samples[0] = DDS_TopicBuiltinTopicData__alloc();
#if 0 /* disabled pending CHAM-347 */
ret = dds_read(reader, samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read samples DCPSTopic");
CU_ASSERT_FATAL(ret> 0);
data = (DDS_TopicBuiltinTopicData *)samples;
cr_assert_str_eq(data->name, "DCPSSubscription");
CU_ASSERT_STRING_EQUAL_FATAL(data->name, "DCPSSubscription");
#endif
DDS_ParticipantBuiltinTopicData_free(samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, read_type_data, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, read_type_data, .init = setup, .fini = teardown)
{
dds_entity_t reader;
#if 0 /* disabled pending CHAM-347 */
@ -529,20 +527,20 @@ Test(ddsc_builtin_topics, read_type_data, .init = setup, .fini = teardown)
void * samples[MAX_SAMPLES];
reader = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSTYPE, NULL, NULL);
cr_assert_gt(reader, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSTYPE.");
CU_ASSERT_FATAL(reader > 0);
samples[0] = DDS_TypeBuiltinTopicData__alloc();
#if 0 /* disabled pending CHAM-347 */
ret = dds_read(reader, samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read samples DCPSType");
CU_ASSERT_FATAL(ret > 0);
data = (DDS_TypeBuiltinTopicData *)samples;
cr_assert_str_eq(data->name, "DCPSType");
CU_ASSERT_STRING_EQUAL_FATAL(data->name, "DCPSType");
#endif
DDS_TypeBuiltinTopicData_free(samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, same_subscriber, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, same_subscriber, .init = setup, .fini = teardown)
{
dds_entity_t subscription_rdr;
dds_entity_t subscription_subscriber;
@ -560,54 +558,54 @@ Test(ddsc_builtin_topics, same_subscriber, .init = setup, .fini = teardown)
dds_entity_t type_subscriber;
subscription_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION, NULL, NULL);
cr_assert_gt(subscription_rdr, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION.");
CU_ASSERT_FATAL(subscription_rdr > 0);
subscription_subscriber = dds_get_parent(subscription_rdr);
cr_assert_gt(subscription_subscriber, 0, "Could not find builtin subscriber for DSCPSSubscription-reader.");
CU_ASSERT_FATAL(subscription_subscriber > 0);
publication_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSPUBLICATION, NULL, NULL);
cr_assert_gt(publication_rdr, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSPUBLICATION.");
CU_ASSERT_FATAL(publication_rdr > 0);
publication_subscriber = dds_get_parent(publication_rdr);
cr_assert_gt(publication_subscriber, 0, "Could not find builtin subscriber for DSCPSPublication-reader.");
CU_ASSERT_FATAL(publication_subscriber > 0);
cr_assert_eq(subscription_subscriber, publication_subscriber);
CU_ASSERT_EQUAL_FATAL(subscription_subscriber, publication_subscriber);
participant_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSPARTICIPANT, NULL, NULL);
cr_assert_gt(participant_rdr, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSPARTICIPANT.");
CU_ASSERT_FATAL(participant_rdr > 0);
participant_subscriber = dds_get_parent(participant_rdr);
cr_assert_gt(participant_subscriber, 0, "Could not find builtin subscriber for DSCPSParticipant-reader.");
CU_ASSERT_FATAL(participant_subscriber > 0);
cr_assert_eq(publication_subscriber, participant_subscriber);
CU_ASSERT_EQUAL_FATAL(publication_subscriber, participant_subscriber);
topic_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSTOPIC, NULL, NULL);
cr_assert_gt(topic_rdr, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSTOPIC.");
CU_ASSERT_FATAL(topic_rdr > 0);
topic_subscriber = dds_get_parent(topic_rdr);
cr_assert_gt(topic_subscriber, 0, "Could not find builtin subscriber for DSCPSTopic-reader.");
CU_ASSERT_FATAL(topic_subscriber > 0);
cr_assert_eq(participant_subscriber, topic_subscriber);
CU_ASSERT_EQUAL_FATAL(participant_subscriber, topic_subscriber);
type_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSTYPE, NULL, NULL);
cr_assert_gt(type_rdr, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSTYPE.");
CU_ASSERT_FATAL(type_rdr > 0);
type_subscriber = dds_get_parent(type_rdr);
cr_assert_gt(type_subscriber, 0, "Could not find builtin subscriber for DSCPSType-reader.");
CU_ASSERT_FATAL(type_subscriber > 0);
cr_assert_eq(topic_subscriber, type_subscriber);
CU_ASSERT_EQUAL_FATAL(topic_subscriber, type_subscriber);
}
Test(ddsc_builtin_topics, builtin_qos, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, builtin_qos, .init = setup, .fini = teardown)
{
dds_entity_t dds_sub_rdr;
dds_entity_t dds_sub_subscriber;
dds_sub_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION, NULL, NULL);
cr_assert_gt(dds_sub_rdr, 0, "Failed to create a data reader for DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION.");
CU_ASSERT_FATAL(dds_sub_rdr > 0);
check_default_qos_of_builtin_entity(dds_sub_rdr);
dds_sub_subscriber = dds_get_parent(dds_sub_rdr);
cr_assert_gt(dds_sub_subscriber, 0, "Could not find builtin subscriber for DSCPSSubscription-reader.");
CU_ASSERT_FATAL(dds_sub_subscriber > 0);
check_default_qos_of_builtin_entity(dds_sub_subscriber);
}
Test(ddsc_builtin_topics, datareader_qos, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, datareader_qos, .init = setup, .fini = teardown)
{
dds_entity_t rdr;
dds_entity_t subscription_rdr;
@ -633,57 +631,57 @@ Test(ddsc_builtin_topics, datareader_qos, .init = setup, .fini = teardown)
dds_qset_groupdata(g_qos, g_pol_groupdata.value._buffer, g_pol_groupdata.value._length);
rdr = dds_create_reader(g_subscriber, g_topic, g_qos, NULL);
cr_assert_gt(rdr, 0, "Failed to create a data reader.");
CU_ASSERT_FATAL(rdr > 0);
subscription_samples[0] = DDS_SubscriptionBuiltinTopicData__alloc();
subscription_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSSUBSCRIPTION, NULL, NULL);
cr_assert_gt(subscription_rdr, 0, "Failed to retrieve built-in datareader for DCPSSubscription");
CU_ASSERT_FATAL(subscription_rdr > 0);
#if 0 /* disabled pending CHAM-347 */
ret = dds_read(subscription_rdr, subscription_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read Subscription data");
CU_ASSERT_FATAL(ret > 0);
// Check the QOS settings of the 'remote' qos'
subscription_data = (DDS_SubscriptionBuiltinTopicData *)subscription_samples[0];
cr_assert_str_eq(subscription_data->topic_name, "RoundTrip");
cr_assert_str_eq(subscription_data->type_name, "RoundTripModule::DataType");
cr_assert_eq(subscription_data->durability.kind, g_pol_durability.kind);
cr_assert_eq(subscription_data->deadline.period.sec, g_pol_deadline.period.sec);
cr_assert_eq(subscription_data->deadline.period.nanosec, g_pol_deadline.period.nanosec);
cr_assert_eq(subscription_data->latency_budget.duration.sec, g_pol_latency_budget.duration.sec);
cr_assert_eq(subscription_data->latency_budget.duration.nanosec, g_pol_latency_budget.duration.nanosec);
cr_assert_eq(subscription_data->liveliness.kind, g_pol_liveliness.kind);
cr_assert_eq(subscription_data->liveliness.lease_duration.sec, g_pol_liveliness.lease_duration.sec);
cr_assert_eq(subscription_data->liveliness.lease_duration.nanosec, g_pol_liveliness.lease_duration.nanosec);
cr_assert_eq(subscription_data->reliability.kind, g_pol_reliability.kind);
cr_assert_eq(subscription_data->reliability.max_blocking_time.sec, g_pol_reliability.max_blocking_time.sec);
cr_assert_eq(subscription_data->reliability.max_blocking_time.nanosec, g_pol_reliability.max_blocking_time.nanosec);
cr_assert_eq(subscription_data->ownership.kind, g_pol_ownership.kind);
cr_assert_eq(subscription_data->destination_order.kind, g_pol_destination_order.kind);
cr_assert_eq(subscription_data->user_data.value._buffer, g_pol_userdata.value._buffer);
cr_assert_eq(subscription_data->user_data.value._length, g_pol_userdata.value._length);
cr_assert_eq(subscription_data->time_based_filter.minimum_separation.sec, g_pol_time_based_filter.minimum_separation.sec);
cr_assert_eq(subscription_data->time_based_filter.minimum_separation.nanosec, g_pol_time_based_filter.minimum_separation.nanosec);
cr_assert_eq(subscription_data->presentation.access_scope, g_pol_presentation.access_scope);
cr_assert_eq(subscription_data->presentation.coherent_access, g_pol_presentation.coherent_access);
cr_assert_eq(subscription_data->presentation.ordered_access, g_pol_presentation.ordered_access);
CU_ASSERT_STRING_EQUAL_FATAL(subscription_data->topic_name, "RoundTrip");
CU_ASSERT_STRING_EQUAL_FATAL(subscription_data->type_name, "RoundTripModule::DataType");
CU_ASSERT_EQUAL_FATAL(subscription_data->durability.kind, g_pol_durability.kind);
CU_ASSERT_EQUAL_FATAL(subscription_data->deadline.period.sec, g_pol_deadline.period.sec);
CU_ASSERT_EQUAL_FATAL(subscription_data->deadline.period.nanosec, g_pol_deadline.period.nanosec);
CU_ASSERT_EQUAL_FATAL(subscription_data->latency_budget.duration.sec, g_pol_latency_budget.duration.sec);
CU_ASSERT_EQUAL_FATAL(subscription_data->latency_budget.duration.nanosec, g_pol_latency_budget.duration.nanosec);
CU_ASSERT_EQUAL_FATAL(subscription_data->liveliness.kind, g_pol_liveliness.kind);
CU_ASSERT_EQUAL_FATAL(subscription_data->liveliness.lease_duration.sec, g_pol_liveliness.lease_duration.sec);
CU_ASSERT_EQUAL_FATAL(subscription_data->liveliness.lease_duration.nanosec, g_pol_liveliness.lease_duration.nanosec);
CU_ASSERT_EQUAL_FATAL(subscription_data->reliability.kind, g_pol_reliability.kind);
CU_ASSERT_EQUAL_FATAL(subscription_data->reliability.max_blocking_time.sec, g_pol_reliability.max_blocking_time.sec);
CU_ASSERT_EQUAL_FATAL(subscription_data->reliability.max_blocking_time.nanosec, g_pol_reliability.max_blocking_time.nanosec);
CU_ASSERT_EQUAL_FATAL(subscription_data->ownership.kind, g_pol_ownership.kind);
CU_ASSERT_EQUAL_FATAL(subscription_data->destination_order.kind, g_pol_destination_order.kind);
CU_ASSERT_EQUAL_FATAL(subscription_data->user_data.value._buffer, g_pol_userdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(subscription_data->user_data.value._length, g_pol_userdata.value._length);
CU_ASSERT_EQUAL_FATAL(subscription_data->time_based_filter.minimum_separation.sec, g_pol_time_based_filter.minimum_separation.sec);
CU_ASSERT_EQUAL_FATAL(subscription_data->time_based_filter.minimum_separation.nanosec, g_pol_time_based_filter.minimum_separation.nanosec);
CU_ASSERT_EQUAL_FATAL(subscription_data->presentation.access_scope, g_pol_presentation.access_scope);
CU_ASSERT_EQUAL_FATAL(subscription_data->presentation.coherent_access, g_pol_presentation.coherent_access);
CU_ASSERT_EQUAL_FATAL(subscription_data->presentation.ordered_access, g_pol_presentation.ordered_access);
cr_assert_eq(subscription_data->partition.name._length, g_pol_partition.name._length);
CU_ASSERT_EQUAL_FATAL(subscription_data->partition.name._length, g_pol_partition.name._length);
for (uint32_t i = 0; i < subscription_data->partition.name._length; ++i)
{
cr_assert_str_eq(subscription_data->partition.name._buffer[i], c_partitions[i]);
CU_ASSERT_STRING_EQUAL_FATAL(subscription_data->partition.name._buffer[i], c_partitions[i]);
}
cr_assert_str_eq(subscription_data->topic_data.value._buffer, g_pol_topicdata.value._buffer);
cr_assert_eq(subscription_data->topic_data.value._length, g_pol_topicdata.value._length);
cr_assert_str_eq(subscription_data->group_data.value._buffer, g_pol_groupdata.value._buffer);
cr_assert_eq(subscription_data->group_data.value._length, g_pol_groupdata.value._length);
CU_ASSERT_STRING_EQUAL_FATAL(subscription_data->topic_data.value._buffer, g_pol_topicdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(subscription_data->topic_data.value._length, g_pol_topicdata.value._length);
CU_ASSERT_STRING_EQUAL_FATAL(subscription_data->group_data.value._buffer, g_pol_groupdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(subscription_data->group_data.value._length, g_pol_groupdata.value._length);
#endif
DDS_SubscriptionBuiltinTopicData_free(subscription_samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, datawriter_qos, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, datawriter_qos, .init = setup, .fini = teardown)
{
dds_entity_t wrtr;
dds_entity_t publication_rdr;
@ -709,59 +707,59 @@ Test(ddsc_builtin_topics, datawriter_qos, .init = setup, .fini = teardown)
dds_qset_topicdata(g_qos, g_pol_topicdata.value._buffer, g_pol_topicdata.value._length);
wrtr = dds_create_writer(g_publisher, g_topic, g_qos, NULL);
cr_assert_gt(wrtr, 0, "Failed to create a data writer.");
CU_ASSERT_FATAL(wrtr > 0);
publication_samples[0] = DDS_PublicationBuiltinTopicData__alloc();
publication_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSPUBLICATION, NULL, NULL);
cr_assert_gt(publication_rdr, 0, "Failed to retrieve built-in datareader for DCPSPublication");
CU_ASSERT_FATAL(publication_rdr > 0);
#if 0 /* disabled pending CHAM-347 */
ret = dds_read(publication_rdr, publication_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read Publication data");
CU_ASSERT_FATAL(ret> 0);
// Check the QOS settings of the 'remote' qos'
publication_data = (DDS_PublicationBuiltinTopicData *)publication_samples[0];
cr_assert_str_eq(publication_data->topic_name, "RoundTrip");
cr_assert_str_eq(publication_data->type_name, "RoundTripModule::DataType");
cr_assert_eq(publication_data->durability.kind, g_pol_durability.kind);
cr_assert_eq(publication_data->deadline.period.sec, g_pol_deadline.period.sec);
cr_assert_eq(publication_data->deadline.period.nanosec, g_pol_deadline.period.nanosec);
cr_assert_eq(publication_data->latency_budget.duration.sec, g_pol_latency_budget.duration.sec);
cr_assert_eq(publication_data->latency_budget.duration.nanosec, g_pol_latency_budget.duration.nanosec);
cr_assert_eq(publication_data->liveliness.kind, g_pol_liveliness.kind);
cr_assert_eq(publication_data->liveliness.lease_duration.sec, g_pol_liveliness.lease_duration.sec);
cr_assert_eq(publication_data->liveliness.lease_duration.nanosec, g_pol_liveliness.lease_duration.nanosec);
cr_assert_eq(publication_data->reliability.kind, g_pol_reliability.kind);
cr_assert_eq(publication_data->reliability.max_blocking_time.sec, g_pol_reliability.max_blocking_time.sec);
cr_assert_eq(publication_data->reliability.max_blocking_time.nanosec, g_pol_reliability.max_blocking_time.nanosec);
cr_assert_eq(publication_data->lifespan.duration.sec, g_pol_lifespan.duration.sec);
cr_assert_eq(publication_data->lifespan.duration.nanosec, g_pol_lifespan.duration.nanosec);
cr_assert_eq(publication_data->destination_order.kind, g_pol_destination_order.kind);
cr_assert_eq(publication_data->user_data.value._buffer, g_pol_userdata.value._buffer);
cr_assert_eq(publication_data->user_data.value._length, g_pol_userdata.value._length);
cr_assert_eq(publication_data->ownership.kind, g_pol_ownership.kind);
cr_assert_eq(publication_data->ownership_strength.value, g_pol_ownership_strength.value);
cr_assert_eq(publication_data->presentation.access_scope, g_pol_presentation.access_scope);
cr_assert_eq(publication_data->presentation.coherent_access, g_pol_presentation.coherent_access);
cr_assert_eq(publication_data->presentation.ordered_access, g_pol_presentation.ordered_access);
CU_ASSERT_STRING_EQUAL_FATAL(publication_data->topic_name, "RoundTrip");
CU_ASSERT_STRING_EQUAL_FATAL(publication_data->type_name, "RoundTripModule::DataType");
CU_ASSERT_EQUAL_FATAL(publication_data->durability.kind, g_pol_durability.kind);
CU_ASSERT_EQUAL_FATAL(publication_data->deadline.period.sec, g_pol_deadline.period.sec);
CU_ASSERT_EQUAL_FATAL(publication_data->deadline.period.nanosec, g_pol_deadline.period.nanosec);
CU_ASSERT_EQUAL_FATAL(publication_data->latency_budget.duration.sec, g_pol_latency_budget.duration.sec);
CU_ASSERT_EQUAL_FATAL(publication_data->latency_budget.duration.nanosec, g_pol_latency_budget.duration.nanosec);
CU_ASSERT_EQUAL_FATAL(publication_data->liveliness.kind, g_pol_liveliness.kind);
CU_ASSERT_EQUAL_FATAL(publication_data->liveliness.lease_duration.sec, g_pol_liveliness.lease_duration.sec);
CU_ASSERT_EQUAL_FATAL(publication_data->liveliness.lease_duration.nanosec, g_pol_liveliness.lease_duration.nanosec);
CU_ASSERT_EQUAL_FATAL(publication_data->reliability.kind, g_pol_reliability.kind);
CU_ASSERT_EQUAL_FATAL(publication_data->reliability.max_blocking_time.sec, g_pol_reliability.max_blocking_time.sec);
CU_ASSERT_EQUAL_FATAL(publication_data->reliability.max_blocking_time.nanosec, g_pol_reliability.max_blocking_time.nanosec);
CU_ASSERT_EQUAL_FATAL(publication_data->lifespan.duration.sec, g_pol_lifespan.duration.sec);
CU_ASSERT_EQUAL_FATAL(publication_data->lifespan.duration.nanosec, g_pol_lifespan.duration.nanosec);
CU_ASSERT_EQUAL_FATAL(publication_data->destination_order.kind, g_pol_destination_order.kind);
CU_ASSERT_EQUAL_FATAL(publication_data->user_data.value._buffer, g_pol_userdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(publication_data->user_data.value._length, g_pol_userdata.value._length);
CU_ASSERT_EQUAL_FATAL(publication_data->ownership.kind, g_pol_ownership.kind);
CU_ASSERT_EQUAL_FATAL(publication_data->ownership_strength.value, g_pol_ownership_strength.value);
CU_ASSERT_EQUAL_FATAL(publication_data->presentation.access_scope, g_pol_presentation.access_scope);
CU_ASSERT_EQUAL_FATAL(publication_data->presentation.coherent_access, g_pol_presentation.coherent_access);
CU_ASSERT_EQUAL_FATAL(publication_data->presentation.ordered_access, g_pol_presentation.ordered_access);
cr_assert_eq(publication_data->partition.name._length, g_pol_partition.name._length);
CU_ASSERT_EQUAL_FATAL(publication_data->partition.name._length, g_pol_partition.name._length);
for (uint32_t i = 0; i < publication_data->partition.name._length; ++i)
{
cr_assert_str_eq(publication_data->partition.name._buffer[i], c_partitions[i]);
CU_ASSERT_STRING_EQUAL_FATAL(publication_data->partition.name._buffer[i], c_partitions[i]);
}
cr_assert_str_eq(publication_data->topic_data.value._buffer, g_pol_topicdata.value._buffer);
cr_assert_eq(publication_data->topic_data.value._length, g_pol_topicdata.value._length);
cr_assert_str_eq(publication_data->group_data.value._buffer, g_pol_groupdata.value._buffer);
cr_assert_eq(publication_data->group_data.value._length, g_pol_groupdata.value._length);
CU_ASSERT_STRING_EQUAL_FATAL(publication_data->topic_data.value._buffer, g_pol_topicdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(publication_data->topic_data.value._length, g_pol_topicdata.value._length);
CU_ASSERT_STRING_EQUAL_FATAL(publication_data->group_data.value._buffer, g_pol_groupdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(publication_data->group_data.value._length, g_pol_groupdata.value._length);
#endif
DDS_PublicationBuiltinTopicData_free(publication_samples[0], DDS_FREE_ALL);
}
Test(ddsc_builtin_topics, topic_qos, .init = setup, .fini = teardown)
CU_Test(ddsc_builtin_topics, topic_qos, .init = setup, .fini = teardown)
{
dds_entity_t tpc;
dds_entity_t topic_rdr;
@ -796,50 +794,50 @@ Test(ddsc_builtin_topics, topic_qos, .init = setup, .fini = teardown)
tpc = dds_create_topic(g_participant, &Space_Type1_desc, "SpaceType1", g_qos, NULL);
cr_assert_gt(tpc, 0, "Failed to create a topic.");
CU_ASSERT_FATAL(tpc > 0);
topic_samples[0] = DDS_PublicationBuiltinTopicData__alloc();
topic_rdr = dds_create_reader(g_participant, DDS_BUILTIN_TOPIC_DCPSTOPIC, NULL, NULL);
cr_assert_gt(topic_rdr, 0, "Failed to retrieve built-in datareader for DCPSPublication");
CU_ASSERT_FATAL(topic_rdr > 0 );
#if 0 /* disabled pending CHAM-347 */
ret = dds_read(topic_rdr, topic_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed to read Topic data");
CU_ASSERT_FATAL(ret > 0);
topic_data = (DDS_TopicBuiltinTopicData *)topic_samples[0];
cr_assert_str_eq(topic_data->name, "SpaceType1");
cr_assert_str_eq(topic_data->type_name, "RoundTripModule::DataType");
cr_assert_eq(topic_data->durability.kind, g_pol_durability.kind);
cr_assert_eq(topic_data->durability_service.service_cleanup_delay.sec, g_pol_durability_service.service_cleanup_delay.sec);
cr_assert_eq(topic_data->durability_service.service_cleanup_delay.nanosec, g_pol_durability_service.service_cleanup_delay.nanosec);
cr_assert_eq(topic_data->durability_service.history_kind, g_pol_durability_service.history_kind);
cr_assert_eq(topic_data->durability_service.history_depth, g_pol_durability_service.history_depth);
cr_assert_eq(topic_data->durability_service.max_samples, g_pol_durability_service.max_samples);
cr_assert_eq(topic_data->durability_service.max_instances, g_pol_durability_service.max_instances);
cr_assert_eq(topic_data->durability_service.max_samples_per_instance, g_pol_durability_service.max_samples_per_instance);
cr_assert_eq(topic_data->deadline.period.sec, g_pol_deadline.period.sec);
cr_assert_eq(topic_data->deadline.period.nanosec, g_pol_deadline.period.nanosec);
cr_assert_eq(topic_data->latency_budget.duration.sec, g_pol_latency_budget.duration.sec);
cr_assert_eq(topic_data->latency_budget.duration.nanosec, g_pol_latency_budget.duration.nanosec);
cr_assert_eq(topic_data->liveliness.kind, g_pol_liveliness.kind);
cr_assert_eq(topic_data->liveliness.lease_duration.sec, g_pol_liveliness.lease_duration.sec);
cr_assert_eq(topic_data->liveliness.lease_duration.nanosec, g_pol_liveliness.lease_duration.nanosec);
cr_assert_eq(topic_data->reliability.kind, g_pol_reliability.kind);
cr_assert_eq(topic_data->reliability.max_blocking_time.sec, g_pol_reliability.max_blocking_time.sec);
cr_assert_eq(topic_data->reliability.max_blocking_time.nanosec, g_pol_reliability.max_blocking_time.nanosec);
cr_assert_eq(topic_data->transport_priority.value, g_pol_transport_priority.value);
cr_assert_eq(topic_data->lifespan.duration.sec, g_pol_lifespan.duration.sec);
cr_assert_eq(topic_data->lifespan.duration.nanosec, g_pol_lifespan.duration.nanosec);
cr_assert_eq(topic_data->destination_order.kind, g_pol_destination_order.kind);
cr_assert_eq(topic_data->history.kind, g_pol_history.kind);
cr_assert_eq(topic_data->history.depth, g_pol_history.depth);
cr_assert_eq(topic_data->resource_limits.max_samples, g_pol_resource_limits.max_samples);
cr_assert_eq(topic_data->resource_limits.max_instances, g_pol_resource_limits.max_instances);
cr_assert_eq(topic_data->resource_limits.max_samples_per_instance, g_pol_resource_limits.max_samples_per_instance);
cr_assert_eq(topic_data->ownership.kind, g_pol_ownership.kind);
cr_assert_str_eq(topic_data->topic_data.value._buffer, g_pol_topicdata.value._buffer);
cr_assert_eq(topic_data->topic_data.value._length, g_pol_topicdata.value._length);
CU_ASSERT_STRING_EQUAL_FATAL(topic_data->name, "SpaceType1");
CU_ASSERT_STRING_EQUAL_FATAL(topic_data->type_name, "RoundTripModule::DataType");
CU_ASSERT_EQUAL_FATAL(topic_data->durability.kind, g_pol_durability.kind);
CU_ASSERT_EQUAL_FATAL(topic_data->durability_service.service_cleanup_delay.sec, g_pol_durability_service.service_cleanup_delay.sec);
CU_ASSERT_EQUAL(topic_data->durability_service.service_cleanup_delay.nanosec, g_pol_durability_service.service_cleanup_delay.nanosec);
CU_ASSERT_EQUAL_FATAL(topic_data->durability_service.history_kind, g_pol_durability_service.history_kind);
CU_ASSERT_EQUAL_FATAL(topic_data->durability_service.history_depth, g_pol_durability_service.history_depth);
CU_ASSERT_EQUAL_FATAL(topic_data->durability_service.max_samples, g_pol_durability_service.max_samples);
CU_ASSERT_EQUAL_FATAL(topic_data->durability_service.max_instances, g_pol_durability_service.max_instances);
CU_ASSERT_EQUAL_FATAL(topic_data->durability_service.max_samples_per_instance, g_pol_durability_service.max_samples_per_instance);
CU_ASSERT_EQUAL_FATAL(topic_data->deadline.period.sec, g_pol_deadline.period.sec);
CU_ASSERT_EQUAL_FATAL(topic_data->deadline.period.nanosec, g_pol_deadline.period.nanosec);
CU_ASSERT_EQUAL_FATAL(topic_data->latency_budget.duration.sec, g_pol_latency_budget.duration.sec);
CU_ASSERT_EQUAL_FATAL(topic_data->latency_budget.duration.nanosec, g_pol_latency_budget.duration.nanosec);
CU_ASSERT_EQUAL_FATAL(topic_data->liveliness.kind, g_pol_liveliness.kind);
CU_ASSERT_EQUAL_FATAL(topic_data->liveliness.lease_duration.sec, g_pol_liveliness.lease_duration.sec);
CU_ASSERT_EQUAL_FATAL(topic_data->liveliness.lease_duration.nanosec, g_pol_liveliness.lease_duration.nanosec);
CU_ASSERT_EQUAL_FATAL(topic_data->reliability.kind, g_pol_reliability.kind);
CU_ASSERT_EQUAL_FATAL(topic_data->reliability.max_blocking_time.sec, g_pol_reliability.max_blocking_time.sec);
CU_ASSERT_EQUAL_FATAL(topic_data->reliability.max_blocking_time.nanosec, g_pol_reliability.max_blocking_time.nanosec);
CU_ASSERT_EQUAL_FATAL(topic_data->transport_priority.value, g_pol_transport_priority.value);
CU_ASSERT_EQUAL_FATAL(topic_data->lifespan.duration.sec, g_pol_lifespan.duration.sec);
CU_ASSERT_EQUAL_FATAL(topic_data->lifespan.duration.nanosec, g_pol_lifespan.duration.nanosec);
CU_ASSERT_EQUAL_FATAL(topic_data->destination_order.kind, g_pol_destination_order.kind);
CU_ASSERT_EQUAL_FATAL(topic_data->history.kind, g_pol_history.kind);
CU_ASSERT_EQUAL_FATAL(topic_data->history.depth, g_pol_history.depth);
CU_ASSERT_EQUAL_FATAL(topic_data->resource_limits.max_samples, g_pol_resource_limits.max_samples);
CU_ASSERT_EQUAL_FATAL(topic_data->resource_limits.max_instances, g_pol_resource_limits.max_instances);
CU_ASSERT_EQUAL_FATAL(topic_data->resource_limits.max_samples_per_instance, g_pol_resource_limits.max_samples_per_instance);
CU_ASSERT_EQUAL_FATAL(topic_data->ownership.kind, g_pol_ownership.kind);
CU_ASSERT_STRING_EQUAL_FATAL(topic_data->topic_data.value._buffer, g_pol_topicdata.value._buffer);
CU_ASSERT_EQUAL_FATAL(topic_data->topic_data.value._length, g_pol_topicdata.value._length);
#endif
DDS_TopicBuiltinTopicData_free(topic_samples[0], DDS_FREE_ALL);
}

View file

@ -10,8 +10,7 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#include "os/os.h"
#include "config_env.h"
#include "ddsc/ddsc_project.h"
@ -26,18 +25,18 @@ static void config__check_env(
_In_z_ const char * expected_value)
{
const char * env_uri = os_getenv(env_variable);
#if 0
const char * const env_not_set = "Environment variable '%s' isn't set. This needs to be set to '%s' for this test to run.";
const char * const env_not_as_expected = "Environment variable '%s' has an unexpected value: '%s' (expected: '%s')";
#endif
#ifdef FORCE_ENV
{
bool env_ok;
if ( env_uri == NULL ) {
cr_log_info(env_not_set, env_variable, expected_value);
env_ok = false;
} else if ( strncmp(env_uri, expected_value, strlen(expected_value)) != 0 ) {
cr_log_info(env_not_as_expected, env_variable, env_uri, expected_value);
env_ok = false;
} else {
env_ok = true;
@ -51,20 +50,19 @@ static void config__check_env(
(void) sprintf(envstr, "%s=%s", env_variable, expected_value);
r = os_putenv(envstr);
cr_assert_eq(r, os_resultSuccess, "Invoking os_putenv(\"%s\") failed", envstr);
cr_log_warn("Environment variable '%s' set to expected value '%s'", env_variable, expected_value);
CU_ASSERT_EQUAL_FATAL(r, os_resultSuccess);
os_free(envstr);
}
}
#else
cr_assert_not_null(env_uri, env_not_set, env_variable, expected_value);
cr_assert_str_eq(env_uri, expected_value, env_not_as_expected, env_variable, env_uri, expected_value);
CU_ASSERT_PTR_NOT_NULL_FATAL(env_uri);
CU_ASSERT_STRING_EQUAL_FATAL(env_uri, expected_value);
#endif /* FORCE_ENV */
}
Test(ddsc_config, simple_udp, .init = os_osInit, .fini = os_osExit) {
CU_Test(ddsc_config, simple_udp, .init = os_osInit, .fini = os_osExit) {
dds_entity_t participant;
@ -73,7 +71,7 @@ Test(ddsc_config, simple_udp, .init = os_osInit, .fini = os_osExit) {
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_create_participant");
CU_ASSERT_FATAL(participant> 0);
dds_delete(participant);
}

View file

@ -12,7 +12,7 @@
#ifndef CONFIG_ENV_H
#define CONFIG_ENV_H
#define CONFIG_ENV_SIMPLE_UDP "@Criterion_ddsc_config_simple_udp_uri@"
#define CONFIG_ENV_MAX_PARTICIPANTS "@Criterion_ddsc_config_simple_udp_max_participants@"
#define CONFIG_ENV_SIMPLE_UDP "@CUnit_ddsc_config_simple_udp_uri@"
#define CONFIG_ENV_MAX_PARTICIPANTS "@CUnit_ddsc_config_simple_udp_max_participants@"
#endif /* CONFIG_ENV_H */

File diff suppressed because it is too large Load diff

View file

@ -10,8 +10,7 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
/* We are deliberately testing some bad arguments that SAL will complain about.
* So, silence SAL regarding these issues. */
@ -24,49 +23,49 @@
static dds_entity_t entity = -1;
#define cr_assert_status_eq(s1, s2, ...) cr_assert_eq(dds_err_nr(s1), s2, __VA_ARGS__)
#define cu_assert_status_eq(s1, s2) CU_ASSERT_FATAL(dds_err_nr(s1)== s2)
/* Fixture to create prerequisite entity */
void create_entity(void)
{
cr_assert_eq(entity, -1, "entity already created pre create_entity fixture");
CU_ASSERT_EQUAL_FATAL(entity, -1);
entity = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(entity, 0, "create_entity fixture failed");
CU_ASSERT_FATAL(entity > 0);
}
/* Fixture to delete prerequisite entity */
void delete_entity(void)
{
cr_assert_gt(entity, 0, "entity not created pre delete_entity fixture");
CU_ASSERT_FATAL(entity > 0);
dds_return_t ret = dds_delete(entity);
cr_assert_status_eq(ret, DDS_RETCODE_OK, "delete_entity fixture failed (ret: %d)", dds_err_nr(ret));
cu_assert_status_eq(ret, DDS_RETCODE_OK);
entity = -1;
}
Test(ddsc_entity, create, .fini = delete_entity)
CU_Test(ddsc_entity, create, .fini = delete_entity)
{
/* Use participant as entity in the tests. */
entity = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(entity, 0, "dds_create_participant");
CU_ASSERT_FATAL(entity > 0 );
}
Test(ddsc_entity, enable, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, enable, .init = create_entity, .fini = delete_entity)
{
dds_return_t status;
/* Check enabling with bad parameters. */
status = dds_enable(0);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_enable (NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Check actual enabling. */
/* TODO: CHAM-96: Check enabling.
status = dds_enable(&entity);
cr_assert_status_eq(status, dds_err_nr(DDS_RETCODE_OK), "dds_enable (delayed enable)");
cu_assert_status_eq(status, dds_err_nr(DDS_RETCODE_OK), "dds_enable (delayed enable)");
*/
/* Check re-enabling (should be a noop). */
status = dds_enable(entity);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_enable (already enabled)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
}
void entity_qos_get_set(dds_entity_t e, const char* info)
@ -74,17 +73,19 @@ void entity_qos_get_set(dds_entity_t e, const char* info)
dds_return_t status;
dds_qos_t *qos = dds_create_qos();
(void)info;
/* Get QoS. */
status = dds_get_qos (e, qos);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_qos(e, qos) ret: %d, %s", dds_err_nr(status), info);
cu_assert_status_eq(status, DDS_RETCODE_OK);
status = dds_set_qos (e, qos); /* Doesn't change anything, so no need to forbid. But we return NOT_SUPPORTED anyway for now*/
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_set_qos(entity, qos) %s", info);
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
dds_delete_qos(qos);
}
Test(ddsc_entity, qos, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, qos, .init = create_entity, .fini = delete_entity)
{
dds_return_t status;
dds_qos_t *qos = dds_create_qos();
@ -94,19 +95,19 @@ Test(ddsc_entity, qos, .init = create_entity, .fini = delete_entity)
/* Check getting QoS with bad parameters. */
status = dds_get_qos (0, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_qos(NULL, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_qos (entity, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_qos(entity, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_qos (0, qos);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_qos(NULL, qos)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Check setting QoS with bad parameters. */
status = dds_set_qos (0, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_set_qos(NULL, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_set_qos (entity, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_set_qos(entity, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_set_qos (0, qos);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_set_qos(NULL, qos)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Check set/get with entity without initial qos. */
entity_qos_get_set(entity, "{without initial qos}");
@ -122,7 +123,7 @@ Test(ddsc_entity, qos, .init = create_entity, .fini = delete_entity)
dds_delete_qos(qos);
}
Test(ddsc_entity, listener, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, listener, .init = create_entity, .fini = delete_entity)
{
dds_return_t status;
dds_listener_t *l1 = dds_create_listener(NULL);
@ -144,67 +145,67 @@ Test(ddsc_entity, listener, .init = create_entity, .fini = delete_entity)
/* Check getting Listener with bad parameters. */
status = dds_get_listener (0, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_listener(NULL, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_listener (entity, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_listener(entity, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_listener (0, l1);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_listener(NULL, listener)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Get Listener, which should be unset. */
status = dds_get_listener (entity, l1);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_listener(entity, listener)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
dds_lget_liveliness_changed (l1, (dds_on_liveliness_changed_fn*)&cb1);
cr_assert_eq(cb1, DDS_LUNSET, "Listener not initialized to NULL");
CU_ASSERT_EQUAL_FATAL(cb1, DDS_LUNSET);
dds_lget_requested_deadline_missed (l1, (dds_on_requested_deadline_missed_fn*)&cb1);
cr_assert_eq(cb1, DDS_LUNSET, "Listener not initialized to NULL");
CU_ASSERT_EQUAL_FATAL(cb1, DDS_LUNSET);
dds_lget_requested_incompatible_qos (l1, (dds_on_requested_incompatible_qos_fn*)&cb1);
cr_assert_eq(cb1, DDS_LUNSET, "Listener not initialized to NULL");
CU_ASSERT_EQUAL_FATAL(cb1, DDS_LUNSET);
dds_lget_publication_matched (l1, (dds_on_publication_matched_fn*)&cb1);
cr_assert_eq(cb1, DDS_LUNSET, "Listener not initialized to NULL");
CU_ASSERT_EQUAL_FATAL(cb1, DDS_LUNSET);
/* Check setting Listener with bad parameters. */
status = dds_set_listener (0, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_set_listener(NULL, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_set_listener (0, l2);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_set_listener(NULL, listener)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Getting after setting should return set listener. */
status = dds_set_listener (entity, l2);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_set_listener(entity, listener)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
status = dds_get_listener (entity, l1);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_listener(entity, listener)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
dds_lget_liveliness_changed (l1, (dds_on_liveliness_changed_fn*)&cb1);
dds_lget_liveliness_changed (l2, (dds_on_liveliness_changed_fn*)&cb2);
cr_assert_eq(cb1, cb2, "Listeners are not equal");
CU_ASSERT_EQUAL_FATAL(cb1, cb2);
dds_lget_requested_deadline_missed (l1, (dds_on_requested_deadline_missed_fn*)&cb1);
dds_lget_requested_deadline_missed (l2, (dds_on_requested_deadline_missed_fn*)&cb2);
cr_assert_eq(cb1, cb2, "Listeners are not equal");
CU_ASSERT_EQUAL_FATAL(cb1, cb2);
dds_lget_requested_incompatible_qos (l1, (dds_on_requested_incompatible_qos_fn*)&cb1);
dds_lget_requested_incompatible_qos (l2, (dds_on_requested_incompatible_qos_fn*)&cb2);
cr_assert_eq(cb1, cb2, "Listeners are not equal");
CU_ASSERT_EQUAL_FATAL(cb1, cb2);
dds_lget_publication_matched (l1, (dds_on_publication_matched_fn*)&cb1);
dds_lget_publication_matched (l2, (dds_on_publication_matched_fn*)&cb2);
cr_assert_eq(cb1, cb2, "Listeners are not equal");
CU_ASSERT_EQUAL_FATAL(cb1, cb2);
/* Reset listener. */
status = dds_set_listener (entity, NULL);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_set_listener(entity, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
status = dds_get_listener (entity, l2);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_listener(entity, listener)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
dds_lget_liveliness_changed (l2, (dds_on_liveliness_changed_fn*)&cb2);
cr_assert_eq(cb2, DDS_LUNSET, "Listener not reset");
CU_ASSERT_EQUAL_FATAL(cb2, DDS_LUNSET);
dds_lget_requested_deadline_missed (l2, (dds_on_requested_deadline_missed_fn*)&cb2);
cr_assert_eq(cb2, DDS_LUNSET, "Listener not reset");
CU_ASSERT_EQUAL_FATAL(cb2, DDS_LUNSET);
dds_lget_requested_incompatible_qos (l2, (dds_on_requested_incompatible_qos_fn*)&cb2);
cr_assert_eq(cb2, DDS_LUNSET, "Listener not reset");
CU_ASSERT_EQUAL_FATAL(cb2, DDS_LUNSET);
dds_lget_publication_matched (l2, (dds_on_publication_matched_fn*)&cb2);
cr_assert_eq(cb2, DDS_LUNSET, "Listener not reset");
CU_ASSERT_EQUAL_FATAL(cb2, DDS_LUNSET);
dds_free(l2);
dds_free(l1);
}
Test(ddsc_entity, status, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, status, .init = create_entity, .fini = delete_entity)
{
dds_return_t status1;
uint32_t s1 = 0;
@ -214,50 +215,50 @@ Test(ddsc_entity, status, .init = create_entity, .fini = delete_entity)
/* Check getting Status with bad parameters. */
status1 = dds_get_enabled_status (0, NULL);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_get_enabled_status(NULL, NULL)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_get_enabled_status (entity, NULL);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_get_enabled_status(entity, NULL)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_get_enabled_status (0, &s1);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_get_enabled_status(NULL, status)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
/* Get Status, which should be 0 for a participant. */
status1 = dds_get_enabled_status (entity, &s1);
cr_assert_status_eq(status1, DDS_RETCODE_OK, "dds_get_enabled_status(entity, status)");
cr_assert_eq(s1, 0, "Enabled status mask is not 0");
cu_assert_status_eq(status1, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(s1, 0);
/* Check setting Status with bad parameters. */
status1 = dds_set_enabled_status (0, 0);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_set_enabled_status(NULL, 0)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
/* I shouldn't be able to set statuses on a participant. */
status1 = dds_set_enabled_status (entity, 0);
cr_assert_status_eq(status1, DDS_RETCODE_OK, "dds_set_enabled_status(entity, 0) %d", dds_err_nr(status1));
cu_assert_status_eq(status1, DDS_RETCODE_OK);
status1 = dds_set_enabled_status (entity, DDS_DATA_AVAILABLE_STATUS);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_set_enabled_status(entity, status)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
/* Check getting Status changes with bad parameters. */
status1 = dds_get_status_changes (0, NULL);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_get_status_changes(NULL, NULL)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_get_status_changes (entity, NULL);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_get_status_changes(entity, NULL)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_get_status_changes (0, &s1);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_get_status_changes(NULL, status)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_get_status_changes (entity, &s1);
cr_assert_status_eq(status1, DDS_RETCODE_OK, "dds_get_status_changes(entity, status)");
cu_assert_status_eq(status1, DDS_RETCODE_OK);
/* Status read and take shouldn't work either. */
status1 = dds_read_status (0, &s1, 0);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_read_status(NULL, status, 0)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_read_status (entity, &s1, 0);
cr_assert_status_eq(status1, DDS_RETCODE_OK, "dds_read_status(entity, status, 0)");
cu_assert_status_eq(status1, DDS_RETCODE_OK);
status1 = dds_take_status (0, &s1, 0);
cr_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER, "dds_take_status(NULL, status, 0)");
cu_assert_status_eq(status1, DDS_RETCODE_BAD_PARAMETER);
status1 = dds_take_status (entity, &s1, 0);
cr_assert_status_eq(status1, DDS_RETCODE_OK, "dds_take_status(entity, status, 0)");
cu_assert_status_eq(status1, DDS_RETCODE_OK);
}
Test(ddsc_entity, instance_handle, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, instance_handle, .init = create_entity, .fini = delete_entity)
{
dds_return_t status;
dds_instance_handle_t hdl;
@ -267,19 +268,19 @@ Test(ddsc_entity, instance_handle, .init = create_entity, .fini = delete_entity)
/* Check getting Handle with bad parameters. */
status = dds_get_instance_handle (0, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_instancehandle_get(NULL, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_instance_handle (entity, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_instancehandle_get(entity, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_instance_handle (0, &hdl);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_instancehandle_get(NULL, handle)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Get Instance Handle, which should not be 0 for a participant. */
status = dds_get_instance_handle (entity, &hdl);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_instancehandle_get(entity, handle)");
cr_assert_neq(hdl, 0, "Entity instance handle is 0");
cu_assert_status_eq(status, DDS_RETCODE_OK);
CU_ASSERT_NOT_EQUAL_FATAL(hdl, 0);
}
Test(ddsc_entity, get_entities, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, get_entities, .init = create_entity, .fini = delete_entity)
{
dds_return_t status;
dds_entity_t par;
@ -289,78 +290,78 @@ Test(ddsc_entity, get_entities, .init = create_entity, .fini = delete_entity)
/* Check getting Parent with bad parameters. */
par = dds_get_parent (0);
cr_assert_eq(dds_err_nr(par), DDS_RETCODE_BAD_PARAMETER, "Parent was returned (despite of bad parameter)");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(par), DDS_RETCODE_BAD_PARAMETER);
/* Get Parent, a participant doesn't have a parent. */
par = dds_get_parent (entity);
cr_assert_eq(dds_err_nr(par), DDS_ENTITY_NIL, "Parent was returned (despite of it being a participant)");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(par), DDS_ENTITY_NIL);
/* ---------- Get Participant ------------ */
/* Check getting Participant with bad parameters. */
par = dds_get_participant (0);
cr_assert_eq(dds_err_nr(par), DDS_RETCODE_BAD_PARAMETER, "Participant was returned (despite of bad parameter)");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(par), DDS_RETCODE_BAD_PARAMETER);
/* Get Participant, a participants' participant is itself. */
par = dds_get_participant (entity);
cr_assert_eq(par, entity, "Returned participant was not expected");
CU_ASSERT_EQUAL_FATAL(par, entity);
/* ---------- Get Children ------------ */
/* Check getting Children with bad parameters. */
status = dds_get_children (0, &child, 1);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_children(NULL, child, 1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_children (entity, NULL, 1);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_children(entity, NULL, 1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_children (entity, &child, 0);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_children(entity, child, 0)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_children (0, NULL, 1);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_children(NULL, NULL, 1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_children (0, &child, 0);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_children(NULL, child, 0)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Get Children, of which there are currently none. */
status = dds_get_children (entity, NULL, 0);
if (status > 0) {
cr_assert(false, "dds_get_children(entity, NULL, 0) un-expectantly found children");
CU_ASSERT_FATAL(false);
} else {
cr_assert_eq(status, 0, "dds_get_children(entity, NULL, 0) failed");
CU_ASSERT_EQUAL_FATAL(status, 0);
}
status = dds_get_children (entity, &child, 1);
if (status > 0) {
cr_assert(false, "dds_get_children(entity, child, 1) un-expectantly returned children");
CU_ASSERT_FATAL(false);
} else {
cr_assert_eq(status, 0, "dds_get_children(entity, child, 1) failed");
CU_ASSERT_EQUAL_FATAL(status, 0);
}
}
Test(ddsc_entity, get_domainid, .init = create_entity, .fini = delete_entity)
CU_Test(ddsc_entity, get_domainid, .init = create_entity, .fini = delete_entity)
{
dds_return_t status;
dds_domainid_t id;
/* Check getting ID with bad parameters. */
status = dds_get_domainid (0, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_domainid(NULL, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_domainid (entity, NULL);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_domainid(entity, NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_get_domainid (0, &id);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_get_domainid(NULL, id)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Get and check the domain id. */
status = dds_get_domainid (entity, &id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(entity, id)");
cr_assert_eq(id, 0, "Different domain_id was returned than expected");
cu_assert_status_eq(status, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(id, 0);
}
Test(ddsc_entity, delete, .init = create_entity)
CU_Test(ddsc_entity, delete, .init = create_entity)
{
dds_return_t status;
status = dds_delete(0);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_delete(NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
status = dds_delete(entity);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_delete(entity)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
entity = 0;
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -10,24 +10,23 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
Test(ddsc_err, str)
CU_Test(ddsc_err, str)
{
cr_assert_str_eq(dds_err_str(1 ), "Success");
cr_assert_str_eq(dds_err_str(-255 ), "Unknown");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_OK * -1), "Success");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_ERROR * -1), "Error");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_UNSUPPORTED * -1), "Unsupported");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_BAD_PARAMETER * -1), "Bad Parameter");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_PRECONDITION_NOT_MET * -1), "Precondition Not Met");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_OUT_OF_RESOURCES * -1), "Out Of Resources");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_NOT_ENABLED * -1), "Not Enabled");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_IMMUTABLE_POLICY * -1), "Immutable Policy");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_INCONSISTENT_POLICY * -1), "Inconsistent Policy");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_ALREADY_DELETED * -1), "Already Deleted");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_TIMEOUT * -1), "Timeout");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_NO_DATA * -1), "No Data");
cr_assert_str_eq(dds_err_str(DDS_RETCODE_ILLEGAL_OPERATION * -1), "Illegal Operation");
CU_ASSERT_STRING_EQUAL(dds_err_str(1 ), "Success");
CU_ASSERT_STRING_EQUAL(dds_err_str(-255 ), "Unknown");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_OK * -1), "Success");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_ERROR * -1), "Error");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_UNSUPPORTED * -1), "Unsupported");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_BAD_PARAMETER * -1), "Bad Parameter");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_PRECONDITION_NOT_MET * -1), "Precondition Not Met");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_OUT_OF_RESOURCES * -1), "Out Of Resources");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_NOT_ENABLED * -1), "Not Enabled");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_IMMUTABLE_POLICY * -1), "Immutable Policy");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_INCONSISTENT_POLICY * -1), "Inconsistent Policy");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_ALREADY_DELETED * -1), "Already Deleted");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_TIMEOUT * -1), "Timeout");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_NO_DATA * -1), "No Data");
CU_ASSERT_STRING_EQUAL(dds_err_str(DDS_RETCODE_ILLEGAL_OPERATION * -1), "Illegal Operation");
}

View file

@ -10,30 +10,27 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#include "os/os.h"
Test(ddsc_err, unique_file_id)
CU_Test(ddsc_err, unique_file_id)
{
dds_entity_t participant, reader, writer;
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
CU_ASSERT_FATAL(participant > 0);
/* Disable SAL warning on intentional misuse of the API */
OS_WARNING_MSVC_OFF(28020);
reader = dds_create_reader(0, 0, NULL, NULL);
cr_assert_lt(reader, 0);
CU_ASSERT_FATAL(reader < 0);
writer = dds_create_writer(0, 0, NULL, NULL);
cr_assert_lt(writer, 0);
CU_ASSERT_FATAL(writer < 0);
OS_WARNING_MSVC_ON(28020);
cr_log_info("file_id for dds_create_reader: %d", dds_err_file_id(reader));
cr_log_info("file_id for dds_create_writer: %d", dds_err_file_id(writer));
cr_assert_neq(dds_err_file_id(reader), dds_err_file_id(writer));
CU_ASSERT_NOT_EQUAL_FATAL(dds_err_file_id(reader), dds_err_file_id(writer));
dds_delete(participant);
}

View file

@ -1,8 +1,18 @@
/*
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#include "os/os.h"
#include "ddsc/dds.h"
@ -21,19 +31,19 @@ static RoundTripModule_Address data;
static void setup(void)
{
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
CU_ASSERT_FATAL(participant > 0);
topic = dds_create_topic(participant, &RoundTripModule_Address_desc, "ddsc_instance_get_key", NULL, NULL);
cr_assert_gt(topic, 0);
CU_ASSERT_FATAL(topic > 0);
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0);
CU_ASSERT_FATAL(publisher > 0);
writer = dds_create_writer(publisher, topic, NULL, NULL);
cr_assert_gt(writer, 0);
CU_ASSERT_FATAL(writer > 0);
memset(&data, 0, sizeof(data));
data.ip = os_strdup("some data");
cr_assert_not_null(data.ip);
CU_ASSERT_PTR_NOT_NULL_FATAL(data.ip);
data.port = 1;
}
@ -48,48 +58,48 @@ static void teardown(void)
dds_delete(participant);
}
Test(ddsc_instance_get_key, bad_entity, .init=setup, .fini=teardown)
CU_Test(ddsc_instance_get_key, bad_entity, .init=setup, .fini=teardown)
{
dds_return_t ret;
ret = dds_instance_get_key(participant, handle, &data);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_instance_get_key, null_data, .init=setup, .fini=teardown)
CU_Test(ddsc_instance_get_key, null_data, .init=setup, .fini=teardown)
{
dds_return_t ret;
ret = dds_register_instance(writer, &handle, NULL);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "Argument data is NULL");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_instance_get_key, null_handle, .init=setup, .fini=teardown)
CU_Test(ddsc_instance_get_key, null_handle, .init=setup, .fini=teardown)
{
dds_return_t ret;
ret = dds_register_instance(writer, &handle, &data);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_register_instance succeeded (ret: %d)", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_instance_get_key(writer, DDS_HANDLE_NIL, &data);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "Argument data is not null, but handle is null");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_instance_get_key, registered_instance, .init=setup, .fini=teardown)
CU_Test(ddsc_instance_get_key, registered_instance, .init=setup, .fini=teardown)
{
dds_return_t ret;
RoundTripModule_Address key_data;
ret = dds_register_instance(writer, &handle, &data);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_register_instance succeeded (ret: %d)", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
memset(&key_data, 0, sizeof(key_data));
ret = dds_instance_get_key(writer, handle, &key_data);
cr_assert_not_null(key_data.ip);
cr_assert_eq(strcmp(key_data.ip, data.ip) , 0);
cr_assert_eq(key_data.port, data.port);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_OK);
CU_ASSERT_PTR_NOT_NULL_FATAL(key_data.ip);
CU_ASSERT_STRING_EQUAL_FATAL(key_data.ip, data.ip);
CU_ASSERT_EQUAL_FATAL(key_data.port, data.port);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_OK);
RoundTripModule_Address_free(&key_data, DDS_FREE_CONTENTS);
}

View file

@ -12,8 +12,7 @@
#include "ddsc/dds.h"
#include "os/os.h"
#include "RoundTrip.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
/****************************************************************************
* TODO: (CHAM-279) Add DDS_INCONSISTENT_TOPIC_STATUS test
@ -31,7 +30,7 @@
do { \
dds_on_##fntype##_fn cb; \
dds_lget_##fntype(listener, &cb); \
cr_expect_eq(cb, expected, "Callback 'on_" #fntype "' matched expected value '" #expected "'"); \
CU_ASSERT_EQUAL(cb, expected); \
} while (0)
#define STR(fntype) #fntype##_cb
@ -46,7 +45,7 @@
dds_lget_##fntype(NULL, NULL); \
dds_lget_##fntype(listener, NULL); \
dds_lget_##fntype(NULL, &dummy); \
cr_expect_eq(dummy, NULL, "lget 'on_" #fntype "' with NULL listener was not a noop"); \
CU_ASSERT_EQUAL_FATAL(dummy, NULL); \
/* Set to NULL, get to confirm it succeeds */ \
dds_lset_##fntype(listener, NULL); \
ASSERT_CALLBACK_EQUAL(fntype, listener, NULL); \
@ -330,22 +329,22 @@ init_triggering_base(void)
os_condInit(&g_cond, &g_mutex);
g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(g_participant, 0, "Failed to create prerequisite g_participant");
CU_ASSERT_FATAL(g_participant > 0);
g_subscriber = dds_create_subscriber(g_participant, NULL, NULL);
cr_assert_gt(g_subscriber, 0, "Failed to create prerequisite g_subscriber");
CU_ASSERT_FATAL(g_subscriber > 0);
g_publisher = dds_create_publisher(g_participant, NULL, NULL);
cr_assert_gt(g_publisher, 0, "Failed to create prerequisite g_publisher");
CU_ASSERT_FATAL(g_publisher > 0);
g_topic = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, create_topic_name("ddsc_listener_test", name, 100), NULL, NULL);
cr_assert_gt(g_topic, 0, "Failed to create prerequisite g_topic");
CU_ASSERT_FATAL(g_topic > 0);
g_listener = dds_create_listener(NULL);
cr_assert_not_null(g_listener, "Failed to create prerequisite g_listener");
CU_ASSERT_PTR_NOT_NULL_FATAL(g_listener);
g_qos = dds_create_qos();
cr_assert_not_null(g_qos, "Failed to create prerequisite g_qos");
CU_ASSERT_PTR_NOT_NULL_FATAL(g_qos);
dds_qset_reliability(g_qos, DDS_RELIABILITY_RELIABLE, DDS_SECS(1));
dds_qset_history(g_qos, DDS_HISTORY_KEEP_ALL, 0);
}
@ -370,15 +369,15 @@ init_triggering_test(void)
/* Create reader and writer with proper listeners. */
g_writer = dds_create_writer(g_publisher, g_topic, g_qos, g_listener);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite writer");
CU_ASSERT(g_writer > 0);
g_reader = dds_create_reader(g_subscriber, g_topic, g_qos, g_listener);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite reader");
CU_ASSERT(g_reader > 0);
/* Sync. */
triggered = waitfor_cb(DDS_PUBLICATION_MATCHED_STATUS | DDS_SUBSCRIPTION_MATCHED_STATUS | DDS_LIVELINESS_CHANGED_STATUS);
cr_assert_eq(triggered & DDS_LIVELINESS_CHANGED_STATUS, DDS_LIVELINESS_CHANGED_STATUS);
cr_assert_eq(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_LIVELINESS_CHANGED_STATUS, DDS_LIVELINESS_CHANGED_STATUS);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS);
}
static void
@ -401,17 +400,15 @@ fini_triggering_test(void)
}
#if 0
#else
/****************************************************************************
* API tests
****************************************************************************/
Test(ddsc_listener, create_and_delete)
CU_Test(ddsc_listener, create_and_delete)
{
/* Verify create doesn't return null */
dds_listener_t *listener;
listener = dds_create_listener(NULL);
cr_assert_not_null(listener);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener);
/* Check default cb's are set */
ASSERT_CALLBACK_EQUAL(inconsistent_topic, listener, DDS_LUNSET);
@ -434,11 +431,11 @@ Test(ddsc_listener, create_and_delete)
OS_WARNING_MSVC_ON(6387);
}
Test(ddsc_listener, reset)
CU_Test(ddsc_listener, reset)
{
dds_listener_t *listener;
listener = dds_create_listener(NULL);
cr_assert_not_null(listener);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener);
/* Set a listener cb to a non-default value */
dds_lset_data_available(listener, NULL);
@ -454,13 +451,13 @@ Test(ddsc_listener, reset)
dds_delete_listener(listener);
}
Test(ddsc_listener, copy)
CU_Test(ddsc_listener, copy)
{
dds_listener_t *listener1 = NULL, *listener2 = NULL;
listener1 = dds_create_listener(NULL);
listener2 = dds_create_listener(NULL);
cr_assert_not_null(listener1);
cr_assert_not_null(listener2);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener1);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener2);
/* Set some listener1 callbacks to non-default values */
dds_lset_data_available(listener1, NULL);
@ -488,13 +485,13 @@ Test(ddsc_listener, copy)
dds_delete_listener(listener2);
}
Test(ddsc_listener, merge)
CU_Test(ddsc_listener, merge)
{
dds_listener_t *listener1 = NULL, *listener2 = NULL;
listener1 = dds_create_listener(NULL);
listener2 = dds_create_listener(NULL);
cr_assert_not_null(listener1);
cr_assert_not_null(listener2);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener1);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener2);
/* Set all listener1 callbacks to non-default values */
dds_lset_inconsistent_topic (listener1, inconsistent_topic_cb);
@ -565,11 +562,11 @@ Test(ddsc_listener, merge)
dds_delete_listener(listener2);
}
Test(ddsc_listener, getters_setters)
CU_Test(ddsc_listener, getters_setters)
{
/* test all individual cb get/set methods */
dds_listener_t *listener = dds_create_listener(NULL);
cr_assert_not_null(listener);
CU_ASSERT_PTR_NOT_NULL_FATAL(listener);
OS_WARNING_MSVC_OFF(6387); /* Disable SAL warning on intentional misuse of the API */ \
TEST_GET_SET(listener, inconsistent_topic, inconsistent_topic_cb);
@ -595,7 +592,7 @@ Test(ddsc_listener, getters_setters)
/****************************************************************************
* Triggering tests
****************************************************************************/
Test(ddsc_listener, propagation, .init=init_triggering_base, .fini=fini_triggering_base)
CU_Test(ddsc_listener, propagation, .init=init_triggering_base, .fini=fini_triggering_base)
{
dds_listener_t *listener_par = NULL;
dds_listener_t *listener_pub = NULL;
@ -607,57 +604,57 @@ Test(ddsc_listener, propagation, .init=init_triggering_base, .fini=fini_triggeri
/* Let participant be interested in data. */
listener_par = dds_create_listener(NULL);
cr_assert_not_null(listener_par, "Failed to create prerequisite listener_par");
CU_ASSERT_PTR_NOT_NULL_FATAL(listener_par);
dds_lset_data_on_readers(listener_par, data_on_readers_cb);
ret = dds_set_listener(g_participant, listener_par);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite listener_par");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
dds_delete_listener(listener_par);
/* Let publisher be interested in publication matched. */
listener_pub = dds_create_listener(NULL);
cr_assert_not_null(listener_pub, "Failed to create prerequisite listener_pub");
CU_ASSERT_PTR_NOT_NULL_FATAL(listener_pub);
dds_lset_publication_matched(listener_pub, publication_matched_cb);
ret = dds_set_listener(g_publisher, listener_pub);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite listener_pub");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
dds_delete_listener(listener_pub);
/* Let subscriber be interested in subscription matched. */
listener_sub = dds_create_listener(NULL);
cr_assert_not_null(listener_pub, "Failed to create prerequisite listener_sub");
CU_ASSERT_PTR_NOT_NULL_FATAL(listener_pub);
dds_lset_subscription_matched(listener_sub, subscription_matched_cb);
ret = dds_set_listener(g_subscriber, listener_sub);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite listener_sub");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
dds_delete_listener(listener_sub);
/* Create reader and writer without listeners. */
g_reader = dds_create_reader(g_subscriber, g_topic, g_qos, NULL);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite reader");
CU_ASSERT_FATAL(g_reader > 0);
g_writer = dds_create_writer(g_publisher, g_topic, g_qos, NULL);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite writer");
CU_ASSERT_FATAL(g_writer > 0);
/* Publication and Subscription should be matched. */
triggered = waitfor_cb(DDS_PUBLICATION_MATCHED_STATUS | DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS, "DDS_SUBSCRIPTION_MATCHED_STATUS not triggered");
cr_assert_eq(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS, "DDS_PUBLICATION_MATCHED_STATUS not triggered");
cr_assert_eq(cb_writer, g_writer);
cr_assert_eq(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_writer, g_writer);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
/* Write sample. */
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write prerequisite data");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Data on readers should be triggered with the right status. */
triggered = waitfor_cb(DDS_DATA_ON_READERS_STATUS);
cr_assert_eq(triggered & DDS_DATA_ON_READERS_STATUS, DDS_DATA_ON_READERS_STATUS, "DDS_DATA_ON_READERS_STATUS not triggered");
cr_assert_eq(cb_subscriber, g_subscriber);
cr_assert_neq(triggered & DDS_DATA_AVAILABLE_STATUS, DDS_DATA_AVAILABLE_STATUS, "DDS_DATA_AVAILABLE_STATUS triggered");
CU_ASSERT_EQUAL_FATAL(triggered & DDS_DATA_ON_READERS_STATUS, DDS_DATA_ON_READERS_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_subscriber, g_subscriber);
CU_ASSERT_NOT_EQUAL_FATAL(triggered & DDS_DATA_AVAILABLE_STATUS, DDS_DATA_AVAILABLE_STATUS);
dds_delete(g_writer);
dds_delete(g_reader);
}
Test(ddsc_listener, matched, .init=init_triggering_base, .fini=fini_triggering_base)
CU_Test(ddsc_listener, matched, .init=init_triggering_base, .fini=fini_triggering_base)
{
uint32_t triggered;
@ -672,22 +669,22 @@ Test(ddsc_listener, matched, .init=init_triggering_base, .fini=fini_triggering_b
/* Create reader and writer with proper listeners.
* The creation order is deliberately different from publication_matched and subscription_matched. */
g_reader = dds_create_reader(g_participant, g_topic, g_qos, g_listener);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite reader");
CU_ASSERT_FATAL(g_reader > 0);
g_writer = dds_create_writer(g_participant, g_topic, g_qos, g_listener);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite writer");
CU_ASSERT_FATAL(g_writer > 0);
/* Both matched should be triggered on the right entities. */
triggered = waitfor_cb(DDS_PUBLICATION_MATCHED_STATUS | DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS, "DDS_SUBSCRIPTION_MATCHED_STATUS not triggered");
cr_assert_eq(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS, "DDS_PUBLICATION_MATCHED_STATUS not triggered");
cr_assert_eq(cb_writer, g_writer);
cr_assert_eq(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_writer, g_writer);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
dds_delete(g_writer);
dds_delete(g_reader);
}
Test(ddsc_listener, publication_matched, .init=init_triggering_test, .fini=fini_triggering_test)
CU_Test(ddsc_listener, publication_matched, .init=init_triggering_test, .fini=fini_triggering_test)
{
dds_instance_handle_t reader_hdl;
dds_return_t ret;
@ -696,22 +693,22 @@ Test(ddsc_listener, publication_matched, .init=init_triggering_test, .fini=fini_
/* Get reader handle that should be part of the status. */
ret = dds_get_instance_handle(g_reader, &reader_hdl);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to get prerequisite reader_hdl");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Publication matched should be triggered with the right status. */
triggered = waitfor_cb(DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS, "DDS_PUBLICATION_MATCHED_STATUS not triggered");
cr_assert_eq(cb_writer, g_writer);
cr_assert_eq(cb_publication_matched_status.current_count, 1);
cr_assert_eq(cb_publication_matched_status.current_count_change, 1);
cr_assert_eq(cb_publication_matched_status.total_count, 1);
cr_assert_eq(cb_publication_matched_status.total_count_change, 1);
cr_assert_eq(cb_publication_matched_status.last_subscription_handle, reader_hdl);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_writer, g_writer);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.current_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.current_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.total_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.last_subscription_handle, reader_hdl);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_writer, &status, DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
/* Reset the trigger flags. */
cb_called = 0;
@ -721,16 +718,16 @@ Test(ddsc_listener, publication_matched, .init=init_triggering_test, .fini=fini_
/* Publication matched should be triggered with the right status. */
triggered = waitfor_cb(DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS, "DDS_PUBLICATION_MATCHED_STATUS not triggered");
cr_assert_eq(cb_writer, g_writer);
cr_assert_eq(cb_publication_matched_status.current_count, 0);
cr_assert_eq(cb_publication_matched_status.current_count_change, -1);
cr_assert_eq(cb_publication_matched_status.total_count, 1);
cr_assert_eq(cb_publication_matched_status.total_count_change, 0);
cr_assert_eq(cb_publication_matched_status.last_subscription_handle, reader_hdl);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_PUBLICATION_MATCHED_STATUS, DDS_PUBLICATION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_writer, g_writer);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.current_count, 0);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.current_count_change, -1);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.total_count_change, 0);
CU_ASSERT_EQUAL_FATAL(cb_publication_matched_status.last_subscription_handle, reader_hdl);
}
Test(ddsc_listener, subscription_matched, .init=init_triggering_test, .fini=fini_triggering_test)
CU_Test(ddsc_listener, subscription_matched, .init=init_triggering_test, .fini=fini_triggering_test)
{
dds_instance_handle_t writer_hdl;
dds_return_t ret;
@ -739,22 +736,22 @@ Test(ddsc_listener, subscription_matched, .init=init_triggering_test, .fini=fini
/* Get writer handle that should be part of the status. */
ret = dds_get_instance_handle(g_writer, &writer_hdl);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to get prerequisite writer_hdl");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Subscription matched should be triggered with the right status. */
triggered = waitfor_cb(DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS, "DDS_SUBSCRIPTION_MATCHED_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_subscription_matched_status.current_count, 1);
cr_assert_eq(cb_subscription_matched_status.current_count_change, 1);
cr_assert_eq(cb_subscription_matched_status.total_count, 1);
cr_assert_eq(cb_subscription_matched_status.total_count_change, 1);
cr_assert_eq(cb_subscription_matched_status.last_publication_handle, writer_hdl);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.current_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.current_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.total_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.last_publication_handle, writer_hdl);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_reader, &status, DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
/* Reset the trigger flags. */
cb_called = 0;
@ -764,16 +761,16 @@ Test(ddsc_listener, subscription_matched, .init=init_triggering_test, .fini=fini
/* Subscription matched should be triggered with the right status. */
triggered = waitfor_cb(DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS, "DDS_SUBSCRIPTION_MATCHED_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_subscription_matched_status.current_count, 0);
cr_assert_eq(cb_subscription_matched_status.current_count_change, -1);
cr_assert_eq(cb_subscription_matched_status.total_count, 1);
cr_assert_eq(cb_subscription_matched_status.total_count_change, 0);
cr_assert_eq(cb_subscription_matched_status.last_publication_handle, writer_hdl);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SUBSCRIPTION_MATCHED_STATUS, DDS_SUBSCRIPTION_MATCHED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.current_count, 0);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.current_count_change, -1);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.total_count_change, 0);
CU_ASSERT_EQUAL_FATAL(cb_subscription_matched_status.last_publication_handle, writer_hdl);
}
Test(ddsc_listener, incompatible_qos, .init=init_triggering_base, .fini=fini_triggering_base)
CU_Test(ddsc_listener, incompatible_qos, .init=init_triggering_base, .fini=fini_triggering_base)
{
dds_return_t ret;
uint32_t triggered;
@ -786,37 +783,37 @@ Test(ddsc_listener, incompatible_qos, .init=init_triggering_base, .fini=fini_tri
/* Create reader and writer with proper listeners.
* But create reader with persistent durability to get incompatible qos. */
g_writer = dds_create_writer(g_participant, g_topic, g_qos, g_listener);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite writer");
CU_ASSERT_FATAL(g_writer > 0);
dds_qset_durability (g_qos, DDS_DURABILITY_PERSISTENT);
g_reader = dds_create_reader(g_participant, g_topic, g_qos, g_listener);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite reader");
CU_ASSERT_FATAL(g_reader > 0);
/* Incompatible QoS should be triggered with the right status. */
triggered = waitfor_cb(DDS_OFFERED_INCOMPATIBLE_QOS_STATUS | DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS);
cr_assert_eq(triggered & DDS_OFFERED_INCOMPATIBLE_QOS_STATUS, DDS_OFFERED_INCOMPATIBLE_QOS_STATUS, "DDS_OFFERED_INCOMPATIBLE_QOS_STATUS not triggered");
cr_assert_eq(triggered & DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS, DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS, "DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_writer, g_writer);
cr_assert_eq(cb_offered_incompatible_qos_status.total_count, 1, "cb_offered_incompatible_qos_status.total_count(%d) != 1", cb_offered_incompatible_qos_status.total_count);
cr_assert_eq(cb_offered_incompatible_qos_status.total_count_change, 1);
cr_assert_eq(cb_offered_incompatible_qos_status.last_policy_id, DDS_DURABILITY_QOS_POLICY_ID);
cr_assert_eq(cb_requested_incompatible_qos_status.total_count, 1, "cb_requested_incompatible_qos_status.total_count(%d) != 1", cb_requested_incompatible_qos_status.total_count);
cr_assert_eq(cb_requested_incompatible_qos_status.total_count_change, 1);
cr_assert_eq(cb_requested_incompatible_qos_status.last_policy_id, DDS_DURABILITY_QOS_POLICY_ID);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_OFFERED_INCOMPATIBLE_QOS_STATUS, DDS_OFFERED_INCOMPATIBLE_QOS_STATUS);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS, DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_writer, g_writer);
CU_ASSERT_EQUAL_FATAL(cb_offered_incompatible_qos_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_offered_incompatible_qos_status.total_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_offered_incompatible_qos_status.last_policy_id, DDS_DURABILITY_QOS_POLICY_ID);
CU_ASSERT_EQUAL_FATAL(cb_requested_incompatible_qos_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_requested_incompatible_qos_status.total_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_requested_incompatible_qos_status.last_policy_id, DDS_DURABILITY_QOS_POLICY_ID);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_writer, &status, DDS_OFFERED_INCOMPATIBLE_QOS_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
ret = dds_read_status(g_reader, &status, DDS_REQUESTED_INCOMPATIBLE_QOS_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
dds_delete(g_writer);
dds_delete(g_reader);
}
Test(ddsc_listener, data_available, .init=init_triggering_test, .fini=fini_triggering_test)
CU_Test(ddsc_listener, data_available, .init=init_triggering_test, .fini=fini_triggering_test)
{
dds_return_t ret;
uint32_t triggered;
@ -827,27 +824,27 @@ Test(ddsc_listener, data_available, .init=init_triggering_test, .fini=fini_trigg
/* We are interested in data available notifications. */
dds_lset_data_available(g_listener, data_available_cb);
ret = dds_set_listener(g_reader, g_listener);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set listener");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write sample. */
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write prerequisite data");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Data available should be triggered with the right status. */
triggered = waitfor_cb(DDS_DATA_AVAILABLE_STATUS);
cr_assert_eq(triggered & DDS_DATA_AVAILABLE_STATUS, DDS_DATA_AVAILABLE_STATUS, "DDS_DATA_AVAILABLE_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_DATA_AVAILABLE_STATUS, DDS_DATA_AVAILABLE_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_subscriber, &status, DDS_DATA_ON_READERS_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
ret = dds_read_status(g_reader, &status, DDS_DATA_AVAILABLE_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
}
Test(ddsc_listener, data_on_readers, .init=init_triggering_test, .fini=fini_triggering_test)
CU_Test(ddsc_listener, data_on_readers, .init=init_triggering_test, .fini=fini_triggering_test)
{
dds_return_t ret;
uint32_t triggered;
@ -858,34 +855,34 @@ Test(ddsc_listener, data_on_readers, .init=init_triggering_test, .fini=fini_trig
/* We are interested in data available notifications. */
dds_lset_data_on_readers(g_listener, data_on_readers_cb);
ret = dds_set_listener(g_subscriber, g_listener);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set listener");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Setting data available notifications should not 'sabotage' the on_readers call. */
dds_lset_data_available(g_listener, data_available_cb);
ret = dds_set_listener(g_reader, g_listener);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set listener");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write sample. */
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write prerequisite data");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Data on readers should be triggered with the right status. */
triggered = waitfor_cb(DDS_DATA_ON_READERS_STATUS);
cr_assert_eq(triggered & DDS_DATA_ON_READERS_STATUS, DDS_DATA_ON_READERS_STATUS, "DDS_DATA_ON_READERS_STATUS not triggered");
cr_assert_eq(cb_subscriber, g_subscriber);
cr_assert_neq(triggered & DDS_DATA_AVAILABLE_STATUS, DDS_DATA_AVAILABLE_STATUS, "DDS_DATA_AVAILABLE_STATUS triggered");
CU_ASSERT_EQUAL_FATAL(triggered & DDS_DATA_ON_READERS_STATUS, DDS_DATA_ON_READERS_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_subscriber, g_subscriber);
CU_ASSERT_NOT_EQUAL_FATAL(triggered & DDS_DATA_AVAILABLE_STATUS, DDS_DATA_AVAILABLE_STATUS);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_subscriber, &status, DDS_DATA_ON_READERS_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
ret = dds_read_status(g_reader, &status, DDS_DATA_AVAILABLE_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
}
Test(ddsc_listener, sample_lost, .init=init_triggering_test, .fini=fini_triggering_test)
CU_Test(ddsc_listener, sample_lost, .init=init_triggering_test, .fini=fini_triggering_test)
{
dds_return_t ret;
uint32_t triggered;
@ -900,30 +897,30 @@ Test(ddsc_listener, sample_lost, .init=init_triggering_test, .fini=fini_triggeri
/* We are interested in sample lost notifications. */
dds_lset_sample_lost(g_listener, sample_lost_cb);
ret = dds_set_listener(g_reader, g_listener);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set listener");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write first sample with current timestamp. */
ret = dds_write_ts(g_writer, &sample, dds_time());
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write contemporary data");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write second sample with older timestamp. */
ret = dds_write_ts(g_writer, &sample, the_past);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write pre-historic data");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Sample lost should be triggered with the right status. */
triggered = waitfor_cb(DDS_SAMPLE_LOST_STATUS);
cr_assert_eq(triggered & DDS_SAMPLE_LOST_STATUS, DDS_SAMPLE_LOST_STATUS, "DDS_SAMPLE_LOST_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_sample_lost_status.total_count, 1);
cr_assert_eq(cb_sample_lost_status.total_count_change, 1);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SAMPLE_LOST_STATUS, DDS_SAMPLE_LOST_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_sample_lost_status.total_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_sample_lost_status.total_count_change, 1);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_reader, &status, DDS_SAMPLE_LOST_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
}
Test(ddsc_listener, sample_rejected, .init=init_triggering_test, .fini=fini_triggering_test)
CU_Test(ddsc_listener, sample_rejected, .init=init_triggering_test, .fini=fini_triggering_test)
{
dds_return_t ret;
uint32_t triggered;
@ -934,30 +931,30 @@ Test(ddsc_listener, sample_rejected, .init=init_triggering_test, .fini=fini_trig
/* We are interested in sample rejected notifications. */
dds_lset_sample_rejected(g_listener, sample_rejected_cb);
ret = dds_set_listener(g_reader, g_listener);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set listener");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write more than resource limits set by the reader. */
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write data 1");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write data 2");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to write data 3");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Sample lost should be triggered with the right status. */
triggered = waitfor_cb(DDS_SAMPLE_REJECTED_STATUS);
cr_assert_eq(triggered & DDS_SAMPLE_REJECTED_STATUS, DDS_SAMPLE_REJECTED_STATUS, "DDS_SAMPLE_REJECTED_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_sample_rejected_status.total_count, 2);
cr_assert_eq(cb_sample_rejected_status.total_count_change, 1);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_SAMPLE_REJECTED_STATUS, DDS_SAMPLE_REJECTED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_sample_rejected_status.total_count, 2);
CU_ASSERT_EQUAL_FATAL(cb_sample_rejected_status.total_count_change, 1);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_reader, &status, DDS_SAMPLE_REJECTED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
}
Test(ddsc_listener, liveliness_changed, .init=init_triggering_test, .fini=fini_triggering_base)
CU_Test(ddsc_listener, liveliness_changed, .init=init_triggering_test, .fini=fini_triggering_base)
{
dds_instance_handle_t writer_hdl;
dds_return_t ret;
@ -968,22 +965,22 @@ Test(ddsc_listener, liveliness_changed, .init=init_triggering_test, .fini=fini_t
/* Get writer handle that should be part of the status. */
ret = dds_get_instance_handle(g_writer, &writer_hdl);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to get prerequisite writer_hdl");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Liveliness changed should be triggered with the right status. */
triggered = waitfor_cb(DDS_LIVELINESS_CHANGED_STATUS);
cr_assert_eq(triggered & DDS_LIVELINESS_CHANGED_STATUS, DDS_LIVELINESS_CHANGED_STATUS, "DDS_LIVELINESS_CHANGED_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_liveliness_changed_status.alive_count, 1);
cr_assert_eq(cb_liveliness_changed_status.alive_count_change, 1);
cr_assert_eq(cb_liveliness_changed_status.not_alive_count, 0);
cr_assert_eq(cb_liveliness_changed_status.not_alive_count_change, 0);
cr_assert_eq(cb_liveliness_changed_status.last_publication_handle, writer_hdl);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_LIVELINESS_CHANGED_STATUS, DDS_LIVELINESS_CHANGED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.alive_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.alive_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.not_alive_count, 0);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.not_alive_count_change, 0);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.last_publication_handle, writer_hdl);
/* The listener should have swallowed the status. */
ret = dds_read_status(g_reader, &status, DDS_LIVELINESS_CHANGED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "dds_read_status failed");
cr_assert_eq(status, 0);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(status, 0);
/* Reset the trigger flags. */
cb_called = 0;
@ -993,13 +990,13 @@ Test(ddsc_listener, liveliness_changed, .init=init_triggering_test, .fini=fini_t
/* Liveliness changed should be triggered with the right status. */
triggered = waitfor_cb(DDS_LIVELINESS_CHANGED_STATUS);
cr_assert_eq(triggered & DDS_LIVELINESS_CHANGED_STATUS, DDS_LIVELINESS_CHANGED_STATUS, "DDS_LIVELINESS_CHANGED_STATUS not triggered");
cr_assert_eq(cb_reader, g_reader);
cr_assert_eq(cb_liveliness_changed_status.alive_count, 0);
cr_assert_eq(cb_liveliness_changed_status.alive_count_change, 0);
cr_assert_eq(cb_liveliness_changed_status.not_alive_count, 1);
cr_assert_eq(cb_liveliness_changed_status.not_alive_count_change, 1);
cr_assert_eq(cb_liveliness_changed_status.last_publication_handle, writer_hdl);
CU_ASSERT_EQUAL_FATAL(triggered & DDS_LIVELINESS_CHANGED_STATUS, DDS_LIVELINESS_CHANGED_STATUS);
CU_ASSERT_EQUAL_FATAL(cb_reader, g_reader);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.alive_count, 0);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.alive_count_change, 0);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.not_alive_count, 1);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.not_alive_count_change, 1);
CU_ASSERT_EQUAL_FATAL(cb_liveliness_changed_status.last_publication_handle, writer_hdl);
}
#if 0
@ -1059,4 +1056,4 @@ Test(ddsc_listener, inconsistent_topic, .init=init_triggering_base, .fini=fini_t
dds_delete_qos(g_qos);
}
#endif
#endif

View file

@ -10,30 +10,30 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include "CUnit/Test.h"
#include <os/os.h>
#include "config_env.h"
#include "ddsc/ddsc_project.h"
#define cr_assert_status_eq(s1, s2, ...) cr_assert_eq(dds_err_nr(s1), s2, __VA_ARGS__)
#define cu_assert_status_eq(s1, s2) CU_ASSERT_EQUAL_FATAL(dds_err_nr(s1), s2)
Test(ddsc_participant, create_and_delete) {
CU_Test(ddsc_participant, create_and_delete) {
dds_entity_t participant, participant2, participant3;
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
participant2 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant2, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant2 > 0);
dds_delete (participant);
dds_delete (participant2);
participant3 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant3, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant3 > 0);
dds_delete (participant3);
@ -41,32 +41,32 @@ Test(ddsc_participant, create_and_delete) {
/* Test for creating participant with no configuration file */
Test(ddsc_participant, create_with_no_conf_no_env) {
CU_Test(ddsc_participant, create_with_no_conf_no_env) {
dds_entity_t participant, participant2, participant3;
dds_return_t status;
dds_domainid_t domain_id;
dds_domainid_t valid_domain=3;
const char * env_uri = os_getenv(DDSC_PROJECT_NAME_NOSPACE_CAPS"_URI");
cr_assert_eq(env_uri, NULL, DDSC_PROJECT_NAME_NOSPACE_CAPS"_URI must be NULL");
CU_ASSERT_EQUAL_FATAL(env_uri, NULL);
//invalid domain
participant = dds_create_participant (-2, NULL, NULL);
cr_assert_lt(participant, 0, "Error must be received for invalid domain value");
CU_ASSERT_FATAL(participant < 0);
//valid specific domain value
participant2 = dds_create_participant (valid_domain, NULL, NULL);
cr_assert_gt(participant2, 0, "Valid participant must be received for valid specific domain value");
CU_ASSERT_FATAL(participant2 > 0);
status = dds_get_domainid(participant2, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cr_assert_eq(domain_id, valid_domain, "Retrieved domain ID must be valid");
cu_assert_status_eq(status, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(domain_id, valid_domain);
//DDS_DOMAIN_DEFAULT from user
participant3 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant3, 0, "Valid participant must be received for DDS_DOMAIN_DEFAULT");
CU_ASSERT_FATAL(participant3 > 0);
status = dds_get_domainid(participant3, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cr_assert_eq(domain_id, valid_domain, "Retrieved domain ID must be valid");
cu_assert_status_eq(status, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(domain_id, valid_domain);
dds_delete(participant2);
dds_delete(participant3);
@ -78,7 +78,7 @@ Test(ddsc_participant, create_with_no_conf_no_env) {
////WITH CONF
/* Test for creating participant with valid configuration file */
Test(ddsc_participant, create_with_conf_no_env) {
CU_Test(ddsc_participant, create_with_conf_no_env) {
dds_entity_t participant, participant2, participant3;
dds_return_t status;
dds_domainid_t domain_id;
@ -87,41 +87,40 @@ Test(ddsc_participant, create_with_conf_no_env) {
static char env_uri_str[1000];
(void) sprintf(env_uri_str, "%s=%s", DDSC_PROJECT_NAME_NOSPACE_CAPS"_URI", CONFIG_ENV_SIMPLE_UDP);
os_putenv(env_uri_str);
printf("env_uri_str %s\n", env_uri_str);
static char env_mp_str[100];
(void) sprintf(env_mp_str, "%s=%s", "MAX_PARTICIPANTS", CONFIG_ENV_MAX_PARTICIPANTS);
os_putenv(env_mp_str);
const char * env_uri = os_getenv(DDSC_PROJECT_NAME_NOSPACE_CAPS"_URI");
cr_assert_neq(env_uri, NULL, DDSC_PROJECT_NAME_NOSPACE_CAPS"_URI must be set");
CU_ASSERT_NOT_EQUAL_FATAL(env_uri, NULL);
//invalid domain
participant = dds_create_participant (1, NULL, NULL);
cr_assert_lt(participant, 0, "Error must be received for invalid domain value");
printf("\n participant is %d\n", participant);
CU_ASSERT_FATAL(participant < 0);
//valid specific domain value
participant2 = dds_create_participant (valid_domain, NULL, NULL);
cr_assert_gt(participant2, 0, "Valid participant must be received for valid specific domain value");
CU_ASSERT_FATAL(participant2 > 0);
status = dds_get_domainid(participant2, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cr_assert_eq(domain_id, valid_domain, "Retrieved domain ID must be valid");
cu_assert_status_eq(status, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(domain_id, valid_domain);
//DDS_DOMAIN_DEFAULT from the user
participant3 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant3, 0, "Valid participant must be received for DDS_DOMAIN_DEFAULT");
CU_ASSERT_FATAL(participant3 > 0);
status = dds_get_domainid(participant3, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cr_assert_eq(domain_id, valid_domain, "Retrieved domain ID must be valid");
cu_assert_status_eq(status, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(domain_id, valid_domain);
dds_delete(participant2);
dds_delete(participant3);
}
Test(ddsc_participant_lookup, one) {
CU_Test(ddsc_participant_lookup, one) {
dds_entity_t participant;
dds_entity_t participants[3];
@ -131,20 +130,20 @@ Test(ddsc_participant_lookup, one) {
/* Create a participant */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
num_of_found_pp = dds_lookup_participant( domain_id, participants, size);
cr_assert_eq(num_of_found_pp, 1, "dds_lookup_participant(domain_id, participants, size)");
cr_assert_eq(participants[0], participant,"dds_lookup_participant did not return the participant");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 1);
CU_ASSERT_EQUAL_FATAL(participants[0], participant);
dds_delete (participant);
}
Test(ddsc_participant_lookup, multiple) {
CU_Test(ddsc_participant_lookup, multiple) {
dds_entity_t participant, participant2;
dds_entity_t participants[2];
@ -154,26 +153,26 @@ Test(ddsc_participant_lookup, multiple) {
/* Create participants */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
participant2 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant2, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant2 > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
num_of_found_pp = dds_lookup_participant( domain_id, participants, size);
cr_assert_eq(num_of_found_pp, 2, "dds_lookup_participant(domain_id, participants, size)");
cr_assert(participants[0] == participant || participants[0] == participant2,"ddsc_participant_lookup");
cr_assert(participants[1] == participant || participants[1] == participant2,"ddsc_participant_lookup");
cr_assert_neq(participants[0], participants[1], "dds_lookup_participant returned a participant twice");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 2);
CU_ASSERT_FATAL(participants[0] == participant || participants[0] == participant2);
CU_ASSERT_FATAL(participants[1] == participant || participants[1] == participant2);
CU_ASSERT_NOT_EQUAL_FATAL(participants[0], participants[1]);
dds_delete (participant2);
dds_delete (participant);
}
Test(ddsc_participant_lookup, array_too_small) {
CU_Test(ddsc_participant_lookup, array_too_small) {
dds_entity_t participant, participant2, participant3;
dds_entity_t participants[2];
@ -183,30 +182,30 @@ Test(ddsc_participant_lookup, array_too_small) {
/* Create participants */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
participant2 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant2, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant2 > 0);
participant3 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant3, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant3 > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
num_of_found_pp = dds_lookup_participant( domain_id, participants, size);
cr_assert_eq(num_of_found_pp, 3, "dds_lookup_participant(domain_id, participants, size)");
cr_assert(participants[0] == participant || participants[0] == participant2 || participants[0] == participant3,"ddsc_participant_lookup");
cr_assert(participants[1] == participant || participants[1] == participant2 || participants[1] == participant3,"ddsc_participant_lookup");
cr_assert_neq(participants[0], participants[1], "dds_lookup_participant returned a participant twice");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 3);
CU_ASSERT_FATAL(participants[0] == participant || participants[0] == participant2 || participants[0] == participant3);
CU_ASSERT_FATAL(participants[1] == participant || participants[1] == participant2 || participants[1] == participant3);
CU_ASSERT_NOT_EQUAL_FATAL(participants[0], participants[1]);
dds_delete (participant3);
dds_delete (participant2);
dds_delete (participant);
}
Test(ddsc_participant_lookup, null_zero){
CU_Test(ddsc_participant_lookup, null_zero){
dds_entity_t participant;
dds_domainid_t domain_id;
@ -215,19 +214,19 @@ Test(ddsc_participant_lookup, null_zero){
/* Create a participant */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
num_of_found_pp = dds_lookup_participant( domain_id, NULL, size);
cr_assert_eq(num_of_found_pp, 1, "dds_lookup_participant(domain_id, participants, size)");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 1);
dds_delete (participant);
}
Test(ddsc_participant_lookup, null_nonzero){
CU_Test(ddsc_participant_lookup, null_nonzero){
dds_entity_t participant;
dds_domainid_t domain_id;
@ -236,19 +235,19 @@ Test(ddsc_participant_lookup, null_nonzero){
/* Create a participant */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
num_of_found_pp = dds_lookup_participant( domain_id, NULL, size);
cr_assert_status_eq(num_of_found_pp, DDS_RETCODE_BAD_PARAMETER, "dds_lookup_participant did not return bad parameter");
cu_assert_status_eq(num_of_found_pp, DDS_RETCODE_BAD_PARAMETER);
dds_delete (participant);
}
Test(ddsc_participant_lookup, unknown_id) {
CU_Test(ddsc_participant_lookup, unknown_id) {
dds_entity_t participant;
dds_entity_t participants[3];
@ -258,30 +257,30 @@ Test(ddsc_participant_lookup, unknown_id) {
/* Create a participant */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
domain_id ++;
num_of_found_pp = dds_lookup_participant( domain_id, participants, size);
cr_assert_eq(num_of_found_pp, 0, "dds_lookup_participant(domain_id, participants, size)");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 0);
dds_delete (participant);
}
Test(ddsc_participant_lookup, none) {
CU_Test(ddsc_participant_lookup, none) {
dds_entity_t participants[2];
dds_return_t num_of_found_pp;
size_t size = 2;
num_of_found_pp = dds_lookup_participant( 0, participants, size);
cr_assert_eq(num_of_found_pp, 0, "dds_lookup_participant did not return 0");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 0);
}
Test(ddsc_participant_lookup, no_more) {
CU_Test(ddsc_participant_lookup, no_more) {
dds_entity_t participant;
dds_entity_t participants[3];
@ -291,19 +290,19 @@ Test(ddsc_participant_lookup, no_more) {
/* Create a participant */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
dds_delete (participant);
num_of_found_pp = dds_lookup_participant( domain_id, participants, size);
cr_assert_eq(num_of_found_pp, 0, "dds_lookup_participant did not return 0");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 0);
}
Test(ddsc_participant_lookup, deleted) {
CU_Test(ddsc_participant_lookup, deleted) {
dds_entity_t participant, participant2;
dds_entity_t participants[2];
@ -313,20 +312,20 @@ Test(ddsc_participant_lookup, deleted) {
/* Create participants */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant > 0);
participant2 = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant2, 0, "dds_participant_create");
CU_ASSERT_FATAL(participant2 > 0);
/* Get domain id */
status = dds_get_domainid(participant, &domain_id);
cr_assert_status_eq(status, DDS_RETCODE_OK, "dds_get_domainid(participant, domain_id)");
cu_assert_status_eq(status, DDS_RETCODE_OK);
dds_delete (participant2);
num_of_found_pp = dds_lookup_participant( domain_id, participants, size);
cr_assert_eq(num_of_found_pp, 1, "dds_lookup_participant did not return one participant");
cr_assert(participants[0] == participant,"ddsc_participant_lookup");
CU_ASSERT_EQUAL_FATAL(num_of_found_pp, 1);
CU_ASSERT_FATAL(participants[0] == participant);
dds_delete (participant);
}

View file

@ -10,8 +10,7 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "ddsc/dds.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
/* We are deliberately testing some bad arguments that SAL will complain about.
* So, silence SAL regarding these issues. */
@ -20,7 +19,7 @@
#pragma warning(disable: 28020)
#endif
#define cr_assert_status_eq(s1, s2, ...) cr_assert_eq(dds_err_nr(s1), s2, __VA_ARGS__)
#define cu_assert_status_eq(s1, s2) CU_ASSERT_EQUAL_FATAL(dds_err_nr(s1), s2)
/* Dummy callback */
static void data_available_cb(dds_entity_t reader, void* arg)
@ -30,7 +29,7 @@ static void data_available_cb(dds_entity_t reader, void* arg)
}
Test(ddsc_publisher, create)
CU_Test(ddsc_publisher, create)
{
const char *singlePartitions[] = { "partition" };
const char *multiplePartitions[] = { "partition1", "partition2" };
@ -43,27 +42,27 @@ Test(ddsc_publisher, create)
/* Use NULL participant */
publisher = dds_create_publisher(0, NULL, NULL);
cr_assert_eq(dds_err_nr(publisher), DDS_RETCODE_BAD_PARAMETER, "dds_create_publisher(NULL,NULL,NULL)");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(publisher), DDS_RETCODE_BAD_PARAMETER);
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_create_participant(DDS_DOMAIN_DEFAULT,NULL,NULL)");
CU_ASSERT_FATAL(participant > 0);
/* Use non-null participant */
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,NULL)");
CU_ASSERT_FATAL(publisher > 0);
/* Use entity that is not a participant */
publisher1 = dds_create_publisher(publisher, NULL, NULL);
cr_assert_eq(dds_err_nr(publisher1), DDS_RETCODE_ILLEGAL_OPERATION, "dds_create_publisher(publisher,NULL,NULL)");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(publisher1), DDS_RETCODE_ILLEGAL_OPERATION);
dds_delete(publisher);
/* Create a non-null qos */
qos = dds_create_qos();
cr_assert_neq(qos, NULL, "dds_create_qos()");
CU_ASSERT_NOT_EQUAL_FATAL(qos, NULL);
/* Use qos without partition; in that case the default partition should be used */
publisher = dds_create_publisher(participant, qos, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,qos,NULL) where qos with default partition");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
/* Somehow, the compiler thinks the char arrays might not be zero-terminated... */
@ -75,19 +74,19 @@ Test(ddsc_publisher, create)
/* Use qos with single partition */
dds_qset_partition (qos, 1, singlePartitions);
publisher = dds_create_publisher(participant, qos, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,qos,NULL) where qos with single partition");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
/* Use qos with multiple partitions */
dds_qset_partition (qos, 2, multiplePartitions);
publisher = dds_create_publisher(participant, qos, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,qos,NULL) where qos with multiple partitions");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
/* Use qos with multiple partitions */
dds_qset_partition (qos, 2, duplicatePartitions);
publisher = dds_create_publisher(participant, qos, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,qos,NULL) where qos with duplicate partitions");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
#ifdef _MSC_VER
@ -96,9 +95,9 @@ Test(ddsc_publisher, create)
/* Use listener(NULL) */
listener = dds_create_listener(NULL);
cr_assert_neq(listener, NULL, "dds_create_listener(NULL)");
CU_ASSERT_NOT_EQUAL_FATAL(listener, NULL);
publisher = dds_create_publisher(participant, NULL, listener);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,listener(NULL))");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
dds_reset_listener(listener);
@ -106,7 +105,7 @@ Test(ddsc_publisher, create)
/* Use listener for data_available */
dds_lset_data_available(listener, NULL);
publisher = dds_create_publisher(participant, NULL, listener);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,listener) with dds_lset_data_available(listener, NULL)");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
dds_reset_listener(listener);
@ -114,7 +113,7 @@ Test(ddsc_publisher, create)
/* Use DDS_LUNSET for data_available */
dds_lset_data_available(listener, DDS_LUNSET);
publisher = dds_create_publisher(participant, NULL, listener);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,listener) with dds_lset_data_available(listener, DDS_LUNSET)");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
dds_reset_listener(listener);
@ -122,13 +121,13 @@ Test(ddsc_publisher, create)
/* Use callback for data_available */
dds_lset_data_available(listener, data_available_cb);
publisher = dds_create_publisher(participant, NULL, listener);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,listener) with dds_lset_data_available(listener, data_available_cb)");
CU_ASSERT_FATAL(publisher > 0);
dds_delete(publisher);
/* Use both qos setting and callback listener */
dds_lset_data_available(listener, data_available_cb);
publisher = dds_create_publisher(participant, qos, listener);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,qos,listener) with dds_lset_data_available(listener, data_available_cb)");
CU_ASSERT(publisher > 0);
dds_delete(publisher);
dds_delete_listener(listener);
@ -136,7 +135,7 @@ Test(ddsc_publisher, create)
dds_delete (participant);
}
Test(ddsc_publisher, suspend_resume)
CU_Test(ddsc_publisher, suspend_resume)
{
dds_entity_t participant, publisher;
@ -144,35 +143,35 @@ Test(ddsc_publisher, suspend_resume)
/* Suspend a 0 publisher */
status = dds_suspend(0);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_suspend(NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Resume a 0 publisher */
status = dds_resume(0);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_resume(NULL)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Uae dds_suspend on something else than a publisher */
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_create_participant(DDS_DOMAIN_DEFAULT,NULL,NULL)");
CU_ASSERT_FATAL(participant > 0);
status = dds_suspend(participant);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_suspend(participant)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Use dds_resume on something else than a publisher */
status = dds_resume(participant);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_resume(participant)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Use dds_resume without calling dds_suspend */
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,NULL)");
CU_ASSERT_FATAL(publisher > 0);
status = dds_resume(publisher); /* Should be precondition not met? */
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_resume(publisher) without prior suspend");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Use dds_suspend on non-null publisher */
status = dds_suspend(publisher);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_suspend(publisher)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Use dds_resume on non-null publisher */
status = dds_resume(publisher);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_resume(publisher)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
dds_delete(publisher);
dds_delete(participant);
@ -180,7 +179,7 @@ Test(ddsc_publisher, suspend_resume)
return;
}
Test(ddsc_publisher, wait_for_acks)
CU_Test(ddsc_publisher, wait_for_acks)
{
dds_entity_t participant, publisher;
dds_return_t status;
@ -190,78 +189,78 @@ Test(ddsc_publisher, wait_for_acks)
/* Wait_for_acks on 0 publisher or writer and minusOneSec timeout */
status = dds_wait_for_acks(0, minusOneSec);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(NULL,-1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Wait_for_acks on NULL publisher or writer and zeroSec timeout */
status = dds_wait_for_acks(0, zeroSec);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(NULL,0)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* wait_for_acks on NULL publisher or writer and oneSec timeout */
status = dds_wait_for_acks(0, oneSec);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(NULL,1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* wait_for_acks on NULL publisher or writer and DDS_INFINITE timeout */
status = dds_wait_for_acks(0, DDS_INFINITY);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(NULL,DDS_INFINITY)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "dds_create_participant(DDS_DOMAIN_DEFAULT,NULL,NULL)");
CU_ASSERT_FATAL(participant > 0);
/* Wait_for_acks on participant and minusOneSec timeout */
status = dds_wait_for_acks(participant, minusOneSec);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(participant,-1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Wait_for_acks on participant and zeroSec timeout */
status = dds_wait_for_acks(participant, zeroSec);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(participant,0)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Wait_for_acks on participant and oneSec timeout */
status = dds_wait_for_acks(participant, oneSec);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(participant,1)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
/* Wait_for_acks on participant and DDS_INFINITE timeout */
status = dds_wait_for_acks(participant, DDS_INFINITY);
cr_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER, "dds_wait_for_acks(participant,DDS_INFINITY)");
cu_assert_status_eq(status, DDS_RETCODE_BAD_PARAMETER);
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0, "dds_create_publisher(participant,NULL,NULL)");
CU_ASSERT_FATAL(publisher > 0);
/* Wait_for_acks on publisher and minusOneSec timeout */
status = dds_wait_for_acks(publisher, minusOneSec);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(publisher,-1)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on publisher and zeroSec timeout */
status = dds_wait_for_acks(publisher, zeroSec);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(publisher,0)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on publisher and oneSec timeout */
status = dds_wait_for_acks(publisher, oneSec);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(publisher,1)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on publisher and DDS_INFINITE timeout */
status = dds_wait_for_acks(publisher, DDS_INFINITY);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(publisher,DDS_INFINITY)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* TODO: create tests by calling dds_qwait_for_acks on writers */
status = dds_suspend(publisher);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_suspend(publisher)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on suspended publisher and minusOneSec timeout */
status = dds_wait_for_acks(publisher, minusOneSec);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(suspended_publisher,-1)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on suspended publisher and zeroSec timeout */
status = dds_wait_for_acks(publisher, zeroSec);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(suspended_publisher,0)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on suspended publisher and oneSec timeout */
status = dds_wait_for_acks(publisher, oneSec);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(suspended_publisher,1)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
/* Wait_for_acks on suspended publisher and DDS_INFINITE timeout */
status = dds_wait_for_acks(publisher, DDS_INFINITY);
cr_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED, "dds_wait_for_acks(suspended_publisher,DDS_INFINITY)");
cu_assert_status_eq(status, DDS_RETCODE_UNSUPPORTED);
dds_delete(publisher);
dds_delete(participant);
@ -269,7 +268,7 @@ Test(ddsc_publisher, wait_for_acks)
return;
}
Test(ddsc_publisher, coherency)
CU_Test(ddsc_publisher, coherency)
{
return;
}

View file

@ -9,10 +9,9 @@
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "CUnit/Test.h"
#include "ddsc/dds.h"
#include "os/os.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
/* We are deliberately testing some bad arguments that SAL will complain about.
* So, silence SAL regarding these issues. */
@ -168,7 +167,7 @@ static void
qos_init(void)
{
g_qos = dds_create_qos();
cr_assert_not_null(g_qos);
CU_ASSERT_PTR_NOT_NULL_FATAL(g_qos);
g_pol_userdata.value = (void*)c_userdata;
g_pol_userdata.sz = strlen((char*)g_pol_userdata.value) + 1;
@ -239,46 +238,46 @@ qos_fini(void)
/****************************************************************************
* API tests
****************************************************************************/
Test(ddsc_qos, copy_bad_source, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, copy_bad_source, .init=qos_init, .fini=qos_fini)
{
dds_return_t result;
result = dds_copy_qos(g_qos, NULL);
cr_assert_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(result));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_qos, copy_bad_destination, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, copy_bad_destination, .init=qos_init, .fini=qos_fini)
{
dds_return_t result;
result = dds_copy_qos(NULL, g_qos);
cr_assert_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(result));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_qos, copy_with_partition, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, copy_with_partition, .init=qos_init, .fini=qos_fini)
{
dds_return_t result;
dds_qos_t *qos;
struct pol_partition p = { 0, NULL };
qos = dds_create_qos();
cr_assert_not_null(qos);
CU_ASSERT_PTR_NOT_NULL_FATAL(qos);
dds_qset_partition(g_qos, g_pol_partition.n, (const char **)g_pol_partition.ps);
result = dds_copy_qos(qos, g_qos);
cr_assert_eq(result, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(result, DDS_RETCODE_OK);
dds_qget_partition(qos, &p.n, &p.ps);
cr_assert_eq(p.n, g_pol_partition.n);
CU_ASSERT_EQUAL_FATAL(p.n, g_pol_partition.n);
for (uint32_t cnt = 0; cnt < p.n; cnt++) {
cr_assert_str_eq(p.ps[cnt], g_pol_partition.ps[cnt]);
CU_ASSERT_STRING_EQUAL_FATAL(p.ps[cnt], g_pol_partition.ps[cnt]);
}
dds_delete_qos(qos);
}
Test(ddsc_qos, userdata, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, userdata, .init=qos_init, .fini=qos_fini)
{
struct pol_userdata p = { NULL, 0 };
@ -290,13 +289,13 @@ Test(ddsc_qos, userdata, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_userdata(g_qos, g_pol_userdata.value, g_pol_userdata.sz);
dds_qget_userdata(g_qos, &p.value, &p.sz);
cr_assert_eq(p.sz, g_pol_userdata.sz);
cr_assert_str_eq(p.value, g_pol_userdata.value);
CU_ASSERT_EQUAL_FATAL(p.sz, g_pol_userdata.sz);
CU_ASSERT_STRING_EQUAL_FATAL(p.value, g_pol_userdata.value);
dds_free(p.value);
}
Test(ddsc_qos, topicdata, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, topicdata, .init=qos_init, .fini=qos_fini)
{
struct pol_topicdata p = { NULL, 0 };
@ -308,13 +307,13 @@ Test(ddsc_qos, topicdata, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_topicdata(g_qos, g_pol_topicdata.value, g_pol_topicdata.sz);
dds_qget_topicdata(g_qos, &p.value, &p.sz);
cr_assert_eq(p.sz, g_pol_topicdata.sz);
cr_assert_str_eq(p.value, g_pol_topicdata.value);
CU_ASSERT_EQUAL_FATAL(p.sz, g_pol_topicdata.sz);
CU_ASSERT_STRING_EQUAL_FATAL(p.value, g_pol_topicdata.value);
dds_free(p.value);
}
Test(ddsc_qos, groupdata, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, groupdata, .init=qos_init, .fini=qos_fini)
{
struct pol_groupdata p = { NULL, 0 };
@ -326,13 +325,13 @@ Test(ddsc_qos, groupdata, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_groupdata(g_qos, g_pol_groupdata.value, g_pol_groupdata.sz);
dds_qget_groupdata(g_qos, &p.value, &p.sz);
cr_assert_eq(p.sz, g_pol_groupdata.sz);
cr_assert_str_eq(p.value, g_pol_groupdata.value);
CU_ASSERT_EQUAL_FATAL(p.sz, g_pol_groupdata.sz);
CU_ASSERT_STRING_EQUAL_FATAL(p.value, g_pol_groupdata.value);
dds_free(p.value);
}
Test(ddsc_qos, durability, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, durability, .init=qos_init, .fini=qos_fini)
{
struct pol_durability p = { DDS_DURABILITY_VOLATILE };
@ -344,10 +343,10 @@ Test(ddsc_qos, durability, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_durability(g_qos, g_pol_durability.kind);
dds_qget_durability(g_qos, &p.kind);
cr_assert_eq(p.kind, g_pol_durability.kind);
CU_ASSERT_EQUAL_FATAL(p.kind, g_pol_durability.kind);
}
Test(ddsc_qos, history, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, history, .init=qos_init, .fini=qos_fini)
{
struct pol_history p = { DDS_HISTORY_KEEP_ALL, 0 };
@ -359,11 +358,11 @@ Test(ddsc_qos, history, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_history(g_qos, g_pol_history.kind, g_pol_history.depth);
dds_qget_history(g_qos, &p.kind, &p.depth);
cr_assert_eq(p.kind, g_pol_history.kind);
cr_assert_eq(p.depth, g_pol_history.depth);
CU_ASSERT_EQUAL_FATAL(p.kind, g_pol_history.kind);
CU_ASSERT_EQUAL_FATAL(p.depth, g_pol_history.depth);
}
Test(ddsc_qos, resource_limits, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, resource_limits, .init=qos_init, .fini=qos_fini)
{
struct pol_resource_limits p = { 0, 0, 0 };
@ -375,12 +374,12 @@ Test(ddsc_qos, resource_limits, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_resource_limits(g_qos, g_pol_resource_limits.max_samples, g_pol_resource_limits.max_instances, g_pol_resource_limits.max_samples_per_instance);
dds_qget_resource_limits(g_qos, &p.max_samples, &p.max_instances, &p.max_samples_per_instance);
cr_assert_eq(p.max_samples, g_pol_resource_limits.max_samples);
cr_assert_eq(p.max_instances, g_pol_resource_limits.max_instances);
cr_assert_eq(p.max_samples_per_instance, g_pol_resource_limits.max_samples_per_instance);
CU_ASSERT_EQUAL_FATAL(p.max_samples, g_pol_resource_limits.max_samples);
CU_ASSERT_EQUAL_FATAL(p.max_instances, g_pol_resource_limits.max_instances);
CU_ASSERT_EQUAL_FATAL(p.max_samples_per_instance, g_pol_resource_limits.max_samples_per_instance);
}
Test(ddsc_qos, presentation, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, presentation, .init=qos_init, .fini=qos_fini)
{
struct pol_presentation p = { DDS_PRESENTATION_INSTANCE, false, false };
@ -392,12 +391,12 @@ Test(ddsc_qos, presentation, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_presentation(g_qos, g_pol_presentation.access_scope, g_pol_presentation.coherent_access, g_pol_presentation.ordered_access);
dds_qget_presentation(g_qos, &p.access_scope, &p.coherent_access, &p.ordered_access);
cr_assert_eq(p.access_scope, g_pol_presentation.access_scope);
cr_assert_eq(p.coherent_access, g_pol_presentation.coherent_access);
cr_assert_eq(p.ordered_access, g_pol_presentation.ordered_access);
CU_ASSERT_EQUAL_FATAL(p.access_scope, g_pol_presentation.access_scope);
CU_ASSERT_EQUAL_FATAL(p.coherent_access, g_pol_presentation.coherent_access);
CU_ASSERT_EQUAL_FATAL(p.ordered_access, g_pol_presentation.ordered_access);
}
Test(ddsc_qos, lifespan, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, lifespan, .init=qos_init, .fini=qos_fini)
{
struct pol_lifespan p = { 0 };
@ -409,10 +408,10 @@ Test(ddsc_qos, lifespan, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_lifespan(g_qos, g_pol_lifespan.lifespan);
dds_qget_lifespan(g_qos, &p.lifespan);
cr_assert_eq(p.lifespan, g_pol_lifespan.lifespan);
CU_ASSERT_EQUAL_FATAL(p.lifespan, g_pol_lifespan.lifespan);
}
Test(ddsc_qos, deadline, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, deadline, .init=qos_init, .fini=qos_fini)
{
struct pol_deadline p = { 0 };
@ -424,10 +423,10 @@ Test(ddsc_qos, deadline, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_deadline(g_qos, g_pol_deadline.deadline);
dds_qget_deadline(g_qos, &p.deadline);
cr_assert_eq(p.deadline, g_pol_deadline.deadline);
CU_ASSERT_EQUAL_FATAL(p.deadline, g_pol_deadline.deadline);
}
Test(ddsc_qos, latency_budget, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, latency_budget, .init=qos_init, .fini=qos_fini)
{
struct pol_latency_budget p = { 0 };
@ -439,10 +438,10 @@ Test(ddsc_qos, latency_budget, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_latency_budget(g_qos, g_pol_latency_budget.duration);
dds_qget_latency_budget(g_qos, &p.duration);
cr_assert_eq(p.duration, g_pol_latency_budget.duration);
CU_ASSERT_EQUAL_FATAL(p.duration, g_pol_latency_budget.duration);
}
Test(ddsc_qos, ownership, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, ownership, .init=qos_init, .fini=qos_fini)
{
struct pol_ownership p = { DDS_OWNERSHIP_SHARED };
@ -454,10 +453,10 @@ Test(ddsc_qos, ownership, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_ownership(g_qos, g_pol_ownership.kind);
dds_qget_ownership(g_qos, &p.kind);
cr_assert_eq(p.kind, g_pol_ownership.kind);
CU_ASSERT_EQUAL_FATAL(p.kind, g_pol_ownership.kind);
}
Test(ddsc_qos, ownership_strength, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, ownership_strength, .init=qos_init, .fini=qos_fini)
{
struct pol_ownership_strength p = { 0 };
@ -469,10 +468,10 @@ Test(ddsc_qos, ownership_strength, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_ownership_strength(g_qos, g_pol_ownership_strength.value);
dds_qget_ownership_strength(g_qos, &p.value);
cr_assert_eq(p.value, g_pol_ownership_strength.value);
CU_ASSERT_EQUAL_FATAL(p.value, g_pol_ownership_strength.value);
}
Test(ddsc_qos, liveliness, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, liveliness, .init=qos_init, .fini=qos_fini)
{
struct pol_liveliness p = { DDS_LIVELINESS_AUTOMATIC, 0 };
@ -484,11 +483,11 @@ Test(ddsc_qos, liveliness, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_liveliness(g_qos, g_pol_liveliness.kind, g_pol_liveliness.lease_duration);
dds_qget_liveliness(g_qos, &p.kind, &p.lease_duration);
cr_assert_eq(p.kind, g_pol_liveliness.kind);
cr_assert_eq(p.lease_duration, g_pol_liveliness.lease_duration);
CU_ASSERT_EQUAL_FATAL(p.kind, g_pol_liveliness.kind);
CU_ASSERT_EQUAL_FATAL(p.lease_duration, g_pol_liveliness.lease_duration);
}
Test(ddsc_qos, time_base_filter, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, time_base_filter, .init=qos_init, .fini=qos_fini)
{
struct pol_time_based_filter p = { 0 };
@ -500,10 +499,10 @@ Test(ddsc_qos, time_base_filter, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_time_based_filter(g_qos, g_pol_time_based_filter.minimum_separation);
dds_qget_time_based_filter(g_qos, &p.minimum_separation);
cr_assert_eq(p.minimum_separation, g_pol_time_based_filter.minimum_separation);
CU_ASSERT_EQUAL_FATAL(p.minimum_separation, g_pol_time_based_filter.minimum_separation);
}
Test(ddsc_qos, partition, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, partition, .init=qos_init, .fini=qos_fini)
{
struct pol_partition p = { 0, NULL };
@ -515,17 +514,17 @@ Test(ddsc_qos, partition, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_partition(g_qos, g_pol_partition.n, c_partitions);
dds_qget_partition(g_qos, &p.n, &p.ps);
cr_assert_eq(p.n, 2);
cr_assert_eq(p.n, g_pol_partition.n);
cr_assert_str_eq(p.ps[0], g_pol_partition.ps[0]);
cr_assert_str_eq(p.ps[1], g_pol_partition.ps[1]);
CU_ASSERT_EQUAL_FATAL(p.n, 2);
CU_ASSERT_EQUAL_FATAL(p.n, g_pol_partition.n);
CU_ASSERT_STRING_EQUAL_FATAL(p.ps[0], g_pol_partition.ps[0]);
CU_ASSERT_STRING_EQUAL_FATAL(p.ps[1], g_pol_partition.ps[1]);
dds_free(p.ps[0]);
dds_free(p.ps[1]);
dds_free(p.ps);
}
Test(ddsc_qos, reliability, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, reliability, .init=qos_init, .fini=qos_fini)
{
struct pol_reliability p = { DDS_RELIABILITY_BEST_EFFORT, 0 };
@ -537,11 +536,11 @@ Test(ddsc_qos, reliability, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_reliability(g_qos, g_pol_reliability.kind, g_pol_reliability.max_blocking_time);
dds_qget_reliability(g_qos, &p.kind, &p.max_blocking_time);
cr_assert_eq(p.kind, g_pol_reliability.kind);
cr_assert_eq(p.max_blocking_time, g_pol_reliability.max_blocking_time);
CU_ASSERT_EQUAL_FATAL(p.kind, g_pol_reliability.kind);
CU_ASSERT_EQUAL_FATAL(p.max_blocking_time, g_pol_reliability.max_blocking_time);
}
Test(ddsc_qos, transport_priority, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, transport_priority, .init=qos_init, .fini=qos_fini)
{
struct pol_transport_priority p = { 0 };
@ -553,10 +552,10 @@ Test(ddsc_qos, transport_priority, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_transport_priority(g_qos, g_pol_transport_priority.value);
dds_qget_transport_priority(g_qos, &p.value);
cr_assert_eq(p.value, g_pol_transport_priority.value);
CU_ASSERT_EQUAL_FATAL(p.value, g_pol_transport_priority.value);
}
Test(ddsc_qos, destination_order, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, destination_order, .init=qos_init, .fini=qos_fini)
{
struct pol_destination_order p = { DDS_DESTINATIONORDER_BY_RECEPTION_TIMESTAMP };
@ -568,10 +567,10 @@ Test(ddsc_qos, destination_order, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_destination_order(g_qos, g_pol_destination_order.kind);
dds_qget_destination_order(g_qos, &p.kind);
cr_assert_eq(p.kind, g_pol_destination_order.kind);
CU_ASSERT_EQUAL_FATAL(p.kind, g_pol_destination_order.kind);
}
Test(ddsc_qos, writer_data_lifecycle, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, writer_data_lifecycle, .init=qos_init, .fini=qos_fini)
{
struct pol_writer_data_lifecycle p = { false };
@ -583,10 +582,10 @@ Test(ddsc_qos, writer_data_lifecycle, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_writer_data_lifecycle(g_qos, g_pol_writer_data_lifecycle.autodispose);
dds_qget_writer_data_lifecycle(g_qos, &p.autodispose);
cr_assert_eq(p.autodispose, g_pol_writer_data_lifecycle.autodispose);
CU_ASSERT_EQUAL_FATAL(p.autodispose, g_pol_writer_data_lifecycle.autodispose);
}
Test(ddsc_qos, reader_data_lifecycle, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, reader_data_lifecycle, .init=qos_init, .fini=qos_fini)
{
struct pol_reader_data_lifecycle p = { 0, 0 };
@ -598,11 +597,11 @@ Test(ddsc_qos, reader_data_lifecycle, .init=qos_init, .fini=qos_fini)
/* Getting after setting, should yield the original input. */
dds_qset_reader_data_lifecycle(g_qos, g_pol_reader_data_lifecycle.autopurge_nowriter_samples_delay, g_pol_reader_data_lifecycle.autopurge_disposed_samples_delay);
dds_qget_reader_data_lifecycle(g_qos, &p.autopurge_nowriter_samples_delay, &p.autopurge_disposed_samples_delay);
cr_assert_eq(p.autopurge_nowriter_samples_delay, g_pol_reader_data_lifecycle.autopurge_nowriter_samples_delay);
cr_assert_eq(p.autopurge_disposed_samples_delay, g_pol_reader_data_lifecycle.autopurge_disposed_samples_delay);
CU_ASSERT_EQUAL_FATAL(p.autopurge_nowriter_samples_delay, g_pol_reader_data_lifecycle.autopurge_nowriter_samples_delay);
CU_ASSERT_EQUAL_FATAL(p.autopurge_disposed_samples_delay, g_pol_reader_data_lifecycle.autopurge_disposed_samples_delay);
}
Test(ddsc_qos, durability_service, .init=qos_init, .fini=qos_fini)
CU_Test(ddsc_qos, durability_service, .init=qos_init, .fini=qos_fini)
{
struct pol_durability_service p = { 0, DDS_HISTORY_KEEP_LAST, 0, 0, 0, 0 };
@ -644,12 +643,12 @@ Test(ddsc_qos, durability_service, .init=qos_init, .fini=qos_fini)
&p.max_samples,
&p.max_instances,
&p.max_samples_per_instance);
cr_assert_eq(p.service_cleanup_delay, g_pol_durability_service.service_cleanup_delay);
cr_assert_eq(p.history_kind, g_pol_durability_service.history_kind);
cr_assert_eq(p.history_depth, g_pol_durability_service.history_depth);
cr_assert_eq(p.max_samples, g_pol_durability_service.max_samples);
cr_assert_eq(p.max_instances, g_pol_durability_service.max_instances);
cr_assert_eq(p.max_samples_per_instance, g_pol_durability_service.max_samples_per_instance);
CU_ASSERT_EQUAL_FATAL(p.service_cleanup_delay, g_pol_durability_service.service_cleanup_delay);
CU_ASSERT_EQUAL_FATAL(p.history_kind, g_pol_durability_service.history_kind);
CU_ASSERT_EQUAL_FATAL(p.history_depth, g_pol_durability_service.history_depth);
CU_ASSERT_EQUAL_FATAL(p.max_samples, g_pol_durability_service.max_samples);
CU_ASSERT_EQUAL_FATAL(p.max_instances, g_pol_durability_service.max_instances);
CU_ASSERT_EQUAL_FATAL(p.max_samples_per_instance, g_pol_durability_service.max_samples_per_instance);
}
#ifdef _MSC_VER

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -15,16 +15,8 @@
#include "os/os.h"
#include "Space.h"
#include "RoundTrip.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include <criterion/theories.h>
#if 0
#define PRINT_SAMPLE(info, sample) cr_log_info("%s (%d, %d, %d)\n", info, sample.long_1, sample.long_2, sample.long_3);
#else
#define PRINT_SAMPLE(info, sample)
#endif
#include "CUnit/Test.h"
#include "CUnit/Theory.h"
/**************************************************************************************************
*
@ -132,62 +124,62 @@ reader_iterator_init(void)
dds_qos_t *qos;
qos = dds_create_qos();
cr_assert_not_null(qos, "Failed to create prerequisite qos");
CU_ASSERT_PTR_NOT_NULL_FATAL(qos);
g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(g_participant, 0, "Failed to create prerequisite g_participant");
CU_ASSERT_FATAL(g_participant > 0);
g_subscriber = dds_create_subscriber(g_participant, NULL, NULL);
cr_assert_gt(g_subscriber, 0, "Failed to create prerequisite g_subscriber");
CU_ASSERT_FATAL(g_subscriber > 0);
g_publisher = dds_create_publisher(g_participant, NULL, NULL);
cr_assert_gt(g_publisher, 0, "Failed to create prerequisite g_publisher");
CU_ASSERT_FATAL(g_publisher > 0);
g_waitset = dds_create_waitset(g_participant);
cr_assert_gt(g_waitset, 0, "Failed to create g_waitset");
CU_ASSERT_FATAL(g_waitset > 0);
g_topic = dds_create_topic(g_participant, &Space_Type1_desc, create_topic_name("ddsc_read_iterator_test", name, sizeof name), NULL, NULL);
cr_assert_gt(g_topic, 0, "Failed to create prerequisite g_topic");
CU_ASSERT_FATAL(g_topic > 0);
/* Create a writer that will not automatically dispose unregistered samples. */
dds_qset_writer_data_lifecycle(qos, false);
g_writer = dds_create_writer(g_publisher, g_topic, qos, NULL);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite g_writer");
CU_ASSERT_FATAL(g_writer > 0);
/* Create a reader that keeps all samples when not taken. */
dds_qset_history(qos, DDS_HISTORY_KEEP_ALL, DDS_LENGTH_UNLIMITED);
g_reader = dds_create_reader(g_subscriber, g_topic, qos, NULL);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite g_reader");
CU_ASSERT_FATAL(g_reader > 0);
/* Create a read condition that only reads old samples. */
g_rcond = dds_create_readcondition(g_reader, DDS_NOT_READ_SAMPLE_STATE | DDS_NOT_NEW_VIEW_STATE | DDS_ANY_INSTANCE_STATE);
cr_assert_gt(g_rcond, 0, "Failed to create prerequisite g_rcond");
CU_ASSERT_FATAL(g_rcond > 0);
/* Create a query condition that only reads of instances mod2. */
g_qcond = dds_create_querycondition(g_reader, DDS_NOT_READ_SAMPLE_STATE | DDS_ANY_VIEW_STATE | DDS_ANY_INSTANCE_STATE, filter_mod2);
cr_assert_gt(g_qcond, 0, "Failed to create prerequisite g_qcond");
CU_ASSERT_FATAL(g_qcond > 0);
/* Sync g_reader to g_writer. */
ret = dds_set_enabled_status(g_reader, DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_reader status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_reader, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Failed prerequisite dds_waitset_wait g_reader r");
cr_assert_eq(g_reader, (dds_entity_t)(intptr_t)triggered, "Failed prerequisite dds_waitset_wait g_reader a");
CU_ASSERT_EQUAL_FATAL(ret, 1);
CU_ASSERT_EQUAL_FATAL(g_reader, (dds_entity_t)(intptr_t)triggered);
ret = dds_waitset_detach(g_waitset, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to detach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Sync g_writer to g_reader. */
ret = dds_set_enabled_status(g_writer, DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_writer status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_writer, g_writer);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_writer");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Failed prerequisite dds_waitset_wait g_writer r");
cr_assert_eq(g_writer, (dds_entity_t)(intptr_t)triggered, "Failed prerequisite dds_waitset_wait g_writer a");
CU_ASSERT_EQUAL_FATAL(ret, 1);
CU_ASSERT_EQUAL_FATAL(g_writer, (dds_entity_t)(intptr_t)triggered);
ret = dds_waitset_detach(g_waitset, g_writer);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to detach prerequisite g_writer");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Initialize reading buffers. */
memset (g_data, 0, sizeof (g_data));
@ -205,7 +197,7 @@ reader_iterator_init(void)
sample.long_2 = i;
sample.long_3 = i*2;
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/* | long_1 | long_2 | long_3 | sst | vst | ist |
* -----------------------------------------------------
@ -239,50 +231,25 @@ reader_iterator_init(void)
/* Create a query condition that reads the specific sample to get a set of 'read' samples after init. */
qcond = dds_create_querycondition(g_reader, DDS_ANY_SAMPLE_STATE | DDS_ANY_VIEW_STATE | DDS_ANY_INSTANCE_STATE, filter_init);
cr_assert_gt(g_qcond, 0, "Failed to create prerequisite qcond");
CU_ASSERT_FATAL(g_qcond > 0);
ret = dds_read(qcond, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_gt(ret, 0, "Failed prerequisite read: %d", dds_err_nr(ret));
CU_ASSERT_FATAL(ret > 0);
dds_delete(qcond);
}
/* | long_1 | long_2 | long_3 | sst | vst | ist |
* -----------------------------------------------------
* | 0 | 0 | 0 | not_read | new | alive |
* | 0 | 1 | 2 | not_read | new | alive |
* | 0 | 2 | 4 | not_read | new | alive |
* | 1 | 3 | 6 | read | old | alive |
* | 1 | 4 | 8 | read | old | alive |
* | 1 | 5 | 10 | read | old | alive |
* | 2 | 6 | 12 | not_read | old | alive |
* | 2 | 7 | 14 | not_read | old | alive |
* | 2 | 8 | 16 | read | old | alive |
* | 3 | 9 | 18 | not_read | old | alive |
* | 3 | 10 | 20 | read | old | alive |
* | 3 | 11 | 22 | not_read | old | alive |
* | 4 | 12 | 24 | read | old | alive |
* | 4 | 13 | 26 | not_read | old | alive |
* | 4 | 14 | 28 | not_read | old | alive |
* | 5 | 15 | 30 | read | old | alive |
* | 5 | 16 | 32 | not_read | old | alive |
* | 5 | 17 | 34 | read | old | alive |
* | 6 | 18 | 36 | read | old | alive |
* | 6 | 19 | 38 | not_read | old | alive |
* | 6 | 20 | 40 | read | old | alive |
*/
/* Dispose and unregister the last two samples. */
sample.long_1 = 5;
sample.long_2 = 15;
sample.long_3 = 30;
ret = dds_dispose(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite dispose");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
sample.long_1 = 6;
sample.long_2 = 16;
sample.long_3 = 32;
ret = dds_unregister_instance(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite unregister");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* | long_1 | long_2 | long_3 | sst | vst | ist |
* ----------------------------------------------------------
* | 0 | 0 | 0 | not_read | new | alive |
@ -330,7 +297,7 @@ samples_cnt(void)
{
dds_return_t ret;
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_geq(ret, 0, "Failed samples count read: %d", dds_err_nr(ret));
CU_ASSERT_FATAL(ret >= 0);
return ret;
}
@ -340,17 +307,16 @@ samples_cnt(void)
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_read_next, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Test(ddsc_read_next, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t cnt = 0, cntinv = 0;
dds_return_t ret = 1;
while (ret == 1){
ret = dds_read_next(g_reader, g_samples, g_info);
cr_assert_geq(ret, 0 , "# read %d", ret);
CU_ASSERT_FATAL(ret >= 0 );
if(ret == 1 && g_info[0].valid_data){
Space_Type1 *sample = (Space_Type1*)g_samples[0];
PRINT_SAMPLE("ddsc_read_next::reader: Read", (*sample));
/* Expected states. */
int expected_long_2 = rdr_expected_long_2[cnt];
@ -361,84 +327,86 @@ Test(ddsc_read_next, reader, .init=reader_iterator_init, .fini=reader_iterator_f
dds_instance_state_t expected_ist = SAMPLE_IST(expected_long_1);
/* Check data. */
cr_assert_eq(sample->long_1, expected_long_1);
cr_assert_eq(sample->long_2, expected_long_2);
cr_assert_eq(sample->long_3, expected_long_3);
CU_ASSERT_EQUAL_FATAL(sample->long_1, expected_long_1);
CU_ASSERT_EQUAL_FATAL(sample->long_2, expected_long_2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, expected_long_3);
/* Check states. */
cr_assert_eq(g_info[0].valid_data, true);
cr_assert_eq(g_info[0].sample_state, expected_sst);
cr_assert_eq(g_info[0].view_state, expected_vst);
cr_assert_eq(g_info[0].instance_state, expected_ist);
CU_ASSERT_EQUAL_FATAL(g_info[0].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[0].sample_state, expected_sst);
CU_ASSERT_EQUAL_FATAL(g_info[0].view_state, expected_vst);
CU_ASSERT_EQUAL_FATAL(g_info[0].instance_state, expected_ist);
cnt ++;
} else if (ret == 1 && !g_info[0].valid_data) {
cntinv ++;
}
}
cr_assert_eq(cnt, RDR_NOT_READ_CNT);
cr_assert_eq(cntinv, RDR_INV_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cnt, RDR_NOT_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cntinv, RDR_INV_READ_CNT);
/* All samples should still be available. */
ret = samples_cnt();
cr_assert_eq(ret, MAX_SAMPLES, "# samples %d, expected %d", ret, MAX_SAMPLES);
CU_ASSERT_EQUAL_FATAL(ret, MAX_SAMPLES);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next, invalid_readers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_read_next, invalid_readers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t rdr), ddsc_read_next, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t rdr), ddsc_read_next, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_read_next(rdr, g_samples, g_info);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next, non_readers) = {
DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
CU_TheoryDataPoints(ddsc_read_next, non_readers) = {
CU_DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
};
Theory((dds_entity_t *rdr), ddsc_read_next, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_read_next, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_read_next(*rdr, g_samples, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next, already_deleted) = {
DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
CU_TheoryDataPoints(ddsc_read_next, already_deleted) = {
CU_DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
};
Theory((dds_entity_t *rdr), ddsc_read_next, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_read_next, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_delete(*rdr);
cr_assert_eq(ret, DDS_RETCODE_OK, "prerequisite delete failed: %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_read_next(*rdr, g_samples, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next, invalid_buffers) = {
DataPoints(void**, g_samples, g_loans, (void**)0),
DataPoints(dds_sample_info_t*, g_info, (dds_sample_info_t*)0 ),
CU_TheoryDataPoints(ddsc_read_next, invalid_buffers) = {
CU_DataPoints(void**, g_samples, g_loans, (void**)0),
CU_DataPoints(dds_sample_info_t*, g_info, NULL, NULL),
};
Theory((void **buf, dds_sample_info_t *si), ddsc_read_next, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((void **buf, dds_sample_info_t *si), ddsc_read_next, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
cr_assume((buf != g_samples) || (si != g_info));
cr_assume(buf != g_loans);
if ((buf != g_samples || si != g_info) && (buf != g_loans)) {
ret = dds_read_next(g_reader, buf, si);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
} else {
CU_PASS();
}
}
/*************************************************************************************************/
@ -452,17 +420,16 @@ Theory((void **buf, dds_sample_info_t *si), ddsc_read_next, invalid_buffers, .in
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_read_next_wl, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Test(ddsc_read_next_wl, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t cnt = 0, cntinv = 0;
dds_return_t ret = 1;
while (ret == 1){
ret = dds_read_next_wl(g_reader, g_loans, g_info);
cr_assert_geq(ret, 0 , "# read %d", ret);
CU_ASSERT_FATAL(ret >= 0 );
if(ret == 1 && g_info[0].valid_data){
Space_Type1 *sample = (Space_Type1*)g_loans[0];
PRINT_SAMPLE("ddsc_read_next_wl::reader: Read", (*sample));
/* Expected states. */
int expected_long_2 = rdr_expected_long_2[cnt];
@ -473,86 +440,89 @@ Test(ddsc_read_next_wl, reader, .init=reader_iterator_init, .fini=reader_iterato
dds_instance_state_t expected_ist = SAMPLE_IST(expected_long_1);
/* Check data. */
cr_assert_eq(sample->long_1, expected_long_1);
cr_assert_eq(sample->long_2, expected_long_2);
cr_assert_eq(sample->long_3, expected_long_3);
CU_ASSERT_EQUAL_FATAL(sample->long_1, expected_long_1);
CU_ASSERT_EQUAL_FATAL(sample->long_2, expected_long_2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, expected_long_3);
/* Check states. */
cr_assert_eq(g_info[0].valid_data, true);
cr_assert_eq(g_info[0].sample_state, expected_sst);
cr_assert_eq(g_info[0].view_state, expected_vst);
cr_assert_eq(g_info[0].instance_state, expected_ist);
cnt ++;
CU_ASSERT_EQUAL_FATAL(g_info[0].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[0].sample_state, expected_sst);
CU_ASSERT_EQUAL_FATAL(g_info[0].view_state, expected_vst);
CU_ASSERT_EQUAL_FATAL(g_info[0].instance_state, expected_ist);
cnt++;
} else if (ret == 1 && !g_info[0].valid_data) {
cntinv ++;
cntinv++;
}
}
cr_assert_eq(cnt, RDR_NOT_READ_CNT);
cr_assert_eq(cntinv, RDR_INV_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cnt, RDR_NOT_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cntinv, RDR_INV_READ_CNT);
ret = dds_return_loan(g_reader, g_loans, ret);
cr_assert_eq (ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* All samples should still be available. */
ret = samples_cnt();
cr_assert_eq(ret, MAX_SAMPLES, "# samples %d, expected %d", ret, MAX_SAMPLES);
CU_ASSERT_EQUAL_FATAL(ret, MAX_SAMPLES);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next_wl, invalid_readers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_read_next_wl, invalid_readers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t rdr), ddsc_read_next_wl, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t rdr), ddsc_read_next_wl, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_read_next_wl(rdr, g_loans, g_info);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next_wl, non_readers) = {
DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
CU_TheoryDataPoints(ddsc_read_next_wl, non_readers) = {
CU_DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
};
Theory((dds_entity_t *rdr), ddsc_read_next_wl, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_read_next_wl, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_read_next_wl(*rdr, g_loans, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next_wl, already_deleted) = {
DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
CU_TheoryDataPoints(ddsc_read_next_wl, already_deleted) = {
CU_DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
};
Theory((dds_entity_t *rdr), ddsc_read_next_wl, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_read_next_wl, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_delete(*rdr);
cr_assert_eq(ret, DDS_RETCODE_OK, "prerequisite delete failed: %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_read_next_wl(*rdr, g_loans, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_read_next_wl, invalid_buffers) = {
DataPoints(void**, g_loans, (void**)0),
DataPoints(dds_sample_info_t*, g_info, (dds_sample_info_t*)0 ),
CU_TheoryDataPoints(ddsc_read_next_wl, invalid_buffers) = {
CU_DataPoints(void**, g_loans, (void**)0),
CU_DataPoints(dds_sample_info_t*, g_info, NULL),
};
Theory((void **buf, dds_sample_info_t *si), ddsc_read_next_wl, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((void **buf, dds_sample_info_t *si), ddsc_read_next_wl, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
cr_assume((buf != g_loans) || (si != g_info));
if (buf != g_loans || si != g_info) {
ret = dds_read_next_wl(g_reader, buf, si);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
} else {
CU_PASS();
}
}
/*************************************************************************************************/
@ -566,17 +536,16 @@ Theory((void **buf, dds_sample_info_t *si), ddsc_read_next_wl, invalid_buffers,
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_take_next, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Test(ddsc_take_next, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t cnt = 0, cntinv = 0;
dds_return_t ret = 1;
while (ret == 1){
ret = dds_take_next(g_reader, g_samples, g_info);
cr_assert_geq(ret, 0 , "# read %d", ret);
CU_ASSERT_FATAL(ret >= 0 );
if(ret == 1 && g_info[0].valid_data){
Space_Type1 *sample = (Space_Type1*)g_samples[0];
PRINT_SAMPLE("ddsc_take_next::reader: Read", (*sample));
/* Expected states. */
int expected_long_2 = rdr_expected_long_2[cnt];
@ -587,82 +556,83 @@ Test(ddsc_take_next, reader, .init=reader_iterator_init, .fini=reader_iterator_f
dds_instance_state_t expected_ist = SAMPLE_IST(expected_long_1);
/* Check data. */
cr_assert_eq(sample->long_1, expected_long_1);
cr_assert_eq(sample->long_2, expected_long_2);
cr_assert_eq(sample->long_3, expected_long_3);
CU_ASSERT_EQUAL_FATAL(sample->long_1, expected_long_1);
CU_ASSERT_EQUAL_FATAL(sample->long_2, expected_long_2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, expected_long_3);
/* Check states. */
cr_assert_eq(g_info[0].valid_data, true);
cr_assert_eq(g_info[0].sample_state, expected_sst);
cr_assert_eq(g_info[0].view_state, expected_vst);
cr_assert_eq(g_info[0].instance_state, expected_ist);
cnt ++;
CU_ASSERT_EQUAL_FATAL(g_info[0].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[0].sample_state, expected_sst);
CU_ASSERT_EQUAL_FATAL(g_info[0].view_state, expected_vst);
CU_ASSERT_EQUAL_FATAL(g_info[0].instance_state, expected_ist);
cnt++;
} else if (ret == 1 && !g_info[0].valid_data) {
cntinv ++;
cntinv++;
}
}
cr_assert_eq(cnt, RDR_NOT_READ_CNT);
cr_assert_eq(cntinv, RDR_INV_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cnt, RDR_NOT_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cntinv, RDR_INV_READ_CNT);
/* All samples should still be available. */
ret = samples_cnt();
cr_assert_eq(ret, (MAX_SAMPLES - RDR_NOT_READ_CNT), "# samples %d, expected %d", ret, MAX_SAMPLES);
CU_ASSERT_EQUAL_FATAL(ret, (MAX_SAMPLES - RDR_NOT_READ_CNT));
}
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next, invalid_readers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_take_next, invalid_readers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t rdr), ddsc_take_next, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t rdr), ddsc_take_next, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_take_next(rdr, g_samples, g_info);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next, non_readers) = {
DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
CU_TheoryDataPoints(ddsc_take_next, non_readers) = {
CU_DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
};
Theory((dds_entity_t *rdr), ddsc_take_next, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_take_next, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_take_next(*rdr, g_samples, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next, already_deleted) = {
DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
CU_TheoryDataPoints(ddsc_take_next, already_deleted) = {
CU_DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
};
Theory((dds_entity_t *rdr), ddsc_take_next, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_take_next, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_delete(*rdr);
cr_assert_eq(ret, DDS_RETCODE_OK, "prerequisite delete failed: %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_take_next(*rdr, g_samples, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next, invalid_buffers) = {
DataPoints(void**, g_samples, g_loans, (void**)0),
DataPoints(dds_sample_info_t*, g_info, (dds_sample_info_t*)0 ),
CU_TheoryDataPoints(ddsc_take_next, invalid_buffers) = {
CU_DataPoints(void**, g_samples, g_loans, (void**)0),
CU_DataPoints(dds_sample_info_t*, g_info, NULL, NULL),
};
Theory((void **buf, dds_sample_info_t *si), ddsc_take_next, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((void **buf, dds_sample_info_t *si), ddsc_take_next, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
cr_assume((buf != g_samples) || (si != g_info));
cr_assume(buf != g_loans);
if ((buf != g_samples || si != g_info) && (buf != g_loans)) {
ret = dds_take_next(g_reader, buf, si);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
} else {
CU_PASS();
}
}
/*************************************************************************************************/
@ -676,17 +646,16 @@ Theory((void **buf, dds_sample_info_t *si), ddsc_take_next, invalid_buffers, .in
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_take_next_wl, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Test(ddsc_take_next_wl, reader, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t cnt = 0, cntinv = 0;
dds_return_t ret = 1;
while (ret == 1){
ret = dds_take_next_wl(g_reader, g_loans, g_info);
cr_assert_geq(ret, 0 , "# read %d", ret);
CU_ASSERT_FATAL(ret >= 0);
if(ret == 1 && g_info[0].valid_data){
Space_Type1 *sample = (Space_Type1*)g_loans[0];
PRINT_SAMPLE("ddsc_read_next_wl::reader: Read", (*sample));
/* Expected states. */
int expected_long_2 = rdr_expected_long_2[cnt];
@ -697,83 +666,85 @@ Test(ddsc_take_next_wl, reader, .init=reader_iterator_init, .fini=reader_iterato
dds_instance_state_t expected_ist = SAMPLE_IST(expected_long_1);
/* Check data. */
cr_assert_eq(sample->long_1, expected_long_1);
cr_assert_eq(sample->long_2, expected_long_2);
cr_assert_eq(sample->long_3, expected_long_3);
CU_ASSERT_EQUAL_FATAL(sample->long_1, expected_long_1);
CU_ASSERT_EQUAL_FATAL(sample->long_2, expected_long_2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, expected_long_3);
/* Check states. */
cr_assert_eq(g_info[0].valid_data, true);
cr_assert_eq(g_info[0].sample_state, expected_sst);
cr_assert_eq(g_info[0].view_state, expected_vst);
cr_assert_eq(g_info[0].instance_state, expected_ist);
cnt ++;
CU_ASSERT_EQUAL_FATAL(g_info[0].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[0].sample_state, expected_sst);
CU_ASSERT_EQUAL_FATAL(g_info[0].view_state, expected_vst);
CU_ASSERT_EQUAL_FATAL(g_info[0].instance_state, expected_ist);
cnt++;
} else if (ret == 1 && !g_info[0].valid_data) {
cntinv ++;
cntinv++;
}
}
cr_assert_eq(cnt, RDR_NOT_READ_CNT);
cr_assert_eq(cntinv, RDR_INV_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cnt, RDR_NOT_READ_CNT);
CU_ASSERT_EQUAL_FATAL(cntinv, RDR_INV_READ_CNT);
ret = dds_return_loan(g_reader, g_loans, ret);
cr_assert_eq (ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* All samples should still be available. */
ret = samples_cnt();
cr_assert_eq(ret, (MAX_SAMPLES - RDR_NOT_READ_CNT), "# samples %d, expected %d", ret, MAX_SAMPLES);
CU_ASSERT_EQUAL_FATAL(ret, (MAX_SAMPLES - RDR_NOT_READ_CNT));
}
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next_wl, invalid_readers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_take_next_wl, invalid_readers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t rdr), ddsc_take_next_wl, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t rdr), ddsc_take_next_wl, invalid_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_take_next_wl(rdr, g_loans, g_info);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next_wl, non_readers) = {
DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
CU_TheoryDataPoints(ddsc_take_next_wl, non_readers) = {
CU_DataPoints(dds_entity_t*, &g_participant, &g_topic, &g_writer, &g_subscriber, &g_publisher, &g_waitset, &g_rcond, &g_qcond),
};
Theory((dds_entity_t *rdr), ddsc_take_next_wl, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_take_next_wl, non_readers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_take_next_wl(*rdr, g_loans, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next_wl, already_deleted) = {
DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
CU_TheoryDataPoints(ddsc_take_next_wl, already_deleted) = {
CU_DataPoints(dds_entity_t*, &g_rcond, &g_qcond, &g_reader),
};
Theory((dds_entity_t *rdr), ddsc_take_next_wl, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((dds_entity_t *rdr), ddsc_take_next_wl, already_deleted, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
ret = dds_delete(*rdr);
cr_assert_eq(ret, DDS_RETCODE_OK, "prerequisite delete failed: %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_take_next_wl(*rdr, g_loans, g_info);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_take_next_wl, invalid_buffers) = {
DataPoints(void**, g_loans, (void**)0),
DataPoints(dds_sample_info_t*, g_info, (dds_sample_info_t*)0 ),
CU_TheoryDataPoints(ddsc_take_next_wl, invalid_buffers) = {
CU_DataPoints(void**, g_loans, (void**)0),
CU_DataPoints(dds_sample_info_t*, g_info, NULL),
};
Theory((void **buf, dds_sample_info_t *si), ddsc_take_next_wl, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
CU_Theory((void **buf, dds_sample_info_t *si), ddsc_take_next_wl, invalid_buffers, .init=reader_iterator_init, .fini=reader_iterator_fini)
{
dds_return_t ret;
cr_assume((buf != g_loans) || (si != g_info));
if (buf != g_loans || si != g_info) {
ret = dds_take_next_wl(g_reader, buf, si);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
} else {
CU_PASS();
}
}
/*************************************************************************************************/

View file

@ -13,9 +13,8 @@
#include "ddsc/dds.h"
#include "os/os.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include <criterion/theories.h>
#include "CUnit/Test.h"
#include "CUnit/Theory.h"
#include "Space.h"
@ -63,46 +62,46 @@ registering_init(void)
dds_qset_destination_order(qos, DDS_DESTINATIONORDER_BY_SOURCE_TIMESTAMP);
g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(g_participant, 0, "Failed to create prerequisite g_participant");
CU_ASSERT_FATAL(g_participant > 0);
g_waitset = dds_create_waitset(g_participant);
cr_assert_gt(g_waitset, 0, "Failed to create g_waitset");
CU_ASSERT_FATAL(g_waitset > 0);
g_topic = dds_create_topic(g_participant, &Space_Type1_desc, create_topic_name("ddsc_registering_test", name, sizeof name), qos, NULL);
cr_assert_gt(g_topic, 0, "Failed to create prerequisite g_topic");
CU_ASSERT_FATAL(g_topic > 0);
/* Create a reader that keeps one sample on three instances. */
dds_qset_reliability(qos, DDS_RELIABILITY_RELIABLE, DDS_MSECS(100));
dds_qset_resource_limits(qos, DDS_LENGTH_UNLIMITED, 3, 1);
g_reader = dds_create_reader(g_participant, g_topic, qos, NULL);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite g_reader");
CU_ASSERT_FATAL(g_reader > 0);
/* Create a writer that will not automatically dispose unregistered samples. */
dds_qset_writer_data_lifecycle(qos, false);
g_writer = dds_create_writer(g_participant, g_topic, qos, NULL);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite g_writer");
CU_ASSERT_FATAL(g_writer > 0);
/* Sync g_writer to g_reader. */
ret = dds_set_enabled_status(g_writer, DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_writer status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_writer, g_writer);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_writer");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Failed prerequisite dds_waitset_wait g_writer r");
cr_assert_eq(g_writer, (dds_entity_t)(intptr_t)triggered, "Failed prerequisite dds_waitset_wait g_writer a");
CU_ASSERT_EQUAL_FATAL(ret, 1);
CU_ASSERT_EQUAL_FATAL(g_writer, (dds_entity_t)(intptr_t)triggered);
ret = dds_waitset_detach(g_waitset, g_writer);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to detach prerequisite g_writer");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Sync g_reader to g_writer. */
ret = dds_set_enabled_status(g_reader, DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_reader status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_reader, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Failed prerequisite dds_waitset_wait g_reader r");
cr_assert_eq(g_reader, (dds_entity_t)(intptr_t)triggered, "Failed prerequisite dds_waitset_wait g_reader a");
CU_ASSERT_EQUAL_FATAL(ret, 1);
CU_ASSERT_EQUAL_FATAL(g_reader, (dds_entity_t)(intptr_t)triggered);
ret = dds_waitset_detach(g_waitset, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to detach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write initial samples. */
for (int i = 0; i < INITIAL_SAMPLES; i++) {
@ -110,7 +109,7 @@ registering_init(void)
sample.long_2 = i*2;
sample.long_3 = i*3;
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/* Initialize reading buffers. */
@ -137,89 +136,86 @@ registering_fini(void)
}
#if 0
#else
/**************************************************************************************************
*
* These will check the dds_register_instance() in various ways.
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_register_instance, deleted_entity, .init=registering_init, .fini=registering_fini)
CU_Test(ddsc_register_instance, deleted_entity, .init=registering_init, .fini=registering_fini)
{
dds_return_t ret;
dds_instance_handle_t handle;
dds_delete(g_writer);
ret = dds_register_instance(g_writer, &handle, g_data);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
static dds_instance_handle_t hndle = 0;
static Space_Type1 data;
TheoryDataPoints(ddsc_register_instance, invalid_params) = {
DataPoints(dds_instance_handle_t *, &hndle, NULL),
DataPoints(void*, &data, NULL)
CU_TheoryDataPoints(ddsc_register_instance, invalid_params) = {
CU_DataPoints(dds_instance_handle_t *, &hndle, NULL),
CU_DataPoints(void*, NULL, &data)
};
Theory((dds_instance_handle_t *hndl2, void *datap), ddsc_register_instance, invalid_params/*, .init=registering_init, .fini=registering_fini*/)
CU_Theory((dds_instance_handle_t *hndl2, void *datap), ddsc_register_instance, invalid_params, .init=registering_init, .fini=registering_fini)
{
dds_return_t ret;
/* Only test when the combination of parameters is actually invalid.*/
cr_assume((hndl2 == NULL) || (datap == NULL));
CU_ASSERT_FATAL((hndl2 == NULL) || (datap == NULL));
OS_WARNING_MSVC_OFF(6387); /* Disable SAL warning on intentional misuse of the API */
ret = dds_register_instance(g_writer, hndl2, datap);
OS_WARNING_MSVC_ON(6387);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d != expected %d", dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
TheoryDataPoints(ddsc_register_instance, invalid_writers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_register_instance, invalid_writers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t writer), ddsc_register_instance, invalid_writers, .init=registering_init, .fini=registering_fini)
CU_Theory((dds_entity_t writer), ddsc_register_instance, invalid_writers, .init=registering_init, .fini=registering_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
dds_instance_handle_t handle;
ret = dds_register_instance(writer, &handle, g_data);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
TheoryDataPoints(ddsc_register_instance, non_writers) = {
DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
CU_TheoryDataPoints(ddsc_register_instance, non_writers) = {
CU_DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
};
Theory((dds_entity_t *writer), ddsc_register_instance, non_writers, .init=registering_init, .fini=registering_fini)
CU_Theory((dds_entity_t *writer), ddsc_register_instance, non_writers, .init=registering_init, .fini=registering_fini)
{
dds_return_t ret;
dds_instance_handle_t handle;
ret = dds_register_instance(*writer, &handle, g_data);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
Test(ddsc_register_instance, registering_new_instance, .init=registering_init, .fini=registering_fini)
CU_Test(ddsc_register_instance, registering_new_instance, .init=registering_init, .fini=registering_fini)
{
dds_instance_handle_t instHndl, instHndl2;
dds_return_t ret;
Space_Type1 newInstance = { INITIAL_SAMPLES, 0, 0 };
instHndl = dds_instance_lookup(g_writer, &newInstance);
cr_assert_eq(instHndl, DDS_HANDLE_NIL);
CU_ASSERT_EQUAL_FATAL(instHndl, DDS_HANDLE_NIL);
ret = dds_register_instance(g_writer, &instHndl2, &newInstance);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
instHndl = dds_instance_lookup(g_writer, &newInstance);
cr_assert_eq(instHndl, instHndl2);
CU_ASSERT_EQUAL_FATAL(instHndl, instHndl2);
}
Test(ddsc_register_instance, data_already_available, .init=registering_init, .fini=registering_fini)
CU_Test(ddsc_register_instance, data_already_available, .init=registering_init, .fini=registering_fini)
{
dds_instance_handle_t instHndl, instHndl2;
dds_return_t ret;
instHndl = dds_instance_lookup(g_writer, &g_data);
cr_assert_neq(instHndl, DDS_HANDLE_NIL);
CU_ASSERT_NOT_EQUAL_FATAL(instHndl, DDS_HANDLE_NIL);
ret = dds_register_instance(g_writer, &instHndl2, &g_data);
cr_assert_eq(ret, DDS_RETCODE_OK);
cr_assert_eq(instHndl2, instHndl);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(instHndl2, instHndl);
}
#endif

View file

@ -14,31 +14,30 @@
#include "os/os.h"
#include <stdio.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
dds_entity_t participant = 0, topic = 0, reader = 0, read_condition = 0;
void create_entities(void)
{
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
CU_ASSERT_FATAL(participant > 0);
topic = dds_create_topic(participant, &RoundTripModule_DataType_desc, "ddsc_reader_return_loan_RoundTrip", NULL, NULL);
cr_assert_gt(topic, 0);
CU_ASSERT_FATAL(topic > 0);
reader = dds_create_reader(participant, topic, NULL, NULL);
cr_assert_gt(reader, 0);
CU_ASSERT_FATAL(reader > 0);
read_condition = dds_create_readcondition(reader, DDS_ANY_STATE);
cr_assert_gt(read_condition, 0);
CU_ASSERT_FATAL(read_condition > 0);
}
void delete_entities(void)
{
dds_return_t result;
result = dds_delete(participant);
cr_assert_eq(dds_err_nr(result), DDS_RETCODE_OK, "Recursively delete entities, Expected(%s) Returned(%s)", DDS_TO_STRING(DDS_RETCODE_OK), dds_err_str(result));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(result), DDS_RETCODE_OK);
dds_delete(read_condition);
}
@ -69,7 +68,7 @@ static void delete_loan_buf(void **buf, size_t sz, bool empty)
for (i = 0; i < sz; i++) {
RoundTripModule_DataType *s = buf[i];
if (!empty) {
cr_expect_gt(s->payload._length, 0, "Expected allocated 'payload'-sequence in sample-contents of loan");
CU_ASSERT(s->payload._length > 0);
if (s->payload._length > 0) {
/* Freed by a successful dds_return_loan */
dds_free(s->payload._buffer);
@ -82,15 +81,13 @@ static void delete_loan_buf(void **buf, size_t sz, bool empty)
}
/* Verify DDS_RETCODE_BAD_PARAMETER is returned */
Test(ddsc_reader, return_loan_bad_params, .init = create_entities, .fini = delete_entities)
CU_Test(ddsc_reader, return_loan_bad_params, .init = create_entities, .fini = delete_entities)
{
dds_return_t result;
void **buf = NULL;
result = dds_return_loan(reader, NULL, 0);
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "Invalid buffer(null), Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_BAD_PARAMETER),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER);
#ifdef _MSC_VER
#pragma warning(push)
@ -100,9 +97,7 @@ Test(ddsc_reader, return_loan_bad_params, .init = create_entities, .fini = delet
#ifdef _MSC_VER
#pragma warning(pop)
#endif
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "Invalid buffer size, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_BAD_PARAMETER),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER);
buf = create_loan_buf(10, false);
#ifdef _MSC_VER
@ -113,20 +108,16 @@ Test(ddsc_reader, return_loan_bad_params, .init = create_entities, .fini = delet
#ifdef _MSC_VER
#pragma warning(pop)
#endif
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "Invalid entity, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_BAD_PARAMETER),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER);
result = dds_return_loan(participant, buf, 0);
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_ILLEGAL_OPERATION, "Invalid entity-kind, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_ILLEGAL_OPERATION),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_ILLEGAL_OPERATION);
delete_loan_buf(buf, 10, false);
}
/* Verify DDS_RETCODE_OK is returned */
Test(ddsc_reader, return_loan_success, .init = create_entities, .fini = delete_entities)
CU_Test(ddsc_reader, return_loan_success, .init = create_entities, .fini = delete_entities)
{
void **buf;
void *buf2 = NULL;
@ -134,25 +125,17 @@ Test(ddsc_reader, return_loan_success, .init = create_entities, .fini = delete_e
buf = create_loan_buf(10, false);
result = dds_return_loan(reader, buf, 10);
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_OK, "Return loan of size 10 via reader entity, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_OK),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_OK);
result = dds_return_loan(reader, &buf2, 0);
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_OK, "Return empty loan via reader entity, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_OK),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_OK);
delete_loan_buf(buf, 10, true);
buf = create_loan_buf(10, false);
result = dds_return_loan(read_condition, buf, 10);
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_OK, "Return loan of size 10 via read-condition entity, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_OK),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_OK);
result = dds_return_loan(read_condition, &buf2, 0);
cr_expect_eq(dds_err_nr(result), DDS_RETCODE_OK, "Return empty loan via read-condition entity, Expected(%s) Returned(%s)",
DDS_TO_STRING(DDS_RETCODE_OK),
dds_err_str(result));
CU_ASSERT_EQUAL(dds_err_nr(result), DDS_RETCODE_OK);
delete_loan_buf(buf, 10, true);
}

View file

@ -12,8 +12,7 @@
#include "ddsc/dds.h"
#include <stdio.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
/* We are deliberately testing some bad arguments that SAL will complain about.
* So, silence SAL regarding these issues. */
@ -35,27 +34,27 @@ static void on_publication_matched(dds_entity_t writer, const dds_publication_ma
(void)arg;
}
Test(ddsc_subscriber, notify_readers) {
CU_Test(ddsc_subscriber, notify_readers) {
dds_entity_t participant;
dds_entity_t subscriber;
dds_return_t ret;
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "Failed to create prerequisite participant");
CU_ASSERT_FATAL(participant > 0);
subscriber = dds_create_subscriber(participant, NULL, NULL);
cr_assert_gt(subscriber, 0, "Failed to create prerequisite subscriber");
CU_ASSERT_FATAL(subscriber > 0);
/* todo implement tests */
ret = dds_notify_readers(subscriber);
cr_expect_eq(dds_err_nr(ret), DDS_RETCODE_UNSUPPORTED, "Invalid return code %d", ret);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_UNSUPPORTED);
dds_delete(subscriber);
dds_delete(participant);
}
Test(ddsc_subscriber, create) {
CU_Test(ddsc_subscriber, create) {
dds_entity_t participant;
dds_entity_t subscriber;
@ -63,57 +62,57 @@ Test(ddsc_subscriber, create) {
dds_qos_t *sqos;
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0, "Failed to create prerequisite participant");
CU_ASSERT_FATAL(participant > 0);
/*** Verify participant parameter ***/
subscriber = dds_create_subscriber(0, NULL, NULL);
cr_assert_eq(dds_err_nr(subscriber), DDS_RETCODE_BAD_PARAMETER, "dds_create_subscriber: invalid participant parameter");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(subscriber), DDS_RETCODE_BAD_PARAMETER);
subscriber = dds_create_subscriber(participant, NULL, NULL);
cr_assert_gt(subscriber, 0, "dds_create_subscriber: valid participant parameter");
CU_ASSERT_FATAL(subscriber > 0);
dds_delete(subscriber);
/*** Verify qos parameter ***/
sqos = dds_create_qos(); /* Use defaults (no user-defined policies) */
subscriber = dds_create_subscriber(participant, sqos, NULL);
cr_assert_gt(subscriber, 0, "dds_create_subscriber: default QoS parameter");
CU_ASSERT_FATAL(subscriber > 0);
dds_delete(subscriber);
dds_delete_qos(sqos);
sqos = dds_create_qos();
dds_qset_destination_order(sqos, 3); /* Set invalid dest. order (ignored, not applicable for subscriber) */
subscriber = dds_create_subscriber(participant, sqos, NULL);
cr_assert_gt(subscriber, 0, "dds_create_subscriber: invalid non-applicable QoS parameter");
CU_ASSERT_FATAL(subscriber > 0);
dds_delete(subscriber);
dds_delete_qos(sqos);
sqos = dds_create_qos();
dds_qset_presentation(sqos, 123, 1, 1); /* Set invalid presentation policy */
subscriber = dds_create_subscriber(participant, sqos, NULL);
cr_assert_eq(dds_err_nr(subscriber), DDS_RETCODE_INCONSISTENT_POLICY, "dds_create_subscriber: invalid presentation access_scope QoS parameter");
CU_ASSERT_EQUAL_FATAL(dds_err_nr(subscriber), DDS_RETCODE_INCONSISTENT_POLICY);
dds_delete_qos(sqos);
/*** Verify listener parameter ***/
listener = dds_create_listener(NULL); /* Use defaults (all listeners unset) */
subscriber = dds_create_subscriber(participant, NULL, listener);
cr_assert_gt(subscriber, 0, "dds_create_subscriber: unset listeners");
CU_ASSERT_FATAL(subscriber > 0);
dds_delete(subscriber);
dds_delete_listener(listener);
listener = dds_create_listener(NULL);
dds_lset_data_available(listener, &on_data_available); /* Set on_data_available listener */
subscriber = dds_create_subscriber(participant, NULL, listener);
cr_assert_gt(subscriber, 0, "dds_create_subscriber: on_data_available listener");
CU_ASSERT_FATAL(subscriber > 0);
dds_delete(subscriber);
dds_delete_listener(listener);
listener = dds_create_listener(NULL);
dds_lset_publication_matched(listener, &on_publication_matched); /* Set on_publication_matched listener (ignored, not applicable for subscriber) */
subscriber = dds_create_subscriber(participant, NULL, listener);
cr_assert_gt(subscriber, 0, "dds_create_subscriber: on_publication_matched listener");
CU_ASSERT_FATAL(subscriber > 0);
dds_delete(subscriber);
dds_delete_listener(listener);

File diff suppressed because it is too large Load diff

View file

@ -1,17 +1,26 @@
#include <criterion/criterion.h>
#include <criterion/logging.h>
/*
* Copyright(c) 2006 to 2018 ADLINK Technology Limited and others
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0, or the Eclipse Distribution License
* v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include "CUnit/Test.h"
#include "ddsc/dds.h"
Test(ddsc_time, request_time)
CU_Test(ddsc_time, request_time)
{
dds_time_t now, then;
dds_duration_t pause = 1 * DDS_NSECS_IN_SEC;
now = dds_time();
cr_assert_gt(now, 0);
CU_ASSERT_FATAL(now > 0);
/* Sleep for 1 second, every platform should (hopefully) support that */
dds_sleepfor(pause);
then = dds_time();
cr_assert_geq(then, now + pause);
CU_ASSERT_FATAL(then >= (now + pause));
}

View file

@ -12,9 +12,8 @@
#include "ddsc/dds.h"
#include "os/os.h"
#include "RoundTrip.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include <criterion/theories.h>
#include "CUnit/Test.h"
#include "CUnit/Theory.h"
/**************************************************************************************************
*
@ -52,13 +51,13 @@ ddsc_topic_init(void)
create_topic_name("ddsc_topic_test_rtm_datatype", g_topicRtmDataTypeName, MAX_NAME_SIZE);
g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(g_participant, 0, "Failed to create prerequisite g_participant");
CU_ASSERT_FATAL(g_participant > 0);
g_topicRtmAddress = dds_create_topic(g_participant, &RoundTripModule_Address_desc, g_topicRtmAddressName, NULL, NULL);
cr_assert_gt(g_topicRtmAddress, 0, "Failed to create prerequisite g_topicRtmAddress");
CU_ASSERT_FATAL(g_topicRtmAddress > 0);
g_topicRtmDataType = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, g_topicRtmDataTypeName, NULL, NULL);
cr_assert_gt(g_topicRtmDataType, 0, "Failed to create prerequisite g_topicRtmDataType");
CU_ASSERT_FATAL(g_topicRtmDataType > 0);
g_qos = dds_create_qos();
g_listener = dds_create_listener(NULL);
@ -82,24 +81,24 @@ ddsc_topic_fini(void)
*
*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_topic_create, valid) = {
DataPoints(char *, "valid", "_VALID", "Val1d", "valid_", "vA_1d"),
DataPoints(dds_qos_t**, &g_qos_null, &g_qos ),
DataPoints(dds_listener_t**, &g_list_null, &g_listener ),
CU_TheoryDataPoints(ddsc_topic_create, valid) = {
CU_DataPoints(char *, "valid", "_VALID", "Val1d", "valid_", "vA_1d"),
CU_DataPoints(dds_qos_t**, &g_qos_null, &g_qos, &g_qos_null, &g_qos_null, &g_qos_null),
CU_DataPoints(dds_listener_t**, &g_list_null, &g_listener, &g_list_null, &g_list_null, &g_list_null),
};
Theory((char *name, dds_qos_t **qos, dds_listener_t **listener), ddsc_topic_create, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Theory((char *name, dds_qos_t **qos, dds_listener_t **listener), ddsc_topic_create, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
dds_return_t ret;
topic = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, name, *qos, *listener);
cr_assert_gt(topic, 0, "Failed dds_create_topic(par, desc, %s, %p, %p): %s", name, *qos, *listener, dds_err_str(topic));
CU_ASSERT_FATAL(topic > 0);
ret = dds_delete(topic);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_create, invalid_qos, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_create, invalid_qos, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
dds_qos_t *qos = dds_create_qos();
@ -107,82 +106,82 @@ Test(ddsc_topic_create, invalid_qos, .init=ddsc_topic_init, .fini=ddsc_topic_fin
dds_qset_lifespan(qos, DDS_SECS(-1));
OS_WARNING_MSVC_OFF(28020);
topic = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, "inconsistent", qos, NULL);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_INCONSISTENT_POLICY, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_INCONSISTENT_POLICY);
dds_delete_qos(qos);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_create, non_participants, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_create, non_participants, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
topic = dds_create_topic(g_topicRtmDataType, &RoundTripModule_DataType_desc, "non_participant", NULL, NULL);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_ILLEGAL_OPERATION, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_create, duplicate, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_create, duplicate, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
dds_return_t ret;
/* Creating the same topic should succeed. */
topic = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, g_topicRtmDataTypeName, NULL, NULL);
cr_assert_gt(topic, 0, "returned %s", dds_err_str(topic));
CU_ASSERT_FATAL(topic > 0);
ret = dds_delete(topic);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_create, same_name, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_create, same_name, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
/* Creating the different topic with same name should fail. */
topic = dds_create_topic(g_participant, &RoundTripModule_Address_desc, g_topicRtmDataTypeName, NULL, NULL);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_PRECONDITION_NOT_MET, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_PRECONDITION_NOT_MET);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_create, recreate, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_create, recreate, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
dds_return_t ret;
/* Re-creating previously created topic should succeed. */
ret = dds_delete(g_topicRtmDataType);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
topic = dds_create_topic (g_participant, &RoundTripModule_DataType_desc, g_topicRtmDataTypeName, NULL, NULL);
cr_assert_gt(topic, 0, "returned %s", dds_err_str(topic));
CU_ASSERT_FATAL(topic > 0);
ret = dds_delete(topic);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_create, desc_null, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_create, desc_null, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
OS_WARNING_MSVC_OFF(6387); /* Disable SAL warning on intentional misuse of the API */
topic = dds_create_topic (g_participant, NULL, "desc_null", NULL, NULL);
OS_WARNING_MSVC_ON(6387);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_BAD_PARAMETER, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_topic_create, invalid_names) = {
DataPoints(char *, NULL, "", "mi-dle", "-start", "end-", "1st", "Thus$", "pl+s", "t(4)"),
CU_TheoryDataPoints(ddsc_topic_create, invalid_names) = {
CU_DataPoints(char *, NULL, "", "mi-dle", "-start", "end-", "1st", "Thus$", "pl+s", "t(4)"),
};
Theory((char *name), ddsc_topic_create, invalid_names, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Theory((char *name), ddsc_topic_create, invalid_names, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
topic = dds_create_topic(g_participant, &RoundTripModule_DataType_desc, name, NULL, NULL);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_BAD_PARAMETER, "dds_create_topic(%s) returned %s", name, dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
@ -194,55 +193,55 @@ Theory((char *name), ddsc_topic_create, invalid_names, .init=ddsc_topic_init, .f
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_find, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_find, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
dds_return_t ret;
topic = dds_find_topic(g_participant, g_topicRtmDataTypeName);
cr_assert_eq(topic, g_topicRtmDataType, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(topic, g_topicRtmDataType);
ret = dds_delete(topic);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_find, non_participants, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_find, non_participants, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
topic = dds_find_topic(g_topicRtmDataType, "non_participant");
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_ILLEGAL_OPERATION, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_find, null, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_find, null, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
OS_WARNING_MSVC_OFF(6387); /* Disable SAL warning on intentional misuse of the API */
topic = dds_find_topic(g_participant, NULL);
OS_WARNING_MSVC_ON(6387);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_BAD_PARAMETER, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_find, unknown, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_find, unknown, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
topic = dds_find_topic(g_participant, "unknown");
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_PRECONDITION_NOT_MET, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_PRECONDITION_NOT_MET);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_find, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_find, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_entity_t topic;
dds_delete(g_topicRtmDataType);
topic = dds_find_topic(g_participant, g_topicRtmDataTypeName);
cr_assert_eq(dds_err_nr(topic), DDS_RETCODE_PRECONDITION_NOT_MET, "returned %s", dds_err_str(topic));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(topic), DDS_RETCODE_PRECONDITION_NOT_MET);
}
/*************************************************************************************************/
@ -254,66 +253,66 @@ Test(ddsc_topic_find, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_name, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_name, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
char name[MAX_NAME_SIZE];
dds_return_t ret;
ret = dds_get_name(g_topicRtmDataType, name, MAX_NAME_SIZE);
cr_assert_eq(ret, DDS_RETCODE_OK);
cr_assert_str_eq(name, g_topicRtmDataTypeName);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_STRING_EQUAL_FATAL(name, g_topicRtmDataTypeName);
ret = dds_get_name(g_topicRtmAddress, name, MAX_NAME_SIZE);
cr_assert_eq(ret, DDS_RETCODE_OK);
cr_assert_str_eq(name, g_topicRtmAddressName);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_STRING_EQUAL_FATAL(name, g_topicRtmAddressName);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_name, too_small, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_name, too_small, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
char name[10];
dds_return_t ret;
ret = dds_get_name(g_topicRtmDataType, name, 10);
cr_assert_eq(ret, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
g_topicRtmDataTypeName[9] = '\0';
cr_assert_str_eq(name, g_topicRtmDataTypeName);
CU_ASSERT_STRING_EQUAL_FATAL(name, g_topicRtmDataTypeName);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_name, non_topic, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_name, non_topic, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
char name[MAX_NAME_SIZE];
dds_return_t ret;
ret = dds_get_name(g_participant, name, MAX_NAME_SIZE);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_topic_get_name, invalid_params) = {
DataPoints(char*, (char*)0, g_nameBuffer),
DataPoints(size_t, 0, MAX_NAME_SIZE),
CU_TheoryDataPoints(ddsc_topic_get_name, invalid_params) = {
CU_DataPoints(char*, g_nameBuffer, NULL),
CU_DataPoints(size_t, 0, MAX_NAME_SIZE),
};
Theory((char *name, size_t size), ddsc_topic_get_name, invalid_params, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Theory((char *name, size_t size), ddsc_topic_get_name, invalid_params, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_return_t ret;
cr_assume((name != g_nameBuffer) || (size != MAX_NAME_SIZE));
CU_ASSERT_FATAL((name != g_nameBuffer) || (size != MAX_NAME_SIZE));
ret = dds_get_name(g_topicRtmDataType, name, size);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_name, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_name, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
char name[MAX_NAME_SIZE];
dds_return_t ret;
dds_delete(g_topicRtmDataType);
ret = dds_get_name(g_topicRtmDataType, name, MAX_NAME_SIZE);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
@ -325,7 +324,7 @@ Test(ddsc_topic_get_name, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_type_name, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_type_name, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
const char *rtmDataTypeType = "RoundTripModule::DataType";
const char *rtmAddressType = "RoundTripModule::Address";
@ -333,60 +332,60 @@ Test(ddsc_topic_get_type_name, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fi
dds_return_t ret;
ret = dds_get_type_name(g_topicRtmDataType, name, MAX_NAME_SIZE);
cr_assert_eq(ret, DDS_RETCODE_OK);
cr_assert_str_eq(name, rtmDataTypeType);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_STRING_EQUAL_FATAL(name, rtmDataTypeType);
ret = dds_get_type_name(g_topicRtmAddress, name, MAX_NAME_SIZE);
cr_assert_eq(ret, DDS_RETCODE_OK);
cr_assert_str_eq(name, rtmAddressType);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_STRING_EQUAL_FATAL(name, rtmAddressType);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_type_name, too_small, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_type_name, too_small, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
const char *rtmDataTypeType = "RoundTrip";
char name[10];
dds_return_t ret;
ret = dds_get_type_name(g_topicRtmDataType, name, 10);
cr_assert_eq(ret, DDS_RETCODE_OK);
cr_assert_str_eq(name, rtmDataTypeType);
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
CU_ASSERT_STRING_EQUAL_FATAL(name, rtmDataTypeType);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_type_name, non_topic, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_type_name, non_topic, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
char name[MAX_NAME_SIZE];
dds_return_t ret;
ret = dds_get_type_name(g_participant, name, MAX_NAME_SIZE);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_topic_get_type_name, invalid_params) = {
DataPoints(char*, (char*)0, g_nameBuffer),
DataPoints(size_t, 0, MAX_NAME_SIZE),
CU_TheoryDataPoints(ddsc_topic_get_type_name, invalid_params) = {
CU_DataPoints(char*, g_nameBuffer, NULL),
CU_DataPoints(size_t, 0, MAX_NAME_SIZE),
};
Theory((char *name, size_t size), ddsc_topic_get_type_name, invalid_params, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Theory((char *name, size_t size), ddsc_topic_get_type_name, invalid_params, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_return_t ret;
cr_assume((name != g_nameBuffer) || (size != MAX_NAME_SIZE));
CU_ASSERT_FATAL((name != g_nameBuffer) || (size != MAX_NAME_SIZE));
ret = dds_get_type_name(g_topicRtmDataType, name, size);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_get_type_name, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_get_type_name, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
char name[MAX_NAME_SIZE];
dds_return_t ret;
dds_delete(g_topicRtmDataType);
ret = dds_get_type_name(g_topicRtmDataType, name, MAX_NAME_SIZE);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
@ -398,34 +397,34 @@ Test(ddsc_topic_get_type_name, deleted, .init=ddsc_topic_init, .fini=ddsc_topic_
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_set_qos, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_set_qos, valid, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_return_t ret;
/* Latency is the only one allowed to change. */
dds_qset_latency_budget(g_qos, DDS_SECS(1));
ret = dds_set_qos(g_topicRtmDataType, g_qos);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_UNSUPPORTED, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_UNSUPPORTED);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_set_qos, inconsistent, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_set_qos, inconsistent, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_return_t ret;
OS_WARNING_MSVC_OFF(28020); /* Disable SAL warning on intentional misuse of the API */
dds_qset_lifespan(g_qos, DDS_SECS(-1));
OS_WARNING_MSVC_ON(28020);
ret = dds_set_qos(g_topicRtmDataType, g_qos);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_INCONSISTENT_POLICY, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_INCONSISTENT_POLICY);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_topic_set_qos, immutable, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
CU_Test(ddsc_topic_set_qos, immutable, .init=ddsc_topic_init, .fini=ddsc_topic_fini)
{
dds_return_t ret;
dds_qset_destination_order(g_qos, DDS_DESTINATIONORDER_BY_SOURCE_TIMESTAMP); /* Immutable */
ret = dds_set_qos(g_topicRtmDataType, g_qos);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_IMMUTABLE_POLICY, "returned %s", dds_err_str(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_IMMUTABLE_POLICY);
}
/*************************************************************************************************/

View file

@ -12,12 +12,10 @@
#include <stdio.h>
#include "ddsc/dds.h"
#include "Space.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#define TRACE_SAMPLE(info, sample) cr_log_info("%s (%d, %d, %d)\n", info, sample.long_1, sample.long_2, sample.long_3);
#define MAX_SAMPLES (7)
Test(ddsc_transient_local, late_joiner)
CU_Test(ddsc_transient_local, late_joiner)
{
Space_Type1 sample = { 0, 0, 0 };
dds_return_t ret;
@ -45,60 +43,54 @@ Test(ddsc_transient_local, late_joiner)
/* Create participant and topic. */
par = dds_create_participant(DDS_DOMAIN_DEFAULT, qos, NULL);
cr_assert_gt(par, 0, "Failed to create prerequisite par");
CU_ASSERT_FATAL(par > 0);
top = dds_create_topic(par, &Space_Type1_desc, "ddsc_transient_local_happy_days", qos, NULL);
cr_assert_gt(par, 0, "Failed to create prerequisite top");
CU_ASSERT_FATAL(par > 0);
/* Create publishing entities. */
cr_log_info("Create writer\n");
pub = dds_create_publisher(par, qos, NULL);
cr_assert_gt(pub, 0, "Failed to create prerequisite pub");
CU_ASSERT_FATAL(pub > 0);
wrt = dds_create_writer(pub, top, qos, NULL);
cr_assert_gt(wrt, 0, "Failed to create prerequisite wrt");
CU_ASSERT_FATAL(wrt > 0);
/* Write first set of samples. */
sample.long_1 = 1;
sample.long_2 = 1;
sample.long_3 = 1;
TRACE_SAMPLE("Write ", sample);
ret = dds_write(wrt, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
sample.long_1 = 2;
sample.long_2 = 2;
sample.long_3 = 2;
TRACE_SAMPLE("Write ", sample);
ret = dds_write(wrt, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Create subscribing entities. */
cr_log_info("Create reader\n");
sub = dds_create_subscriber(par, qos, NULL);
cr_assert_gt(sub, 0, "Failed to create prerequisite sub");
CU_ASSERT_FATAL(sub > 0);
rdr = dds_create_reader(sub, top, qos, NULL);
cr_assert_gt(rdr, 0, "Failed to create prerequisite g_reader");
CU_ASSERT_FATAL(rdr > 0);
/* Write second set of samples. */
sample.long_1 = 8;
sample.long_2 = 8;
sample.long_3 = 8;
TRACE_SAMPLE("Write ", sample);
ret = dds_write(wrt, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
sample.long_1 = 9;
sample.long_2 = 9;
sample.long_3 = 9;
TRACE_SAMPLE("Write ", sample);
ret = dds_write(wrt, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read samples, which should be all four. */
ret = dds_read(rdr, samples, info, MAX_SAMPLES, MAX_SAMPLES);
cr_log_info("Read cnt %d\n", ret);
#if 0
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)samples[i];
TRACE_SAMPLE("Read ", (*sample));
}
cr_assert_eq(ret, 4, "# read %d, expected 4", ret);
#endif
CU_ASSERT_EQUAL_FATAL(ret, 4);
dds_delete(par);
dds_delete_qos(qos);

View file

@ -9,8 +9,7 @@
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#include "ddsc/dds.h"
#include "TypesArrayKey.h"
@ -24,14 +23,14 @@
for( unsigned i = 0; i < (sizeof data.key / sizeof *data.key); i++) data.key[i] = (init); \
\
par = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL); \
cr_assert_gt(par, 0); \
CU_ASSERT_FATAL(par > 0); \
top = dds_create_topic(par, &TypesArrayKey_##type##_arraytypekey_desc, strfy(type), NULL, NULL); \
cr_assert_gt(top, 0); \
CU_ASSERT_FATAL(top > 0); \
wri = dds_create_writer(par, top, NULL, NULL); \
cr_assert_gt(wri, 0); \
CU_ASSERT_FATAL(wri > 0); \
\
status = dds_write(wri, &data); \
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_OK); \
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_OK); \
\
dds_delete(wri); \
dds_delete(top); \
@ -39,57 +38,57 @@
} while (0)
Test(ddsc_types, long_arraytypekey)
CU_Test(ddsc_types, long_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(long, 1);
}
Test(ddsc_types, longlong_arraytypekey)
CU_Test(ddsc_types, longlong_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(longlong, 1);
}
Test(ddsc_types, unsignedshort_arraytypekey)
CU_Test(ddsc_types, unsignedshort_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(unsignedshort, 1);
}
Test(ddsc_types, unsignedlong_arraytypekey)
CU_Test(ddsc_types, unsignedlong_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(unsignedlong, 1);
}
Test(ddsc_types, unsignedlonglong_arraytypekey)
CU_Test(ddsc_types, unsignedlonglong_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(unsignedlonglong, 1);
}
Test(ddsc_types, float_arraytypekey)
CU_Test(ddsc_types, float_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(float, 1.0f);
}
Test(ddsc_types, double_arraytypekey)
CU_Test(ddsc_types, double_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(double, 1.0f);
}
Test(ddsc_types, char_arraytypekey)
CU_Test(ddsc_types, char_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(char, '1');
}
Test(ddsc_types, boolean_arraytypekey)
CU_Test(ddsc_types, boolean_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(boolean, true);
}
Test(ddsc_types, octet_arraytypekey)
CU_Test(ddsc_types, octet_arraytypekey)
{
DDSC_ARRAYTYPEKEY_TEST(octet, 1);
}
Test(ddsc_types, alltypeskey)
CU_Test(ddsc_types, alltypeskey)
{
dds_return_t status;
dds_entity_t par, top, wri;
@ -108,14 +107,14 @@ Test(ddsc_types, alltypeskey)
};
par = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(par, 0);
CU_ASSERT_FATAL(par > 0);
top = dds_create_topic(par, &TypesArrayKey_alltypeskey_desc, "AllTypesKey", NULL, NULL);
cr_assert_gt(top, 0);
CU_ASSERT_FATAL(top > 0);
wri = dds_create_writer(par, top, NULL, NULL);
cr_assert_gt(wri, 0);
CU_ASSERT_FATAL(wri > 0);
status = dds_write(wri, &atk_data);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_OK);
dds_delete(wri);
dds_delete(top);

View file

@ -13,9 +13,8 @@
#include "ddsc/dds.h"
#include "os/os.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include <criterion/theories.h>
#include "CUnit/Test.h"
#include "CUnit/Theory.h"
#include "Space.h"
@ -63,46 +62,46 @@ unregistering_init(void)
dds_qset_destination_order(qos, DDS_DESTINATIONORDER_BY_SOURCE_TIMESTAMP);
g_participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(g_participant, 0, "Failed to create prerequisite g_participant");
CU_ASSERT_FATAL(g_participant > 0);
g_waitset = dds_create_waitset(g_participant);
cr_assert_gt(g_waitset, 0, "Failed to create g_waitset");
CU_ASSERT_FATAL(g_waitset > 0);
g_topic = dds_create_topic(g_participant, &Space_Type1_desc, create_topic_name("ddsc_unregistering_test", name, 100), qos, NULL);
cr_assert_gt(g_topic, 0, "Failed to create prerequisite g_topic");
CU_ASSERT_FATAL(g_topic > 0);
/* Create a reader that keeps one sample on three instances. */
dds_qset_reliability(qos, DDS_RELIABILITY_RELIABLE, DDS_MSECS(100));
dds_qset_resource_limits(qos, DDS_LENGTH_UNLIMITED, 3, 1);
g_reader = dds_create_reader(g_participant, g_topic, qos, NULL);
cr_assert_gt(g_reader, 0, "Failed to create prerequisite g_reader");
CU_ASSERT_FATAL(g_reader > 0);
/* Create a writer that will not automatically dispose unregistered samples. */
dds_qset_writer_data_lifecycle(qos, false);
g_writer = dds_create_writer(g_participant, g_topic, qos, NULL);
cr_assert_gt(g_writer, 0, "Failed to create prerequisite g_writer");
CU_ASSERT_FATAL(g_writer > 0);
/* Sync g_writer to g_reader. */
ret = dds_set_enabled_status(g_writer, DDS_PUBLICATION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_writer status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_writer, g_writer);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_writer");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Failed prerequisite dds_waitset_wait g_writer r");
cr_assert_eq(g_writer, (dds_entity_t)(intptr_t)triggered, "Failed prerequisite dds_waitset_wait g_writer a");
CU_ASSERT_EQUAL_FATAL(ret, 1);
CU_ASSERT_EQUAL_FATAL(g_writer, (dds_entity_t)(intptr_t)triggered);
ret = dds_waitset_detach(g_waitset, g_writer);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to detach prerequisite g_writer");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Sync g_reader to g_writer. */
ret = dds_set_enabled_status(g_reader, DDS_SUBSCRIPTION_MATCHED_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_reader status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_reader, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Failed prerequisite dds_waitset_wait g_reader r");
cr_assert_eq(g_reader, (dds_entity_t)(intptr_t)triggered, "Failed prerequisite dds_waitset_wait g_reader a");
CU_ASSERT_EQUAL_FATAL(ret, 1);
CU_ASSERT_EQUAL_FATAL(g_reader, (dds_entity_t)(intptr_t)triggered);
ret = dds_waitset_detach(g_waitset, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to detach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Write initial samples. */
for (int i = 0; i < INITIAL_SAMPLES; i++) {
@ -110,7 +109,7 @@ unregistering_init(void)
sample.long_2 = i*2;
sample.long_3 = i*3;
ret = dds_write(g_writer, &sample);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed prerequisite write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
}
/* Initialize reading buffers. */
@ -145,87 +144,87 @@ unregistering_fini(void)
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance, deleted, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance, deleted, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
dds_delete(g_writer);
ret = dds_unregister_instance(g_writer, g_data);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance, null, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance, null, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance(g_writer, NULL);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance, invalid_writers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_unregister_instance, invalid_writers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t writer), ddsc_unregister_instance, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t writer), ddsc_unregister_instance, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_unregister_instance(writer, g_data);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance, non_writers) = {
DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
CU_TheoryDataPoints(ddsc_unregister_instance, non_writers) = {
CU_DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
};
Theory((dds_entity_t *writer), ddsc_unregister_instance, non_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t *writer), ddsc_unregister_instance, non_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance(*writer, g_data);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
{
Space_Type1 oldInstance = { 0, 22, 22 };
dds_return_t ret;
ret = dds_unregister_instance(g_writer, &oldInstance);
cr_assert_eq(ret, DDS_RETCODE_OK, "Unregistering old instance returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 2, "# read %d, expected %d", ret, 2);
CU_ASSERT_EQUAL_FATAL(ret, 2);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if (sample->long_1 == 0) {
/* Check data. */
cr_assert_eq(sample->long_2, 0);
cr_assert_eq(sample->long_3, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_2, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_3, 0);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
} else if (sample->long_1 == 1) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
}
@ -240,93 +239,93 @@ Test(ddsc_unregister_instance, unregistering_old_instance, .init=unregistering_i
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ts, deleted, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ts, deleted, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
dds_delete(g_writer);
ret = dds_unregister_instance_ts(g_writer, g_data, g_present);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ts, null, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ts, null, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance_ts(g_writer, NULL, g_present);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_BAD_PARAMETER);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ts, invalid_writers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_unregister_instance_ts, invalid_writers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t writer), ddsc_unregister_instance_ts, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t writer), ddsc_unregister_instance_ts, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_unregister_instance_ts(writer, g_data, g_present);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ts, non_writers) = {
DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
CU_TheoryDataPoints(ddsc_unregister_instance_ts, non_writers) = {
CU_DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
};
Theory((dds_entity_t *writer), ddsc_unregister_instance_ts, non_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t *writer), ddsc_unregister_instance_ts, non_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance_ts(*writer, g_data, g_present);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ts, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ts, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
{
Space_Type1 oldInstance = { 0, 22, 22 };
dds_return_t ret;
ret = dds_unregister_instance_ts(g_writer, &oldInstance, g_present);
cr_assert_eq(ret, DDS_RETCODE_OK, "Unregistering old instance returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 2, "# read %d, expected %d", ret, 2);
CU_ASSERT_EQUAL_FATAL(ret, 2);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if (sample->long_1 == 0) {
/* Check data (data part of unregister is not used, only the key part). */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
} else if (sample->long_1 == 1) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL( "Unknown sample read");
}
}
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ts, unregistering_past_sample, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ts, unregistering_past_sample, .init=unregistering_init, .fini=unregistering_fini)
{
Space_Type1 oldInstance = { 0, 0, 0 };
dds_attach_t triggered;
@ -334,34 +333,34 @@ Test(ddsc_unregister_instance_ts, unregistering_past_sample, .init=unregistering
/* Unregistering a sample in the past should trigger a lost sample. */
ret = dds_set_enabled_status(g_reader, DDS_SAMPLE_LOST_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_reader status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_reader, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Now, unregister a sample in the past. */
ret = dds_unregister_instance_ts(g_writer, &oldInstance, g_past);
cr_assert_eq(ret, DDS_RETCODE_OK, "Unregistering old instance returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Wait for 'sample lost'. */
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Unregistering past sample did not trigger 'sample lost'");
CU_ASSERT_EQUAL_FATAL(ret, 1);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 2, "# read %d, expected %d", ret, 2);
CU_ASSERT_EQUAL_FATAL(ret, 2);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if ((sample->long_1 == 0) || (sample->long_1 == 1)) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
@ -377,90 +376,90 @@ Test(ddsc_unregister_instance_ts, unregistering_past_sample, .init=unregistering
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ih, deleted, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ih, deleted, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
dds_delete(g_writer);
ret = dds_unregister_instance_ih(g_writer, DDS_HANDLE_NIL);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ih, invalid_handles) = {
DataPoints(dds_instance_handle_t, DDS_HANDLE_NIL, 0, 1, 100, UINT64_MAX),
CU_TheoryDataPoints(ddsc_unregister_instance_ih, invalid_handles) = {
CU_DataPoints(dds_instance_handle_t, DDS_HANDLE_NIL, 0, 1, 100, UINT64_MAX),
};
Theory((dds_instance_handle_t handle), ddsc_unregister_instance_ih, invalid_handles, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_instance_handle_t handle), ddsc_unregister_instance_ih, invalid_handles, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance_ih(g_writer, handle);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_PRECONDITION_NOT_MET, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_PRECONDITION_NOT_MET);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ih, invalid_writers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_unregister_instance_ih, invalid_writers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t writer), ddsc_unregister_instance_ih, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t writer), ddsc_unregister_instance_ih, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_unregister_instance_ih(writer, DDS_HANDLE_NIL);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ih, non_writers) = {
DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
CU_TheoryDataPoints(ddsc_unregister_instance_ih, non_writers) = {
CU_DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
};
Theory((dds_entity_t *writer), ddsc_unregister_instance_ih, non_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t *writer), ddsc_unregister_instance_ih, non_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance_ih(*writer, DDS_HANDLE_NIL);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ih, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ih, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
{
Space_Type1 oldInstance = { 0, 22, 22 };
dds_instance_handle_t hdl = dds_instance_lookup(g_writer, &oldInstance);
dds_return_t ret;
ret = dds_unregister_instance_ih(g_writer, hdl);
cr_assert_eq(ret, DDS_RETCODE_OK, "Unregistering old instance returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 2, "# read %d, expected %d", ret, 2);
CU_ASSERT_EQUAL_FATAL(ret, 2);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if (sample->long_1 == 0) {
/* Check data. */
cr_assert_eq(sample->long_2, 0);
cr_assert_eq(sample->long_3, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_2, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_3, 0);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
} else if (sample->long_1 == 1) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
}
@ -475,97 +474,97 @@ Test(ddsc_unregister_instance_ih, unregistering_old_instance, .init=unregisterin
*
*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ih_ts, deleted, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ih_ts, deleted, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
dds_delete(g_writer);
ret = dds_unregister_instance_ih_ts(g_writer, DDS_HANDLE_NIL, g_present);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ALREADY_DELETED);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ih_ts, invalid_handles) = {
DataPoints(dds_instance_handle_t, DDS_HANDLE_NIL, 0, 1, 100, UINT64_MAX),
CU_TheoryDataPoints(ddsc_unregister_instance_ih_ts, invalid_handles) = {
CU_DataPoints(dds_instance_handle_t, DDS_HANDLE_NIL, 0, 1, 100, UINT64_MAX),
};
Theory((dds_instance_handle_t handle), ddsc_unregister_instance_ih_ts, invalid_handles, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_instance_handle_t handle), ddsc_unregister_instance_ih_ts, invalid_handles, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance_ih_ts(g_writer, handle, g_present);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_PRECONDITION_NOT_MET, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_PRECONDITION_NOT_MET);
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ih_ts, invalid_writers) = {
DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
CU_TheoryDataPoints(ddsc_unregister_instance_ih_ts, invalid_writers) = {
CU_DataPoints(dds_entity_t, -2, -1, 0, 1, 100, INT_MAX, INT_MIN),
};
Theory((dds_entity_t writer), ddsc_unregister_instance_ih_ts, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t writer), ddsc_unregister_instance_ih_ts, invalid_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_entity_t exp = DDS_RETCODE_BAD_PARAMETER * -1;
dds_return_t ret;
ret = dds_unregister_instance_ih_ts(writer, DDS_HANDLE_NIL, g_present);
cr_assert_eq(dds_err_nr(ret), dds_err_nr(exp), "returned %d != expected %d", dds_err_nr(ret), dds_err_nr(exp));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), dds_err_nr(exp));
}
/*************************************************************************************************/
/*************************************************************************************************/
TheoryDataPoints(ddsc_unregister_instance_ih_ts, non_writers) = {
DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
CU_TheoryDataPoints(ddsc_unregister_instance_ih_ts, non_writers) = {
CU_DataPoints(dds_entity_t*, &g_waitset, &g_reader, &g_topic, &g_participant),
};
Theory((dds_entity_t *writer), ddsc_unregister_instance_ih_ts, non_writers, .init=unregistering_init, .fini=unregistering_fini)
CU_Theory((dds_entity_t *writer), ddsc_unregister_instance_ih_ts, non_writers, .init=unregistering_init, .fini=unregistering_fini)
{
dds_return_t ret;
ret = dds_unregister_instance_ih_ts(*writer, DDS_HANDLE_NIL, g_present);
cr_assert_eq(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION, "returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(dds_err_nr(ret), DDS_RETCODE_ILLEGAL_OPERATION);
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ih_ts, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ih_ts, unregistering_old_instance, .init=unregistering_init, .fini=unregistering_fini)
{
Space_Type1 oldInstance = { 0, 22, 22 };
dds_instance_handle_t hdl = dds_instance_lookup(g_writer, &oldInstance);
dds_return_t ret;
ret = dds_unregister_instance_ih_ts(g_writer, hdl, g_present);
cr_assert_eq(ret, DDS_RETCODE_OK, "Unregistering old instance returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 2, "# read %d, expected %d", ret, 2);
CU_ASSERT_EQUAL_FATAL(ret, 2);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if (sample->long_1 == 0) {
/* Check data (data part of unregister is not used, only the key part). */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_NOT_ALIVE_NO_WRITERS_INSTANCE_STATE);
} else if (sample->long_1 == 1) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
}
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ih_ts, unregistering_past_sample, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ih_ts, unregistering_past_sample, .init=unregistering_init, .fini=unregistering_fini)
{
Space_Type1 oldInstance = { 0, 0, 0 };
dds_instance_handle_t hdl = dds_instance_lookup(g_writer, &oldInstance);
@ -574,34 +573,34 @@ Test(ddsc_unregister_instance_ih_ts, unregistering_past_sample, .init=unregister
/* Unregistering a sample in the past should trigger a lost sample. */
ret = dds_set_enabled_status(g_reader, DDS_SAMPLE_LOST_STATUS);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to set prerequisite g_reader status");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_waitset_attach(g_waitset, g_reader, g_reader);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed to attach prerequisite g_reader");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Now, unregister a sample in the past. */
ret = dds_unregister_instance_ih_ts(g_writer, hdl, g_past);
cr_assert_eq(ret, DDS_RETCODE_OK, "Unregistering old instance returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Wait for 'sample lost'. */
ret = dds_waitset_wait(g_waitset, &triggered, 1, DDS_SECS(1));
cr_assert_eq(ret, 1, "Unregistering past sample did not trigger 'sample lost'");
CU_ASSERT_EQUAL_FATAL(ret, 1);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 2, "# read %d, expected %d", ret, 2);
CU_ASSERT_EQUAL_FATAL(ret, 2);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if ((sample->long_1 == 0) || (sample->long_1 == 1)) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
@ -609,48 +608,48 @@ Test(ddsc_unregister_instance_ih_ts, unregistering_past_sample, .init=unregister
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance, dispose_unregistered_sample, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance, dispose_unregistered_sample, .init=unregistering_init, .fini=unregistering_fini)
{
dds_entity_t writer;
writer = dds_create_writer(g_participant, g_topic, NULL, NULL);
cr_assert_gt(g_writer, 0, "Failed to create writer");
CU_ASSERT_FATAL(g_writer > 0);
Space_Type1 newInstance = { INITIAL_SAMPLES, 0, 0 };
dds_return_t ret;
ret = dds_write(writer, &newInstance);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_unregister_instance(writer, &newInstance);
cr_assert_eq(ret, DDS_RETCODE_OK, "Disposing unregistered sample returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 3, "# read %d, expected %d", ret, 3);
CU_ASSERT_EQUAL_FATAL(ret, 3);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if (sample->long_1 <= 1) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
} else if (sample->long_1 == 2) {
/* Check data. */
cr_assert_eq(sample->long_2, 0);
cr_assert_eq(sample->long_3, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_2, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_3, 0);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
dds_delete(writer);
@ -658,48 +657,48 @@ Test(ddsc_unregister_instance, dispose_unregistered_sample, .init=unregistering_
/*************************************************************************************************/
/*************************************************************************************************/
Test(ddsc_unregister_instance_ts, dispose_unregistered_sample, .init=unregistering_init, .fini=unregistering_fini)
CU_Test(ddsc_unregister_instance_ts, dispose_unregistered_sample, .init=unregistering_init, .fini=unregistering_fini)
{
dds_entity_t writer;
writer = dds_create_writer(g_participant, g_topic, NULL, NULL);
cr_assert_gt(g_writer, 0, "Failed to create writer");
CU_ASSERT_FATAL(g_writer > 0);
Space_Type1 newInstance = { INITIAL_SAMPLES, 0, 0 };
dds_return_t ret;
ret = dds_write(writer, &newInstance);
cr_assert_eq(ret, DDS_RETCODE_OK, "Failed write");
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
ret = dds_unregister_instance(writer, &newInstance);
cr_assert_eq(ret, DDS_RETCODE_OK, "Disposing unregistered sample returned %d", dds_err_nr(ret));
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
/* Read all available samples. */
ret = dds_read(g_reader, g_samples, g_info, MAX_SAMPLES, MAX_SAMPLES);
cr_assert_eq(ret, 3, "# read %d, expected %d", ret, 3);
CU_ASSERT_EQUAL_FATAL(ret, 3);
for(int i = 0; i < ret; i++) {
Space_Type1 *sample = (Space_Type1*)g_samples[i];
if (sample->long_1 <= 1) {
/* Check data. */
cr_assert_eq(sample->long_2, sample->long_1 * 2);
cr_assert_eq(sample->long_3, sample->long_1 * 3);
CU_ASSERT_EQUAL_FATAL(sample->long_2, sample->long_1 * 2);
CU_ASSERT_EQUAL_FATAL(sample->long_3, sample->long_1 * 3);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_ALIVE_INSTANCE_STATE);
} else if (sample->long_1 == 2) {
/* Check data. */
cr_assert_eq(sample->long_2, 0);
cr_assert_eq(sample->long_3, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_2, 0);
CU_ASSERT_EQUAL_FATAL(sample->long_3, 0);
/* Check states. */
cr_assert_eq(g_info[i].valid_data, true);
cr_assert_eq(g_info[i].sample_state, DDS_SST_NOT_READ);
cr_assert_eq(g_info[i].view_state, DDS_VST_NEW);
cr_assert_eq(g_info[i].instance_state, DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE);
CU_ASSERT_EQUAL_FATAL(g_info[i].valid_data, true);
CU_ASSERT_EQUAL_FATAL(g_info[i].sample_state, DDS_SST_NOT_READ);
CU_ASSERT_EQUAL_FATAL(g_info[i].view_state, DDS_VST_NEW);
CU_ASSERT_EQUAL_FATAL(g_info[i].instance_state, DDS_NOT_ALIVE_DISPOSED_INSTANCE_STATE);
} else {
cr_assert(false, "Unknown sample read");
CU_FAIL_FATAL("Unknown sample read");
}
}
dds_delete(writer);

View file

@ -10,9 +10,7 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <stdio.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include <criterion/parameterized.h>
#include "CUnit/Test.h"
#include "ddsc/dds.h"
#include "RoundTrip.h"
@ -30,23 +28,28 @@ static dds_entity_t e[8];
#define RCD (6) /* ReadCondition */
#define BAD (7) /* Bad (non-entity) */
struct index_result {
unsigned index;
dds_return_t exp_res;
};
static void
setup(void)
{
e[PAR] = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(e[PAR], 0);
CU_ASSERT_FATAL(e[PAR] > 0);
e[TOP] = dds_create_topic(e[PAR], &RoundTripModule_DataType_desc, "RoundTrip", NULL, NULL);
cr_assert_gt(e[TOP], 0);
CU_ASSERT_FATAL(e[TOP] > 0);
e[PUB] = dds_create_publisher(e[PAR], NULL, NULL);
cr_assert_gt(e[PUB], 0);
CU_ASSERT_FATAL(e[PUB] > 0);
e[WRI] = dds_create_writer(e[PUB], e[TOP], NULL, NULL);
cr_assert_gt(e[WRI], 0);
CU_ASSERT_FATAL(e[WRI] > 0);
e[SUB] = dds_create_subscriber(e[PAR], NULL, NULL);
cr_assert_gt(e[SUB], 0);
CU_ASSERT_FATAL(e[SUB] > 0);
e[REA] = dds_create_reader(e[SUB], e[TOP], NULL, NULL);
cr_assert_gt(e[REA], 0);
CU_ASSERT_FATAL(e[REA] > 0);
e[RCD] = dds_create_readcondition(e[REA], DDS_ANY_STATE);
cr_assert_gt(e[RCD], 0);
CU_ASSERT_FATAL(e[RCD] > 0);
e[BAD] = 1;
}
@ -59,15 +62,12 @@ teardown(void)
}
/*************************************************************************************************/
struct index_result {
unsigned index;
dds_return_t exp_res;
};
/*************************************************************************************************/
ParameterizedTestParameters(ddsc_unsupported, dds_begin_end_coherent) {
/* The parameters seem to be initialized before spawning children,
* so it makes no sense to try and store anything dynamic here. */
CU_Test(ddsc_unsupported, dds_begin_end_coherent, .init = setup, .fini = teardown)
{
dds_return_t result;
static struct index_result pars[] = {
{PUB, DDS_RETCODE_UNSUPPORTED},
{WRI, DDS_RETCODE_UNSUPPORTED},
@ -76,62 +76,50 @@ ParameterizedTestParameters(ddsc_unsupported, dds_begin_end_coherent) {
{BAD, DDS_RETCODE_BAD_PARAMETER}
};
return cr_make_param_array(struct index_result, pars, sizeof pars / sizeof *pars);
};
ParameterizedTest(struct index_result *par, ddsc_unsupported, dds_begin_end_coherent, .init = setup, .fini = teardown)
{
dds_return_t result;
result = dds_begin_coherent(e[par->index]);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_begin_coherent(%s): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
result = dds_end_coherent(e[par->index]);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_end_coherent(%s): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
for (int i=0; i < 5; i++) {
result = dds_begin_coherent(e[pars[i].index]);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
result = dds_end_coherent(e[pars[i].index]);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
}
}
/*************************************************************************************************/
ParameterizedTestParameters(ddsc_unsupported, dds_wait_for_acks) {
CU_Test(ddsc_unsupported, dds_wait_for_acks, .init = setup, .fini = teardown)
{
dds_return_t result;
static struct index_result pars[] = {
{PUB, DDS_RETCODE_UNSUPPORTED},
{WRI, DDS_RETCODE_UNSUPPORTED},
{BAD, DDS_RETCODE_BAD_PARAMETER}
};
return cr_make_param_array(struct index_result, pars, sizeof pars / sizeof *pars);
};
ParameterizedTest(struct index_result *par, ddsc_unsupported, dds_wait_for_acks, .init = setup, .fini = teardown)
{
dds_return_t result;
result = dds_wait_for_acks(e[par->index], 0);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_wait_for_acks(%s, 0): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
for (int i=0; i< 3; i++) {
result = dds_wait_for_acks(e[pars[i].index], 0);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
}
}
/*************************************************************************************************/
ParameterizedTestParameters(ddsc_unsupported, dds_suspend_resume) {
CU_Test(ddsc_unsupported, dds_suspend_resume, .init = setup, .fini = teardown)
{
dds_return_t result;
static struct index_result pars[] = {
{PUB, DDS_RETCODE_UNSUPPORTED},
{WRI, DDS_RETCODE_BAD_PARAMETER},
{BAD, DDS_RETCODE_BAD_PARAMETER}
};
return cr_make_param_array(struct index_result, pars, sizeof pars / sizeof *pars);
};
ParameterizedTest(struct index_result *par, ddsc_unsupported, dds_suspend_resume, .init = setup, .fini = teardown)
{
dds_return_t result;
result = dds_suspend(e[par->index]);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_suspend(%s): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
result = dds_resume(e[par->index]);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_resume(%s): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
for (int i=0; i< 3; i++) {
result = dds_suspend(e[pars[i].index]);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
result = dds_resume(e[pars[i].index]);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
}
}
/*************************************************************************************************/
ParameterizedTestParameters(ddsc_unsupported, dds_get_instance_handle) {
/* The parameters seem to be initialized before spawning children,
* so it makes no sense to try and store anything dynamic here. */
CU_Test(ddsc_unsupported, dds_get_instance_handle, .init = setup, .fini = teardown)
{
dds_return_t result;
dds_instance_handle_t ih;
static struct index_result pars[] = {
{TOP, DDS_RETCODE_ILLEGAL_OPERATION}, /* TODO: Shouldn't this be either supported or unsupported? */
{PUB, DDS_RETCODE_UNSUPPORTED},
@ -140,22 +128,16 @@ ParameterizedTestParameters(ddsc_unsupported, dds_get_instance_handle) {
{BAD, DDS_RETCODE_BAD_PARAMETER}
};
return cr_make_param_array(struct index_result, pars, sizeof pars / sizeof *pars);
};
ParameterizedTest(struct index_result *par, ddsc_unsupported, dds_get_instance_handle, .init = setup, .fini = teardown)
{
dds_return_t result;
dds_instance_handle_t ih;
result = dds_get_instance_handle(e[par->index], &ih);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_get_instance_handle(%s): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
for (int i=0; i < 5; i++) {
result = dds_get_instance_handle(e[pars[i].index], &ih);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
}
}
/*************************************************************************************************/
ParameterizedTestParameters(ddsc_unsupported, dds_set_qos) {
/* The parameters seem to be initialized before spawning children,
* so it makes no sense to try and store anything dynamic here. */
CU_Test(ddsc_unsupported, dds_set_qos, .init = setup, .fini = teardown)
{
dds_return_t result;
dds_qos_t *qos;
static struct index_result pars[] = {
{PAR, DDS_RETCODE_UNSUPPORTED},
{TOP, DDS_RETCODE_UNSUPPORTED},
@ -167,16 +149,10 @@ ParameterizedTestParameters(ddsc_unsupported, dds_set_qos) {
{BAD, DDS_RETCODE_BAD_PARAMETER}
};
return cr_make_param_array(struct index_result, pars, sizeof pars / sizeof *pars);
};
ParameterizedTest(struct index_result *par, ddsc_unsupported, dds_set_qos, .init = setup, .fini = teardown)
{
dds_return_t result;
dds_qos_t *qos;
qos = dds_create_qos();
result = dds_set_qos(e[par->index], qos);
cr_expect_eq(dds_err_nr(result), par->exp_res, "Unexpected return code %d \"%s\" (expected %d \"%s\") from dds_set_qos(%s, qos): (%d)", dds_err_nr(result), dds_err_str(result), par->exp_res, dds_err_str(-par->exp_res), entity_kind_str(e[par->index]), result);
for (int i=0; i < 8;i++) {
result = dds_set_qos(e[pars[i].index], qos);
CU_ASSERT_EQUAL(dds_err_nr(result), pars[i].exp_res);
}
dds_delete_qos(qos);
}

File diff suppressed because it is too large Load diff

View file

@ -10,8 +10,8 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <stdio.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#include "CUnit/Theory.h"
#include "ddsc/dds.h"
#include "RoundTrip.h"
#include "Space.h"
@ -32,13 +32,13 @@ static void
setup(void)
{
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
CU_ASSERT_FATAL(participant > 0);
topic = dds_create_topic(participant, &RoundTripModule_DataType_desc, "RoundTrip", NULL, NULL);
cr_assert_gt(topic, 0);
CU_ASSERT_FATAL(topic > 0);
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0);
CU_ASSERT_FATAL(publisher > 0);
writer = dds_create_writer(participant, topic, NULL, NULL);
cr_assert_gt(writer, 0);
CU_ASSERT_FATAL(writer > 0);
memset(&data, 0, sizeof(data));
data.payload._length = payloadSize;
@ -60,15 +60,15 @@ teardown(void)
dds_delete(participant);
}
Test(ddsc_write, basic, .init = setup, .fini = teardown)
CU_Test(ddsc_write, basic, .init = setup, .fini = teardown)
{
dds_return_t status;
status = dds_write(writer, &data);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_OK);
}
Test(ddsc_write, null_writer, .init = setup, .fini = teardown)
CU_Test(ddsc_write, null_writer, .init = setup, .fini = teardown)
{
dds_return_t status;
@ -76,29 +76,29 @@ Test(ddsc_write, null_writer, .init = setup, .fini = teardown)
OS_WARNING_MSVC_OFF(28020);
status = dds_write(0, &data);
OS_WARNING_MSVC_ON(28020);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_write, bad_writer, .init = setup, .fini = teardown)
CU_Test(ddsc_write, bad_writer, .init = setup, .fini = teardown)
{
dds_return_t status;
status = dds_write(publisher, &data);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_ILLEGAL_OPERATION);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_ILLEGAL_OPERATION);
}
Test(ddsc_write, closed_writer, .init = setup, .fini = teardown)
CU_Test(ddsc_write, closed_writer, .init = setup, .fini = teardown)
{
dds_return_t status;
status = dds_delete(writer);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_OK);
status = dds_write(writer, &data);
writer = 0;
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_ALREADY_DELETED);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_ALREADY_DELETED);
}
Test(ddsc_write, null_sample, .init = setup, .fini = teardown)
CU_Test(ddsc_write, null_sample, .init = setup, .fini = teardown)
{
dds_return_t status;
@ -107,26 +107,26 @@ Test(ddsc_write, null_sample, .init = setup, .fini = teardown)
status = dds_write(writer, NULL);
OS_WARNING_MSVC_ON(6387);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_write_ts, basic, .init = setup, .fini = teardown)
CU_Test(ddsc_write_ts, basic, .init = setup, .fini = teardown)
{
dds_return_t status;
status = dds_write_ts(writer, &data, dds_time());
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_OK);
}
Test(ddsc_write_ts, bad_timestamp, .init = setup, .fini = teardown)
CU_Test(ddsc_write_ts, bad_timestamp, .init = setup, .fini = teardown)
{
dds_return_t status;
status = dds_write_ts(writer, &data, -1);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_write, simpletypes)
CU_Test(ddsc_write, simpletypes)
{
dds_return_t status;
dds_entity_t par, top, wri;
@ -145,14 +145,14 @@ Test(ddsc_write, simpletypes)
};
par = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(par, 0);
CU_ASSERT_FATAL(par > 0);
top = dds_create_topic(par, &Space_simpletypes_desc, "SimpleTypes", NULL, NULL);
cr_assert_gt(top, 0);
CU_ASSERT_FATAL(top > 0);
wri = dds_create_writer(par, top, NULL, NULL);
cr_assert_gt(wri, 0);
CU_ASSERT_FATAL(wri > 0);
status = dds_write(wri, &st_data);
cr_assert_eq(dds_err_nr(status), DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(status), DDS_RETCODE_OK);
dds_delete(wri);
dds_delete(top);

View file

@ -10,9 +10,7 @@
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <stdio.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#include "ddsc/dds.h"
#include "RoundTrip.h"
#include "os/os.h"
@ -26,11 +24,11 @@ static void
setup(void)
{
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
CU_ASSERT_FATAL(participant > 0);
topic = dds_create_topic(participant, &RoundTripModule_DataType_desc, "RoundTrip", NULL, NULL);
cr_assert_gt(topic, 0);
CU_ASSERT_FATAL(topic > 0);
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0);
CU_ASSERT_FATAL(publisher > 0);
}
static void
@ -42,69 +40,69 @@ teardown(void)
dds_delete(participant);
}
Test(ddsc_create_writer, basic, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, basic, .init = setup, .fini = teardown)
{
dds_return_t result;
writer = dds_create_writer(participant, topic, NULL, NULL);
cr_assert_gt(writer, 0);
CU_ASSERT_FATAL(writer > 0);
result = dds_delete(writer);
cr_assert_eq(result, DDS_RETCODE_OK);
CU_ASSERT_EQUAL_FATAL(result, DDS_RETCODE_OK);
}
Test(ddsc_create_writer, null_parent, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, null_parent, .init = setup, .fini = teardown)
{
OS_WARNING_MSVC_OFF(28020); /* Disable SAL warning on intentional misuse of the API */
writer = dds_create_writer(0, topic, NULL, NULL);
OS_WARNING_MSVC_ON(28020);
cr_assert_eq(dds_err_nr(writer), DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(writer), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_create_writer, bad_parent, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, bad_parent, .init = setup, .fini = teardown)
{
writer = dds_create_writer(topic, topic, NULL, NULL);
cr_assert_eq(dds_err_nr(writer), DDS_RETCODE_ILLEGAL_OPERATION);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(writer), DDS_RETCODE_ILLEGAL_OPERATION);
}
Test(ddsc_create_writer, participant, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, participant, .init = setup, .fini = teardown)
{
writer = dds_create_writer(participant, topic, NULL, NULL);
cr_assert_gt(writer, 0);
CU_ASSERT_FATAL(writer > 0);
}
Test(ddsc_create_writer, publisher, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, publisher, .init = setup, .fini = teardown)
{
writer = dds_create_writer(publisher, topic, NULL, NULL);
cr_assert_gt(writer, 0);
CU_ASSERT_FATAL(writer > 0);
}
Test(ddsc_create_writer, deleted_publisher, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, deleted_publisher, .init = setup, .fini = teardown)
{
dds_delete(publisher);
writer = dds_create_writer(publisher, topic, NULL, NULL);
cr_assert_eq(dds_err_nr(writer), DDS_RETCODE_ALREADY_DELETED);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(writer), DDS_RETCODE_ALREADY_DELETED);
}
Test(ddsc_create_writer, null_topic, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, null_topic, .init = setup, .fini = teardown)
{
OS_WARNING_MSVC_OFF(28020); /* Disable SAL warning on intentional misuse of the API */
writer = dds_create_writer(publisher, 0, NULL, NULL);
OS_WARNING_MSVC_ON(28020);
cr_assert_eq(dds_err_nr(writer), DDS_RETCODE_BAD_PARAMETER);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(writer), DDS_RETCODE_BAD_PARAMETER);
}
Test(ddsc_create_writer, bad_topic, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, bad_topic, .init = setup, .fini = teardown)
{
writer = dds_create_writer(publisher, publisher, NULL, NULL);
cr_assert_eq(dds_err_nr(writer), DDS_RETCODE_ILLEGAL_OPERATION);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(writer), DDS_RETCODE_ILLEGAL_OPERATION);
}
Test(ddsc_create_writer, deleted_topic, .init = setup, .fini = teardown)
CU_Test(ddsc_create_writer, deleted_topic, .init = setup, .fini = teardown)
{
dds_delete(topic);
writer = dds_create_writer(publisher, topic, NULL, NULL);
cr_assert_eq(dds_err_nr(writer), DDS_RETCODE_ALREADY_DELETED);
CU_ASSERT_EQUAL_FATAL(dds_err_nr(writer), DDS_RETCODE_ALREADY_DELETED);
}

View file

@ -9,6 +9,7 @@
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#
include(Criterion)
add_criterion_executable(criterion_tools_pubsub . ../common.c ../testtype.c ../porting.c)
target_link_libraries(criterion_tools_pubsub util CycloneDDS::ddsc)
include(CUnit)
add_cunit_executable(CUnit_tools_pubsub ../common.c ../testtype.c ../porting.c basic.c)
target_link_libraries(CUnit_tools_pubsub util CycloneDDS::ddsc)

View file

@ -9,20 +9,17 @@
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "CUnit/Test.h"
#define MAIN test_main
#include "../pubsub.c"
Test(tools_pubsub, main) {
CU_Test(tools_pubsub, main) {
char *argv[] = {"pubsub", "-T", "pubsubTestTopic", "-K", "KS", "-w1:1", "-D", "1", "-q", "t:d=t,r=r", "pubsub_partition"};
int argc = sizeof(argv) / sizeof(char*);
cr_log_info("Starting pubsub basic test");
int result = MAIN(argc, argv);
if (result != 0)
printf("exitcode was %d\n", result);
cr_assert_eq(result, 0, "pubsub exited non-zero");
cr_log_info("Stopping pubsub basic test");
CU_ASSERT_EQUAL_FATAL(result, 0);
}

View file

@ -9,6 +9,7 @@
#
# SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
#
include(Criterion)
add_criterion_executable(criterion_util .)
target_link_libraries(criterion_util util)
include(CUnit)
add_cunit_executable(CUnit_util "handleserver.c")
target_link_libraries(CUnit_util util)

View file

@ -11,13 +11,10 @@
*/
#include "os/os.h"
#include "util/ut_handleserver.h"
#include <criterion/criterion.h>
#include <criterion/logging.h>
/* Add --verbose command line argument to get the cr_log_info traces (if there are any). */
#include "CUnit/Test.h"
/*****************************************************************************************/
Test(util_handleserver, basic)
CU_Test(util_handleserver, basic)
{
const os_time zero = { 0, 0 };
int32_t kind = 0x10000000;
@ -27,29 +24,29 @@ Test(util_handleserver, basic)
void *argx;
ret = ut_handleserver_init();
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handleserver_init");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
hdl = ut_handle_create(kind, (void*)&arg);
cr_assert(hdl > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl > 0);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim ret");
cr_assert_eq(argx, &arg, "ut_handle_claim arg");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
CU_ASSERT_EQUAL_FATAL(argx, &arg);
ut_handle_release(hdl, NULL);
ret = ut_handle_delete(hdl, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_DELETED, "ut_handle_claim ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_DELETED);
ut_handleserver_fini();
}
/*****************************************************************************************/
Test(util_handleserver, close)
CU_Test(util_handleserver, close)
{
const os_time zero = { 0, 0 };
int32_t kind = 0x10000000;
@ -60,33 +57,33 @@ Test(util_handleserver, close)
bool closed;
ret = ut_handleserver_init();
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handleserver_init");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
hdl = ut_handle_create(kind, (void*)&arg);
cr_assert(hdl > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl > 0);
closed = ut_handle_is_closed(hdl, NULL);
cr_assert_eq(closed, false, "ut_handle_is_closed ret");
CU_ASSERT_EQUAL_FATAL(closed, false);
ut_handle_close(hdl, NULL);
closed = ut_handle_is_closed(hdl, NULL);
cr_assert_eq(closed, true, "ut_handle_is_closed ret");
CU_ASSERT_EQUAL_FATAL(closed, true);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_CLOSED, "ut_handle_claim ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_CLOSED);
ret = ut_handle_delete(hdl, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_DELETED, "ut_handle_claim ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_DELETED);
ut_handleserver_fini();
}
/*****************************************************************************************/
Test(util_handleserver, link)
CU_Test(util_handleserver, link)
{
const os_time zero = { 0, 0 };
int32_t kind = 0x10000000;
@ -97,32 +94,32 @@ Test(util_handleserver, link)
void *argx;
ret = ut_handleserver_init();
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handleserver_init");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
hdl = ut_handle_create(kind, (void*)&arg);
cr_assert(hdl > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl > 0);
link = ut_handle_get_link(hdl);
cr_assert_neq(link, NULL, "ut_handle_get_link");
CU_ASSERT_NOT_EQUAL_FATAL(link, NULL);
ret = ut_handle_claim(hdl, link, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim ret");
cr_assert_eq(argx, &arg, "ut_handle_claim arg");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
CU_ASSERT_EQUAL_FATAL(argx, &arg);
ut_handle_release(hdl, link);
ret = ut_handle_delete(hdl, link, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
link = ut_handle_get_link(hdl);
cr_assert_eq(link, NULL, "ut_handle_get_link");
CU_ASSERT_EQUAL_FATAL(link, NULL);
ut_handleserver_fini();
}
/*****************************************************************************************/
Test(util_handleserver, types)
CU_Test(util_handleserver, types)
{
const os_time zero = { 0, 0 };
int32_t kind1 = 0x10000000;
@ -137,55 +134,55 @@ Test(util_handleserver, types)
void *argx;
ret = ut_handleserver_init();
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handleserver_init");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
hdl1a = ut_handle_create(kind1, (void*)&arg1a);
cr_assert(hdl1a > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl1a > 0);
hdl1b = ut_handle_create(kind1, (void*)&arg1b);
cr_assert(hdl1b > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl1b > 0);
hdl2 = ut_handle_create(kind2, (void*)&arg2);
cr_assert(hdl2 > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl2 > 0);
ret = ut_handle_claim(hdl1a, NULL, kind1, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim ret");
cr_assert_eq(argx, &arg1a, "ut_handle_claim arg");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
CU_ASSERT_EQUAL_FATAL(argx, &arg1a);
ret = ut_handle_claim(hdl1b, NULL, kind1, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim ret");
cr_assert_eq(argx, &arg1b, "ut_handle_claim arg");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
CU_ASSERT_EQUAL_FATAL(argx, &arg1b);
ret = ut_handle_claim(hdl2, NULL, kind2, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim ret");
cr_assert_eq(argx, &arg2, "ut_handle_claim arg");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
CU_ASSERT_EQUAL_FATAL(argx, &arg2);
ret = ut_handle_claim(hdl1a, NULL, kind2, &argx);
cr_assert_eq(ret, UT_HANDLE_UNEQUAL_KIND, "ut_handle_claim ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_UNEQUAL_KIND);
ret = ut_handle_claim(hdl1a, NULL, kind2, &argx);
cr_assert_eq(ret, UT_HANDLE_UNEQUAL_KIND, "ut_handle_claim ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_UNEQUAL_KIND);
ret = ut_handle_claim(hdl2, NULL, kind1, &argx);
cr_assert_eq(ret, UT_HANDLE_UNEQUAL_KIND, "ut_handle_claim ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_UNEQUAL_KIND);
ut_handle_release(hdl1a, NULL);
ut_handle_release(hdl1b, NULL);
ut_handle_release(hdl2, NULL);
ret = ut_handle_delete(hdl1a, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ret = ut_handle_delete(hdl1b, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ret = ut_handle_delete(hdl2, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ut_handleserver_fini();
}
/*****************************************************************************************/
Test(util_handleserver, timeout)
CU_Test(util_handleserver, timeout)
{
const os_time zero = { 0, 0 };
int32_t kind = 0x10000000;
@ -195,22 +192,22 @@ Test(util_handleserver, timeout)
void *argx;
ret = ut_handleserver_init();
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handleserver_init");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
hdl = ut_handle_create(kind, (void*)&arg);
cr_assert(hdl > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl > 0);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim ret");
cr_assert_eq(argx, &arg, "ut_handle_claim arg");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
CU_ASSERT_EQUAL_FATAL(argx, &arg);
ret = ut_handle_delete(hdl, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_TIMEOUT, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_TIMEOUT);
ut_handle_release(hdl, NULL);
ret = ut_handle_delete(hdl, NULL, zero);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ut_handleserver_fini();
}
@ -238,7 +235,7 @@ deleting_thread(void *a)
arg->state = DELETING;
/* This should block until the main test released all claims. */
ret = ut_handle_delete(arg->hdl, NULL, ten);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_delete ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
arg->state = STOPPED;
return 0;
@ -256,7 +253,7 @@ thread_reached_state(thread_state_t *actual, thread_state_t expected, int32_t ms
return (*actual == expected) ? os_resultSuccess : os_resultTimeout;
}
Test(util_handleserver, wakeup)
CU_Test(util_handleserver, wakeup)
{
int32_t kind = 0x10000000;
ut_handle_retcode_t ret;
@ -270,37 +267,37 @@ Test(util_handleserver, wakeup)
os_result osr;
ret = ut_handleserver_init();
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handleserver_init");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
hdl = ut_handle_create(kind, (void*)&arg);
cr_assert(hdl > 0, "ut_handle_create");
CU_ASSERT_FATAL(hdl > 0);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim1 ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
ret = ut_handle_claim(hdl, NULL, kind, &argx);
cr_assert_eq(ret, UT_HANDLE_OK, "ut_handle_claim2 ret");
CU_ASSERT_EQUAL_FATAL(ret, UT_HANDLE_OK);
/* Try deleting in other thread, which should block. */
thread_arg.hdl = hdl;
thread_arg.state = STARTING;
os_threadAttrInit(&thread_attr);
osr = os_threadCreate(&thread_id, "deleting_thread", &thread_attr, deleting_thread, (void*)&thread_arg);
cr_assert_eq(osr, os_resultSuccess, "os_threadCreate");
CU_ASSERT_EQUAL_FATAL(osr, os_resultSuccess);
osr = thread_reached_state(&thread_arg.state, DELETING, 1000);
cr_assert_eq(osr, os_resultSuccess, "deleting");
CU_ASSERT_EQUAL_FATAL(osr, os_resultSuccess);
osr = thread_reached_state(&thread_arg.state, STOPPED, 500);
cr_assert_eq(osr, os_resultTimeout, "deleting");
CU_ASSERT_EQUAL_FATAL(osr, os_resultTimeout);
/* First release of the hdl should not unblock the thread. */
ut_handle_release(hdl, NULL);
osr = thread_reached_state(&thread_arg.state, STOPPED, 500);
cr_assert_eq(osr, os_resultTimeout, "deleting");
CU_ASSERT_EQUAL_FATAL(osr, os_resultTimeout);
/* Second release of the hdl should unblock the thread. */
ut_handle_release(hdl, NULL);
osr = thread_reached_state(&thread_arg.state, STOPPED, 500);
cr_assert_eq(osr, os_resultSuccess, "deleting");
CU_ASSERT_EQUAL_FATAL(osr, os_resultSuccess);
os_threadWaitExit(thread_id, NULL);
/* The handle is deleted within the thread. */

View file

@ -1,10 +0,0 @@
{
Criterion memory leak
Memcheck:Leak
match-leak-kinds: reachable
fun:malloc
fun:__fopen_internal
fun:process_all_output
fun:criterion_run_all_tests
fun:main
}