diff options
Diffstat (limited to 'lib/auto/testcase/resiliency/AutoResilMain.py')
-rw-r--r-- | lib/auto/testcase/resiliency/AutoResilMain.py | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/lib/auto/testcase/resiliency/AutoResilMain.py b/lib/auto/testcase/resiliency/AutoResilMain.py new file mode 100644 index 0000000..1d21f6a --- /dev/null +++ b/lib/auto/testcase/resiliency/AutoResilMain.py @@ -0,0 +1,187 @@ +#!/usr/bin/env python3 + +# ===============LICENSE_START======================================================= +# Apache-2.0 +# =================================================================================== +# Copyright (C) 2018 Wipro. All rights reserved. +# =================================================================================== +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ===============LICENSE_END========================================================= + + +# OPNFV Auto project +# https://wiki.opnfv.org/pages/viewpage.action?pageId=12389095 + +# Use case 02: Resilience Improvements +# Use Case description: https://wiki.opnfv.org/display/AUTO/Auto+Use+Cases +# Test case design: https://wiki.opnfv.org/display/AUTO/Use+case+2+%28Resilience+Improvements+through+ONAP%29+analysis + +# This module: main program +# data initialization +# interactive CLI user menu: +# 1) select a test definition to run +# 2) view definition of selected test (pull all data from definition files) +# 3) start test +# 4) exit + + +#docstring +"""This is the main module for OPNFV Auto Test Data for Use Case 2: Resilience Improvements Through ONAP. +Auto project: https://wiki.opnfv.org/pages/viewpage.action?pageId=12389095 +""" + + + + +###################################################################### +# import statements +import AutoResilGlobal +from AutoResilMgTestDef import * + +# Constants +PROJECT_NAME = "Auto" +USE_CASE_NAME = "Resilience Improvements Through ONAP" + + + +###################################################################### + +def show_menu(selected_test_def_ID): + """Show menu, with a different first line based on current Test Definition selection.""" + + if selected_test_def_ID>0 : + print("\nCurrently selected test Definition ID: ",selected_test_def_ID) + else: + print("\nCurrently selected test Definition ID: (none)") + print("1: select Test Definition ID") + print("2: view currently selected Test Definition details") + print("3: start an execution of currently selected Test Definition") + print("4: exit") + + +def get_menu_choice(): + """Get a user input (a menu entry number).""" + while True: + try: + user_choice = int(input(" Choice: ")) + except ValueError: + print(" Invalid choice (must be an integer). Try again.") + continue + if user_choice < 1 or user_choice > 4: + print(" Invalid choice (must be between 1 and 4). Try again.") + continue + else: + return user_choice + + +def get_test_def_ID(): + """Get a user input (a test definition ID).""" + while True: + try: + user_test_def_ID = int(input(" Test Definition ID: ")) + except ValueError: + print(" Invalid choice (must be an integer). Try again.") + continue + if user_test_def_ID <1: + print(" Invalid choice (must be a positive integer). Try again.") + continue + + test_defs = read_list_bin(FILE_TEST_DEFINITIONS) + if (test_defs == None) or (test_defs==[]): + print("Problem with test definition file: empty") + sys.exit() # stop entire program, because test definition file MUST be correct + + if index_already_there(user_test_def_ID, test_defs): + return user_test_def_ID + else: + print("Invalid choice (Test Definition ID",user_test_def_ID,"does not exist). Try again.") + continue + + + +###################################################################### +def main(): + + print("\nProject:\t", PROJECT_NAME) + print("Use Case:\t",USE_CASE_NAME) + + + # Run initializations, to refresh data and make sure files are here. Also, this loads the lists in memory. + # For now, initialization functions are self-contained and hard-coded: + # all definition data is initialized from the code, not from user interaction. + AutoResilGlobal.test_case_list = init_test_cases() + AutoResilGlobal.test_definition_list = init_test_definitions() + AutoResilGlobal.recipient_list = init_recipients() + AutoResilGlobal.challenge_definition_list = init_challenge_definitions() + AutoResilGlobal.metric_definition_list = init_metric_definitions() + + AutoResilGlobal.physical_resource_list = init_physical_resources() + AutoResilGlobal.cloud_virtual_resource_list = init_cloud_virtual_resources() + AutoResilGlobal.VNF_Service_list = init_VNFs_Services() + + + # start with no test definition selected + selected_test_def_ID = -1 + + # interactive menu loop + while True: + + show_menu(selected_test_def_ID) + user_choice = get_menu_choice() + #print("***user_choice:",user_choice) #debug + + if user_choice == 1: # select Test Definition ID + selected_test_def_ID = get_test_def_ID() + selected_test_def = get_indexed_item_from_list(selected_test_def_ID, AutoResilGlobal.test_definition_list) + continue + + if user_choice == 2: # view currently selected Test Definition details + if selected_test_def_ID > 0: + if selected_test_def == None: + print("Problem with test definition: empty") + sys.exit() # stop entire program, because test definition MUST be correct + else: + selected_test_def.printout_all(0) + continue + else: + print("No current selection of Test Definition. Try again.") + continue + + if user_choice == 3: # start an execution of currently selected Test Definition + if selected_test_def_ID > 0: + if selected_test_def == None: + print("Problem with test definition: empty") + sys.exit() # stop entire program, because test definition MUST be correct + else: + test_def = get_indexed_item_from_list(selected_test_def_ID, AutoResilGlobal.test_definition_list) + if test_def != None: + test_def.run_test_code() + + else: + print("No current selection of Test Definition. Try again.") + continue + + if user_choice == 4: # exit + print("\nEnd of Main Program") + print("\nProject:\t", PROJECT_NAME) + print("Use Case:\t",USE_CASE_NAME) + print("\nBye!\n") + sys.exit() + + + + +if __name__ == "__main__": + main() + |