Re: [devel] [PATCH 1/1] mds: Send NCSMDS_DOWN with vdest if there is no any adest [#2941]
Hi Minh, ack, code review and mdstest run. One minor comment below. /Thanks HansN On 10/25/18 04:40, Minh Chau wrote: > If split brain happens and network merges back, at this point in time > there are a few mds events coming to payloads, which are the SVC UP > from the other controller; SVC down from services in both controllers > due to reboot from split brain detection. > In the ticket description, the first partition includes SC1, PL3, > the second partition includes SC2, PL4, PL5. The amfnd on PL3 is > missing NCSMDS_DOWN with vdest in the below scenario: > > - SVC up event from the other amfd (on SC2) > - SVC down event from amfd (SC1), it's the same active adest from > mds-PL3's view, start await_active timer, but no NCSMDS_DOWN with > vdest is sent because the adest on SC2 exists. > - SVC down event from amfd (SC2), it's different active adest. > > Because the payloads reside in different partitions so they don't > have the same active adest view at mds level. When both SCs go down > due to split brain detection, the same SVC down events occur and > comes to all payloads, but they have different view so they behave > differently to the payloads in the other partition. > > The patch adds an additional condition to send NCSMDS_DOWN if there is > no actual adest existed > --- > src/mds/mds_c_api.c | 80 > ++--- > 1 file changed, 46 insertions(+), 34 deletions(-) > > diff --git a/src/mds/mds_c_api.c b/src/mds/mds_c_api.c > index f5ba318..73849cc 100644 > --- a/src/mds/mds_c_api.c > +++ b/src/mds/mds_c_api.c > @@ -3644,13 +3644,58 @@ uint32_t mds_mcm_svc_down(PW_ENV_ID pwe_id, > MDS_SVC_ID svc_id, V_DEST_RL role, > local_svc_hdl, svc_id, vdest_id, > _adest, _running, > _result_info, true); > - [HansN] is this log message informative/needed? > + m_MDS_LOG_INFO("MCM:API: svc_down: " > + "active_adest:%lu", active_adest); > /* First delete the entry */ > mds_subtn_res_tbl_del( > local_svc_hdl, svc_id, vdest_id, adest, > vdest_policy, svc_sub_part_ver, > archword_type); > > + MDS_SUBSCRIPTION_RESULTS_INFO *s_info = NULL; > + bool adest_exists = false; > + > + /* if no adest remains for this svc > + * send MDS_DOWN > + */ > + status = mds_subtn_res_tbl_getnext_any( > + local_svc_hdl, svc_id, > + _info); > + > + while (status != NCSCC_RC_FAILURE) { > + if (s_info->key.vdest_id != > + m_VDEST_ID_FOR_ADEST_ENTRY) { > + adest_exists = true; > + break; > + } > + > + status = mds_subtn_res_tbl_getnext_any( > + local_svc_hdl, svc_id, _info); > + } > + > + if (active_adest != adest > + && vdest_policy == NCS_VDEST_TYPE_MxN > + && adest_exists == false) { > + m_MDS_LOG_INFO("MCM:API: svc_down : " > + "svc_id = %s(%d) on DEST id = > %d " > + "got NO_ACTIVE for svc_id = > %s(%d) " > +"on Vdest id = %d Adest = %s, rem_svc_pvt_ver=%d", > + get_svc_names( > + > m_MDS_GET_SVC_ID_FROM_SVC_HDL(local_svc_hdl)), > + m_MDS_GET_SVC_ID_FROM_SVC_HDL( > + local_svc_hdl), > + m_MDS_GET_VDEST_ID_FROM_SVC_HDL( > + local_svc_hdl), > + get_svc_names(svc_id), svc_id, > + vdest_id, > + > log_subtn_result_info->sub_adest_details, > + svc_sub_part_ver); > + status = mds_mcm_user_event_callback( > + local_svc_hdl, pwe_id, svc_id, > + role, vdest_id, 0, NCSMDS_DOWN, > +
Re: [devel] [PATCH 1/1] imm: fix coredump generated during roaming test [#2943]
Hi Vu, Ack. Note1: Not tested. Note2: This function is doing too much and its dependencies is very hard to understand so I cannot confirm that this will solve the problem or add any new problems within the time I can use on this review. Thanks Lennart On tis, 2018-10-23 at 11:31 +0700, Vu Minh Nguyen wrote: > The fix of ticket [#2934] was not covered the roaming SC case. > With roaming, IMMND veteran could run on system controller node type. > > Instead of going to accept_node directly in previous fix, it should > go to > update_node_type. > --- > src/imm/immd/immd_evt.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/src/imm/immd/immd_evt.c b/src/imm/immd/immd_evt.c > index 9cd82da64..a0f632b7e 100644 > --- a/src/imm/immd/immd_evt.c > +++ b/src/imm/immd/immd_evt.c > @@ -1814,7 +1814,7 @@ static uint32_t > immd_evt_proc_immnd_intro(IMMD_CB *cb, IMMD_EVT *evt, > cb->ccb_id_count, > msg->ccb_id_count, > cb->impl_count, msg- > >impl_count); > } > - goto accept_node; > + goto update_node_type; > } > > if (cb->fevsSendCount < evt- > >info.ctrl_msg.fevs_count) { > @@ -1887,6 +1887,7 @@ static uint32_t > immd_evt_proc_immnd_intro(IMMD_CB *cb, IMMD_EVT *evt, > } > } > > +update_node_type: > /* Determine type of node. */ > if (sinfo->dest == cb->loc_immnd_dest) { > node_info->isOnController = true; ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1/1] amfd: reset snd_msg_id in LostFound state [#2952]
Ack, review only/Thanks HansN Från: Gary Lee Skickat: den 2 november 2018 06:23:09 Till: nagendra @ hasolutions . in; Minh Hon Chau; Hans Nordebäck Kopia: opensaf-devel@lists.sourceforge.net; Gary Lee Ämne: [PATCH 1/1] amfd: reset snd_msg_id in LostFound state [#2952] If a PL rejoins the main network partition before the node failover timer expires, it is told to reboot by AMFD. AMFND thinks it has become headless and resets rcv_msg_id to 0, and shows this when it receives the reboot msg from AMFD: Rebooting OpenSAF NodeId = 0 EE Name = No EE Mapped, Reason: Message ID mismatch, rec xx, expected 1, OwnNodeId = xx, SupervisionTime = 60 We can avoid this by resetting snd_msg_id for this PL in AMFD in state LostFound, before the reboot msg is sent. --- src/amf/amfd/node_state.cc | 5 + 1 file changed, 5 insertions(+) diff --git a/src/amf/amfd/node_state.cc b/src/amf/amfd/node_state.cc index a8659dcf7..787ddab94 100644 --- a/src/amf/amfd/node_state.cc +++ b/src/amf/amfd/node_state.cc @@ -126,6 +126,11 @@ void LostFound::TimerExpired() { node->node_name.c_str()); if (fsm_->Active() == true) { +// amfnd thinks it's been headless and resets its rcv_msg_id to 0, +// also do the same here to avoid 'Message ID mismatch' errors +// at amfnd +node->snd_msg_id = 0; + LOG_WA("Sending node reboot order"); avd_d2n_reboot_snd(node); -- 2.17.1 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 0/3] Review Request for imm: add new test cases of apitest [#2951]
Summary: imm: add new test cases of API saImmOmClassCreate_2() of apitest [#2951] Review request for Ticket(s): 2951_1 Peer Reviewer(s):vu.m.nguyen, Hans Nordeb??ck Pull request to: *** LIST THE PERSON WITH PUSH ACCESS HERE *** Affected branch(es): develop Development branch: ticket-2951_1 Base revision: 39928c976dfce75f69892f717df3ea128ef835aa Personal repository: git://git.code.sf.net/u/mohan-hasoln/review Impacted area Impact y/n Docsn Build systemn RPM/packaging n Configuration files n Startup scripts n SAF servicesn OpenSAF servicesn Core libraries n Samples n Tests y Other n NOTE: Patch(es) contain lines longer than 80 characers Comments (indicate scope for each "y" above): - *** EXPLAIN/COMMENT THE PATCH SERIES HERE *** revision e758cddffa03f863a6d17d9b407d3bc28a2763c1 Author: Mohan Kanakam Date: Fri, 2 Nov 2018 12:25:49 +0530 imm: add new test case of API saImmOmClassDelete() of apitest [#2951] revision 6602336dcfeabaa66ef06c223aa9fe9d6c19b55e Author: Mohan Kanakam Date: Fri, 2 Nov 2018 12:15:52 +0530 imm: add new test case of API saImmOmClassDescriptionGet_2() of apitest [#2951] revision daf9d096912e822044cbe82a65704ebed4fe8afc Author: Mohan Kanakam Date: Fri, 2 Nov 2018 12:03:23 +0530 imm: add new test cases of API saImmOmClassCreate_2() of apitest [#2951] Complete diffstat: -- .../apitest/management/test_saImmOmClassCreate_2.c | 92 ++ .../apitest/management/test_saImmOmClassDelete.c | 19 + .../management/test_saImmOmClassDescriptionGet_2.c | 25 ++ 3 files changed, 136 insertions(+) Testing Commands: - ./immomtest 2 Testing, Expected Results: -- 19 PASSED saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE CONFIG CLASS 20 PASSED saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE CONFIG CLASS UNINITLIZED HANDLE 21 PASSED saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE RUNTIME CLASS UNINTILIZED HANDLE 22 PASSED saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE CONFIG CLASS FINALIZED HANDLE 23 PASSED saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE RUNTIME CLASS FINALLIZED HANDLE 31 PASSED saImmOmClassDescriptionGet_2 - SA_AIS_ERR_INVALID_PARAM 39 PASSED saImmOmClassDelete_2 - SA_AIS_ERR_NOT_EXIST Conditions of Submission: - Ack from maintainers Arch Built StartedLinux distro --- mipsn n mips64 n n x86 n n x86_64 y y powerpc n n powerpc64 n n Reviewer Checklist: --- [Submitters: make sure that your review doesn't trigger any checkmarks!] Your checkin has not passed review because (see checked entries): ___ Your RR template is generally incomplete; it has too many blank entries that need proper data filled in. ___ You have failed to nominate the proper persons for review and push. ___ Your patches do not have proper short+long header ___ You have grammar/spelling in your header that is unacceptable. ___ You have exceeded a sensible line length in your headers/comments/text. ___ You have failed to put in a proper Trac Ticket # into your commits. ___ You have incorrectly put/left internal data in your comments/files (i.e. internal bug tracking tool IDs, product names etc) ___ You have not given any evidence of testing beyond basic build tests. Demonstrate some level of runtime or other sanity testing. ___ You have ^M present in some of your files. These have to be removed. ___ You have needlessly changed whitespace or added whitespace crimes like trailing spaces, or spaces before tabs. ___ You have mixed real technical changes with whitespace and other cosmetic code cleanup changes. These have to be separate commits. ___ You need to refactor your submission into logical chunks; there is too much content into a single commit. ___ You have extraneous garbage in your review (merge commits etc) ___ You have giant attachments which should never have been sent; Instead you should place your content in a public tree to be pulled. ___ You have too many commits attached to an e-mail; resend as threaded commits, or place in a public tree for a pull. ___ You have resent this content multiple times without a clear indication of what has changed between each re-send. ___ You have failed to adequately and individually address all of the comments and change requests that were proposed in the initial review. ___ You have a misconfigured ~/.gitconfig file (i.e. user.name, user.email etc) ___ Your computer have a badly configured date and time; confusing the the threaded patch review. ___ Your
[devel] [PATCH 3/3] imm: add new test case of API saImmOmClassDelete() of apitest [#2951]
--- .../apitest/management/test_saImmOmClassCreate_2.c| 4 src/imm/apitest/management/test_saImmOmClassDelete.c | 19 +++ 2 files changed, 23 insertions(+) diff --git a/src/imm/apitest/management/test_saImmOmClassCreate_2.c b/src/imm/apitest/management/test_saImmOmClassCreate_2.c index ea4db45..d8810e9 100644 --- a/src/imm/apitest/management/test_saImmOmClassCreate_2.c +++ b/src/imm/apitest/management/test_saImmOmClassCreate_2.c @@ -1517,6 +1517,7 @@ extern void saImmOmClassDelete_2_01(void); extern void saImmOmClassDelete_2_02(void); extern void saImmOmClassDelete_2_03(void); extern void saImmOmClassDelete_2_04(void); +extern void saImmOmClassDelete_2_05(void); __attribute__((constructor)) static void saImmOmInitialize_constructor(void) { @@ -1627,6 +1628,9 @@ __attribute__((constructor)) static void saImmOmInitialize_constructor(void) test_case_add( 2, saImmOmClassDelete_2_04, "saImmOmClassDelete_2 - SA_AIS_ERR_INVALID_PARAM, Empty classname"); + test_case_add( + 2, saImmOmClassDelete_2_05, + "saImmOmClassDelete_2 - SA_AIS_ERR_NOT_EXIST "); test_case_add( 2, saImmOmClassCreate_SchemaChange_2_01, diff --git a/src/imm/apitest/management/test_saImmOmClassDelete.c b/src/imm/apitest/management/test_saImmOmClassDelete.c index 273d192..ad36b8f 100644 --- a/src/imm/apitest/management/test_saImmOmClassDelete.c +++ b/src/imm/apitest/management/test_saImmOmClassDelete.c @@ -76,3 +76,22 @@ void saImmOmClassDelete_2_04(void) test_validate(rc, SA_AIS_ERR_INVALID_PARAM); safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); } + +void saImmOmClassDelete_2_05(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = {"rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN, + NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitions[] = {, NULL}; + + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + safassert(immutil_saImmOmClassCreate_2(immOmHandle, className, + SA_IMM_CLASS_CONFIG, attrDefinitions), + SA_AIS_OK); + immutil_saImmOmClassDelete(immOmHandle, className); + rc = immutil_saImmOmClassDelete(immOmHandle, className); + test_validate(rc, SA_AIS_ERR_NOT_EXIST); + safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); +} -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 2/3] imm: add new test case of API saImmOmClassDescriptionGet_2() of apitest [#2951]
--- .../apitest/management/test_saImmOmClassCreate_2.c | 3 +++ .../management/test_saImmOmClassDescriptionGet_2.c | 25 ++ 2 files changed, 28 insertions(+) diff --git a/src/imm/apitest/management/test_saImmOmClassCreate_2.c b/src/imm/apitest/management/test_saImmOmClassCreate_2.c index 9afbbe7..ea4db45 100644 --- a/src/imm/apitest/management/test_saImmOmClassCreate_2.c +++ b/src/imm/apitest/management/test_saImmOmClassCreate_2.c @@ -1509,6 +1509,7 @@ extern void saImmOmClassDescriptionGet_2_02(void); extern void saImmOmClassDescriptionGet_2_03(void); extern void saImmOmClassDescriptionGet_2_04(void); extern void saImmOmClassDescriptionGet_2_05(void); +extern void saImmOmClassDescriptionGet_2_06(void); extern void saImmOmClassDescriptionMemoryFree_2_01(void); extern void saImmOmClassDescriptionMemoryFree_2_02(void); @@ -1604,6 +1605,8 @@ __attribute__((constructor)) static void saImmOmInitialize_constructor(void) test_case_add( 2, saImmOmClassDescriptionGet_2_05, "saImmOmClassDescriptionGet_2 - SA_AIS_OK, Fetch includes SA_IMM_ATTR_NO_DANGLING"); + test_case_add(2, saImmOmClassDescriptionGet_2_06, + "saImmOmClassDescriptionGet_2 - SA_AIS_ERR_INVALID_PARAM"); test_case_add(2, saImmOmClassDescriptionMemoryFree_2_01, "saImmOmClassDescriptionMemoryFree_2 - SA_AIS_OK"); diff --git a/src/imm/apitest/management/test_saImmOmClassDescriptionGet_2.c b/src/imm/apitest/management/test_saImmOmClassDescriptionGet_2.c index ecf7ceb..bada265 100644 --- a/src/imm/apitest/management/test_saImmOmClassDescriptionGet_2.c +++ b/src/imm/apitest/management/test_saImmOmClassDescriptionGet_2.c @@ -175,3 +175,28 @@ void saImmOmClassDescriptionGet_2_05(void) safassert(immutil_saImmOmClassDelete(immOmHandle, className), SA_AIS_OK); safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); } + +void saImmOmClassDescriptionGet_2_06(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = { + "rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_RDN | SA_IMM_ATTR_CACHED, NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitionsIn[] = {, NULL}; + SaImmClassCategoryT classCategory; + SaImmAttrDefinitionT_2 **attrDefinitionsOut; + + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + safassert(immutil_saImmOmClassCreate_2(immOmHandle, className, + SA_IMM_CLASS_RUNTIME, attrDefinitionsIn), + SA_AIS_OK); + rc = immutil_saImmOmClassDescriptionGet_2(immOmHandle, NULL, + , ); + test_validate(rc, SA_AIS_ERR_INVALID_PARAM); + safassert(immutil_saImmOmClassDescriptionMemoryFree_2(immOmHandle, + attrDefinitionsOut), + SA_AIS_OK); + safassert(immutil_saImmOmClassDelete(immOmHandle, className), SA_AIS_OK); + safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); +} -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
[devel] [PATCH 1/3] imm: add new test cases of API saImmOmClassCreate_2() of apitest [#2951]
--- .../apitest/management/test_saImmOmClassCreate_2.c | 85 ++ 1 file changed, 85 insertions(+) diff --git a/src/imm/apitest/management/test_saImmOmClassCreate_2.c b/src/imm/apitest/management/test_saImmOmClassCreate_2.c index 4f25f8b..9afbbe7 100644 --- a/src/imm/apitest/management/test_saImmOmClassCreate_2.c +++ b/src/imm/apitest/management/test_saImmOmClassCreate_2.c @@ -426,6 +426,80 @@ void saImmOmClassCreate_2_19(void) safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); } +void saImmOmClassCreate_2_20(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = {"rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN, + NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitions[] = {, NULL}; + + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + rc = immutil_saImmOmClassCreate_2(-1, className, SA_IMM_CLASS_CONFIG, + attrDefinitions); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); + safassert(immutil_saImmOmFinalize(immOmHandle), SA_AIS_OK); +} + +void saImmOmClassCreate_2_21(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = {"rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN, + NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitions[] = {, NULL}; + + rc = immutil_saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG, + attrDefinitions); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmClassCreate_2_22(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = { + "rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_RDN | SA_IMM_ATTR_CACHED, NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitions[] = {, NULL}; + + rc = immutil_saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_RUNTIME, + attrDefinitions); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmClassCreate_2_23(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = {"rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_CONFIG | SA_IMM_ATTR_RDN, + NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitions[] = {, NULL}; + + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + immutil_saImmOmFinalize(immOmHandle); + rc = immutil_saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_CONFIG, + attrDefinitions); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + +void saImmOmClassCreate_2_24(void) +{ + const SaImmClassNameT className = (SaImmClassNameT) __FUNCTION__; + SaImmAttrDefinitionT_2 attr1 = { + "rdn", SA_IMM_ATTR_SANAMET, + SA_IMM_ATTR_RUNTIME | SA_IMM_ATTR_RDN | SA_IMM_ATTR_CACHED, NULL}; + const SaImmAttrDefinitionT_2 *attrDefinitions[] = {, NULL}; + + safassert(immutil_saImmOmInitialize(, , ), + SA_AIS_OK); + immutil_saImmOmFinalize(immOmHandle); + rc = immutil_saImmOmClassCreate_2(immOmHandle, className, SA_IMM_CLASS_RUNTIME, + attrDefinitions); + test_validate(rc, SA_AIS_ERR_BAD_HANDLE); +} + /* Verify it is not allowed to create IMM object class with reserved name. NOTE: As the list of reserved class names is read from the environment @@ -1497,6 +1571,17 @@ __attribute__((constructor)) static void saImmOmInitialize_constructor(void) 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, saImmOmClassCreate_2_20, + "saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE CONFIG CLASS"); + test_case_add(2, saImmOmClassCreate_2_21, + "saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE CONFIG CLASS UNINITLIZED HANDLE"); + test_case_add(2, saImmOmClassCreate_2_22, + "saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE RUNTIME CLASS UNINTILIZED HANDLE"); + test_case_add(2, saImmOmClassCreate_2_23, + "saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE CONFIG CLASS FINALIZED HANDLE"); + test_case_add(2, saImmOmClassCreate_2_24, + "saImmOmClassCreate_2 - SA_AIS_ERR_BAD_HANDLE RUNTIME CLASS FINALLIZED HANDLE"); + test_case_add( 2, saImmOmClassCreate_with_reserved_name_01,