tests/immsv/implementer/test_saImmOiRtObjectCreate_2.c | 6 +
tests/immsv/implementer/test_saImmOiRtObjectUpdate_2.c | 173 +++++++++++++++++
tests/immsv/management/test_saImmOmCcbInitialize.c | 6 +
tests/immsv/management/test_saImmOmCcbObjectModify_2.c | 173 +++++++++++++++++
tests/immsv/management/test_saImmOmClassCreate_2.c | 134 +++++++++++++
5 files changed, 492 insertions(+), 0 deletions(-)
Add test cases for strong default.
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
@@ -204,6 +204,9 @@ extern void saImmOiRtObjectUpdate_2_03(v
extern void saImmOiRtObjectUpdate_2_04(void);
extern void saImmOiRtObjectUpdate_2_05(void);
extern void saImmOiRtObjectUpdate_2_06(void);
+extern void saImmOiRtObjectUpdate_2_07(void);
+extern void saImmOiRtObjectUpdate_2_08(void);
+extern void saImmOiRtObjectUpdate_2_09(void);
extern void SaImmOiRtAttrUpdateCallbackT_01(void);
__attribute__ ((constructor)) static void
saImmOiRtObjectCreate_2_constructor(void)
@@ -232,6 +235,9 @@ extern void SaImmOiRtAttrUpdateCallbackT
test_case_add(3, saImmOiRtObjectUpdate_2_04, "saImmOiRtObjectUpdate_2 -
SA_AIS_ERR_BAD_OPERATION - update object not owned by implementer");
test_case_add(3, saImmOiRtObjectUpdate_2_05, "saImmOiRtObjectUpdate_2 -
SA_AIS_ERR_INVALID_PARAM - new value for the RDN attr");
test_case_add(3, saImmOiRtObjectUpdate_2_06, "saImmOiRtObjectUpdate_2 -
SA_AIS_ERR_INVALID_PARAM - update configuration attribute");
+ test_case_add(3, saImmOiRtObjectUpdate_2_07, "saImmOiRtObjectUpdate_2 -
STRONG_DEFAULT, Set value of runtime attribute to NULL");
+ test_case_add(3, saImmOiRtObjectUpdate_2_08, "saImmOiRtObjectUpdate_2 -
STRONG_DEFAULT, Set value of multi-valued runtime attribute to NULL");
+ test_case_add(3, saImmOiRtObjectUpdate_2_09, "saImmOiRtObjectUpdate_2 -
STRONG_DEFAULT, Delete all values of multi-valued runtime attribute");
test_case_add(3, SaImmOiRtAttrUpdateCallbackT_01,
"SaImmOiRtAttrUpdateCallbackT - SA_AIS_OK");
}
diff --git a/tests/immsv/implementer/test_saImmOiRtObjectUpdate_2.c
b/tests/immsv/implementer/test_saImmOiRtObjectUpdate_2.c
--- a/tests/immsv/implementer/test_saImmOiRtObjectUpdate_2.c
+++ b/tests/immsv/implementer/test_saImmOiRtObjectUpdate_2.c
@@ -214,3 +214,176 @@ void saImmOiRtObjectUpdate_2_06(void)
safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
}
+
+void saImmOiRtObjectUpdate_2_07(void) {
+ /*
+ * STRONG_DEFAULT, Set value of runtime attribute to NULL
+ */
+
+ /* Create class */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_CACHED
| SA_IMM_ATTR_RDN, NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_CACHED |
SA_IMM_ATTR_STRONG_DEFAULT, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_RUNTIME, attrDefinitions), SA_AIS_OK);
+
+ /* Create object */
+ SaImmOiImplementerNameT implementerName = (SaImmOiImplementerNameT)
__FUNCTION__;
+ SaNameT obj = { strlen("id=1"), "id=1" };
+ SaImmAttrValueT nameValue = &obj;
+ SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1, &nameValue};
+ SaUint32T val = 200;
+ SaImmAttrValueT valArray = &val;
+ SaImmAttrValuesT_2 createValue= { "attr", SA_IMM_ATTR_SAUINT32T, 1,
&valArray };
+ const SaImmAttrValuesT_2 * attrValues[] = {&rdnValue, &createValue, NULL};
+ safassert(saImmOiInitialize_2(&immOiHandle, &immOiCallbacks, &immVersion),
SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName), SA_AIS_OK);
+ safassert(saImmOiRtObjectCreate_2(immOiHandle, className, NULL,
attrValues), SA_AIS_OK);
+
+ /* Set the strong default attribute to NULL */
+ SaImmAttrValuesT_2 value = { "attr", SA_IMM_ATTR_SAUINT32T, 0, NULL };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, value };
+ const SaImmAttrModificationT_2 *attrMods[] = { &attrMod, NULL };
+ safassert(saImmOiRtObjectUpdate_2(immOiHandle, &obj, attrMods), SA_AIS_OK);
+
+ /* Check value of the attribute */
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmAttrNameT attName = "attr";
+ SaImmAttrNameT attNames[] = {attName, NULL};
+ SaImmAttrValuesT_2 ** resultAttrs;
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ safassert(saImmOmAccessorGet_2(accessorHandle, &obj, attNames,
&resultAttrs), SA_AIS_OK);
+ assert(resultAttrs[0] && (resultAttrs[0]->attrValueType ==
SA_IMM_ATTR_SAUINT32T));
+ assert(resultAttrs[0]->attrValuesNumber == 1);
+ test_validate(*((SaUint32T *) resultAttrs[0]->attrValues[0]), defaultVal);
+
+ /* Delete Object */
+ safassert(saImmOiRtObjectDelete(immOiHandle, &obj), SA_AIS_OK);
+ safassert(saImmOiImplementerClear(immOiHandle), SA_AIS_OK);
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ /* Delete class */
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
+void saImmOiRtObjectUpdate_2_08(void) {
+ /*
+ * STRONG_DEFAULT, Set value of multi-valued runtime attribute to NULL
+ */
+
+ /* Create class */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_CACHED
| SA_IMM_ATTR_RDN, NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_CACHED |
SA_IMM_ATTR_STRONG_DEFAULT | SA_IMM_ATTR_MULTI_VALUE, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_RUNTIME, attrDefinitions), SA_AIS_OK);
+
+ /* Create object */
+ SaImmOiImplementerNameT implementerName = (SaImmOiImplementerNameT)
__FUNCTION__;
+ SaNameT obj = { strlen("id=1"), "id=1" };
+ SaImmAttrValueT nameValue = &obj;
+ SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1, &nameValue};
+ SaUint32T val1 = 200;
+ SaUint32T val2 = 300;
+ SaImmAttrValueT valArray[] = {&val1, &val2};
+ SaImmAttrValuesT_2 createValue= { "attr", SA_IMM_ATTR_SAUINT32T, 2,
valArray };
+ const SaImmAttrValuesT_2 * attrValues[] = {&rdnValue, &createValue, NULL};
+ safassert(saImmOiInitialize_2(&immOiHandle, &immOiCallbacks, &immVersion),
SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName), SA_AIS_OK);
+ safassert(saImmOiRtObjectCreate_2(immOiHandle, className, NULL,
attrValues), SA_AIS_OK);
+
+ /* Set the strong default attribute to NULL */
+ SaImmAttrValuesT_2 value = { "attr", SA_IMM_ATTR_SAUINT32T, 0, NULL };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, value };
+ const SaImmAttrModificationT_2 *attrMods[] = { &attrMod, NULL };
+ safassert(saImmOiRtObjectUpdate_2(immOiHandle, &obj, attrMods), SA_AIS_OK);
+
+ /* Check value of the attribute */
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmAttrNameT attName = "attr";
+ SaImmAttrNameT attNames[] = {attName, NULL};
+ SaImmAttrValuesT_2 ** resultAttrs;
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ safassert(saImmOmAccessorGet_2(accessorHandle, &obj, attNames,
&resultAttrs), SA_AIS_OK);
+ assert(resultAttrs[0] && (resultAttrs[0]->attrValueType ==
SA_IMM_ATTR_SAUINT32T));
+ assert(resultAttrs[0]->attrValuesNumber == 1);
+ test_validate(*((SaUint32T *) resultAttrs[0]->attrValues[0]), defaultVal);
+
+ /* Delete Object */
+ safassert(saImmOiRtObjectDelete(immOiHandle, &obj), SA_AIS_OK);
+ safassert(saImmOiImplementerClear(immOiHandle), SA_AIS_OK);
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ /* Delete class */
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
+void saImmOiRtObjectUpdate_2_09(void) {
+ /*
+ * STRONG_DEFAULT, Delete all values of multi-valued runtime attribute
+ */
+
+ /* Create class */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_CACHED
| SA_IMM_ATTR_RDN, NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_CACHED |
SA_IMM_ATTR_STRONG_DEFAULT | SA_IMM_ATTR_MULTI_VALUE, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_RUNTIME, attrDefinitions), SA_AIS_OK);
+
+ /* Create object */
+ SaImmOiImplementerNameT implementerName = (SaImmOiImplementerNameT)
__FUNCTION__;
+ SaNameT obj = { strlen("id=1"), "id=1" };
+ SaImmAttrValueT nameValue = &obj;
+ SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1, &nameValue};
+ SaUint32T val1 = 200;
+ SaUint32T val2 = 300;
+ SaImmAttrValueT valArray[] = {&val1, &val2};
+ SaImmAttrValuesT_2 createValue= { "attr", SA_IMM_ATTR_SAUINT32T, 2,
valArray };
+ const SaImmAttrValuesT_2 * attrValues[] = {&rdnValue, &createValue, NULL};
+ safassert(saImmOiInitialize_2(&immOiHandle, &immOiCallbacks, &immVersion),
SA_AIS_OK);
+ safassert(saImmOiImplementerSet(immOiHandle, implementerName), SA_AIS_OK);
+ safassert(saImmOiRtObjectCreate_2(immOiHandle, className, NULL,
attrValues), SA_AIS_OK);
+
+ /* Set the strong default attribute to NULL */
+ SaImmAttrValuesT_2 value = { "attr", SA_IMM_ATTR_SAUINT32T, 2, valArray };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_DELETE, value };
+ const SaImmAttrModificationT_2 *attrMods[] = { &attrMod, NULL };
+ safassert(saImmOiRtObjectUpdate_2(immOiHandle, &obj, attrMods), SA_AIS_OK);
+
+ /* Check value of the attribute */
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmAttrNameT attName = "attr";
+ SaImmAttrNameT attNames[] = {attName, NULL};
+ SaImmAttrValuesT_2 ** resultAttrs;
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ safassert(saImmOmAccessorGet_2(accessorHandle, &obj, attNames,
&resultAttrs), SA_AIS_OK);
+ assert(resultAttrs[0] && (resultAttrs[0]->attrValueType ==
SA_IMM_ATTR_SAUINT32T));
+ assert(resultAttrs[0]->attrValuesNumber == 1);
+ test_validate(*((SaUint32T *) resultAttrs[0]->attrValues[0]), defaultVal);
+
+ /* Delete Object */
+ safassert(saImmOiRtObjectDelete(immOiHandle, &obj), SA_AIS_OK);
+ safassert(saImmOiImplementerClear(immOiHandle), SA_AIS_OK);
+ safassert(saImmOiFinalize(immOiHandle), SA_AIS_OK);
+
+ /* Delete class */
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
diff --git a/tests/immsv/management/test_saImmOmCcbInitialize.c
b/tests/immsv/management/test_saImmOmCcbInitialize.c
--- a/tests/immsv/management/test_saImmOmCcbInitialize.c
+++ b/tests/immsv/management/test_saImmOmCcbInitialize.c
@@ -165,6 +165,9 @@ extern void saImmOmCcbObjectModify_2_18(
extern void saImmOmCcbObjectModify_2_19(void);
extern void saImmOmCcbObjectModify_2_20(void);
extern void saImmOmCcbObjectModify_2_21(void);
+extern void saImmOmCcbObjectModify_2_22(void);
+extern void saImmOmCcbObjectModify_2_23(void);
+extern void saImmOmCcbObjectModify_2_24(void);
extern void saImmOmCcbApply_01(void);
extern void saImmOmCcbApply_02(void);
extern void saImmOmCcbFinalize_01(void);
@@ -238,6 +241,9 @@ extern void saImmOmCcbValidate_02(void);
test_case_add(6, saImmOmCcbObjectModify_2_19, "saImmOmCcbObjectModify_2 -
SA_AIS_ERR_BUSY, set NO_DANGLING reference to a deleted object by another CCB");
test_case_add(6, saImmOmCcbObjectModify_2_20, "saImmOmCcbObjectModify_2 -
SA_AIS_ERR_BUSY, set NO_DANGLING reference to a create object by another CCB");
test_case_add(6, saImmOmCcbObjectModify_2_21, "saImmOmCcbObjectModify_2 -
SA_AIS_OK, set NO_DANGLING reference to an object created in the same CCB");
+ test_case_add(6, saImmOmCcbObjectModify_2_22, "saImmOmCcbObjectModify_2 -
STRONG_DEFAULT, Set value of attribute to NULL");
+ test_case_add(6, saImmOmCcbObjectModify_2_23, "saImmOmCcbObjectModify_2 -
STRONG_DEFAULT, Set value of multi-valued attribute to NULL");
+ test_case_add(6, saImmOmCcbObjectModify_2_24, "saImmOmCcbObjectModify_2 -
STRONG_DEFAULT, Delete all values of multi-valued attribute");
test_case_add(6, saImmOmCcbApply_01, "saImmOmCcbApply - SA_AIS_OK");
test_case_add(6, saImmOmCcbApply_02, "saImmOmCcbApply -
SA_AIS_ERR_BAD_HANDLE");
diff --git a/tests/immsv/management/test_saImmOmCcbObjectModify_2.c
b/tests/immsv/management/test_saImmOmCcbObjectModify_2.c
--- a/tests/immsv/management/test_saImmOmCcbObjectModify_2.c
+++ b/tests/immsv/management/test_saImmOmCcbObjectModify_2.c
@@ -851,6 +851,179 @@ void saImmOmCcbObjectModify_2_21(void)
test_validate(rc, SA_AIS_OK);
}
+void saImmOmCcbObjectModify_2_22(void) {
+ /*
+ * STRONG_DEFAULT, Set value of attribute to NULL
+ */
+
+ /* Create class */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE |
SA_IMM_ATTR_STRONG_DEFAULT, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_CONFIG, attrDefinitions), SA_AIS_OK);
+
+ /* Create object */
+ const SaImmAdminOwnerNameT adminOwnerName = (SaImmAdminOwnerNameT)
__FUNCTION__;
+ SaImmAdminOwnerHandleT ownerHandle;
+ const SaNameT obj = { strlen("id=1"), "id=1" };
+ SaUint32T val = 200;
+ SaImmAttrValueT valArray = &val;
+ SaImmAttrValuesT_2 createValue= { "attr", SA_IMM_ATTR_SAUINT32T, 1,
&valArray };
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, adminOwnerName,
SA_TRUE, &ownerHandle), SA_AIS_OK);
+ safassert(object_create(immOmHandle, ownerHandle, className, &obj, NULL,
&createValue), SA_AIS_OK);
+
+ /* Set the strong default attribute to NULL */
+ SaImmCcbHandleT ccbHandle;
+ SaImmAttrValuesT_2 value = { "attr", SA_IMM_ATTR_SAUINT32T, 0, NULL };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, value };
+ const SaImmAttrModificationT_2 *attrMods[] = { &attrMod, NULL };
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbObjectModify_2(ccbHandle, &obj, attrMods), SA_AIS_OK);
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ /* Check value of the attribute */
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmAttrNameT attName = "attr";
+ SaImmAttrNameT attNames[] = {attName, NULL};
+ SaImmAttrValuesT_2 ** resultAttrs;
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ safassert(saImmOmAccessorGet_2(accessorHandle, &obj, attNames,
&resultAttrs), SA_AIS_OK);
+ assert(resultAttrs[0] && (resultAttrs[0]->attrValueType ==
SA_IMM_ATTR_SAUINT32T));
+ assert(resultAttrs[0]->attrValuesNumber == 1);
+ test_validate(*((SaUint32T *) resultAttrs[0]->attrValues[0]), defaultVal);
+
+ /* Delete object */
+ safassert(object_delete(ownerHandle, &obj, 1), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+ /* Delete class */
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
+void saImmOmCcbObjectModify_2_23(void) {
+ /*
+ * STRONG_DEFAULT, Set value of multi-valued attribute to NULL
+ */
+
+ /* Create class */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE |
SA_IMM_ATTR_STRONG_DEFAULT | SA_IMM_ATTR_MULTI_VALUE, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_CONFIG, attrDefinitions), SA_AIS_OK);
+
+ /* Create object */
+ const SaImmAdminOwnerNameT adminOwnerName = (SaImmAdminOwnerNameT)
__FUNCTION__;
+ SaImmAdminOwnerHandleT ownerHandle;
+ const SaNameT obj = { strlen("id=1"), "id=1" };
+ SaUint32T val1 = 200;
+ SaUint32T val2 = 300;
+ SaImmAttrValueT valArray[] = {&val1, &val2};
+ SaImmAttrValuesT_2 createValue= { "attr", SA_IMM_ATTR_SAUINT32T, 2,
valArray };
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, adminOwnerName,
SA_TRUE, &ownerHandle), SA_AIS_OK);
+ safassert(object_create(immOmHandle, ownerHandle, className, &obj, NULL,
&createValue), SA_AIS_OK);
+
+ /* Set the strong default attribute to NULL */
+ SaImmCcbHandleT ccbHandle;
+ SaImmAttrValuesT_2 modValue = { "attr", SA_IMM_ATTR_SAUINT32T, 0, NULL };
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_REPLACE, modValue
};
+ const SaImmAttrModificationT_2 *attrMods[] = { &attrMod, NULL };
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbObjectModify_2(ccbHandle, &obj, attrMods), SA_AIS_OK);
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ /* Check value of the attribute */
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmAttrNameT attName = "attr";
+ SaImmAttrNameT attNames[] = {attName, NULL};
+ SaImmAttrValuesT_2 ** resultAttrs;
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ safassert(saImmOmAccessorGet_2(accessorHandle, &obj, attNames,
&resultAttrs), SA_AIS_OK);
+ assert(resultAttrs[0] && (resultAttrs[0]->attrValueType ==
SA_IMM_ATTR_SAUINT32T));
+ assert(resultAttrs[0]->attrValuesNumber == 1);
+ test_validate(*((SaUint32T *) resultAttrs[0]->attrValues[0]), defaultVal);
+
+ /* Delete object */
+ safassert(object_delete(ownerHandle, &obj, 1), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+ /* Delete class */
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
+void saImmOmCcbObjectModify_2_24(void) {
+ /*
+ * STRONG_DEFAULT, Delete all values of multi-valued attribute
+ */
+
+ /* Create class */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE |
SA_IMM_ATTR_STRONG_DEFAULT | SA_IMM_ATTR_MULTI_VALUE, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_CONFIG, attrDefinitions), SA_AIS_OK);
+
+ /* Create object */
+ const SaImmAdminOwnerNameT adminOwnerName = (SaImmAdminOwnerNameT)
__FUNCTION__;
+ SaImmAdminOwnerHandleT ownerHandle;
+ const SaNameT obj = { strlen("id=1"), "id=1" };
+ SaUint32T val1 = 200;
+ SaUint32T val2 = 300;
+ SaImmAttrValueT valArray[] = {&val1, &val2};
+ SaImmAttrValuesT_2 createValue= { "attr", SA_IMM_ATTR_SAUINT32T, 2,
valArray };
+ safassert(saImmOmAdminOwnerInitialize(immOmHandle, adminOwnerName,
SA_TRUE, &ownerHandle), SA_AIS_OK);
+ safassert(object_create(immOmHandle, ownerHandle, className, &obj, NULL,
&createValue), SA_AIS_OK);
+
+ /* Delete all value of attribute */
+ SaImmCcbHandleT ccbHandle;
+ SaImmAttrValuesT_2 modValue = { "attr", SA_IMM_ATTR_SAUINT32T, 2, valArray
};
+ SaImmAttrModificationT_2 attrMod = { SA_IMM_ATTR_VALUES_DELETE, modValue };
+ const SaImmAttrModificationT_2 *attrMods[] = { &attrMod, NULL };
+ safassert(saImmOmCcbInitialize(ownerHandle, 0, &ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbObjectModify_2(ccbHandle, &obj, attrMods), SA_AIS_OK);
+ safassert(saImmOmCcbApply(ccbHandle), SA_AIS_OK);
+ safassert(saImmOmCcbFinalize(ccbHandle), SA_AIS_OK);
+
+ /* Check value of the attribute */
+ SaImmAccessorHandleT accessorHandle;
+ const SaImmAttrNameT attName = "attr";
+ SaImmAttrNameT attNames[] = {attName, NULL};
+ SaImmAttrValuesT_2 ** resultAttrs;
+ safassert(saImmOmAccessorInitialize(immOmHandle, &accessorHandle),
SA_AIS_OK);
+ safassert(saImmOmAccessorGet_2(accessorHandle, &obj, attNames,
&resultAttrs), SA_AIS_OK);
+ assert(resultAttrs[0] && (resultAttrs[0]->attrValueType ==
SA_IMM_ATTR_SAUINT32T));
+ assert(resultAttrs[0]->attrValuesNumber == 1);
+ test_validate(*((SaUint32T *) resultAttrs[0]->attrValues[0]), defaultVal);
+
+ /* Delete object */
+ safassert(object_delete(ownerHandle, &obj, 1), SA_AIS_OK);
+ safassert(saImmOmAdminOwnerFinalize(ownerHandle), SA_AIS_OK);
+
+ /* Delete class */
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
__attribute__ ((constructor)) static void
saImmOmCcbObjectModify_2_constructor(void)
{
dnObj1.length = (SaUint16T) sprintf((char*) dnObj1.value, "%s,%s",
rdnObj1.value, rootObj.value);
diff --git a/tests/immsv/management/test_saImmOmClassCreate_2.c
b/tests/immsv/management/test_saImmOmClassCreate_2.c
--- a/tests/immsv/management/test_saImmOmClassCreate_2.c
+++ b/tests/immsv/management/test_saImmOmClassCreate_2.c
@@ -299,6 +299,50 @@ void saImmOmClassCreate_2_17(void)
safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
}
+void saImmOmClassCreate_2_18(void)
+{
+ /*
+ * Create a class that has STRONG_DEFAULT flag.
+ */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE |
SA_IMM_ATTR_STRONG_DEFAULT, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+
+ rc = saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG,
attrDefinitions);
+ test_validate(rc, SA_AIS_OK);
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
+void saImmOmClassCreate_2_19(void)
+{
+ /*
+ * Create a class that has STRONG_DEFAULT flag without having default
value.
+ */
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaImmAttrDefinitionT_2 attr =
+ {"attr", SA_IMM_ATTR_SAUINT32T,
+ SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_WRITABLE |
SA_IMM_ATTR_STRONG_DEFAULT, NULL};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, &attr, NULL};
+
+ rc = saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG,
attrDefinitions);
+ test_validate(rc, SA_AIS_ERR_INVALID_PARAM);
+
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+}
+
#define OPENSAF_IMM_NOSTD_FLAG_PARAM "opensafImmNostdFlags"
#define OPENSAF_IMM_NOSTD_FLAG_ON 1
#define OPENSAF_IMM_NOSTD_FLAG_OFF 2
@@ -946,6 +990,90 @@ void saImmOmClassCreate_SchemaChange_2_1
if (!schemaChangeEnabled) disableSchemaChange();
}
+void saImmOmClassCreate_SchemaChange_2_17(void)
+{
+ /*
+ * Add STRONG_DEFAULT flag to an attribute
+ */
+ int schemaChangeEnabled = enableSchemaChange();
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 weak =
+ {"attr", SA_IMM_ATTR_SAUINT32T, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE, &defaultVal};
+ SaImmAttrDefinitionT_2 strong =
+ {"attr", SA_IMM_ATTR_SAUINT32T, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE | SA_IMM_ATTR_STRONG_DEFAULT, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, NULL, NULL};
+
+ attrDefinitions[1] = &weak;
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_CONFIG, attrDefinitions), SA_AIS_OK);
+ attrDefinitions[1] = &strong;
+ rc = saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG,
attrDefinitions);
+ test_validate(rc, SA_AIS_OK);
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+ if (!schemaChangeEnabled) disableSchemaChange();
+}
+
+void saImmOmClassCreate_SchemaChange_2_18(void)
+{
+ /*
+ * Remove STRONG_DEFAULT flag from an attribute
+ */
+ int schemaChangeEnabled = enableSchemaChange();
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 weak =
+ {"attr", SA_IMM_ATTR_SAUINT32T, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE, &defaultVal};
+ SaImmAttrDefinitionT_2 strong =
+ {"attr", SA_IMM_ATTR_SAUINT32T, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE | SA_IMM_ATTR_STRONG_DEFAULT, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, NULL, NULL};
+
+ attrDefinitions[1] = &strong;
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_CONFIG, attrDefinitions), SA_AIS_OK);
+ attrDefinitions[1] = &weak;
+ rc = saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG,
attrDefinitions);
+ test_validate(rc, SA_AIS_OK);
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+ if (!schemaChangeEnabled) disableSchemaChange();
+}
+
+void saImmOmClassCreate_SchemaChange_2_19(void)
+{
+ /*
+ * Add a new attribute with STRONG_DEFAULT flag
+ */
+ int schemaChangeEnabled = enableSchemaChange();
+ safassert(saImmOmInitialize(&immOmHandle, &immOmCallbacks, &immVersion),
SA_AIS_OK);
+
+ const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__;
+ SaImmAttrDefinitionT_2 rdn =
+ {"rdn", SA_IMM_ATTR_SANAMET, SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN,
NULL};
+ SaUint32T defaultVal = 100;
+ SaImmAttrDefinitionT_2 strong =
+ {"attr", SA_IMM_ATTR_SAUINT32T, SA_IMM_ATTR_CONFIG |
SA_IMM_ATTR_WRITABLE | SA_IMM_ATTR_STRONG_DEFAULT, &defaultVal};
+ const SaImmAttrDefinitionT_2 *attrDefinitions[] = {&rdn, NULL, NULL};
+
+ safassert(saImmOmClassCreate_2(immOmHandle, className,
SA_IMM_CLASS_CONFIG, attrDefinitions), SA_AIS_OK);
+ attrDefinitions[1] = &strong;
+ rc = saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG,
attrDefinitions);
+ test_validate(rc, SA_AIS_ERR_EXIST);
+ safassert(saImmOmClassDelete(immOmHandle, className), SA_AIS_OK);
+
+ safassert(saImmOmFinalize(immOmHandle), SA_AIS_OK);
+ if (!schemaChangeEnabled) disableSchemaChange();
+}
+
extern void saImmOmClassDescriptionGet_2_01(void);
extern void saImmOmClassDescriptionGet_2_02(void);
extern void saImmOmClassDescriptionGet_2_03(void);
@@ -982,6 +1110,8 @@ extern void saImmOmClassDelete_2_04(void
test_case_add(2, saImmOmClassCreate_2_15, "saImmOmClassCreate_2 -
SA_AIS_ERR_INVALID_PARAM, flag SA_IMM_ATTR_NO_DUPLICATES only allowed on
multivalued");
test_case_add(2, saImmOmClassCreate_2_16, "saImmOmClassCreate_2 -
SA_AIS_OK, flag SA_IMM_ATTR_NO_DANGLING");
test_case_add(2, saImmOmClassCreate_2_17, "saImmOmClassCreate_2 -
SA_AIS_ERR_INVALID_PARAM, flag SA_IMM_ATTR_NO_DANGLING for PRTA");
+ test_case_add(2, saImmOmClassCreate_2_18, "saImmOmClassCreate_2 -
SA_AIS_OK, Create a class that has STRONG_DEFAULT flag");
+ test_case_add(2, saImmOmClassCreate_2_19, "saImmOmClassCreate_2 -
SA_AIS_OK, Create a class that has STRONG_DEFAULT flag without having default
value");
test_case_add(2, saImmOmClassDescriptionGet_2_01,
"saImmOmClassDescriptionGet_2 - SA_AIS_OK");
test_case_add(2, saImmOmClassDescriptionGet_2_02,
"saImmOmClassDescriptionGet_2 - SA_AIS_ERR_BAD_HANDLE");
@@ -1014,5 +1144,9 @@ extern void saImmOmClassDelete_2_04(void
test_case_add(2, saImmOmClassCreate_SchemaChange_2_14, "SchemaChange -
SA_AIS_ERR_INVALID_PARAM, Create new class with DEFAULT_REMOVED flag (Runtime
class)");
test_case_add(2, saImmOmClassCreate_SchemaChange_2_15, "SchemaChange -
SA_AIS_ERR_INVALID_PARAM, Set value of default-removed attribute to empty when
creating an object (Runtime class)");
test_case_add(2, saImmOmClassCreate_SchemaChange_2_16, "SchemaChange - Set
value of default-restored attribute to empty when creating an object (Runtime
class)");
+
+ test_case_add(2, saImmOmClassCreate_SchemaChange_2_17, "SchemaChange -
SA_AIS_OK, Add STRONG_DEFAULT flag to an attribute");
+ test_case_add(2, saImmOmClassCreate_SchemaChange_2_18, "SchemaChange -
SA_AIS_OK, Remove STRONG_DEFAULT flag from an attribute");
+ test_case_add(2, saImmOmClassCreate_SchemaChange_2_19, "SchemaChange -
SA_AIS_ERR_EXIST, Add a new attribute with STRONG_DEFAULT flag");
}
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel