mirror of
				https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
				synced 2025-10-31 18:58:01 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			211 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python3
 | |
| import sys
 | |
| import os
 | |
| import importlib
 | |
| import time
 | |
| 
 | |
| sys.path.append(os.path.join(os.path.abspath(__file__ + "../../../")))
 | |
| 
 | |
| port_utils = importlib.import_module("py-json.port_utils")
 | |
| PortUtils = port_utils.PortUtils
 | |
| lfcli_base = importlib.import_module("py-json.LANforge.lfcli_base")
 | |
| LFCliBase = lfcli_base.LFCliBase
 | |
| 
 | |
| 
 | |
| class HTTPProfile(LFCliBase):
 | |
|     def __init__(self, lfclient_host, lfclient_port, local_realm, debug_=False):
 | |
|         super().__init__(lfclient_host, lfclient_port, debug_)
 | |
|         self.lfclient_url = "http://%s:%s" % (lfclient_host, lfclient_port)
 | |
|         self.debug = debug_
 | |
|         self.requests_per_ten = 600
 | |
|         self.local_realm = local_realm
 | |
|         self.created_cx = {}
 | |
|         self.created_endp = []
 | |
|         self.ip_map = {}
 | |
|         self.direction = "dl"
 | |
|         self.dest = "/dev/null"
 | |
|         self.port_util = PortUtils(self.local_realm)
 | |
|         self.max_speed = 0  # infinity
 | |
|         self.quiesce_after = 0  # infinity
 | |
| 
 | |
|     def check_errors(self, debug=False):
 | |
|         fields_list = ["!conn", "acc.+denied", "bad-proto", "bad-url", "other-err", "total-err", "rslv-p", "rslv-h",
 | |
|                        "timeout", "nf+(4xx)", "http-r", "http-p", "http-t", "login-denied"]
 | |
|         endp_list = self.json_get("layer4/list?fields=%s" % ','.join(fields_list))
 | |
|         debug_info = {}
 | |
|         if endp_list is not None and endp_list['endpoint'] is not None:
 | |
|             endp_list = endp_list['endpoint']
 | |
|             expected_passes = len(endp_list)
 | |
|             passes = len(endp_list)
 | |
|             for item in range(len(endp_list)):
 | |
|                 for name, info in endp_list[item].items():
 | |
|                     for field in fields_list:
 | |
|                         if info[field.replace("+", " ")] > 0:
 | |
|                             passes -= 1
 | |
|                             debug_info[name] = {field: info[field.replace("+", " ")]}
 | |
|             if debug:
 | |
|                 print(debug_info)
 | |
|             if passes == expected_passes:
 | |
|                 return True
 | |
|             else:
 | |
|                 print(list(debug_info), " Endps in this list showed errors getting to its URL")  # %s") % self.url)
 | |
|                 return False
 | |
| 
 | |
|     def start_cx(self):
 | |
|         print("Starting CXs...")
 | |
|         for cx_name in self.created_cx.keys():
 | |
|             self.json_post("/cli-json/set_cx_state", {
 | |
|                 "test_mgr": "default_tm",
 | |
|                 "cx_name": self.created_cx[cx_name],
 | |
|                 "cx_state": "RUNNING"
 | |
|             }, debug_=self.debug)
 | |
|             print(".", end='')
 | |
|         print("")
 | |
| 
 | |
|     def stop_cx(self):
 | |
|         print("Stopping CXs...")
 | |
|         for cx_name in self.created_cx.keys():
 | |
|             self.json_post("/cli-json/set_cx_state", {
 | |
|                 "test_mgr": "default_tm",
 | |
|                 "cx_name": self.created_cx[cx_name],
 | |
|                 "cx_state": "STOPPED"
 | |
|             }, debug_=self.debug)
 | |
|             print(".", end='')
 | |
|         print("")
 | |
| 
 | |
|     def cleanup(self):
 | |
|         print("Cleaning up cxs and endpoints")
 | |
|         if len(self.created_cx) != 0:
 | |
|             for cx_name in self.created_cx.keys():
 | |
|                 req_url = "cli-json/rm_cx"
 | |
|                 data = {
 | |
|                     "test_mgr": "default_tm",
 | |
|                     "cx_name": self.created_cx[cx_name]
 | |
|                 }
 | |
|                 self.json_post(req_url, data)
 | |
|                 # pprint(data)
 | |
|                 req_url = "cli-json/rm_endp"
 | |
|                 data = {
 | |
|                     "endp_name": cx_name
 | |
|                 }
 | |
|                 self.json_post(req_url, data)
 | |
|                 # pprint(data)
 | |
| 
 | |
|     def map_sta_ips(self, sta_list=None):
 | |
|         if sta_list is None:
 | |
|             sta_list = []
 | |
|         for sta_eid in sta_list:
 | |
|             eid = self.local_realm.name_to_eid(sta_eid)
 | |
|             sta_list = self.json_get("/port/%s/%s/%s?fields=alias,ip" %
 | |
|                                      (eid[0], eid[1], eid[2]))
 | |
|             if sta_list['interface'] is not None:
 | |
|                 self.ip_map[sta_list['interface']['alias']] = sta_list['interface']['ip']
 | |
| 
 | |
|     def create(self, ports=None, sleep_time=.5, debug_=False, suppress_related_commands_=None, http=False, ftp=False,
 | |
|                https=False, user=None, passwd=None, source=None, ftp_ip=None, upload_name=None, http_ip=None,
 | |
|                https_ip=None):
 | |
|         if ports is None:
 | |
|             ports = []
 | |
|         cx_post_data = []
 | |
|         self.map_sta_ips(ports)
 | |
|         print("Create CXs...")
 | |
| 
 | |
|         for i in range(len(list(self.ip_map))):
 | |
|             url = None
 | |
|             if i != len(list(self.ip_map)) - 1:
 | |
|                 port_name = list(self.ip_map)[i]
 | |
|                 ip_addr = self.ip_map[list(self.ip_map)[i + 1]]
 | |
|             else:
 | |
|                 port_name = list(self.ip_map)[i]
 | |
|                 ip_addr = self.ip_map[list(self.ip_map)[0]]
 | |
| 
 | |
|             if (ip_addr is None) or (ip_addr == ""):
 | |
|                 raise ValueError("HTTPProfile::create encountered blank ip/hostname")
 | |
| 
 | |
|             shelf = self.local_realm.name_to_eid(port_name)[0]
 | |
|             resource = self.local_realm.name_to_eid(port_name)[1]
 | |
|             name = self.local_realm.name_to_eid(port_name)[2]
 | |
| 
 | |
|             if upload_name is not None:
 | |
|                 name = upload_name
 | |
| 
 | |
|             if http:
 | |
|                 if http_ip is not None:
 | |
|                     self.port_util.set_http(port_name=name, resource=resource, on=True)
 | |
|                     url = "%s http://%s %s" % (self.direction, http_ip, self.dest)
 | |
|                 else:
 | |
|                     self.port_util.set_http(port_name=name, resource=resource, on=True)
 | |
|                     url = "%s http://%s/ %s" % (self.direction, ip_addr, self.dest)
 | |
|             if https:
 | |
|                 if https_ip is not None:
 | |
|                     self.port_util.set_http(port_name=name, resource=resource, on=True)
 | |
|                     url = "%s https://%s %s" % (self.direction, https_ip, self.dest)
 | |
|                 else:
 | |
|                     self.port_util.set_http(port_name=name, resource=resource, on=True)
 | |
|                     url = "%s https://%s/ %s" % (self.direction, ip_addr, self.dest)
 | |
| 
 | |
|             if ftp:
 | |
|                 self.port_util.set_ftp(port_name=name, resource=resource, on=True)
 | |
|                 if user is not None and passwd is not None and source is not None:
 | |
|                     if ftp_ip is not None:
 | |
|                         ip_addr = ftp_ip
 | |
|                     url = "%s ftp://%s:%s@%s%s %s" % (self.direction, user, passwd, ip_addr, source, self.dest)
 | |
|                     print("###### url:{}".format(url))
 | |
|                 else:
 | |
|                     raise ValueError("user: %s, passwd: %s, and source: %s must all be set" % (user, passwd, source))
 | |
|             if not http and not ftp and not https:
 | |
|                 raise ValueError("Please specify ftp and/or http")
 | |
| 
 | |
|             if (url is None) or (url == ""):
 | |
|                 raise ValueError("HTTPProfile::create: url unset")
 | |
| 
 | |
|             if upload_name is None:
 | |
|                 endp_data = {
 | |
|                     "alias": name + "_l4",
 | |
|                     "shelf": shelf,
 | |
|                     "resource": resource,
 | |
|                     "port": name,
 | |
|                     "type": "l4_generic",
 | |
|                     "timeout": 10,
 | |
|                     "url_rate": self.requests_per_ten,
 | |
|                     "url": url,
 | |
|                     "proxy_auth_type": 0x200,
 | |
|                     "quiesce_after": self.quiesce_after,
 | |
|                     "max_speed": self.max_speed
 | |
|                 }
 | |
|             else:
 | |
|                 endp_data = {
 | |
|                     "alias": name + "_l4",
 | |
|                     "shelf": shelf,
 | |
|                     "resource": resource,
 | |
|                     "port": ports[0],
 | |
|                     "type": "l4_generic",
 | |
|                     "timeout": 10,
 | |
|                     "url_rate": self.requests_per_ten,
 | |
|                     "url": url,
 | |
|                     "ssl_cert_fname": "ca-bundle.crt",
 | |
|                     "proxy_port": 0,
 | |
|                     "max_speed": self.max_speed,
 | |
|                     "proxy_auth_type": 0x200,
 | |
|                     "quiesce_after": self.quiesce_after
 | |
|                 }
 | |
|             url = "cli-json/add_l4_endp"
 | |
|             self.local_realm.json_post(url, endp_data, debug_=debug_,
 | |
|                                        suppress_related_commands_=suppress_related_commands_)
 | |
|             time.sleep(sleep_time)
 | |
| 
 | |
|             endp_data = {
 | |
|                 "alias": "CX_" + name + "_l4",
 | |
|                 "test_mgr": "default_tm",
 | |
|                 "tx_endp": name + "_l4",
 | |
|                 "rx_endp": "NA"
 | |
|             }
 | |
|             cx_post_data.append(endp_data)
 | |
|             self.created_cx[name + "_l4"] = "CX_" + name + "_l4"
 | |
| 
 | |
|         for cx_data in cx_post_data:
 | |
|             url = "/cli-json/add_cx"
 | |
|             self.local_realm.json_post(url, cx_data, debug_=debug_,
 | |
|                                        suppress_related_commands_=suppress_related_commands_)
 | |
|             time.sleep(sleep_time)
 | 
