Hi Hung, Ack from me.
Best regards, Zoran -----Original Message----- From: Hung Nguyen [mailto:[email protected]] Sent: Tuesday, September 22, 2015 7:06 PM To: Anders Björnerstedt; Zoran Milinkovic; [email protected] Cc: [email protected] Subject: [PATCH 4 of 4] imm: Add test cases for strong default [#1425] 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"); } ------------------------------------------------------------------------------ Monitor Your Dynamic Infrastructure at Any Scale With Datadog! Get real-time metrics from all of your servers, apps and tools in one place. SourceForge users - Click here to start your Free Trial of Datadog now! http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140 _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
