mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 10:48:02 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!env /usr/bin/python
 | |
| 
 | |
| import traceback
 | |
| # Extend this class to use common set of debug and request features for your script
 | |
| from pprint import pprint
 | |
| 
 | |
| import LANforge.LFUtils
 | |
| from LANforge.LFUtils import *
 | |
| 
 | |
| 
 | |
| class LFCliBase:
 | |
|     # do not use `super(LFCLiBase,self).__init__(self, host, port, _debug)
 | |
|     # that is py2 era syntax and will force self into the host variable, making you
 | |
|     # very confused.
 | |
|     def __init__(self, _lfjson_host, _lfjson_port, _debug=False, _halt_on_error=False, _exit_on_error=False,
 | |
|                  _exit_on_fail=False):
 | |
|         self.fail_pref = "FAILED: "
 | |
|         self.pass_pref = "PASSED: "
 | |
|         self.lfclient_host = _lfjson_host
 | |
|         self.lfclient_port = _lfjson_port
 | |
|         self.debug = _debug
 | |
|         self.haltOnError = _halt_on_error
 | |
|         self.lfclient_url = "http://%s:%s" % (self.lfclient_host, self.lfclient_port)
 | |
|         self.test_results = []
 | |
|         self.exit_on_error = _exit_on_error
 | |
|         self.exit_on_fail = _exit_on_fail
 | |
| 
 | |
|     def clear_test_results(self):
 | |
|         self.test_results.clear()
 | |
| 
 | |
|     def json_post(self, _req_url, _data):
 | |
|         json_response = None
 | |
|         try:
 | |
|             lf_r = LFRequest.LFRequest(self.lfclient_url, _req_url, debug_=self.debug)
 | |
|             _data['suppress_preexec_cli'] = True
 | |
|             _data['suppress_preexec_method'] = True
 | |
|             lf_r.addPostData(_data)
 | |
|             if (self.debug):
 | |
|                 LANforge.LFUtils.debug_printer.pprint(_data)
 | |
|             json_response = lf_r.jsonPost(show_error=self.debug, debug=self.debug)
 | |
|         except Exception as x:
 | |
|             if self.debug or self.haltOnError:
 | |
|                 print("jsonPost posted to %s" % _req_url)
 | |
|                 pprint(_data)
 | |
|                 print("Exception %s:" % x)
 | |
|                 traceback.print_exception(Exception, x, x.__traceback__, chain=True)
 | |
|             if self.haltOnError:
 | |
|                 exit(1)
 | |
| 
 | |
|         return json_response
 | |
| 
 | |
|     def json_get(self, _req_url):
 | |
|         if self.debug:
 | |
|             print("URL: "+_req_url)
 | |
|         json_response = None
 | |
|         try:
 | |
|             lf_r = LFRequest.LFRequest(self.lfclient_url, _req_url)
 | |
|             json_response = lf_r.getAsJson(self.debug)
 | |
|             #debug_printer.pprint(json_response)
 | |
|             if (json_response is None) and self.debug:
 | |
|                 raise ValueError(json_response)
 | |
|         except ValueError as ve:
 | |
|             if self.debug or self.haltOnError:
 | |
|                 print("jsonGet asked for " + _req_url)
 | |
|                 print("Exception %s:" % ve)
 | |
|                 traceback.print_exception(ValueError, ve, ve.__traceback__, chain=True)
 | |
|             if self.haltOnError:
 | |
|                 sys.exit(1)
 | |
| 
 | |
|         return json_response
 | |
| 
 | |
|     def error(self, exception):
 | |
|         # print("lfcli_base error: %s" % exception)
 | |
|         pprint.pprint(exception)
 | |
|         traceback.print_exception(Exception, exception, exception.__traceback__, chain=True)
 | |
|         if self.haltOnError:
 | |
|             print("halting on error")
 | |
|             sys.exit(1)
 | |
|         # else:
 | |
|         #    print("continuing...")
 | |
| 
 | |
|     def check_connect(self):
 | |
|         if self.debug:
 | |
|             print("Checking for LANforge GUI connection: %s" % self.lfclient_url)
 | |
|         response = self.json_get("/")
 | |
|         duration = 0
 | |
|         while (response is None) and (duration < 300):
 | |
|             print("LANforge GUI connection not found sleeping 5 seconds, tried: %s" % self.lfclient_url)
 | |
|             duration += 2
 | |
|             time.sleep(2)
 | |
|             response = self.json_get("")
 | |
| 
 | |
|         if duration >= 300:
 | |
|             print("Could not connect to LANforge GUI")
 | |
|             sys.exit(1)
 | |
| 
 | |
|     def get_result_list(self):
 | |
|         return self.test_results
 | |
| 
 | |
|     def get_failed_result_list(self):
 | |
|         fail_list = []
 | |
|         for result in self.test_results:
 | |
|             if not result.startswith("PASS"):
 | |
|                 fail_list.append(result)
 | |
|         return fail_list
 | |
| 
 | |
|     def get_fail_message(self):
 | |
|         fail_messages = self.get_failed_result_list()
 | |
|         return "\n".join(fail_messages)
 | |
| 
 | |
|     def get_all_message(self):
 | |
|         return "\n".join(self.test_results)
 | |
| 
 | |
|     def passes(self):
 | |
|         pass_counter = 0
 | |
|         fail_counter = 0
 | |
|         for result in self.test_results:
 | |
|             if result.startswith("PASS"):
 | |
|                 pass_counter += 1
 | |
|             else:
 | |
|                 fail_counter += 1
 | |
|         if (fail_counter == 0) and (pass_counter > 0):
 | |
|             return True
 | |
|         return False
 | |
| 
 | |
|     # use this inside the class to log a failure result
 | |
|     def _fail(self, message, print_=False):
 | |
|         self.test_results.append(self.fail_pref + message)
 | |
|         if print_:
 | |
|             print(self.fail_pref + message)
 | |
|         if self.exit_on_error:
 | |
|             sys.exit(1)
 | |
| 
 | |
|     # use this inside the class to log a pass result
 | |
|     def _pass(self, message, print_=False):
 | |
|         self.test_results.append(self.pass_pref + message)
 | |
|         if print_:
 | |
|             print(self.pass_pref + message)
 | |
| 
 | |
| # ~class
 | 
