#include "dds/dds.h"
#include "CUnit/Test.h"
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 28020)
#endif
static void data_available_cb(dds_entity_t reader, void* arg)
{
(void)reader;
(void)arg;
}
CU_Test(ddsc_publisher, create)
{
const char *singlePartitions[] = { "partition" };
const char *multiplePartitions[] = { "partition1", "partition2" };
const char *duplicatePartitions[] = { "partition", "partition" };
dds_entity_t participant;
dds_entity_t publisher, publisher1;
dds_listener_t *listener;
dds_qos_t *qos;
publisher = dds_create_publisher(0, NULL, NULL);
CU_ASSERT_EQ_FATAL (publisher, DDS_RETCODE_PRECONDITION_NOT_MET);
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
CU_ASSERT_GT_FATAL (participant, 0);
publisher = dds_create_publisher(participant, NULL, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
publisher1 = dds_create_publisher(publisher, NULL, NULL);
CU_ASSERT_EQ_FATAL (publisher1, DDS_RETCODE_ILLEGAL_OPERATION);
dds_delete(publisher);
qos = dds_create_qos();
CU_ASSERT_NEQ_FATAL (qos, NULL);
publisher = dds_create_publisher(participant, qos, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
#ifdef _MSC_VER
#pragma warning(push)
#pragma warning(disable: 6054)
#endif
dds_qset_partition (qos, 1, singlePartitions);
publisher = dds_create_publisher(participant, qos, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
dds_qset_partition (qos, 2, multiplePartitions);
publisher = dds_create_publisher(participant, qos, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
dds_qset_partition (qos, 2, duplicatePartitions);
publisher = dds_create_publisher(participant, qos, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
#ifdef _MSC_VER
#pragma warning(pop)
#endif
listener = dds_create_listener(NULL);
CU_ASSERT_NEQ_FATAL (listener, NULL);
publisher = dds_create_publisher(participant, NULL, listener);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
dds_reset_listener(listener);
dds_lset_data_available(listener, NULL);
publisher = dds_create_publisher(participant, NULL, listener);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
dds_reset_listener(listener);
dds_lset_data_available(listener, DDS_LUNSET);
publisher = dds_create_publisher(participant, NULL, listener);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
dds_reset_listener(listener);
dds_lset_data_available(listener, data_available_cb);
publisher = dds_create_publisher(participant, NULL, listener);
CU_ASSERT_GT_FATAL (publisher, 0);
dds_delete(publisher);
dds_lset_data_available(listener, data_available_cb);
publisher = dds_create_publisher(participant, qos, listener);
CU_ASSERT_GT (publisher, 0);
dds_delete(publisher);
dds_delete_listener(listener);
dds_delete_qos(qos);
dds_delete (participant);
}
CU_Test(ddsc_publisher, invalid_qos)
{
dds_entity_t participant, publisher;
dds_qos_t *qos;
dds_return_t rc;
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
CU_ASSERT_GT_FATAL (participant, 0);
qos = dds_create_qos ();
CU_ASSERT_NEQ_FATAL (qos, NULL);
const union { dds_presentation_access_scope_kind_t pask; int i; } pask = { .i = 123 };
dds_qset_presentation(qos, pask.pask, false, false);
publisher = dds_create_publisher(participant, qos, NULL);
CU_ASSERT_EQ_FATAL (publisher, DDS_RETCODE_BAD_PARAMETER);
dds_delete_qos (qos);
rc = dds_delete(participant);
CU_ASSERT_EQ_FATAL (rc, 0);
}
CU_Test(ddsc_publisher, suspend_resume)
{
dds_entity_t participant, publisher;
dds_return_t status;
status = dds_suspend(0);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_PRECONDITION_NOT_MET);
status = dds_resume(0);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_PRECONDITION_NOT_MET);
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
CU_ASSERT_GT_FATAL (participant, 0);
status = dds_suspend(participant);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_ILLEGAL_OPERATION);
status = dds_resume(participant);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_ILLEGAL_OPERATION);
publisher = dds_create_publisher(participant, NULL, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
status = dds_resume(publisher);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_suspend(publisher);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_resume(publisher);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
dds_delete(publisher);
dds_delete(participant);
return;
}
CU_Test(ddsc_publisher, wait_for_acks)
{
dds_entity_t participant, publisher;
dds_return_t status;
dds_duration_t zeroSec = ((dds_duration_t)DDS_SECS(0));
dds_duration_t oneSec = ((dds_duration_t)DDS_SECS(1));
dds_duration_t minusOneSec = ((dds_duration_t)DDS_SECS(-1));
status = dds_wait_for_acks(0, minusOneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_BAD_PARAMETER);
status = dds_wait_for_acks(0, zeroSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_PRECONDITION_NOT_MET);
status = dds_wait_for_acks(0, oneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_PRECONDITION_NOT_MET);
status = dds_wait_for_acks(0, DDS_INFINITY);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_PRECONDITION_NOT_MET);
participant = dds_create_participant (DDS_DOMAIN_DEFAULT, NULL, NULL);
CU_ASSERT_GT_FATAL (participant, 0);
status = dds_wait_for_acks(participant, minusOneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_BAD_PARAMETER);
status = dds_wait_for_acks(participant, zeroSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_ILLEGAL_OPERATION);
status = dds_wait_for_acks(participant, oneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_ILLEGAL_OPERATION);
status = dds_wait_for_acks(participant, DDS_INFINITY);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_ILLEGAL_OPERATION);
publisher = dds_create_publisher(participant, NULL, NULL);
CU_ASSERT_GT_FATAL (publisher, 0);
status = dds_wait_for_acks(publisher, minusOneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_BAD_PARAMETER);
status = dds_wait_for_acks(publisher, zeroSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_wait_for_acks(publisher, oneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_wait_for_acks(publisher, DDS_INFINITY);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_suspend(publisher);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_wait_for_acks(publisher, minusOneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_BAD_PARAMETER);
status = dds_wait_for_acks(publisher, zeroSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_wait_for_acks(publisher, oneSec);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
status = dds_wait_for_acks(publisher, DDS_INFINITY);
CU_ASSERT_EQ_FATAL (status, DDS_RETCODE_UNSUPPORTED);
dds_delete(publisher);
dds_delete(participant);
return;
}
CU_Test(ddsc_publisher, coherency)
{
CU_PASS ("coherency not implemented yet");
return;
}
#ifdef _MSC_VER
#pragma warning(pop)
#endif