1
1
openmpi/test/mca/gpr/gpr_dt_copy.c
2006-02-12 19:51:24 +00:00

833 строки
29 KiB
C

/*
* Copyright (c) 2004-2005 The Trustees of Indiana University.
* All rights reserved.
* Copyright (c) 2004-2005 The Trustees of the University of Tennessee.
* All rights reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
/** @file:
*
* The Open MPI general purpose registry - unit test
*
*/
/*
* includes
*/
#include "orte_config.h"
#include <stdio.h>
#include <string.h>
#include "orte/orte_constants.h"
#include "opal/runtime/opal.h"
#include "opal/util/malloc.h"
#include "opal/util/output.h"
#include "orte/class/orte_pointer_array.h"
#include "orte/dss/dss.h"
#include "orte/util/proc_info.h"
#include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/gpr/base/base.h"
static bool test_unstruct(void);
static bool test_keyval(void);
static bool test_val(void);
static bool test_sub(void);
static bool test_trig(void);
static bool test_notify_data(void);
static bool test_notify_msg(void);
FILE *test_out;
int main(int argc, char **argv)
{
int ret;
opal_init();
/* register handler for errnum -> string converstion */
opal_error_register("ORTE", ORTE_ERR_BASE, ORTE_ERR_MAX, orte_err2str);
test_out = stderr;
/* Ensure the process info structure is instantiated and initialized */
if (ORTE_SUCCESS != (ret = orte_proc_info())) {
return ret;
}
orte_process_info.seed = true;
orte_process_info.my_name = (orte_process_name_t*)malloc(sizeof(orte_process_name_t));
orte_process_info.my_name->cellid = 0;
orte_process_info.my_name->jobid = 0;
orte_process_info.my_name->vpid = 0;
/* startup the MCA */
if (OMPI_SUCCESS == mca_base_open()) {
fprintf(stderr, "MCA started\n");
} else {
fprintf(stderr, "MCA could not start\n");
exit (1);
}
/* open the dss */
if (ORTE_SUCCESS == orte_dss_open()) {
fprintf(stderr, "DSS started\n");
} else {
fprintf(stderr, "DSS could not start\n");
exit (1);
}
/* startup the gpr to register data types */
if (ORTE_SUCCESS == orte_gpr_base_open()) {
fprintf(stderr, "GPR opened\n");
} else {
fprintf(stderr, "GPR could not open\n");
exit (1);
}
/* Now do the tests */
fprintf(stderr, "executing test_unstruct\n");
if (test_unstruct()) {
fprintf(stderr, "test_unstruct succeeded\n");
}
else {
fprintf(stderr, "test_unstruct failed\n");
}
fprintf(stderr, "executing test_keyval\n");
if (test_keyval()) {
fprintf(stderr, "test_keyval succeeded\n");
}
else {
fprintf(stderr, "test_keyval failed\n");
}
fprintf(stderr, "executing test_val\n");
if (test_val()) {
fprintf(stderr, "test_val succeeded\n");
}
else {
fprintf(stderr, "test_val failed\n");
}
fprintf(stderr, "executing test_sub\n");
if (test_sub()) {
fprintf(stderr, "test_sub succeeded\n");
}
else {
fprintf(stderr, "test_sub failed\n");
}
fprintf(stderr, "executing test_trig\n");
if (test_trig()) {
fprintf(stderr, "test_trig succeeded\n");
}
else {
fprintf(stderr, "test_trig failed\n");
}
fprintf(stderr, "executing test_notify_data\n");
if (test_notify_data()) {
fprintf(stderr, "test_notify_data succeeded\n");
}
else {
fprintf(stderr, "test_notify_data failed\n");
}
fprintf(stderr, "executing test_notify_msg\n");
if (test_notify_msg()) {
fprintf(stderr, "test_notify_msg succeeded\n");
}
else {
fprintf(stderr, "test_notify_msg failed\n");
}
orte_dss_close();
mca_base_close();
opal_malloc_finalize();
opal_output_finalize();
opal_class_finalize();
return 0;
}
static bool test_unstruct(void)
{
orte_gpr_cmd_flag_t scmd, *dcmd;
orte_gpr_subscription_id_t ssubid, *dsubid;
orte_gpr_trigger_id_t strigid, *dtrigid;
orte_gpr_notify_action_t snotact, *dnotact;
orte_gpr_trigger_action_t strigact, *dtrigact;
orte_gpr_notify_msg_type_t snottype, *dnottype;
orte_gpr_addr_mode_t smode, *dmode;
scmd = 0x0f;
ssubid = 31;
strigid = 28;
snotact = ORTE_GPR_NOTIFY_ANY;
strigact = ORTE_GPR_TRIG_ANY;
snottype = 0x0f;
smode = 0x0f0f;
if (ORTE_SUCCESS != orte_dss.copy((void**)&dcmd, &scmd, ORTE_GPR_CMD)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_CMD returned error\n");
return(false);
}
if (*dcmd != scmd) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_CMD yielded incorrect value\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dsubid, &ssubid, ORTE_GPR_SUBSCRIPTION_ID)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_SUBSCRIPTION_ID returned error\n");
return(false);
}
if (*dsubid != ssubid) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_SUBSCRIPTION_ID yielded incorrect value\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dtrigid, &strigid, ORTE_GPR_TRIGGER_ID)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_TRIGGER_ID returned error\n");
return(false);
}
if (*dtrigid != strigid) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_TRIGGER_ID yielded incorrect value\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dnotact, &snotact, ORTE_GPR_NOTIFY_ACTION)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_NOTIFY_ACTION returned error\n");
return(false);
}
if (*dnotact != snotact) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_NOTIFY_ACTION yielded incorrect value\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dtrigact, &strigact, ORTE_GPR_TRIGGER_ACTION)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_TRIGGER_ACTION returned error\n");
return(false);
}
if (*dtrigact != strigact) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_TRIGGER_ACTION yielded incorrect value\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dnottype, &snottype, ORTE_GPR_NOTIFY_MSG_TYPE)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_NOTIFY_MSG_TYPE returned error\n");
return(false);
}
if (*dnottype != snottype) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_NOTIFY_MSG_TYPE yielded incorrect value\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dmode, &smode, ORTE_GPR_ADDR_MODE)) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_ADDR_MODE returned error\n");
return(false);
}
if (*dmode != smode) {
fprintf(test_out, "orte_dss.copy ORTE_GPR_ADDR_MODE yielded incorrect value\n");
return(false);
}
return (true);
}
static bool test_keyval(void)
{
int16_t i16=10;
int32_t i32=2345;
orte_gpr_keyval_t *src, *dst;
orte_data_value_t *dval, *sval;
orte_gpr_keyval_t src1 = { {OBJ_CLASS(orte_gpr_keyval_t),0},"test-key-2",NULL};
src = OBJ_NEW(orte_gpr_keyval_t);
src->key = strdup("test-key");
src->value = OBJ_NEW(orte_data_value_t);
sval = src->value;
sval->type = ORTE_INT16;
if (ORTE_SUCCESS != orte_dss.copy((void**)&(sval->data), &i16, ORTE_INT16)) {
fprintf(stderr, "orte_dss.copy int16 returned error\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst, src, ORTE_GPR_KEYVAL)) {
fprintf(stderr, "orte_dss.copy dynamic keyval returned error\n");
return(false);
}
if (0 != strcmp(src->key, dst->key)) {
fprintf(stderr, "orte_dss.copy dynamic keyval string mismatch\n");
return(false);
}
sval = src->value;
dval = dst->value;
if (sval->type != dval->type) {
fprintf(stderr, "orte_dss.copy dynamic keyval type mismatch\n");
return(false);
}
if (ORTE_EQUAL != orte_dss.compare(dval->data, sval->data, ORTE_INT16)) {
fprintf(stderr, "orte_dss.copy dynamic keyval data mismatch\n");
return(false);
}
OBJ_RELEASE(dst);
src1.value = OBJ_NEW(orte_data_value_t);
sval = src1.value;
sval->type = ORTE_INT32;
if (ORTE_SUCCESS != orte_dss.set(sval, &i32, ORTE_INT32)) {
fprintf(stderr, "orte_dss.set int32 returned error\n");
return(false);
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst, &src1, ORTE_GPR_KEYVAL)) {
fprintf(stderr, "orte_dss.copy static keyval returned error\n");
return(false);
}
if (0 != strcmp(src1.key, dst->key)) {
fprintf(stderr, "orte_dss.copy static keyval string mismatch\n");
return(false);
}
sval = src1.value;
dval = dst->value;
if (sval->type != dval->type) {
fprintf(stderr, "orte_dss.copy static keyval type mismatch\n");
return(false);
}
if (ORTE_EQUAL != orte_dss.compare(dval->data, sval->data, ORTE_INT32)) {
fprintf(stderr, "orte_dss.copy static keyval data mismatch\n");
return(false);
}
return (true);
}
static bool test_val(void)
{
orte_gpr_value_t *src, *dst;
orte_gpr_value_t value = { {OBJ_CLASS(orte_gpr_value_t),0},
ORTE_GPR_TOKENS_AND,
"test-segment", 1, NULL, 0, NULL };
orte_gpr_keyval_t *keyvals;
orte_gpr_keyval_t keyval = { {OBJ_CLASS(orte_gpr_keyval_t),0},"dumb-key",NULL};
orte_data_value_t *dval, *sval;
size_t j;
int16_t i16;
int32_t i32;
src = OBJ_NEW(orte_gpr_value_t);
src->addr_mode = 0x01;
src->segment = strdup("test-segment");
src->num_tokens = 3;
src->tokens = (char**)malloc(src->num_tokens * sizeof(char*));
for (j=0; j < src->num_tokens; j++) {
src->tokens[j] = strdup("test-token");
}
src->cnt = 21;
src->keyvals = (orte_gpr_keyval_t**)malloc(src->cnt * sizeof(orte_gpr_keyval_t*));
for (j=0; j < src->cnt; j++) {
src->keyvals[j] = OBJ_NEW(orte_gpr_keyval_t);
src->keyvals[j]->value = OBJ_NEW(orte_data_value_t);
dval = src->keyvals[j]->value;
asprintf(&((src->keyvals[j])->key), "%lu",
(unsigned long) j);
dval->type = ((j % 2) == 0) ? ORTE_INT16 : ORTE_INT32;
if (dval->type == ORTE_INT16) {
i16 = 1024*j;
if (ORTE_SUCCESS != orte_dss.copy((void**)&(dval->data), &i16, ORTE_INT16)) {
fprintf(stderr, "orte_dss.copy returned error\n");
return(false);
}
} else {
i32 = 2048*j;
if (ORTE_SUCCESS != orte_dss.copy((void**)&(dval->data), &i32, ORTE_INT32)) {
fprintf(stderr, "orte_dss.copy returned error\n");
return(false);
}
}
}
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst, src, ORTE_GPR_VALUE)) {
fprintf(stderr, "orte_dss.copy dynamic value returned error\n");
return(false);
}
if (src->addr_mode != dst->addr_mode) {
fprintf(stderr, "orte_dss.copy dynamic value addr_mode mismatch\n");
return(false);
}
if (0 != strcmp(src->segment, dst->segment)) {
fprintf(stderr, "orte_dss.copy dynamic value segment mismatch\n");
return(false);
}
if (src->num_tokens != dst->num_tokens) {
fprintf(stderr, "orte_dss.copy dynamic value num_tokens mismatch\n");
return(false);
}
for (j=0; j < src->num_tokens; j++) {
if (0 != strcmp(src->tokens[j], dst->tokens[j])) {
fprintf(stderr, "orte_dss.copy dynamic value token mismatch\n");
return(false);
}
}
if (src->cnt != dst->cnt) {
fprintf(stderr, "orte_dss.copy dynamic value cnt mismatch\n");
return(false);
}
for (j=0; j < src->cnt; j++) {
if (0 != strcmp(src->keyvals[j]->key, dst->keyvals[j]->key)) {
fprintf(stderr, "orte_dss.copy dynamic value key mismatch\n");
return(false);
}
sval = src->keyvals[j]->value;
dval = dst->keyvals[j]->value;
if (sval->type != dval->type) {
fprintf(stderr, "orte_dss.copy dynamic value data type mismatch\n");
return(false);
}
if (ORTE_EQUAL != orte_dss.compare(dval->data, sval->data, sval->type)) {
fprintf(stderr, "orte_dss.copy dynamic value data mismatch\n");
return(false);
}
}
OBJ_RELEASE(dst);
value.keyvals = &keyvals;
keyvals = &keyval;
keyval.value = OBJ_NEW(orte_data_value_t);
sval = keyval.value;
sval->type = ORTE_INT32;
sval->data = &i32;
i32 = 23456;
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst, &value, ORTE_GPR_VALUE)) {
fprintf(stderr, "orte_dss.copy static value returned error\n");
return(false);
}
if (value.addr_mode != dst->addr_mode) {
fprintf(stderr, "orte_dss.copy static value addr_mode mismatch\n");
return(false);
}
if (0 != strcmp(value.segment, dst->segment)) {
fprintf(stderr, "orte_dss.copy static value segment mismatch\n");
return(false);
}
if (value.num_tokens != dst->num_tokens) {
fprintf(stderr, "orte_dss.copy static value num_tokens mismatch\n");
return(false);
}
for (j=0; j < value.num_tokens; j++) {
if (0 != strcmp(value.tokens[j], dst->tokens[j])) {
fprintf(stderr, "orte_dss.copy static value token mismatch\n");
return(false);
}
}
if (value.cnt != dst->cnt) {
fprintf(stderr, "orte_dss.copy static value cnt mismatch\n");
return(false);
}
for (j=0; j < value.cnt; j++) {
if (0 != strcmp(value.keyvals[j]->key, dst->keyvals[j]->key)) {
fprintf(stderr, "orte_dss.copy static value key mismatch\n");
return(false);
}
sval = value.keyvals[j]->value;
dval = dst->keyvals[j]->value;
if (sval->type != dval->type) {
fprintf(stderr, "orte_dss.copy static value data type mismatch\n");
return(false);
}
if (ORTE_EQUAL != orte_dss.compare(dval->data, sval->data, sval->type)) {
fprintf(stderr, "orte_dss.copy static value data mismatch\n");
return(false);
}
}
OBJ_RELEASE(dst);
return(true);
}
static bool test_sub(void)
{
size_t i, j, k, m;
orte_gpr_subscription_t *src[2];
orte_gpr_subscription_t *dst[2];
/* test gpr_subscription */
for(i=0; i<2; i++) {
src[i] = OBJ_NEW(orte_gpr_subscription_t);
if (i % 2) {
src[i]->name = strdup("dummy-name");
}
src[i]->id = (orte_gpr_subscription_id_t)i;
src[i]->action = (orte_gpr_notify_action_t)0x0f;
/* test value counts of 1 to +1 */
src[i]->cnt = i + 1;
src[i]->values = (orte_gpr_value_t**)malloc(src[i]->cnt * sizeof(orte_gpr_value_t*));
for (k=0; k < src[i]->cnt; k++) {
src[i]->values[k] = OBJ_NEW(orte_gpr_value_t);
src[i]->values[k]->addr_mode = (uint16_t) i;
src[i]->values[k]->segment = strdup("test-segment");
/* test token counts of 0! to */
src[i]->values[k]->num_tokens = i;
if (src[i]->values[k]->num_tokens) { /* if to allow testing of token count of zero */
src[i]->values[k]->tokens = (char**)malloc(src[i]->values[k]->num_tokens * sizeof(char*));
for (j=0; j < src[i]->values[k]->num_tokens; j++) {
src[i]->values[k]->tokens[j] = strdup("test-token");
}
}
/* test key counts of 0 to */
src[i]->values[k]->cnt = i;
if (src[i]->values[k]->cnt) { /* if to allow testing of num_keys count of zero */
src[i]->values[k]->keyvals = (orte_gpr_keyval_t**)malloc(
src[i]->values[k]->cnt * sizeof(orte_gpr_keyval_t*));
for (j=0; j < src[i]->values[k]->cnt; j++) {
src[i]->values[k]->keyvals[j] = OBJ_NEW(orte_gpr_keyval_t);
src[i]->values[k]->keyvals[j]->key = strdup("test-key");
}
}
/* skip the pointers for cb_func and user_tag */
}
}
for (j=0; j<2; j++) {
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst[j], src[j], ORTE_GPR_SUBSCRIPTION)) {
fprintf(test_out, "test_sub copy failed\n");
return(false);
}
if ((NULL == src[j]->name && NULL != dst[j]->name) ||
(NULL != src[j]->name && NULL == dst[j]->name)
) {
fprintf(test_out, "test_sub invalid name results\n");
return(false);
}
if ((NULL != src[j]->name &&
0 != strcmp(src[j]->name, dst[j]->name)) ||
src[j]->id != dst[j]->id ||
src[j]->action != dst[j]->action ||
src[j]->cnt != dst[j]->cnt
) {
fprintf(test_out, "test_sub: invalid values\n");
return(false);
}
/* now compare each of the size/cnt dependent values */
for (k=0; k<src[j]->cnt; k++) {
if (src[j]->values[k]->num_tokens != dst[j]->values[k]->num_tokens) {
fprintf(test_out, "test_sub: invalid results (value num_tokens)\n");
return(false);
}
for (m=0; m < src[j]->values[k]->num_tokens; m++) {
if (0 != strcmp(src[j]->values[k]->tokens[m], dst[j]->values[k]->tokens[m])) {
fprintf(test_out, "test_sub: invalid results (tokens)\n");
return(false);
}
}
if (src[j]->values[k]->cnt != dst[j]->values[k]->cnt) {
fprintf(test_out, "test_sub: invalid results (value cnt)\n");
return(false);
}
for (m=0; m < src[j]->values[k]->cnt; m++) {
if (0 != strcmp(src[j]->values[k]->keyvals[m]->key,
dst[j]->values[k]->keyvals[m]->key)) {
fprintf(test_out, "test_sub: invalid results (keys)\n");
return(false);
}
}
}
}
return (true);
}
static bool test_trig(void)
{
size_t i, j, k, m;
orte_gpr_trigger_t *src[2];
orte_gpr_trigger_t *dst[2];
/* test gpr_trigger */
for(i=0; i<2; i++) {
src[i] = OBJ_NEW(orte_gpr_trigger_t);
if (i % 2) {
src[i]->name = strdup("dummy-name");
}
src[i]->id = (orte_gpr_trigger_id_t)i;
src[i]->action = (orte_gpr_trigger_action_t)0x0f;
/* test value counts of 1 to +1 */
src[i]->cnt = i + 1;
src[i]->values = (orte_gpr_value_t**)malloc(src[i]->cnt * sizeof(orte_gpr_value_t*));
for (k=0; k < src[i]->cnt; k++) {
src[i]->values[k] = OBJ_NEW(orte_gpr_value_t);
src[i]->values[k]->addr_mode = (uint16_t) i;
src[i]->values[k]->segment = strdup("test-segment");
/* test token counts of 0! to */
src[i]->values[k]->num_tokens = i;
if (src[i]->values[k]->num_tokens) { /* if to allow testing of token count of zero */
src[i]->values[k]->tokens = (char**)malloc(src[i]->values[k]->num_tokens * sizeof(char*));
for (j=0; j < src[i]->values[k]->num_tokens; j++) {
src[i]->values[k]->tokens[j] = strdup("test-token");
}
}
/* test key counts of 0 to */
src[i]->values[k]->cnt = i;
if (src[i]->values[k]->cnt) { /* if to allow testing of num_keys count of zero */
src[i]->values[k]->keyvals = (orte_gpr_keyval_t**)malloc(
src[i]->values[k]->cnt * sizeof(orte_gpr_keyval_t*));
for (j=0; j < src[i]->values[k]->cnt; j++) {
src[i]->values[k]->keyvals[j] = OBJ_NEW(orte_gpr_keyval_t);
src[i]->values[k]->keyvals[j]->key = strdup("test-key");
}
}
/* skip the pointers for cb_func and user_tag */
}
}
for(j=0; j<2; j++) {
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst[j], src[j], ORTE_GPR_TRIGGER)) {
fprintf(test_out, "test_trig copy failed\n");
return(false);
}
if ((NULL == src[j]->name && NULL != dst[j]->name) ||
(NULL != src[j]->name && NULL == dst[j]->name)
) {
fprintf(test_out, "test_trig invalid name results\n");
return(false);
}
if ((NULL != src[j]->name &&
0 != strcmp(src[j]->name, dst[j]->name)) ||
src[j]->id != dst[j]->id ||
src[j]->action != dst[j]->action ||
src[j]->cnt != dst[j]->cnt
) {
fprintf(test_out, "test_trig: invalid value results\n");
return(false);
}
/* now compare each of the size/cnt dependent values */
for (k=0; k<src[j]->cnt; k++) {
if (src[j]->values[k]->num_tokens != dst[j]->values[k]->num_tokens) {
fprintf(test_out, "test_trig: invalid results (value num_tokens)\n");
return(false);
}
for (m=0; m < src[j]->values[k]->num_tokens; m++) {
if (0 != strcmp(src[j]->values[k]->tokens[m], dst[j]->values[k]->tokens[m])) {
fprintf(test_out, "test_trig: invalid results (tokens)\n");
return(false);
}
}
if (src[j]->values[k]->cnt != dst[j]->values[k]->cnt) {
fprintf(test_out, "test_trig: invalid results (value cnt)\n");
return(false);
}
for (m=0; m < src[j]->values[k]->cnt; m++) {
if (0 != strcmp(src[j]->values[k]->keyvals[m]->key,
dst[j]->values[k]->keyvals[m]->key)) {
fprintf(test_out, "test_trig: invalid results (keys)\n");
return(false);
}
}
}
}
return (true);
}
static bool test_notify_data(void)
{
size_t i, j, k, l, n;
orte_data_value_t *sdv, *ddv;
int32_t i32;
orte_gpr_value_t *value, **sval, **dval;
orte_gpr_notify_data_t *src[2];
orte_gpr_notify_data_t *dst[2];
for(i=0; i<2; i++) {
src[i] = OBJ_NEW(orte_gpr_notify_data_t);
if (i % 2) { /* test half with a name and with remove=true */
src[i]->target = strdup("test-notify-data-name");
src[i]->remove = true;
}
src[i]->id = i;
/* test value counts of 0 to -1 */
src[i]->cnt = i; /* value count */
for (j=0; j < src[i]->cnt; j++) {
value = OBJ_NEW(orte_gpr_value_t);
value->addr_mode = (orte_gpr_addr_mode_t) i+j+1;
value->segment = strdup("test-gpr-notify-value-segment-name"); /* ek segment name again! */
/* tokens */
value->num_tokens = j; /* test tokens within gpr values within notify message between 0--1 */
if (value->num_tokens) { /* if to allow testing of num_tokens count of zero */
value->tokens = (char**)malloc(value->num_tokens * sizeof(char*));
for (k=0; k < value->num_tokens; k++) {
value->tokens[k] = strdup("test-grp-notify-value-token");
} /* for each token */
} /* if tokens */
/* keyval pairs (field name is 'cnt' same as used for value count so be careful) */
value->cnt = j; /* test keyval pairs within gpr values within notify message between 0--1 */
if (value->cnt) { /* if to allow testing of keyval pair count of zero */
value->keyvals = (orte_gpr_keyval_t**)malloc(value->cnt * sizeof(orte_gpr_keyval_t*));
for (k=0; k < value->cnt; k++) {
value->keyvals[k] = OBJ_NEW (orte_gpr_keyval_t);
value->keyvals[k]->value = OBJ_NEW(orte_data_value_t);
sdv = value->keyvals[k]->value;
value->keyvals[k]->key = strdup("test-grp-notify-value-key");
sdv->type = ORTE_INT32; /* make it simplier */
i32 = (i*100)+(j*10)+k;
if (ORTE_SUCCESS != orte_dss.copy((void**)&(sdv->data), &i32, ORTE_INT32)) {
fprintf(test_out, "test_notify_data: error copying data into source value\n");
return(false);
}
} /* for each keyval pair */
} /* if keyvals */
/* add the value to the data object */
orte_pointer_array_add(&k, src[i]->values, value);
} /* for each value */
}
for(j=0; j<2; j++) {
if (ORTE_SUCCESS != orte_dss.copy((void**)&dst[j], src[j], ORTE_GPR_NOTIFY_DATA)) {
fprintf(test_out, "test_notify_data copy failed\n");
return(false);
}
if (
src[j]->id != dst[j]->id ||
src[j]->cnt != dst[j]->cnt ||
src[j]->remove != dst[j]->remove
) {
fprintf(test_out, "test_notify_data: invalid values\n");
return(false);
}
if ((NULL == src[j]->target && NULL != dst[j]->target) ||
(NULL != src[j]->target && NULL == dst[j]->target)) {
fprintf(test_out, "test_notify_data failed with mismatched NULL targets\n");
return(false);
}
if (NULL != src[j]->target && NULL != dst[j]->target &&
0 != strcmp(src[j]->target, dst[j]->target)) {
fprintf(test_out, "test_notify_data failed with mismatched target names\n");
return(false);
}
/* now compare each value of the cnt depedant values */
sval = (orte_gpr_value_t**)(src[j]->values)->addr;
dval = (orte_gpr_value_t**)(dst[j]->values)->addr;
/* because of the way this has been done, we can safely assume
* that these are in the same relative order
*/
for (k=0, n=0; n < src[j]->cnt &&
k < (src[j]->values)->size; k++) {
if (NULL != sval[k]) {
n++;
if (sval[k]->addr_mode != dval[k]->addr_mode) {
fprintf(test_out, "test_notify_data: invalid results (values-addr-mode)\n");
return(false);
}
if (0 != strcmp(sval[k]->segment, dval[k]->segment)) {
fprintf(test_out, "test_notify_data: invalid results (values-segment)\n");
return(false);
}
if (sval[k]->num_tokens != dval[k]->num_tokens) {
fprintf(test_out, "test_notify_data: invalid results (values-num_tokens)\n");
return(false);
}
for (l=0; l<sval[k]->num_tokens; l++) {
if (0 != strcmp(sval[k]->tokens[l], dval[k]->tokens[l])) {
fprintf(test_out, "test_notify_data: invalid results (values-tokens)\n");
return(false);
}
} /* for each token inside each grp value */
if (sval[k]->cnt != dval[k]->cnt) {
fprintf(test_out, "test_notify_data: invalid results (values-cnt (of keyval pairs))\n");
return(false);
}
for (l=0; l< sval[k]->cnt; l++) {
if (0 != strcmp(sval[k]->keyvals[l]->key, dval[k]->keyvals[l]->key)) {
fprintf(test_out, "test_notify_data: invalid results (values-keyvals-key)\n");
return(false);
}
sdv = sval[k]->keyvals[l]->value;
ddv = dval[k]->keyvals[l]->value;
if (sdv->type != ddv->type) {
fprintf(test_out, "test_notify_data: invalid results (values-keyvals-type)\n");
return(false);
}
if (ORTE_EQUAL != orte_dss.compare(sdv->data, ddv->data, sdv->type)) {
fprintf(test_out, "test_notify_data: invalid results (values-keyvals-value.i32)\n");
return(false);
}
}/* for each keyvalpair inside each grp value */
} /* for each grp value */
}
} /* for each ELEMENT */
return (true);
}
static bool test_notify_msg(void)
{
return (true);
}