Update function headers and added dds_create_domain() tests.
Signed-off-by: Martin Bremmer <martin.bremmer@adlinktech.com>
This commit is contained in:
parent
33ba911192
commit
40973d8e29
5 changed files with 264 additions and 51 deletions
|
@ -747,9 +747,35 @@ dds_create_participant(
|
|||
* @brief Creates a domain with a given configuration
|
||||
*
|
||||
* To explicitly create a domain based on a configuration passed as a string.
|
||||
* Normally, the domain is created implicitly on the first call to
|
||||
* dds_create_particiant based on the configuration specified throught
|
||||
* the environment. This function allows to by-pass this behaviour.
|
||||
*
|
||||
* It will not be created if a domain with the given domain id already exists.
|
||||
* This could have been created implicitly by a dds_create_participant().
|
||||
*
|
||||
* Please be aware that the given domain_id always takes precedence over the
|
||||
* configuration.
|
||||
*
|
||||
* | domain_id | domain id in config | result
|
||||
* +-----------+---------------------+----------
|
||||
* | n | any (or absent) | n, config is used
|
||||
* | n | m == n | n, config is used
|
||||
* | n | m != n | n, config is ignored: default
|
||||
*
|
||||
* Config models:
|
||||
* 1: <CycloneDDS>
|
||||
* <Domain id="X">...</Domain>
|
||||
* <Domain .../>
|
||||
* </CycloneDDS>
|
||||
* where ... is all that can today be set in children of CycloneDDS
|
||||
* with the exception of the id
|
||||
* 2: <CycloneDDS>
|
||||
* <Domain><Id>X</Id></Domain>
|
||||
* ...
|
||||
* </CycloneDDS>
|
||||
* legacy form, domain id must be the first element in the file with
|
||||
* a value (if nothing has been set previously, it a warning is good
|
||||
* enough)
|
||||
*
|
||||
* Using NULL or "" as config will create a domain with default settings.
|
||||
*
|
||||
*
|
||||
* @param[in] domain The domain to be created. DEFAULT_DOMAIN is not allowed.
|
||||
|
@ -759,7 +785,7 @@ dds_create_participant(
|
|||
*
|
||||
* @retval DDS_RETCODE_BAD_PARAMETER
|
||||
* Illegal value for domain id or the configfile parameter is NULL.
|
||||
* @retval DDS_PRECONDITION_NOT_MET
|
||||
* @retval DDS_RETCODE_PRECONDITION_NOT_MET
|
||||
* The domain already existed and cannot be created again.
|
||||
* @retval DDS_RETCODE_ERROR
|
||||
* An internal error has occurred.
|
||||
|
@ -774,15 +800,10 @@ dds_create_domain(const dds_domainid_t domain, const char *config);
|
|||
* For instance, it will return the Participant that was used when
|
||||
* creating a Publisher (when that Publisher was provided here).
|
||||
*
|
||||
* When a reader or a writer are created with a partition, then a
|
||||
* subscriber or publisher respectively are created implicitly. These
|
||||
* implicit subscribers or publishers will be deleted automatically
|
||||
* when the reader or writer is deleted. However, when this function
|
||||
* returns such an implicit entity, it is from there on out considered
|
||||
* 'explicit'. This means that it isn't deleted automatically anymore.
|
||||
* The application should explicitly call dds_delete on those entities
|
||||
* now (or delete the parent participant which will delete all entities
|
||||
* within its hierarchy).
|
||||
* When a reader or a writer are created with a participant, then a
|
||||
* subscriber or publisher are created implicitly.
|
||||
* This function will return the implicit parent and not the used
|
||||
* participant.
|
||||
*
|
||||
* @param[in] entity Entity from which to get its parent.
|
||||
*
|
||||
|
@ -849,15 +870,10 @@ dds_get_participant(dds_entity_t entity);
|
|||
* When supplying NULL as list and 0 as size, you can use this to acquire
|
||||
* the number of children without having to pre-allocate a list.
|
||||
*
|
||||
* When a reader or a writer are created with a partition, then a
|
||||
* subscriber or publisher respectively are created implicitly. These
|
||||
* implicit subscribers or publishers will be deleted automatically
|
||||
* when the reader or writer is deleted. However, when this function
|
||||
* returns such an implicit entity, it is from there on out considered
|
||||
* 'explicit'. This means that it isn't deleted automatically anymore.
|
||||
* The application should explicitly call dds_delete on those entities
|
||||
* now (or delete the parent participant which will delete all entities
|
||||
* within its hierarchy).
|
||||
* When a reader or a writer are created with a participant, then a
|
||||
* subscriber or publisher are created implicitly.
|
||||
* When used on the participant, this function will return the implicit
|
||||
* subscriber and/or publisher and not the related reader/writer.
|
||||
*
|
||||
* @param[in] entity Entity from which to get its children.
|
||||
* @param[out] children Pre-allocated array to contain the found children.
|
||||
|
@ -866,7 +882,7 @@ dds_get_participant(dds_entity_t entity);
|
|||
* @returns Number of children or an error code.
|
||||
*
|
||||
* @retval >=0
|
||||
* Number of childer found children (can be larger than 'size').
|
||||
* Number of found children (can be larger than 'size').
|
||||
* @retval DDS_RETCODE_ERROR
|
||||
* An internal error has occurred.
|
||||
* @retval DDS_RETCODE_BAD_PARAMETER
|
||||
|
@ -1197,6 +1213,7 @@ dds_wait_for_acks(dds_entity_t publisher_or_writer, dds_duration_t timeout);
|
|||
/**
|
||||
* @brief Creates a new instance of a DDS reader.
|
||||
*
|
||||
* When a participant is used to create a reader, an implicit subscriber is created.
|
||||
* This implicit subscriber will be deleted automatically when the created reader
|
||||
* is deleted.
|
||||
*
|
||||
|
@ -1223,6 +1240,7 @@ dds_create_reader(
|
|||
/**
|
||||
* @brief Creates a new instance of a DDS reader with a custom history cache.
|
||||
*
|
||||
* When a participant is used to create a reader, an implicit subscriber is created.
|
||||
* This implicit subscriber will be deleted automatically when the created reader
|
||||
* is deleted.
|
||||
*
|
||||
|
@ -1270,6 +1288,7 @@ dds_reader_wait_for_historical_data(
|
|||
/**
|
||||
* @brief Creates a new instance of a DDS writer.
|
||||
*
|
||||
* When a participant is used to create a writer, an implicit publisher is created.
|
||||
* This implicit publisher will be deleted automatically when the created writer
|
||||
* is deleted.
|
||||
*
|
||||
|
|
|
@ -270,9 +270,12 @@ dds_entity_t dds_create_domain (const dds_domainid_t domain, const char *config)
|
|||
dds_domain *dom;
|
||||
dds_entity_t ret;
|
||||
|
||||
if (domain == DDS_DOMAIN_DEFAULT || config == NULL)
|
||||
if (domain > 230)
|
||||
return DDS_RETCODE_BAD_PARAMETER;
|
||||
|
||||
if (config == NULL)
|
||||
config = "";
|
||||
|
||||
/* Make sure DDS instance is initialized. */
|
||||
if ((ret = dds_init ()) < 0)
|
||||
return ret;
|
||||
|
|
|
@ -83,30 +83,3 @@ CU_Test (ddsc_config, user_config, .init = ddsrt_init, .fini = ddsrt_fini)
|
|||
dds_delete (domain);
|
||||
}
|
||||
|
||||
CU_Test (ddsc_config, incorrect_config, .init = ddsrt_init, .fini = ddsrt_fini)
|
||||
{
|
||||
dds_entity_t dom;
|
||||
|
||||
dom = dds_create_domain (1, NULL);
|
||||
CU_ASSERT_FATAL (dom == DDS_RETCODE_BAD_PARAMETER);
|
||||
|
||||
dom = dds_create_domain (1, "<CycloneDDS incorrect XML");
|
||||
CU_ASSERT_FATAL (dom == DDS_RETCODE_ERROR); /* FIXME: "error" is rather unspecific for a bad configuration */
|
||||
|
||||
dom = dds_create_domain (DDS_DOMAIN_DEFAULT,
|
||||
"<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain>"
|
||||
"<DDSI2E><Internal><MaxParticipants>2</MaxParticipants></Internal></DDSI2E>"
|
||||
"</"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL (dom == DDS_RETCODE_BAD_PARAMETER);
|
||||
|
||||
dom = dds_create_domain (2,
|
||||
"<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain>"
|
||||
"<DDSI2E><Internal><MaxParticipants>2</MaxParticipants></Internal></DDSI2E>"
|
||||
"</"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL (dom > 0);
|
||||
|
||||
/* 2nd attempt at creating the same domain should fail */
|
||||
CU_ASSERT_FATAL (dds_create_domain (2, "") == DDS_RETCODE_PRECONDITION_NOT_MET);
|
||||
|
||||
dds_delete (dom);
|
||||
}
|
||||
|
|
|
@ -140,3 +140,157 @@ CU_Test(ddsc_domain, delete_cyclonedds)
|
|||
rc = dds_get_domainid (pp[0], &did);
|
||||
CU_ASSERT_FATAL (rc == DDS_RETCODE_PRECONDITION_NOT_MET);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, valid)
|
||||
{
|
||||
dds_return_t ret;
|
||||
dds_domainid_t did;
|
||||
dds_entity_t domain;
|
||||
|
||||
domain = dds_create_domain(1, "<"DDS_PROJECT_NAME"><Domain><Id>1</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain > 0);
|
||||
|
||||
ret = dds_get_domainid (domain, &did);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
CU_ASSERT_FATAL(did == 1);
|
||||
|
||||
ret = dds_delete(domain);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
ret = dds_delete(domain);
|
||||
CU_ASSERT_FATAL(ret != DDS_RETCODE_OK);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, mismatch)
|
||||
{
|
||||
dds_return_t ret;
|
||||
dds_domainid_t did;
|
||||
dds_entity_t domain;
|
||||
|
||||
/* The config should have been ignored. */
|
||||
domain = dds_create_domain(2, "<"DDS_PROJECT_NAME"><Domain><Id>3</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain > 0);
|
||||
|
||||
ret = dds_get_domainid (domain, &did);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
CU_ASSERT_FATAL(did == 2);
|
||||
|
||||
ret = dds_delete(domain);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, empty)
|
||||
{
|
||||
dds_return_t ret;
|
||||
dds_domainid_t did;
|
||||
dds_entity_t domain;
|
||||
|
||||
/* This should create a domain with default settings. */
|
||||
domain = dds_create_domain(3, "");
|
||||
CU_ASSERT_FATAL(domain > 0);
|
||||
|
||||
ret = dds_get_domainid (domain, &did);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
CU_ASSERT_FATAL(did == 3);
|
||||
|
||||
ret = dds_delete(domain);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, null)
|
||||
{
|
||||
dds_return_t ret;
|
||||
dds_domainid_t did;
|
||||
dds_entity_t domain;
|
||||
|
||||
/* This should start create a domain with default settings. */
|
||||
domain = dds_create_domain(5, NULL);
|
||||
CU_ASSERT_FATAL(domain > 0);
|
||||
|
||||
ret = dds_get_domainid (domain, &did);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
CU_ASSERT_FATAL(did == 5);
|
||||
|
||||
ret = dds_delete(domain);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, after_domain)
|
||||
{
|
||||
dds_entity_t domain1;
|
||||
dds_entity_t domain2;
|
||||
|
||||
domain1 = dds_create_domain(4, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain1 > 0);
|
||||
|
||||
domain2 = dds_create_domain(4, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain2 == DDS_RETCODE_PRECONDITION_NOT_MET);
|
||||
|
||||
dds_delete(domain1);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, after_participant)
|
||||
{
|
||||
dds_entity_t domain;
|
||||
dds_entity_t participant;
|
||||
|
||||
participant = dds_create_participant (5, NULL, NULL);
|
||||
CU_ASSERT_FATAL(participant > 0);
|
||||
|
||||
domain = dds_create_domain(5, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain == DDS_RETCODE_PRECONDITION_NOT_MET);
|
||||
|
||||
dds_delete(participant);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, diff)
|
||||
{
|
||||
dds_return_t ret;
|
||||
dds_domainid_t did;
|
||||
dds_entity_t domain1;
|
||||
dds_entity_t domain2;
|
||||
|
||||
domain1 = dds_create_domain(1, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain1 > 0);
|
||||
|
||||
domain2 = dds_create_domain(2, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain2 > 0);
|
||||
|
||||
ret = dds_get_domainid (domain1, &did);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
CU_ASSERT_FATAL(did == 1);
|
||||
|
||||
ret = dds_get_domainid (domain2, &did);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
CU_ASSERT_FATAL(did == 2);
|
||||
|
||||
ret = dds_delete(domain1);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
ret = dds_delete(domain2);
|
||||
CU_ASSERT_FATAL(ret == DDS_RETCODE_OK);
|
||||
|
||||
ret = dds_delete(domain1);
|
||||
CU_ASSERT_FATAL(ret != DDS_RETCODE_OK);
|
||||
ret = dds_delete(domain2);
|
||||
CU_ASSERT_FATAL(ret != DDS_RETCODE_OK);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, domain_default)
|
||||
{
|
||||
dds_entity_t domain;
|
||||
domain = dds_create_domain(DDS_DOMAIN_DEFAULT, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain == DDS_RETCODE_BAD_PARAMETER);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, invalid_xml)
|
||||
{
|
||||
dds_entity_t domain;
|
||||
domain = dds_create_domain(1, "<CycloneDDS incorrect XML");
|
||||
CU_ASSERT_FATAL(domain == DDS_RETCODE_ERROR);
|
||||
}
|
||||
|
||||
CU_Test(ddsc_domain_create, invalid_id)
|
||||
{
|
||||
dds_entity_t domain;
|
||||
domain = dds_create_domain(321, "<"DDS_PROJECT_NAME"><Domain><Id>any</Id></Domain></"DDS_PROJECT_NAME">");
|
||||
CU_ASSERT_FATAL(domain == DDS_RETCODE_BAD_PARAMETER);
|
||||
}
|
||||
|
|
|
@ -992,6 +992,70 @@ CU_Test(ddsc_entity_get_parent, implicit_subscriber)
|
|||
}
|
||||
/*************************************************************************************************/
|
||||
|
||||
/*************************************************************************************************/
|
||||
CU_Test(ddsc_entity_implicit, delete_publisher)
|
||||
{
|
||||
dds_entity_t participant;
|
||||
dds_entity_t writer;
|
||||
dds_entity_t parent;
|
||||
dds_entity_t topic;
|
||||
dds_return_t ret;
|
||||
char name[100];
|
||||
|
||||
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
|
||||
CU_ASSERT_FATAL(participant > 0);
|
||||
|
||||
topic = dds_create_topic(participant, &RoundTripModule_DataType_desc, create_topic_name("ddsc_entity_implicit_delete_publisher", name, 100), NULL, NULL);
|
||||
CU_ASSERT_FATAL(topic > 0);
|
||||
|
||||
writer = dds_create_writer(participant, topic, NULL, NULL);
|
||||
CU_ASSERT_FATAL(writer > 0);
|
||||
|
||||
parent = dds_get_parent(writer);
|
||||
CU_ASSERT_FATAL(parent > 0);
|
||||
|
||||
ret = dds_delete(parent);
|
||||
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
|
||||
|
||||
ret = dds_delete(writer);
|
||||
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_BAD_PARAMETER);
|
||||
|
||||
dds_delete(participant);
|
||||
}
|
||||
/*************************************************************************************************/
|
||||
|
||||
/*************************************************************************************************/
|
||||
CU_Test(ddsc_entity_implicit, delete_subscriber)
|
||||
{
|
||||
dds_entity_t participant;
|
||||
dds_entity_t reader;
|
||||
dds_entity_t parent;
|
||||
dds_entity_t topic;
|
||||
dds_return_t ret;
|
||||
char name[100];
|
||||
|
||||
participant = dds_create_participant(DDS_DOMAIN_DEFAULT, NULL, NULL);
|
||||
CU_ASSERT_FATAL(participant > 0);
|
||||
|
||||
topic = dds_create_topic(participant, &RoundTripModule_DataType_desc, create_topic_name("ddsc_entity_implicit_delete_subscriber", name, 100), NULL, NULL);
|
||||
CU_ASSERT_FATAL(topic > 0);
|
||||
|
||||
reader = dds_create_reader(participant, topic, NULL, NULL);
|
||||
CU_ASSERT_FATAL(reader > 0);
|
||||
|
||||
parent = dds_get_parent(reader);
|
||||
CU_ASSERT_FATAL(parent > 0);
|
||||
|
||||
ret = dds_delete(parent);
|
||||
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_OK);
|
||||
|
||||
ret = dds_delete(reader);
|
||||
CU_ASSERT_EQUAL_FATAL(ret, DDS_RETCODE_BAD_PARAMETER);
|
||||
|
||||
dds_delete(participant);
|
||||
}
|
||||
/*************************************************************************************************/
|
||||
|
||||
/*************************************************************************************************/
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue