tests/immsv/common/immtest.c | 60 +-
tests/immsv/implementer/Makefile.am | 1 +
tests/immsv/implementer/applier.c | 24 +-
tests/immsv/implementer/test_cleanup.c | 38 +-
tests/immsv/implementer/test_saImmOiLongDn.c | 621 +++++++++++++++++
tests/immsv/implementer/test_saImmOiRtObjectCreate_2.c | 10 +-
tests/immsv/management/Makefile.am | 1 +
tests/immsv/management/test_cleanup.c | 38 +-
tests/immsv/management/test_saImmOmLongDn.c | 368 ++++++++++
9 files changed, 1113 insertions(+), 48 deletions(-)
New test cases have been added to immomtest and immoitest.
If SA_ENABLE_EXTENDED_NAMES is not set, immomtest and immoitest can use
--longDn parameter to set SA_ENABLE_EXTENDED_NAMES for testing.
Option -h and --help have been added to show the usage of immomtest and
immoitest
diff --git a/tests/immsv/common/immtest.c b/tests/immsv/common/immtest.c
--- a/tests/immsv/common/immtest.c
+++ b/tests/immsv/common/immtest.c
@@ -16,6 +16,7 @@
*/
#include <stdlib.h>
+#include <libgen.h>
#include <sys/time.h>
#include <unistd.h>
#include <pthread.h>
@@ -43,21 +44,59 @@ const SaNameT rootObj = {
void (*test_setup)(void) = NULL;
void (*test_cleanup)(void) = NULL;
+void usage(const char *progname) {
+ printf("Usage: %s [-h] [--help] [--longDn] [suite [testcase]]\n\n",
progname);
+ printf("OPTIONS:\n");
+ printf("\t-h, --help this help\n");
+ printf("\t--longDn enable extended names support\n");
+ printf("\tsuite suite for testing. 0 for listing all tests\n");
+ printf("\ttestcase test case for testing in specific suite\n");
+}
+
int main(int argc, char **argv)
{
int suite = ALL_SUITES, tcase = ALL_TESTS;
int rc = 0;
+ int i;
+ int index = 0;
+ int longDn = 0;
+ int failed = 0;
+ char *endptr;
srandom(getpid());
- if (argc > 1)
- {
- suite = atoi(argv[1]);
+ for(i=1; i<argc; i++) {
+ if(!strcmp(argv[i], "--longDn")) {
+ longDn = 1;
+ } else if(!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
+ usage(basename(argv[0]));
+ return 0;
+ } else if(index == 0) {
+ suite = strtol(argv[i], &endptr, 10);
+ if(endptr && *endptr) {
+ failed = 1;
+ } else {
+ index++;
+ }
+ } else if(index == 1) {
+ tcase = strtol(argv[i], &endptr, 10);
+ if(endptr && *endptr) {
+ failed = 1;
+ } else {
+ index++;
+ }
+ } else {
+ failed = 1;
+ }
+
+ if(failed) {
+ fprintf(stderr, "Try '%s --help' for more information\n",
argv[0]);
+ return EXIT_FAILURE;
+ }
}
- if (argc > 2)
- {
- tcase = atoi(argv[2]);
+ if(longDn) {
+ setenv("SA_ENABLE_EXTENDED_NAMES", "1", 1);
}
if(test_setup)
@@ -111,7 +150,10 @@ SaAisErrorT config_class_create(SaImmHan
SaImmAttrDefinitionT_2 attr7 = {
"attr7", SA_IMM_ATTR_SAANYT, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE
| SA_IMM_ATTR_MULTI_VALUE | SA_IMM_ATTR_NO_DUPLICATES, NULL};
- const SaImmAttrDefinitionT_2* attributes[] = {&rdn, &attr1, &attr2,
&attr3, &attr4, &attr5, &attr6, &attr7, NULL};
+ SaImmAttrDefinitionT_2 attr8 = {
+ "attr8", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE, NULL};
+
+ const SaImmAttrDefinitionT_2* attributes[] = {&rdn, &attr1, &attr2,
&attr3, &attr4, &attr5, &attr6, &attr7, &attr8, NULL};
err = saImmOmClassCreate_2(immHandle, configClassName, SA_IMM_CLASS_CONFIG,
attributes);
@@ -142,8 +184,10 @@ SaAisErrorT runtime_class_create(SaImmHa
SaImmAttrDefinitionT_2 attr1 = {
"attr1", SA_IMM_ATTR_SAUINT32T, SA_IMM_ATTR_RUNTIME, NULL};
+ SaImmAttrDefinitionT_2 attr2 = {
+ "attr2", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_RUNTIME, NULL};
- const SaImmAttrDefinitionT_2* attributes[] = {&rdn, &attr1, NULL};
+ const SaImmAttrDefinitionT_2* attributes[] = {&rdn, &attr1, &attr2, NULL};
return saImmOmClassCreate_2(immHandle, runtimeClassName,
SA_IMM_CLASS_RUNTIME,
attributes);
diff --git a/tests/immsv/implementer/Makefile.am
b/tests/immsv/implementer/Makefile.am
--- a/tests/immsv/implementer/Makefile.am
+++ b/tests/immsv/implementer/Makefile.am
@@ -44,6 +44,7 @@ immoitest_SOURCES = \
test_SaImmOiCcb.c \
test_SaImmOiAdminOperation.c \
test_saImmOiAugmentCcbInitialize.c \
+ test_saImmOiLongDn.c \
test_cleanup.c
immoitest_LDADD = \
diff --git a/tests/immsv/implementer/applier.c
b/tests/immsv/implementer/applier.c
--- a/tests/immsv/implementer/applier.c
+++ b/tests/immsv/implementer/applier.c
@@ -41,6 +41,9 @@
#include <immutil.h>
#include "saf_error.h"
#include <poll.h>
+
+#include "osaf_extended_name.h"
+
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
@@ -74,7 +77,7 @@ static SaAisErrorT saImmOiCcbObjectModif
const SaNameT *objectName,
const SaImmAttrModificationT_2 **attrMods)
{
SaAisErrorT rc = SA_AIS_OK;
- printf("Modify callback on %s - object:%s ccbId:%llu\n", implName,
objectName->value, ccbId);
+ printf("Modify callback on %s - object:%s ccbId:%llu\n", implName,
osaf_extended_name_borrow(objectName), ccbId);
struct CcbUtilCcbData *ccbUtilCcbData;
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
@@ -100,7 +103,7 @@ static SaAisErrorT saImmOiCcbObjectCreat
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
- printf("Create callback on %s - parent:%s ccbId:%llu\n", implName,
parentName->value, ccbId);
+ printf("Create callback on %s - parent:%s ccbId:%llu\n", implName,
osaf_extended_name_borrow(parentName), ccbId);
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -120,7 +123,7 @@ static SaAisErrorT saImmOiCcbObjectDelet
{
SaAisErrorT rc = SA_AIS_OK;
struct CcbUtilCcbData *ccbUtilCcbData;
- printf("Delete callback on %s - object:%s ccbId:%llu\n", implName,
objectName->value, ccbId);
+ printf("Delete callback on %s - object:%s ccbId:%llu\n", implName,
osaf_extended_name_borrow(objectName), ccbId);
if ((ccbUtilCcbData = ccbutil_findCcbData(ccbId)) == NULL) {
if ((ccbUtilCcbData = ccbutil_getCcbData(ccbId)) == NULL) {
@@ -187,7 +190,7 @@ static void saImmOiAdminOperationCallbac
const SaImmAdminOperationParamsT_2 **params)
{
printf("AdminOperationCallback received by impl %s on object %s
operation:%llu invocation:%llu\n",
- implName, (char *) objectName->value, operationId, invocation);
+ implName, (char *) osaf_extended_name_borrow(objectName),
operationId, invocation);
SaAisErrorT err = saImmOiAdminOperationResult(immOiHandle, invocation,
SA_AIS_OK);
if(err != SA_AIS_OK) {
fprintf(stderr, "Reply on admin operation failed, err:%u\n",
err);
@@ -273,12 +276,13 @@ int main(int argc, char *argv[])
/* Remaining arguments should be class names for which implementer is
set. */
while (optind < argc) {
- strncpy((char *)objectName.value, argv[optind],
SA_MAX_NAME_LENGTH);
- objectName.length = strlen((char *)objectName.value);
+ osaf_extended_name_alloc(argv[optind], &objectName);
+// strncpy((char *)objectName.value, argv[optind],
SA_MAX_NAME_LENGTH);
+// objectName.length = strlen((char *)objectName.value);
- printf("Class: %s\n", objectName.value);
+ printf("Class: %s\n", osaf_extended_name_borrow(&objectName));
- if(!strcmp((const char *) objectName.value,
"OpensafImmRtTest")) {
+ if(!strcmp((const char *)
osaf_extended_name_borrow(&objectName), "OpensafImmRtTest")) {
/* Special test case for RTO's.
Class OpensafImmRtTest foundd at
samples/immsv/immsv_test_classes_rtobj.xml
*/
@@ -287,7 +291,7 @@ int main(int argc, char *argv[])
SaImmAttrValuesT_2 v1 = { "testRdn",
SA_IMM_ATTR_SASTRINGT, 1, (void**)strValues };
const SaImmAttrValuesT_2* attrValues[] = {&v1, NULL};
- error = saImmOiRtObjectCreate_2(immOiHandle,
(SaImmClassNameT) objectName.value, NULL, attrValues);
+ error = saImmOiRtObjectCreate_2(immOiHandle,
(SaImmClassNameT) osaf_extended_name_borrow(&objectName), NULL, attrValues);
if (error != SA_AIS_OK && error != SA_AIS_ERR_EXIST) {
fprintf(stderr, "error -
saImmOiClassImplementerSet FAILED: %s\n", saf_error(error));
exit(EXIT_FAILURE);
@@ -298,7 +302,7 @@ int main(int argc, char *argv[])
printf("Runtime object: %s exists\n", str1);
}
} else {
- error = saImmOiClassImplementerSet(immOiHandle,
(SaImmClassNameT) objectName.value);
+ error = saImmOiClassImplementerSet(immOiHandle,
(SaImmClassNameT) osaf_extended_name_borrow(&objectName));
if (error != SA_AIS_OK) {
fprintf(stderr, "error -
saImmOiClassImplementerSet FAILED: %s\n", saf_error(error));
exit(EXIT_FAILURE);
diff --git a/tests/immsv/implementer/test_cleanup.c
b/tests/immsv/implementer/test_cleanup.c
--- a/tests/immsv/implementer/test_cleanup.c
+++ b/tests/immsv/implementer/test_cleanup.c
@@ -16,6 +16,7 @@
*/
#include "immtest.h"
+#include "osaf_extended_name.h"
static char *objects[] = {
@@ -31,6 +32,7 @@ static char *objects[] = {
"123456789012345678901234567890123456789012345678901234567890123,123456789012345678901234567890123456789012345678901234567890123,123456789012345678901234567890123456789012345678901234567890123,rdn=root",
"Test,rdn=root",
"rdn=root",
+
"longdn=012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
NULL
};
@@ -41,6 +43,7 @@ static char *classes[] = {
NULL
};
+extern void addOiLongDnTestCases();
static void cleanup() {
SaVersionT version = { 'A', 2, 11 };
@@ -64,26 +67,25 @@ static void cleanup() {
assert(rc == SA_AIS_OK);
/* Delete objects */
- int len;
SaNameT objectName = {0};
SaNameT *objectNames[2] = { &objectName, NULL };
obj = objects;
while(*obj) {
- len = strlen(*obj);
- objectName.length = (len > SA_MAX_NAME_LENGTH) ?
SA_MAX_NAME_LENGTH : len;
- strncpy((char *)objectName.value, *obj, objectName.length);
+ if(osaf_is_extended_names_enabled() || strlen(*obj) <
SA_MAX_NAME_LENGTH) {
+ osaf_extended_name_lend(*obj, &objectName);
- rc = saImmOmAdminOwnerSet(ownerHandle, (const SaNameT
**)objectNames, SA_IMM_ONE);
- if(rc == SA_AIS_ERR_NOT_EXIST) {
- obj++;
- continue;
+ rc = saImmOmAdminOwnerSet(ownerHandle, (const SaNameT
**)objectNames, SA_IMM_ONE);
+ if(rc == SA_AIS_ERR_NOT_EXIST) {
+ obj++;
+ continue;
+ }
+ assert(rc == SA_AIS_OK);
+
+ rc = saImmOmCcbObjectDelete(ccbHandle, &objectName);
+ if(rc != SA_AIS_OK && rc != SA_AIS_ERR_NOT_EXIST)
+ fprintf(stderr, "Failed to delete object '%s'
with error code: %d\n", *obj, rc);
+ assert(rc == SA_AIS_OK || rc == SA_AIS_ERR_NOT_EXIST);
}
- assert(rc == SA_AIS_OK);
-
- rc = saImmOmCcbObjectDelete(ccbHandle, &objectName);
- if(rc != SA_AIS_OK && rc != SA_AIS_ERR_NOT_EXIST)
- fprintf(stderr, "Failed to delete object '%s' with
error code: %d\n", *obj, rc);
- assert(rc == SA_AIS_OK || rc == SA_AIS_ERR_NOT_EXIST);
obj++;
}
@@ -132,6 +134,14 @@ static void startup() {
safassert(object_create(immOmHandle, ownerHandle, configClassName,
&rootObj, NULL, NULL), SA_AIS_OK);
safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ /* Add long DN test cases */
+ char *env;
+ if((env = getenv("SA_ENABLE_EXTENDED_NAMES"))) {
+ if(!strcmp(env, "1")) {
+ addOiLongDnTestCases();
+ }
+ }
}
__attribute__ ((constructor)) static void cleanup_constructor(void)
diff --git a/tests/immsv/implementer/test_saImmOiLongDn.c
b/tests/immsv/implementer/test_saImmOiLongDn.c
new file mode 100644
--- /dev/null
+++ b/tests/immsv/implementer/test_saImmOiLongDn.c
@@ -0,0 +1,621 @@
+/* -*- OpenSAF -*-
+ *
+ * (C) Copyright 2014 The OpenSAF Foundation
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ * Author(s): Ericsson AB
+ *
+ */
+
+
+#include <unistd.h>
+#include <pthread.h>
+#include <poll.h>
+
+#include "immtest.h"
+#include "osaf_extended_name.h"
+
+
+static char *longDn =
"longdn=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
+static char *longDn2 =
"longdn=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+
"012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+
"012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
+
+
+static void setupOiLongDn(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaNameT dn;
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ SaImmAttrValueT attrValues[1] = { &dn };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE,
+ { "attr8", SA_IMM_ATTR_SANAMET, 1, attrValues }};
+ const SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ config_class_create(immHandle);
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(object_create(immHandle, ownerHandle, configClassName, &dn,
NULL, NULL), SA_AIS_OK);
+
+ // Change SaNameT attribute for testing
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbObjectModify_2(ccbHandle, &dn, attrMods),
SA_AIS_OK);
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+}
+
+static void cleanOiLongDn(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaNameT dn;
+ const SaNameT *objects[2] = { &dn, NULL };
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ saImmOmAdminOwnerSet(ownerHandle, objects, SA_IMM_ONE);
+
+ object_delete(ownerHandle, &dn, 0);
+ config_class_delete(immHandle);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+}
+
+
+static void saImmOiAdminOperationCallback(SaImmOiHandleT immOiHandle,
+ SaInvocationT invocation,
+ const SaNameT *objectName,
+ SaImmAdminOperationIdT operationId,
+ const SaImmAdminOperationParamsT_2
**params) {
+
+ if(params && params[0] && !strcmp(params[0]->paramName, "attr8")) {
+ SaNameT *val = (SaNameT *)params[0]->paramBuffer;
+ if(!strcmp(osaf_extended_name_borrow(val), longDn2)) {
+ // Return input parameters
+ saImmOiAdminOperationResult_o2(immOiHandle, invocation,
SA_AIS_OK, params);
+ return;
+ }
+ }
+
+ saImmOiAdminOperationResult_o2(immOiHandle, invocation,
SA_AIS_ERR_BAD_OPERATION, NULL);
+}
+
+static void saImmOiCcbAbortCallback(SaImmOiHandleT immOiHandle, SaImmOiCcbIdT
ccbId) {
+}
+
+static void saImmOiCcbApplyCallback(SaImmOiHandleT immOiHandle, SaImmOiCcbIdT
ccbId) {
+}
+
+static SaAisErrorT saImmOiCcbCompletedCallback(SaImmOiHandleT immOiHandle,
SaImmOiCcbIdT ccbId) {
+ return SA_AIS_OK;
+}
+
+static SaAisErrorT saImmOiCcbObjectCreateCallback(SaImmOiHandleT immOiHandle,
+ SaImmOiCcbIdT ccbId,
+ const SaImmClassNameT className,
+ const SaNameT *parentName, const
SaImmAttrValuesT_2 **attr) {
+ return SA_AIS_OK;
+}
+
+static SaAisErrorT saImmOiCcbObjectDeleteCallback(SaImmOiHandleT immOiHandle,
SaImmOiCcbIdT ccbId, const SaNameT *objectName) {
+ return SA_AIS_OK;
+}
+
+static SaAisErrorT saImmOiCcbObjectModifyCallback(SaImmOiHandleT immOiHandle,
SaImmOiCcbIdT ccbId, const SaNameT *objectName, const SaImmAttrModificationT_2
**attrMods) {
+ return SA_AIS_OK;
+}
+
+static SaAisErrorT saImmOiRtAttrUpdateCallback(SaImmOiHandleT immOiHandle,
const SaNameT *objectName, const SaImmAttrNameT *attributeNames) {
+ SaNameT val;
+ SaImmAttrValueT attrValues[1] = { &val };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE,
+ { "attr2", SA_IMM_ATTR_SANAMET, 1, attrValues
}};
+ const SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL };
+
+ if(osaf_extended_name_length(objectName) == strlen(longDn)
+ && !strncmp(osaf_extended_name_borrow(objectName),
longDn, strlen(longDn2))) {
+ osaf_extended_name_lend(longDn2, &val);
+ saImmOiRtObjectUpdate_2(immOiHandle, objectName, attrMods);
+ return SA_AIS_OK;
+ }
+
+ return SA_AIS_ERR_FAILED_OPERATION;
+}
+
+static SaImmOiCallbacksT_2 localImmOiCallbacks = {
+ saImmOiAdminOperationCallback,
+ saImmOiCcbAbortCallback,
+ saImmOiCcbApplyCallback,
+ saImmOiCcbCompletedCallback,
+ saImmOiCcbObjectCreateCallback,
+ saImmOiCcbObjectDeleteCallback,
+ saImmOiCcbObjectModifyCallback,
+ saImmOiRtAttrUpdateCallback,
+};
+
+enum {
+ S_DISP_START = 0,
+ S_DISP_READY,
+ S_DISP_FINISH
+};
+
+// -1 for infinite loop, exit with setting s_dispatch_exit = 0
+static int s_dispatch_repeat = 0;
+static int s_dispatch_exit = 0;
+static int s_dispatch_status = 0;
+static SaImmOiHandleT s_dispatch_oi_handle = 0;
+
+static void *dispatchThread(void *param) {
+ SaImmOiHandleT oiHandle = s_dispatch_oi_handle;
+ SaSelectionObjectT selObj;
+ int repeat = s_dispatch_repeat ? s_dispatch_repeat : -1;
+ int waittime = (repeat == -1) ? 10 : -1;
+ int rc;
+ struct pollfd fd;
+
+ safassert(saImmOiSelectionObjectGet(oiHandle, &selObj), SA_AIS_OK);
+
+ s_dispatch_status = S_DISP_READY;
+
+ while(repeat) {
+ fd.fd = selObj;
+ fd.events = POLLIN;
+ rc = poll(&fd, 1, waittime);
+ if(!rc) {
+ if(s_dispatch_exit)
+ repeat = 0;
+ continue;
+ }
+ assert(rc != -1);
+
+ saImmOiDispatch(oiHandle, SA_DISPATCH_ONE);
+
+ if(repeat > 0) {
+ repeat--;
+ } else if(s_dispatch_exit) {
+ // Exit from loop
+ repeat = 0;
+ }
+ }
+
+ s_dispatch_status = S_DISP_FINISH;
+
+ return NULL;
+}
+
+static void saImmOiLongDn_01(void) {
+ SaAisErrorT rc;
+ SaImmOiHandleT immOiHandle;
+ SaImmHandleT immOmHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaImmAdminOwnerNameT ownerName = (SaImmAdminOwnerNameT)__FUNCTION__;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ pthread_t threadid;
+
+ SaNameT dn;
+ SaImmAttrValueT rdnVal[1] = { (SaImmAttrValueT)&dn };
+ SaImmAttrValuesT_2 attrValue = { "rdn", SA_IMM_ATTR_SANAMET, 1, rdnVal
};
+ const SaImmAttrValuesT_2 *attrValues[2] = { &attrValue, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+
+ s_dispatch_repeat = 0;
+ s_dispatch_oi_handle = immOiHandle;
+ s_dispatch_exit = 0;
+ s_dispatch_status = 0;
+ assert(pthread_create(&threadid, NULL, dispatchThread, NULL) == 0);
+
+ while(s_dispatch_status != S_DISP_READY) {
+ usleep(100);
+ }
+
+ safassert(saImmOmInitialize(&immOmHandle, NULL, &immVersion),
SA_AIS_OK);
+ config_class_create(immOmHandle);
+
+ safassert(saImmOiClassImplementerSet(immOiHandle, configClassName),
SA_AIS_OK);
+
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+
+ rc = saImmOmCcbObjectCreate_2(ccbHandle, configClassName, NULL,
attrValues);
+
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+ safassert(saImmOiClassImplementerRelease(immOiHandle, configClassName),
SA_AIS_OK);
+
+ // Wait for thread to exit
+ s_dispatch_exit = 1;
+ while(s_dispatch_status != S_DISP_FINISH) {
+ usleep(100);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ config_class_delete(immOmHandle);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saImmOiLongDn_02(void) {
+ SaAisErrorT rc;
+ SaImmOiHandleT immOiHandle;
+ SaImmHandleT immOmHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaImmAdminOwnerNameT ownerName = (SaImmAdminOwnerNameT)__FUNCTION__;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ pthread_t threadid;
+ SaNameT dn;
+ SaNameT val;
+ const SaNameT *objects[2] = { &dn, NULL };
+
+ SaImmAttrValueT attrValues[1] = { &val };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE,
+ { "attr8", SA_IMM_ATTR_SANAMET, 1, attrValues }};
+ const SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+ osaf_extended_name_lend(longDn2, &val);
+
+ setupOiLongDn();
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+ safassert(saImmOiClassImplementerSet(immOiHandle, configClassName),
SA_AIS_OK);
+
+ s_dispatch_repeat = 0;
+ s_dispatch_oi_handle = immOiHandle;
+ s_dispatch_exit = 0;
+ s_dispatch_status = 0;
+ pthread_create(&threadid, NULL, dispatchThread, NULL);
+
+ while(s_dispatch_status != S_DISP_READY) {
+ usleep(100);
+ }
+
+ safassert(saImmOmInitialize(&immOmHandle, NULL, &immVersion),
SA_AIS_OK);
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerSet(ownerHandle, objects, SA_IMM_ONE),
SA_AIS_OK);
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+
+ rc = saImmOmCcbObjectModify_2(ccbHandle, &dn, attrMods);
+
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ safassert(saImmOiClassImplementerRelease(immOiHandle, configClassName),
SA_AIS_OK);
+
+ // Wait for thread to exit
+ s_dispatch_exit = 1;
+ while(s_dispatch_status != S_DISP_FINISH) {
+ usleep(100);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanOiLongDn();
+}
+
+static void saImmOiLongDn_03(void) {
+ SaAisErrorT rc;
+ SaImmOiHandleT immOiHandle;
+ SaImmHandleT immOmHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaImmAdminOwnerNameT ownerName = (SaImmAdminOwnerNameT)__FUNCTION__;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ pthread_t threadid;
+ SaNameT dn;
+ const SaNameT *objects[2] = { &dn, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ setupOiLongDn();
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+ safassert(saImmOiClassImplementerSet(immOiHandle, configClassName),
SA_AIS_OK);
+
+ s_dispatch_repeat = 0;
+ s_dispatch_oi_handle = immOiHandle;
+ s_dispatch_exit = 0;
+ s_dispatch_status = 0;
+ pthread_create(&threadid, NULL, dispatchThread, NULL);
+
+ while(s_dispatch_status != S_DISP_READY) {
+ usleep(100);
+ }
+
+ safassert(saImmOmInitialize(&immOmHandle, NULL, &immVersion),
SA_AIS_OK);
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerSet(ownerHandle, objects, SA_IMM_ONE),
SA_AIS_OK);
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+
+ rc = saImmOmCcbObjectDelete(ccbHandle, &dn);
+
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ safassert(saImmOiClassImplementerRelease(immOiHandle, configClassName),
SA_AIS_OK);
+
+ // Wait for thread to exit
+ s_dispatch_exit = 1;
+ while(s_dispatch_status != S_DISP_FINISH) {
+ usleep(100);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanOiLongDn();
+}
+
+static void saImmOiLongDn_04(void) {
+ SaAisErrorT rc, rc1;
+ SaImmOiHandleT immOiHandle;
+ SaImmHandleT immOmHandle;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ pthread_t threadid;
+
+ SaNameT dn;
+ SaImmAttrValueT rdnVal[1] = { (SaImmAttrValueT)&dn };
+ SaImmAttrValuesT_2 attrValue = { "rdn", SA_IMM_ATTR_SANAMET, 1, rdnVal
};
+ const SaImmAttrValuesT_2 *attrValues[2] = { &attrValue, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+
+ s_dispatch_repeat = 0;
+ s_dispatch_oi_handle = immOiHandle;
+ s_dispatch_exit = 0;
+ s_dispatch_status = 0;
+ pthread_create(&threadid, NULL, dispatchThread, NULL);
+
+ while(s_dispatch_status != S_DISP_READY) {
+ usleep(100);
+ }
+
+ safassert(saImmOmInitialize(&immOmHandle, NULL, &immVersion),
SA_AIS_OK);
+ runtime_class_create(immOmHandle);
+
+ rc = saImmOiRtObjectCreate_2(immOiHandle, runtimeClassName, NULL,
attrValues);
+ rc1 = saImmOiRtObjectDelete(immOiHandle, &dn);
+
+ if(rc == SA_AIS_OK) {
+ rc = rc1;
+ }
+
+ runtime_class_delete(immOmHandle);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ // Wait for thread to exit
+ s_dispatch_exit = 1;
+ while(s_dispatch_status != S_DISP_FINISH) {
+ usleep(100);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saImmOiLongDn_05(void) {
+ SaAisErrorT rc;
+ SaImmOiHandleT immOiHandle;
+ SaImmHandleT immOmHandle;
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ pthread_t threadid;
+ SaImmAttrValuesT_2 **attributes = NULL;
+
+ SaNameT dn;
+ SaImmAttrValueT rdnVal[1] = { (SaImmAttrValueT)&dn };
+ SaImmAttrValuesT_2 attrValue = { "rdn", SA_IMM_ATTR_SANAMET, 1, rdnVal
};
+ const SaImmAttrValuesT_2 *attrValues[2] = { &attrValue, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+
+ s_dispatch_repeat = 0;
+ s_dispatch_oi_handle = immOiHandle;
+ s_dispatch_exit = 0;
+ s_dispatch_status = 0;
+ pthread_create(&threadid, NULL, dispatchThread, NULL);
+
+ while(s_dispatch_status != S_DISP_READY) {
+ usleep(100);
+ }
+
+ safassert(saImmOmInitialize(&immOmHandle, NULL, &immVersion),
SA_AIS_OK);
+ runtime_class_create(immOmHandle);
+ safassert(saImmOiRtObjectCreate_2(immOiHandle, runtimeClassName, NULL,
attrValues), SA_AIS_OK);
+
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ rc = saImmOmAccessorGet_2(accessorHandle, &dn, NULL, &attributes);
+ if(rc == SA_AIS_OK) {
+ // Accesor get must return a value. attributes cannot be NULL
+ assert(attributes);
+
+ SaNameT *val;
+ int i;
+ for(i=0; attributes[i]; i++) {
+ if(!strcmp(attributes[i]->attrName, "attr2")) {
+ // Must return 1 value
+ assert(attributes[i]->attrValuesNumber == 1);
+ assert(attributes[i]->attrValues);
+
+ val = (SaNameT *)attributes[i]->attrValues[0];
+ // Check attribute value
+ assert(osaf_extended_name_length(val) ==
strlen(longDn2));
+ assert(strncmp(osaf_extended_name_borrow(val),
longDn2, strlen(longDn2)) == 0);
+ break;
+ }
+ }
+
+ // Updated value was not found in the result list
+ assert(attributes[i]);
+ }
+
+ safassert(saImmOiRtObjectDelete(immOiHandle, &dn), SA_AIS_OK);
+ runtime_class_delete(immOmHandle);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ // Wait for thread to exit
+ s_dispatch_exit = 1;
+ while(s_dispatch_status != S_DISP_FINISH) {
+ usleep(100);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saImmOiLongDn_06(void) {
+ SaAisErrorT rc;
+ SaAisErrorT result;
+ SaImmOiHandleT immOiHandle;
+ SaImmHandleT immOmHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ const SaImmAdminOwnerNameT ownerName =
(SaImmAdminOwnerNameT)__FUNCTION__;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ pthread_t threadid;
+ SaNameT dn;
+ SaNameT val;
+ const SaNameT *objects[2] = { &dn, NULL };
+ SaImmAdminOperationParamsT_2 param = {
+ "attr8",
+ SA_IMM_ATTR_SANAMET,
+ &val
+ };
+ const SaImmAdminOperationParamsT_2 *params[2] = { ¶m, NULL };
+ SaImmAdminOperationParamsT_2 **returnParams;
+
+ osaf_extended_name_lend(longDn, &dn);
+ osaf_extended_name_lend(longDn2, &val);
+
+ setupOiLongDn();
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+ safassert(saImmOiClassImplementerSet(immOiHandle, configClassName),
SA_AIS_OK);
+
+ s_dispatch_repeat = 0;
+ s_dispatch_oi_handle = immOiHandle;
+ s_dispatch_exit = 0;
+ s_dispatch_status = 0;
+ pthread_create(&threadid, NULL, dispatchThread, NULL);
+
+ while(s_dispatch_status != S_DISP_READY) {
+ usleep(100);
+ }
+
+ safassert(saImmOmInitialize(&immOmHandle, NULL, &immVersion),
SA_AIS_OK);
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerSet(ownerHandle, objects, SA_IMM_ONE),
SA_AIS_OK);
+
+ rc = saImmOmAdminOperationInvoke_o2(ownerHandle, &dn, 1, 1, params,
&result, 10, &returnParams);
+
+ if(rc == SA_AIS_OK) {
+ assert(returnParams);
+ assert(returnParams[0]);
+ assert(!strcmp(returnParams[0]->paramName, "attr8"));
+ SaNameT *val = (SaNameT *)returnParams[0]->paramBuffer;
+ assert(!strcmp(osaf_extended_name_borrow(val), longDn2));
+ saImmOmAdminOperationMemoryFree(ownerHandle, returnParams);
+ }
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ safassert(saImmOiClassImplementerRelease(immOiHandle, configClassName),
SA_AIS_OK);
+
+ // Wait for thread to exit
+ s_dispatch_exit = 1;
+ while(s_dispatch_status != S_DISP_FINISH) {
+ usleep(100);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanOiLongDn();
+}
+
+static void saImmOiLongDn_07(void) {
+ SaAisErrorT rc;
+ SaImmOiHandleT immOiHandle;
+ const SaImmOiImplementerNameT implementerName =
(SaImmOiImplementerNameT)__FILE__;
+ SaNameT dn;
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ setupOiLongDn();
+
+ safassert(saImmOiInitialize_2(&immOiHandle, &localImmOiCallbacks,
&immVersion), SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName),
SA_AIS_OK);
+
+ rc = saImmOiObjectImplementerSet(immOiHandle, &dn, SA_IMM_ONE);
+ if(rc == SA_AIS_OK) {
+ rc = saImmOiObjectImplementerRelease(immOiHandle, &dn,
SA_IMM_ONE);
+ }
+
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanOiLongDn();
+}
+
+void addOiLongDnTestCases() {
+ test_case_add(7, saImmOiLongDn_01, "SA_AIS_OK - Object create
callback");
+ test_case_add(7, saImmOiLongDn_02, "SA_AIS_OK - Object modify
callback");
+ test_case_add(7, saImmOiLongDn_03, "SA_AIS_OK - Object delete
callback");
+ test_case_add(7, saImmOiLongDn_04, "SA_AIS_OK - Rt Object create and
delete");
+ test_case_add(7, saImmOiLongDn_05, "SA_AIS_OK - Rt Object update");
+ test_case_add(7, saImmOiLongDn_06, "SA_AIS_OK - Admin operation
callback");
+ test_case_add(7, saImmOiLongDn_07, "SA_AIS_OK -
saImmOiObjectImplementerSet");
+}
+
+__attribute__ ((constructor)) static void saImmOiLongDn_constructor(void)
+{
+ test_suite_add(7, "Long DN");
+}
diff --git a/tests/immsv/implementer/test_saImmOiRtObjectCreate_2.c
b/tests/immsv/implementer/test_saImmOiRtObjectCreate_2.c
--- a/tests/immsv/implementer/test_saImmOiRtObjectCreate_2.c
+++ b/tests/immsv/implementer/test_saImmOiRtObjectCreate_2.c
@@ -16,6 +16,7 @@
*/
#include "immtest.h"
+#include "osaf_extended_name.h"
static const SaNameT rdnObj1 = {sizeof("Obj1"), "Obj1"};
static const SaNameT rdnObj2 = {sizeof("Obj2"), "Obj2"};
@@ -175,7 +176,11 @@ void saImmOiRtObjectCreate_2_07(void)
/*Create of fourth rt object should fail. */
rc = saImmOiRtObjectCreate_2(immOiHandle, className, &tmpName,
attrValues27);/*299!! (63 + 236)*/
- test_validate(rc, SA_AIS_ERR_NAME_TOO_LONG);
+ if(!osaf_is_extended_names_enabled()) {
+ test_validate(rc, SA_AIS_ERR_NAME_TOO_LONG);
+ } else {
+ test_validate(rc, SA_AIS_OK);
+ }
/*Tear down*/
@@ -212,7 +217,8 @@ extern void SaImmOiRtAttrUpdateCallbackT
test_case_add(3, saImmOiRtObjectCreate_2_04, "saImmOiRtObjectCreate_2 -
SA_AIS_ERR_BAD_HANDLE - immOiHandle not associated with implementer name");
test_case_add(3, saImmOiRtObjectCreate_2_05, "saImmOiRtObjectCreate_2 -
SA_AIS_ERR_NOT_EXIST - className non existing");
test_case_add(3, saImmOiRtObjectCreate_2_06, "saImmOiRtObjectCreate_2 -
SA_AIS_ERR_EXIST - object already created");
- test_case_add(3, saImmOiRtObjectCreate_2_07, "saImmOiRtObjectCreate_2 -
SA_AIS_ERR_NAME_TOO_LONG - size of dn for new object too big");
+
+ test_case_add(3, saImmOiRtObjectCreate_2_07, "saImmOiRtObjectCreate_2 -
SA_AIS_ERR_NAME_TOO_LONG - size of dn for new object too big. Not valid test
with extended names");
test_case_add(3, saImmOiRtObjectDelete_01, "saImmOiRtObjectDelete -
SA_AIS_OK");
test_case_add(3, saImmOiRtObjectDelete_03, "saImmOiRtObjectDelete -
SA_AIS_ERR_BAD_HANDLE - invalid handle");
diff --git a/tests/immsv/management/Makefile.am
b/tests/immsv/management/Makefile.am
--- a/tests/immsv/management/Makefile.am
+++ b/tests/immsv/management/Makefile.am
@@ -53,6 +53,7 @@ immomtest_SOURCES = \
test_saImmOmCcbFinalize.c \
test_saImmOmAdminOperationContinue.c \
test_saImmOmThreadInterference.c \
+ test_saImmOmLongDn.c \
test_cleanup.c
immomtest_LDADD = \
diff --git a/tests/immsv/management/test_cleanup.c
b/tests/immsv/management/test_cleanup.c
--- a/tests/immsv/management/test_cleanup.c
+++ b/tests/immsv/management/test_cleanup.c
@@ -16,6 +16,7 @@
*/
#include "immtest.h"
+#include "osaf_extended_name.h"
static char *objects[] = {
@@ -28,6 +29,7 @@ static char *objects[] = {
"id=2",
"id=3",
"rdn=root",
+
"longdn=012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789",
NULL
};
@@ -51,6 +53,7 @@ static char *classes[] = {
NULL
};
+extern void addOmLongDnTestCases();
static void cleanup() {
SaVersionT version = { 'A', 2, 11 };
@@ -74,26 +77,25 @@ static void cleanup() {
assert(rc == SA_AIS_OK);
/* Delete objects */
- int len;
SaNameT objectName = {0};
SaNameT *objectNames[2] = { &objectName, NULL };
obj = objects;
while(*obj) {
- len = strlen(*obj);
- objectName.length = (len > SA_MAX_NAME_LENGTH) ?
SA_MAX_NAME_LENGTH : len;
- strncpy((char *)objectName.value, *obj, objectName.length);
+ if(osaf_is_extended_names_enabled() || strlen(*obj) <
SA_MAX_NAME_LENGTH) {
+ osaf_extended_name_lend(*obj, &objectName);
- rc = saImmOmAdminOwnerSet(ownerHandle, (const SaNameT
**)objectNames, SA_IMM_SUBTREE);
- if(rc == SA_AIS_ERR_NOT_EXIST) {
- obj++;
- continue;
+ rc = saImmOmAdminOwnerSet(ownerHandle, (const SaNameT
**)objectNames, SA_IMM_SUBTREE);
+ if(rc == SA_AIS_ERR_NOT_EXIST) {
+ obj++;
+ continue;
+ }
+ assert(rc == SA_AIS_OK);
+
+ rc = saImmOmCcbObjectDelete(ccbHandle, &objectName);
+ if(rc != SA_AIS_OK && rc != SA_AIS_ERR_NOT_EXIST)
+ fprintf(stderr, "Failed to delete object '%s'
with error code: %d\n", *obj, rc);
+ assert(rc == SA_AIS_OK || rc == SA_AIS_ERR_NOT_EXIST);
}
- assert(rc == SA_AIS_OK);
-
- rc = saImmOmCcbObjectDelete(ccbHandle, &objectName);
- if(rc != SA_AIS_OK && rc != SA_AIS_ERR_NOT_EXIST)
- fprintf(stderr, "Failed to delete object '%s' with
error code: %d\n", *obj, rc);
- assert(rc == SA_AIS_OK || rc == SA_AIS_ERR_NOT_EXIST);
obj++;
}
@@ -142,6 +144,14 @@ static void startup() {
safassert(object_create(immOmHandle, ownerHandle, configClassName,
&rootObj, NULL, NULL), SA_AIS_OK);
safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+
+ /* Add long DN test cases */
+ char *env;
+ if((env = getenv("SA_ENABLE_EXTENDED_NAMES"))) {
+ if(!strcmp(env, "1")) {
+ addOmLongDnTestCases();
+ }
+ }
}
__attribute__ ((constructor)) static void cleanup_constructor(void)
diff --git a/tests/immsv/management/test_saImmOmLongDn.c
b/tests/immsv/management/test_saImmOmLongDn.c
new file mode 100644
--- /dev/null
+++ b/tests/immsv/management/test_saImmOmLongDn.c
@@ -0,0 +1,368 @@
+/* -*- OpenSAF -*-
+ *
+ * (C) Copyright 2014 The OpenSAF Foundation
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. This file and program are licensed
+ * under the GNU Lesser General Public License Version 2.1, February 1999.
+ * The complete license can be accessed from the following location:
+ * http://opensource.org/licenses/lgpl-license.php
+ * See the Copying file included with the OpenSAF distribution for full
+ * licensing terms.
+ *
+ * Author(s): Ericsson AB
+ *
+ */
+
+#include "immtest.h"
+#include "osaf_extended_name.h"
+
+
+static char *longDn =
"longdn=0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789"
+
"0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
+
+
+static void setupLongDn(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaNameT dn;
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ SaImmAttrValueT attrValues[1] = { &dn };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE,
+ { "attr8", SA_IMM_ATTR_SANAMET, 1, attrValues }};
+ const SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ config_class_create(immHandle);
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(object_create(immHandle, ownerHandle, configClassName, &dn,
NULL, NULL), SA_AIS_OK);
+
+ // Change SaNameT attribute for testing
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbObjectModify_2(ccbHandle, &dn, attrMods),
SA_AIS_OK);
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+}
+
+static void cleanLongDn(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaNameT dn;
+ const SaNameT *objects[2] = { &dn, NULL };
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerSet(ownerHandle, objects, SA_IMM_ONE),
SA_AIS_OK);
+
+ safassert(object_delete(ownerHandle, &dn, 0), SA_AIS_OK);
+ config_class_delete(immHandle);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+}
+
+static void saImmOmLongDn_01(void) {
+ SaImmHandleT immHandle;
+ SaAisErrorT error;
+ SaNameT defaultValue;
+ SaImmAttrDefinitionT_2 rdn = {
+ "rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_RDN, NULL
+ };
+ SaImmAttrDefinitionT_2 attr = {
+ "attr", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE, &defaultValue
+ };
+ const SaImmAttrDefinitionT_2* attributes[] = {&rdn, &attr, NULL};
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ osaf_extended_name_lend(longDn, &defaultValue);
+ error = saImmOmClassCreate_2(immHandle, "LongDnClass",
SA_IMM_CLASS_CONFIG, attributes);
+ safassert(saImmOmClassDelete(immHandle, "LongDnClass"), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(error, SA_AIS_OK);
+}
+
+static void saImmOmLongDn_02(void) {
+ SaImmHandleT immHandle;
+ SaAisErrorT error;
+ SaNameT defaultValue;
+ SaImmClassCategoryT classCategory;
+ SaImmAttrDefinitionT_2 rdn = {
+ "rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_RDN, NULL
+ };
+ SaImmAttrDefinitionT_2 attr = {
+ "attr", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE, &defaultValue
+ };
+ const SaImmAttrDefinitionT_2* attributes[] = {&rdn, &attr, NULL};
+ SaImmAttrDefinitionT_2 **attrDef;
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ osaf_extended_name_lend(longDn, &defaultValue);
+ safassert(saImmOmClassCreate_2(immHandle, "LongDnClass",
SA_IMM_CLASS_CONFIG, attributes), SA_AIS_OK);
+
+ error = saImmOmClassDescriptionGet_2(immHandle, "LongDnClass",
&classCategory, &attrDef);
+ if(error == SA_AIS_OK) {
+ int i = 0;
+ while(attrDef[i]) {
+ if(!strcmp("attr", attrDef[i]->attrName)) {
+ SaNameT *testDn = (SaNameT
*)attrDef[i]->attrDefaultValue;
+ assert(testDn != NULL);
+ assert(strcmp(longDn,
osaf_extended_name_borrow(testDn)) == 0);
+ break;
+ }
+ i++;
+ }
+ assert(attrDef[i] != NULL);
+
+ safassert(saImmOmClassDescriptionMemoryFree_2(immHandle,
attrDef), SA_AIS_OK);
+ }
+
+ safassert(saImmOmClassDelete(immHandle, "LongDnClass"), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(error, SA_AIS_OK);
+}
+
+static void saImmOmLongDn_03(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaAisErrorT rc;
+ SaNameT dn;
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ SaImmAttrValueT rdnVal[1] = { (SaImmAttrValueT)&dn };
+ SaImmAttrValuesT_2 attrValue = { "rdn", SA_IMM_ATTR_SANAMET, 1, rdnVal
};
+ const SaImmAttrValuesT_2 *attrValues[2] = { &attrValue, NULL };
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ config_class_create(immHandle);
+ osaf_extended_name_lend(longDn, &dn);
+
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+
+ rc = saImmOmCcbObjectCreate_2(ccbHandle, configClassName, NULL,
attrValues);
+ saImmOmCcbApply(ccbHandle);
+
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ safassert(object_delete(ownerHandle, &dn, 1), SA_AIS_OK);
+ config_class_delete(immHandle);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saImmOmLongDn_04(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaAisErrorT rc;
+ SaNameT dn;
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ SaImmAttrValueT attrValues[1] = { &dn };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE,
+ { "attr8", SA_IMM_ATTR_SANAMET, 1, attrValues }};
+ const SaImmAttrModificationT_2 *attrMods[2] = { &attrMod, NULL };
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ config_class_create(immHandle);
+
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+
+ osaf_extended_name_lend(longDn, &dn);
+ safassert(object_create(immHandle, ownerHandle, configClassName, &dn,
NULL, NULL), SA_AIS_OK);
+
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+
+ rc = saImmOmCcbObjectModify_2(ccbHandle, &dn, attrMods);
+ saImmOmCcbApply(ccbHandle);
+
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ safassert(object_delete(ownerHandle, &dn, 1), SA_AIS_OK);
+ config_class_delete(immHandle);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saImmOmLongDn_05(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmCcbHandleT ccbHandle;
+ SaAisErrorT rc;
+ SaNameT dn;
+ const SaImmAdminOwnerNameT ownerName = (const
SaImmAdminOwnerNameT)__FUNCTION__;
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ config_class_create(immHandle);
+
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+
+ osaf_extended_name_lend(longDn, &dn);
+ safassert(object_create(immHandle, ownerHandle, configClassName, &dn,
NULL, NULL), SA_AIS_OK);
+
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+
+ rc = saImmOmCcbObjectDelete(ccbHandle, &dn);
+ saImmOmCcbApply(ccbHandle);
+
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ config_class_delete(immHandle);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+}
+
+static void saImmOmLongDn_06(void) {
+ SaImmHandleT immHandle;
+ SaImmSearchHandleT searchHandle;
+ SaAisErrorT rc;
+ SaNameT dn;
+ SaImmSearchParametersT_2 searchParam;
+ SaNameT objectName;
+ SaImmAttrValuesT_2 **attributes;
+ int i;
+
+ osaf_extended_name_lend(longDn, &dn);
+ searchParam.searchOneAttr.attrName = "attr8";
+ searchParam.searchOneAttr.attrValueType = SA_IMM_ATTR_SANAMET;
+ searchParam.searchOneAttr.attrValue = &dn;
+
+ setupLongDn();
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+
+ safassert(saImmOmSearchInitialize_2(immHandle, NULL, SA_IMM_SUBTREE,
+ SA_IMM_SEARCH_ONE_ATTR | SA_IMM_SEARCH_GET_ALL_ATTR,
&searchParam,
+ NULL, &searchHandle), SA_AIS_OK);
+ rc = saImmOmSearchNext_2(searchHandle, &objectName, &attributes);
+ if(rc == SA_AIS_OK) {
+ assert(strcmp(osaf_extended_name_borrow(&objectName), longDn)
== 0);
+ for(i=0; attributes[i]; i++) {
+ if(!strcmp(attributes[i]->attrName, "attr8")) {
+ // Must have at least one value
+ assert(attributes[i]->attrValuesNumber > 0);
+ // Check attribute value
+
assert(strcmp(osaf_extended_name_borrow((SaNameT
*)(attributes[i]->attrValues[0])), longDn) == 0);
+ break;
+ }
+ }
+ // SaNameT attribute is missing
+ assert(attributes != NULL);
+ }
+ safassert(saImmOmSearchFinalize(searchHandle), SA_AIS_OK);
+
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanLongDn();
+}
+
+static void saImmOmLongDn_07(void) {
+ SaImmHandleT immHandle;
+ SaImmAccessorHandleT accessorHandle;
+ SaAisErrorT rc;
+ SaNameT dn;
+ SaImmAttrValuesT_2 **attributes;
+ int i;
+ int score = 0;
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ setupLongDn();
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+
+ safassert(saImmOmAccessorInitialize(immHandle, &accessorHandle),
SA_AIS_OK);
+ rc = saImmOmAccessorGet_2(accessorHandle, &dn, NULL, &attributes);
+ if(rc == SA_AIS_OK) {
+ for(i=0; attributes[i]; i++) {
+ if(!strcmp(attributes[i]->attrName, "rdn") ||
!strcmp(attributes[i]->attrName, "attr8")) {
+ assert(attributes[i]->attrValuesNumber > 0);
+
assert(strcmp(osaf_extended_name_borrow((SaNameT
*)(attributes[i]->attrValues[0])), longDn) == 0);
+ score++;
+ }
+ }
+
+ // Both SaNameT values are correct
+ assert(score == 2);
+ }
+ safassert(saImmOmAccessorFinalize(accessorHandle), SA_AIS_OK);
+
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanLongDn();
+}
+
+static void saImmOmLongDn_08(void) {
+ SaImmHandleT immHandle;
+ SaImmAdminOwnerHandleT ownerHandle;
+ SaImmAdminOwnerNameT ownerName = (SaImmAdminOwnerNameT)__FUNCTION__;
+ SaAisErrorT rc;
+ SaNameT dn;
+ const SaNameT *objects[2] = { &dn, NULL };
+
+ osaf_extended_name_lend(longDn, &dn);
+
+ setupLongDn();
+
+ safassert(saImmOmInitialize(&immHandle, NULL, &immVersion), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerInitialize(immHandle, ownerName, SA_TRUE,
&ownerHandle), SA_AIS_OK);
+
+ rc = saImmOmAdminOwnerSet(ownerHandle, objects, SA_IMM_ONE);
+
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+ safassert(saImmOmFinalize(immHandle), SA_AIS_OK);
+
+ test_validate(rc, SA_AIS_OK);
+
+ cleanLongDn();
+}
+
+
+
+void addOmLongDnTestCases() {
+ test_case_add(8, saImmOmLongDn_01, "SA_AIS_OK - saImmOmClassCreate_2
with long DN as default value");
+ test_case_add(8, saImmOmLongDn_02, "SA_AIS_OK -
saImmOmClassDescriptionGet_2 with long DN as default value");
+ test_case_add(8, saImmOmLongDn_03, "SA_AIS_OK -
saImmOmCcbObjectCreate_2 - long RDN");
+ test_case_add(8, saImmOmLongDn_04, "SA_AIS_OK -
saImmOmCcbObjectModify_2 - long DN");
+ test_case_add(8, saImmOmLongDn_05, "SA_AIS_OK - saImmOmCcbObjectDelete
- long DN");
+ test_case_add(8, saImmOmLongDn_06, "SA_AIS_OK -
saImmOmSearchInitialize_2 and saImmOmSearchNext_2");
+ test_case_add(8, saImmOmLongDn_07, "SA_AIS_OK - saImmOmAccessorGet_2");
+ test_case_add(8, saImmOmLongDn_08, "SA_AIS_OK - saImmOmAdminOwnerSet");
+}
+
+__attribute__ ((constructor)) static void saImmOmLongDn_constructor(void)
+{
+ test_suite_add(8, "Long DN");
+}
+
+
+
+
------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel