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