Merge pull request #60 from FirasSahliADLinktech/multiple_tests

Some missing unit tests and correct signature
This commit is contained in:
eboasson 2018-11-30 12:07:44 +01:00 committed by GitHub
commit 69f563be5b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 159 additions and 8 deletions

View file

@ -431,7 +431,7 @@ err:
}
_Pre_satisfies_(entity & DDS_ENTITY_KIND_MASK)
int
dds_return_t
dds_instance_get_key(
dds_entity_t entity,
dds_instance_handle_t inst,
@ -458,7 +458,7 @@ dds_instance_get_key(
if (dds_tkmap_get_key (map, topic->m_stopic, inst, data)) {
ret = DDS_RETCODE_OK;
} else{
ret = DDS_ERRNO(DDS_RETCODE_PRECONDITION_NOT_MET, "No instance related with the provided entity is found");
ret = DDS_ERRNO(DDS_RETCODE_BAD_PARAMETER, "No instance related with the provided entity is found");
}
err:

View file

@ -0,0 +1,96 @@
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "os/os.h"
#include "ddsc/dds.h"
#include "RoundTrip.h"
static dds_entity_t participant = DDS_ENTITY_NIL;
static dds_entity_t topic = DDS_ENTITY_NIL;
static dds_entity_t publisher = DDS_ENTITY_NIL;
static dds_entity_t writer = DDS_ENTITY_NIL;
static dds_instance_handle_t handle = DDS_HANDLE_NIL;
static RoundTripModule_Address data;
/* Fixture to create prerequisite entity */
static void setup(void)
{
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
cr_assert_gt(participant, 0);
topic = dds_create_topic(participant, &RoundTripModule_Address_desc, "ddsc_instance_get_key", NULL, NULL);
cr_assert_gt(topic, 0);
publisher = dds_create_publisher(participant, NULL, NULL);
cr_assert_gt(publisher, 0);
writer = dds_create_writer(publisher, topic, NULL, NULL);
cr_assert_gt(writer, 0);
memset(&data, 0, sizeof(data));
data.ip = os_strdup("some data");
cr_assert_not_null(data.ip);
data.port = 1;
}
/* Fixture to delete prerequisite entity */
static void teardown(void)
{
RoundTripModule_Address_free(&data, DDS_FREE_CONTENTS);
dds_delete(writer);
dds_delete(publisher);
dds_delete(topic);
dds_delete(participant);
}
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));
}
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");
}
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));
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");
}
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));
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);
RoundTripModule_Address_free(&key_data, DDS_FREE_CONTENTS);
}

View file

@ -14,7 +14,6 @@
#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. */
#ifdef _MSC_VER
@ -240,6 +239,45 @@ qos_fini(void)
/****************************************************************************
* API tests
****************************************************************************/
Test(ddsc_qos, copy_bad_source, .init=qos_init, .fini=qos_fini)
{
dds_return_t result;
result = dds_qos_copy(g_qos, NULL);
cr_assert_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(result));
}
Test(ddsc_qos, copy_bad_destination, .init=qos_init, .fini=qos_fini)
{
dds_return_t result;
result = dds_qos_copy(NULL, g_qos);
cr_assert_eq(dds_err_nr(result), DDS_RETCODE_BAD_PARAMETER, "returned %d", dds_err_nr(result));
}
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_qos_create();
cr_assert_not_null(qos);
dds_qset_partition(g_qos, g_pol_partition.n, g_pol_partition.ps);
result = dds_qos_copy(qos, g_qos);
cr_assert_eq(result, DDS_RETCODE_OK);
dds_qget_partition(qos, &p.n, &p.ps);
cr_assert_eq(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]);
}
dds_qos_delete(qos);
}
Test(ddsc_qos, userdata, .init=qos_init, .fini=qos_fini)
{
struct pol_userdata p = { NULL, 0 };

View file

@ -0,0 +1,17 @@
#include <criterion/criterion.h>
#include <criterion/logging.h>
#include "ddsc/dds.h"
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);
/* Sleep for 1 second, every platform should (hopefully) support that */
dds_sleepfor(pause);
then = dds_time();
cr_assert_geq(then, now + pause);
}