Feature: IPMI user

Updated below test cases from test_ipmi_user.robot script.

           - Verify Administrator And No Access Privilege For Different Channels

           - Verify Operator And User Privilege For Different Channels

Removed hardcoded channel number.

Added keyword to get all available channel number.

Added keyword to get number of active channel number for ethernet interface.

Added keyword to skip different channel test case based active channel number count
and added this keyword in test setup for different channel test cases.

Signed-off-by: ganesanb <ganesanb@ami.com>
Change-Id: I9ac6e7cef973fbc3b692d3ce4c1fd52dd2918440
diff --git a/ipmi/test_ipmi_user.robot b/ipmi/test_ipmi_user.robot
index 5242a50..a9d1857 100644
--- a/ipmi/test_ipmi_user.robot
+++ b/ipmi/test_ipmi_user.robot
@@ -3,6 +3,7 @@
 
 Resource            ../lib/ipmi_client.robot
 Resource            ../lib/openbmc_ffdc.robot
+Resource            ../lib/bmc_network_utils.robot
 Library             ../lib/ipmi_utils.py
 Test Setup          Printn
 
@@ -29,7 +30,6 @@
 # User defined count.
 ${USER_LOOP_COUNT}      20
 
-
 *** Test Cases ***
 
 Verify IPMI User Summary
@@ -364,6 +364,7 @@
 Verify Administrator And No Access Privilege For Different Channels
     [Documentation]  Set administrator and no access privilege for different channels and verify.
     [Tags]  Verify_Administrator_And_No_Access_Privilege_For_Different_Channels
+    [Setup]  Check Active Ethernet Channels
     [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
     ...  Delete Created User  ${random_userid}
 
@@ -373,23 +374,24 @@
     ...  user set password ${random_userid} ${valid_password}
 
     # Set admin privilege for newly created user with channel 1.
-    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}  1
+    Set Channel Access  ${random_userid}  ipmi=on privilege=${admin_level_priv}  ${CHANNEL_NUMBER}
 
     # Set no access privilege for newly created user with channel 2.
-    Set Channel Access  ${random_userid}  ipmi=on privilege=${no_access_priv}  2
+    Set Channel Access  ${random_userid}  ipmi=on privilege=${no_access_priv}  ${secondary_channel_number}
 
     Enable IPMI User And Verify  ${random_userid}
 
     # Verify that user is able to run administrator level IPMI command with channel 1.
-    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator  1
+    Verify IPMI Command  ${random_username}  ${valid_password}  Administrator  ${CHANNEL_NUMBER}
 
     # Verify that user is unable to run IPMI command with channel 2.
-    Run IPMI Standard Command  sel info 2  expected_rc=${1}  U=${random_username}  P=${valid_password}
+    Run IPMI Standard Command  sel info ${secondary_channel_number}  expected_rc=${1}  U=${random_username}  P=${valid_password}
 
 
 Verify Operator And User Privilege For Different Channels
     [Documentation]  Set operator and user privilege for different channels and verify.
     [Tags]  Verify_Operator_And_User_Privilege_For_Different_Channels
+    [Setup]  Check Active Ethernet Channels
     [Teardown]  Run Keywords  FFDC On Test Case Fail  AND
     ...  Delete Created User  ${random_userid}
 
@@ -399,18 +401,18 @@
     ...  user set password ${random_userid} ${valid_password}
 
     # Set operator privilege for newly created user with channel 1.
-    Set Channel Access  ${random_userid}  ipmi=on privilege=${operator_priv}  1
+    Set Channel Access  ${random_userid}  ipmi=on privilege=${operator_priv}  ${CHANNEL_NUMBER}
 
     # Set user privilege for newly created user with channel 2.
-    Set Channel Access  ${random_userid}  ipmi=on privilege=${user_priv}  2
+    Set Channel Access  ${random_userid}  ipmi=on privilege=${user_priv}  ${secondary_channel_number}
 
     Enable IPMI User And Verify  ${random_userid}
 
     # Verify that user is able to run operator level IPMI command with channel 1.
-    Verify IPMI Command  ${random_username}  ${valid_password}  Operator  1
+    Verify IPMI Command  ${random_username}  ${valid_password}  Operator  ${CHANNEL_NUMBER}
 
     # Verify that user is able to run user level IPMI command with channel 2.
-    Verify IPMI Command  ${random_username}  ${valid_password}  User  2
+    Verify IPMI Command  ${random_username}  ${valid_password}  User  ${secondary_channel_number}
 
 
 Verify Setting IPMI User With Max Password Length
@@ -653,3 +655,18 @@
 
     Run IPMI Standard Command  user set name ${userid} ""
     Sleep  5s
+
+
+Check Active Ethernet Channels
+    [Documentation]  Check active ethernet channels and set suite variables.
+
+    ${channel_number_list}=  Get Active Ethernet Channel List
+    ${channel_length}=  Get Length  ${channel_number_list}
+    Skip If  '${channel_length}' == '1'
+    ...  msg= Skips this test case as only one channel was in active.
+
+    FOR  ${channel_num}  IN  @{channel_number_list}
+        ${secondary_channel_number}=  Set Variable If  ${channel_num} != ${CHANNEL_NUMBER}  ${channel_num}
+    END
+
+    Set Suite Variable  ${secondary_channel_number}
diff --git a/lib/bmc_network_utils.robot b/lib/bmc_network_utils.robot
index efe6998..dfa09d1 100644
--- a/lib/bmc_network_utils.robot
+++ b/lib/bmc_network_utils.robot
@@ -662,3 +662,56 @@
     ${sys_hostname}=  Get BMC Hostname
     Should Be Equal  ${sys_hostname}  ${hostname}
     ...  ignore_case=True  msg=Hostname does not exist.
+
+Get Channel Number For All Interface
+    [Documentation]  Gets the Interface name and returns the channel number for the given interface.
+
+    ${valid_channel_number_interface_names}=  Get Channel Config
+
+    ${valid_channel_number_interface_names}=  Convert To Dictionary  ${valid_channel_number_interface_names}
+
+    [Return]  ${valid_channel_number_interface_names}
+
+Get Valid Channel Number
+    [Documentation]  Get Valid Channel Number.
+    [Arguments]  ${valid_channel_number_interface_names}
+
+    #Description of argument(s):
+    #valid_channel_number_interface_names   Contains channel names in dict.
+
+    &{valid_channel_number_interface_name}=  Create Dictionary
+
+    FOR  ${key}  ${values}  IN  &{valid_channel_number_interface_names}
+      Run Keyword If  '${values['is_valid']}' == 'True'
+      ...  Set To Dictionary  ${valid_channel_number_interface_name}  ${key}  ${values}
+    END
+
+    [Return]  ${valid_channel_number_interface_name}
+
+Get Channel Number For Valid Ethernet Interface
+    [Documentation]  Get channel number for all ethernet interface.
+    [Arguments]  ${valid_channel_number_interface_name}
+
+    # Description of argument(s):
+    # channel_number_list  Contains channel names in list.
+
+    @{channel_number_list}=  Create List
+
+    FOR  ${channel_number}  ${values}  IN  &{valid_channel_number_interface_name}
+      Run Keyword If  '${values['channel_info']['medium_type']}' == 'lan-802.3'
+      ...  Append To List  ${channel_number_list}  ${channel_number}
+    END
+
+    [Return]  ${channel_number_list}
+
+Get Active Ethernet Channel List
+    [Documentation]  Get Available Channel.
+
+    ${valid_channel_number_interface_names}=  Get Channel Number For All Interface
+
+    ${valid_channel_number_interface_name}=  Get Valid Channel Number  ${valid_channel_number_interface_names}
+
+    ${channel_number_list}=  Get Channel Number For Valid Ethernet Interface
+    ...  ${valid_channel_number_interface_name}
+
+    [Return]  ${channel_number_list}