mirror of
				https://github.com/Telecominfraproject/wlan-testing.git
				synced 2025-10-31 10:57:50 +00:00 
			
		
		
		
	fms input format changed
Signed-off-by: shivamcandela <shivam.thakur@candelatech.com>
This commit is contained in:
		| @@ -11,6 +11,7 @@ from urllib.parse import urlparse | ||||
| import pytest | ||||
| import allure | ||||
| import requests | ||||
| from operator import itemgetter | ||||
| from pathlib import Path | ||||
|  | ||||
| from requests.adapters import HTTPAdapter | ||||
| @@ -75,9 +76,11 @@ class ConfigureController: | ||||
|         if method == "GET": | ||||
|             resp = requests.get(uri, headers=self.make_headers(), params=params, verify=False, timeout=100) | ||||
|         elif method == "POST": | ||||
|             resp = requests.post(uri, data=payload, verify=False, timeout=100) | ||||
|             print(uri, payload, params) | ||||
|             resp = requests.post(uri, params=params, data=payload, headers=self.make_headers(), verify=False, | ||||
|                                  timeout=100) | ||||
|         elif method == "PUT": | ||||
|             resp = requests.put(uri, data=payload, verify=False, timeout=100) | ||||
|             resp = requests.put(uri, params=params, data=payload, verify=False, timeout=100) | ||||
|         elif method == "DELETE": | ||||
|             resp = requests.delete(uri, headers=self.make_headers(), params=params, verify=False, timeout=100) | ||||
|  | ||||
| @@ -182,11 +185,16 @@ class FMSUtils: | ||||
|         self.sdk_client = sdk_client | ||||
|  | ||||
|     def upgrade_firmware(self, serial="", url=""): | ||||
|         response = self.sdk_client.request(service="gw", command="device/" + serial + "upgrade/", | ||||
|                                            method="POST", params="revisionSet=true", | ||||
|                                            payload="{ \"serialNumber\" : " + serial + " , \"uri\" : " + url + " }") | ||||
|         print(response) | ||||
|         pass | ||||
|         response = self.sdk_client.request(service="gw", command="device/" + serial + "/upgrade", | ||||
|                                            method="POST", params="serialNumber=" + serial, | ||||
|                                            payload="{ \"serialNumber\" : " + "\"" + serial + "\"" + | ||||
|                                                    " , \"uri\" : " + "\"" + url + "\"" + | ||||
|                                                    ", \"when\" : 0" + " }") | ||||
|         print(response.json()) | ||||
|         allure.attach(name="REST - firmware upgrade response: ", | ||||
|                       body=str(response.status_code) + "\n" + | ||||
|                            str(response.json()) + "\n" | ||||
|                       ) | ||||
|  | ||||
|     def ap_model_lookup(self, model=""): | ||||
|         devices = self.get_device_set() | ||||
| @@ -207,7 +215,7 @@ class FMSUtils: | ||||
|     def get_latest_fw(self, model=""): | ||||
|  | ||||
|         device_type = self.ap_model_lookup(model=model) | ||||
|  | ||||
|         print("shivam", device_type) | ||||
|         response = self.sdk_client.request(service="fms", command="firmwares/", method="GET", | ||||
|                                            params="latestOnly=true&deviceType=" + device_type, | ||||
|                                            payload="") | ||||
| @@ -224,20 +232,21 @@ class FMSUtils: | ||||
|         else: | ||||
|             return {} | ||||
|  | ||||
|     def get_firmwares(self, limit="", deviceType="", latestonly=""): | ||||
|     def get_firmwares(self, limit="", model="cig_wf188", latestonly="", branch="", commit_id=""): | ||||
|  | ||||
|         deviceType = self.ap_model_lookup(model=model) | ||||
|  | ||||
|         params = "limit=" + limit + "&deviceType=" + deviceType + "&latestonly=" + latestonly | ||||
|  | ||||
|         response = self.sdk_client.request(service="fms", command="firmwares/", method="GET", params=params, payload="") | ||||
|         print(response) | ||||
|  | ||||
|         if response.status_code == 200: | ||||
|             data = response.json() | ||||
|             print(data) | ||||
|             newlist = sorted(data['firmwares'], key=itemgetter('created')) | ||||
|  | ||||
|             return newlist | ||||
|             # print(data) | ||||
|  | ||||
|         # resp = requests.get(uri, headers=self.sdk_client.make_headers(), verify=False, timeout=100) | ||||
|         # self.sdk_client.check_response("GET", resp, self.sdk_client.make_headers(), "", uri) | ||||
|         # devices = resp.json() | ||||
|         # # resp.close()() | ||||
|         return "devices" | ||||
|  | ||||
|  | ||||
| @@ -521,17 +530,16 @@ if __name__ == '__main__': | ||||
|         'password': 'openwifi', | ||||
|     } | ||||
|     obj = Controller(controller_data=controller) | ||||
|     fms = FMSUtils(sdk_client=obj) | ||||
|     # fms = FMSUtils(sdk_client=obj) | ||||
|     # fms.get_device_set() | ||||
|     # model = fms.get_latest_fw(model="eap102") | ||||
|     # print(model) | ||||
|     # profile = UProfileUtility(sdk_client=obj) | ||||
|     # profile.set_mode(mode="BRIDGE") | ||||
|     # profile.set_radio_config() | ||||
|     # ssid = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G", "5G"], "security": "psk", "security_key": "something", | ||||
|     #         "vlan": 100} | ||||
|     # profile.add_ssid(ssid_data=ssid, radius=False) | ||||
|     # profile.push_config(serial_number="903cb39d6918") | ||||
|     profile = UProfileUtility(sdk_client=obj) | ||||
|     profile.set_mode(mode="BRIDGE") | ||||
|     profile.set_radio_config() | ||||
|     ssid = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G", "5G"], "security": "psk", "security_key": "something"} | ||||
|     profile.add_ssid(ssid_data=ssid, radius=False) | ||||
|     profile.push_config(serial_number="903cb39d6918") | ||||
|     # print(profile.get_ssid_info()) | ||||
|     # # print(obj.get_devices()) | ||||
|     obj.logout() | ||||
|   | ||||
| @@ -126,12 +126,12 @@ CONFIGURATION = { | ||||
|                 'mode': 'wifi5', | ||||
|                 'serial': '001122090801', | ||||
|                 'jumphost': True, | ||||
|                 'ip': "127.0.0.1", | ||||
|                 'ip': "10.28.3.100", | ||||
|                 'username': "lanforge", | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 8833, | ||||
|                 'port': 22, | ||||
|                 'jumphost_tty': '/dev/ttyAP3', | ||||
|                 'version': "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/tplink_ec420/20210728-tplink_ec420-uCentral-trunk-12ad0d5-upgrade.bin" | ||||
|                 'version': "latest" | ||||
|             } | ||||
|         ], | ||||
|         "traffic_generator": { | ||||
| @@ -198,7 +198,7 @@ CONFIGURATION = { | ||||
|         }, | ||||
|         'access_point': [ | ||||
|             { | ||||
|                 'model': 'wf188n', | ||||
|                 'model': 'cig_wf188', | ||||
|                 'mode': 'wifi6', | ||||
|                 'serial': '0000c1018812', | ||||
|                 'jumphost': True, | ||||
| @@ -207,7 +207,7 @@ CONFIGURATION = { | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 22, | ||||
|                 'jumphost_tty': '/dev/ttyAP1', | ||||
|                 'version': "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/cig_wf188/20210729-cig_wf188-v2.0.0-rc2-ec3662e-upgrade.bin" | ||||
|                 'version': "trunk-d6c5e1f" | ||||
|             } | ||||
|         ], | ||||
|         "traffic_generator": { | ||||
| @@ -245,7 +245,7 @@ CONFIGURATION = { | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 22,  # 22 | ||||
|                 'jumphost_tty': '/dev/ttyAP2', | ||||
|                 'version': "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/edgecore_eap102/20210625-edgecore_eap102-uCentral-trunk-4225122-upgrade.bin" | ||||
|                 'version': "latest" | ||||
|             } | ||||
|         ], | ||||
|         "traffic_generator": { | ||||
| @@ -283,7 +283,8 @@ CONFIGURATION = { | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 22,  # 22 | ||||
|                 'jumphost_tty': '/dev/ttyAP3', | ||||
|                 'version': "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/uCentral/edgecore_eap101/20210729-edgecore_eap101-v2.0.0-rc2-02244b8-upgrade.bin" | ||||
|                 'version': "latest-next", | ||||
|                 'version_branch': "trunk-d6c5e1f" | ||||
|             } | ||||
|         ], | ||||
|         "traffic_generator": { | ||||
| @@ -345,11 +346,9 @@ CONFIGURATION = { | ||||
|  | ||||
|     "mesh": { | ||||
|         "controller": { | ||||
|             'url': "http://wlan-portal-svc-digicert.cicd.lab.wlan.tip.build",  # API base url for the controller | ||||
|             'username': 'support@example.com', | ||||
|             'password': 'support', | ||||
|             'version': '1.1.0-SNAPSHOT', | ||||
|             'commit_date': "2021-06-01" | ||||
|             'url': 'https://sec-ucentral-qa01.cicd.lab.wlan.tip.build:16001',  # API base url for the controller | ||||
|             'username': "tip@ucentral.com", | ||||
|             'password': 'openwifi', | ||||
|         }, | ||||
|         'access_point': [ | ||||
|             { | ||||
| @@ -362,16 +361,82 @@ CONFIGURATION = { | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 22,  # 22 | ||||
|                 'jumphost_tty': '/dev/ttyAP2', | ||||
|                 'version': "latest" | ||||
|             }, | ||||
| { | ||||
|                 'model': 'eap101', | ||||
|                 'mode': 'wifi6', | ||||
|                 'serial': '34efb6af4903', | ||||
|                 'jumphost': True, | ||||
|                 'ip': "10.28.3.101",  # 10.28.3.103 | ||||
|                 'username': "lanforge", | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 22,  # 22 | ||||
|                 'jumphost_tty': '/dev/ttyAP3', | ||||
|                 'version': "latest" | ||||
|             }, | ||||
| { | ||||
|                 'model': 'eap101', | ||||
|                 'mode': 'wifi6', | ||||
|                 'serial': '34efb6af4a7a', | ||||
|                 'jumphost': True, | ||||
|                 'ip': "10.28.3.101",  # 10.28.3.103 | ||||
|                 'username': "lanforge", | ||||
|                 'password': "pumpkin77", | ||||
|                 'port': 22,  # 22 | ||||
|                 'jumphost_tty': '/dev/ttyAP4', | ||||
|                 'version': "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/eap101/trunk/eap101-1.1.0.tar.gz" | ||||
|             } | ||||
|         ], | ||||
|         "traffic_generator": { | ||||
|             "name": "lanforge", | ||||
|             "details": { | ||||
|             "details-mobile-sta": { | ||||
|                 "ip": "10.28.3.14",  # 10.28.3.34 | ||||
|                 "port": 8080,  # 8080 | ||||
|                 "ssh_port": 22, | ||||
|                 "2.4G-Radio": ["wiphy0", "wiphy2"], | ||||
|                 "2.4G-Radio": ["1.1.wiphy0", "1.1.wiphy2"], | ||||
|                 "5G-Radio": ["1.1.wiphy1", "1.1.wiphy3"], | ||||
|                 "AX-Radio": ["1.1.wiphy4", "1.1.wiphy5", "1.1.wiphy6", "1.1.wiphy7"], | ||||
|                 "upstream": "1.1.eth2", | ||||
|                 "upstream_subnet": "10.28.2.1/24", | ||||
|                 "uplink": "1.1.eth3", | ||||
|                 "2.4G-Station-Name": "wlan0", | ||||
|                 "5G-Station-Name": "wlan0", | ||||
|                 "AX-Station-Name": "ax" | ||||
|             }, | ||||
|             "details-root": { | ||||
|                 "ip": "10.28.3.14",  # 10.28.3.34 | ||||
|                 "port": 8080,  # 8080 | ||||
|                 "ssh_port": 22, | ||||
|                 "2.4G-Radio": ["1.1.wiphy0", "1.1.wiphy2"], | ||||
|                 "5G-Radio": ["wiphy1", "wiphy3"], | ||||
|                 "AX-Radio": ["wiphy4", "wiphy5", "wiphy6", "wiphy7"], | ||||
|                 "upstream": "1.1.eth2", | ||||
|                 "upstream_subnet": "10.28.2.1/24", | ||||
|                 "uplink": "1.1.eth3", | ||||
|                 "2.4G-Station-Name": "wlan0", | ||||
|                 "5G-Station-Name": "wlan0", | ||||
|                 "AX-Station-Name": "ax" | ||||
|             }, | ||||
|             "details-node-1": { | ||||
|                 "ip": "10.28.3.14",  # 10.28.3.34 | ||||
|                 "port": 8080,  # 8080 | ||||
|                 "ssh_port": 22, | ||||
|                 "2.4G-Radio": ["1.1.wiphy0", "1.1.wiphy2"], | ||||
|                 "5G-Radio": ["wiphy1", "wiphy3"], | ||||
|                 "AX-Radio": ["wiphy4", "wiphy5", "wiphy6", "wiphy7"], | ||||
|                 "upstream": "1.1.eth2", | ||||
|                 "upstream_subnet": "10.28.2.1/24", | ||||
|                 "uplink": "1.1.eth3", | ||||
|                 "2.4G-Station-Name": "wlan0", | ||||
|                 "5G-Station-Name": "wlan0", | ||||
|                 "AX-Station-Name": "ax" | ||||
|             }, | ||||
|             "details-node-2": { | ||||
|                 "ip": "10.28.3.14",  # 10.28.3.34 | ||||
|                 "port": 8080,  # 8080 | ||||
|                 "ssh_port": 22, | ||||
|                 "2.4G-Radio": ["1.1.wiphy0", "1.1.wiphy2"], | ||||
|                 "5G-Radio": ["wiphy1", "wiphy3"], | ||||
|                 "AX-Radio": ["wiphy4", "wiphy5", "wiphy6", "wiphy7"], | ||||
|                 "upstream": "1.1.eth2", | ||||
| @@ -381,6 +446,7 @@ CONFIGURATION = { | ||||
|                 "5G-Station-Name": "wlan0", | ||||
|                 "AX-Station-Name": "ax" | ||||
|             } | ||||
|  | ||||
|         } | ||||
|     },  # checked | ||||
|     "interop-01": { | ||||
|   | ||||
| @@ -642,7 +642,7 @@ def add_env_properties(get_configuration, get_apnos, fixtures_ver, add_allure_en | ||||
|     add_allure_environment_property('Access-Point-Firmware-Version', | ||||
|                                     fixtures_ver.get_ap_version(get_apnos, get_configuration)[0].split("\n")[1]) | ||||
|     add_allure_environment_property('Cloud-Controller-SDK-URL', get_configuration["controller"]["url"]) | ||||
|     add_allure_environment_property('AP-Serial-Number', get_configuration["access_point"][0]["serial"]) | ||||
|     add_allure_environment_property('AP-Serial-Number', get_configuration["access_point"][0]["serial"] + "\n") | ||||
|  | ||||
|  | ||||
| @pytest.fixture(scope="session") | ||||
|   | ||||
| @@ -46,6 +46,7 @@ class TestBridgeModeConnectivitySuiteA(object): | ||||
|         pytest -m "client_connectivity and bridge and general and suiteA" | ||||
|     """ | ||||
|  | ||||
|     @pytest.mark.reg | ||||
|     @pytest.mark.open | ||||
|     @pytest.mark.twog | ||||
|     @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2809", name="JIRA LINK") | ||||
|   | ||||
| @@ -59,26 +59,88 @@ class Fixtures_2x: | ||||
|             firmware_url = "" | ||||
|             ap_ssh = get_apnos(ap, pwd="../libs/apnos/", sdk="2.x") | ||||
|             ap_version = ap_ssh.get_ap_version_ucentral() | ||||
|             if ap['version'] == "latest": | ||||
|             response = self.fw_client.get_latest_fw(model=ap["model"]) | ||||
|             # if the target version specified is latest | ||||
|             if ap['version'].split('-')[1] == "latest": | ||||
|                 # get the latest branch | ||||
|                 if 'revision' in list(response.keys()): | ||||
|                     version_latest = response['revision'] | ||||
|                     print(ap_version, version_latest) | ||||
|                     print(str(ap_version).replace(" ", ""), str(version_latest).replace(" ", ""), | ||||
|                           str(version_latest).replace(" ", "") == 'OpenWrt21.02-SNAPSHOTr16011+75-6fd65c6573/TIP-v2.1.0-rc2-d0a0715') | ||||
|                     if str(ap_version).replace(" ", "") == str(version_latest).replace(" ", ""): | ||||
|                     ap_v = "" | ||||
|                     latest_v = "" | ||||
|                     try: | ||||
|                         ap_v = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] | ||||
|                         latest_v = str(version_latest).split("/")[1].replace(" ", "") | ||||
|                         print(ap_v, | ||||
|                               latest_v) | ||||
|                     except Exception as e: | ||||
|                         pass | ||||
|                     print(ap_v == latest_v) | ||||
|                     if ap_v == latest_v: | ||||
|                         continue | ||||
|                     else: | ||||
|                         if 'uri' in list(response.keys()): | ||||
|                             firmware_url = response['uri'] | ||||
|  | ||||
|                             self.fw_client.upgrade_firmware(serial=ap['serial'], url=str(firmware_url)) | ||||
|                             time.sleep(300) | ||||
|                             ap_version = ap_ssh.get_ap_version_ucentral() | ||||
|                             ap_v = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] | ||||
|                             latest_v = str(version_latest).split("/")[1].replace(" ", "") | ||||
|                             if ap_v == latest_v: | ||||
|                                 print("firmware upgraded to latest: ", latest_v) | ||||
|                                 continue | ||||
|                             # firmware upgrade request | ||||
|                         else: | ||||
|                             # firmware uri is not available | ||||
|                             continue | ||||
|                         pass | ||||
|             else: | ||||
|  | ||||
|                 firmware_list = self.fw_client.get_firmwares(model=ap['model'], branch="", commit_id='') | ||||
|                 fw_list = [] | ||||
|                 for firmware in firmware_list: | ||||
|                     if firmware['revision'].split("/")[1].replace(" ", "").split('-')[-1] == ap['version'].split('-')[1]: | ||||
|                         fw_list.append(firmware) | ||||
|  | ||||
|                 if len(fw_list) == 1: | ||||
|                     url = fw_list[0]['uri'] | ||||
|                     current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] | ||||
|                     target_revision = fw_list[0]['revision'].split("/")[1].replace(" ", "") | ||||
|                     if current_version == target_revision: | ||||
|                         continue | ||||
|                     else: | ||||
|                         self.fw_client.upgrade_firmware(serial=ap['serial'], url=str(url)) | ||||
|                         time.sleep(300) | ||||
|                         ap_version = ap_ssh.get_ap_version_ucentral() | ||||
|                         print(ap_version) | ||||
|                         current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] | ||||
|                         print(current_version, target_revision) | ||||
|                         if current_version  == target_revision: | ||||
|                             print("firmware upgraded successfully: ", target_revision) | ||||
|                 else: | ||||
|                     pass | ||||
|                     version_fms = firmware['uri'].split('-')[-3] + "-" + firmware['uri'].split('-')[-2] | ||||
|  | ||||
|  | ||||
|                     if version_fms == ap['version']: | ||||
|                         print(firmware) | ||||
|                 # for version in firmware_list: | ||||
|                 #     if ap['version'] in version['revision']: | ||||
|                 #         print(version) | ||||
|                 #         firmware_url = version['uri'] | ||||
|                 #         self.fw_client.upgrade_firmware(serial=ap['serial'], url=str(firmware_url)) | ||||
|                 #         time.sleep(300) | ||||
|                 #         ap_version = ap_ssh.get_ap_version_ucentral() | ||||
|                 #         ap_v = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] | ||||
|                 #         if ap_v in version['revision']: | ||||
|                 #             print("firmware upgraded successfully: ", version['revision']) | ||||
|                 # for revision_fms in revisions['revisions']: | ||||
|                 #     print(ap['version'] in revision_fms) | ||||
|                 # # print(self.fw_client.get_revisions()) | ||||
|                 # upgrade to a specified version | ||||
|                 # if ap['version'] in response['revision']: | ||||
|                 # print("shivam", response['revision'], ap['version']) | ||||
|                 # print("shivam", response['revision'], ap['version']) | ||||
|                 # "TIP-v2.1.0-rc3-bcd07e4" in response['revision']) | ||||
|                 continue | ||||
|  | ||||
|         # Compare with the specified one | ||||
|         # if 'latest' | ||||
| @@ -285,7 +347,6 @@ class Fixtures_2x: | ||||
|         if x < 19: | ||||
|             print("Config properly applied into AP", config) | ||||
|  | ||||
|  | ||||
|         time_2 = time.time() | ||||
|         time_interval = time_2 - time_1 | ||||
|         allure.attach(name="Time Took to apply Config: " + str(time_interval), body="") | ||||
| @@ -293,7 +354,6 @@ class Fixtures_2x: | ||||
|         ap_config_latest = ap_ssh.get_uc_latest_config() | ||||
|         ap_config_latest["uuid"] = 0 | ||||
|  | ||||
|  | ||||
|         ap_config_active = ap_ssh.get_uc_active_config() | ||||
|         ap_config_active["uuid"] = 0 | ||||
|         x = 1 | ||||
| @@ -330,19 +390,15 @@ class Fixtures_2x: | ||||
|         ap_logs = ap_ssh.logread() | ||||
|         allure.attach(body=ap_logs, name="AP Logs: ") | ||||
|  | ||||
|  | ||||
|  | ||||
|         try: | ||||
|             ssid_info_sdk = instantiate_profile_obj.get_ssid_info() | ||||
|             ap_wifi_data = ap_ssh.get_iwinfo() | ||||
|  | ||||
|  | ||||
|             for p in ap_wifi_data: | ||||
|                 for q in ssid_info_sdk: | ||||
|                     if ap_wifi_data[p][0] == q[0] and ap_wifi_data[p][2] == q[3]: | ||||
|                         q.append(ap_wifi_data[p][1]) | ||||
|  | ||||
|  | ||||
|             ssid_data = [] | ||||
|             idx_mapping = {} | ||||
|             for interface in range(len(ssid_info_sdk)): | ||||
|   | ||||
| @@ -73,4 +73,3 @@ filterwarnings=ignore::UserWarning | ||||
| markers=sanity: Run the sanity for Client Connectivity test | ||||
|  | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -9,26 +9,11 @@ pytestmark = [pytest.mark.test_resources, pytest.mark.sanity, | ||||
|               pytest.mark.sanity_55] | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @pytest.mark.fw | ||||
| def test_firmware(firmware_upgrade): | ||||
|     assert True | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| @allure.testcase(name="Test Resources", url="") | ||||
| class TestResources(object): | ||||
|     """Test Case Class: Test cases to cover resource Connectivity""" | ||||
| @@ -71,4 +56,3 @@ class TestResources(object): | ||||
|             pytest.exit("LANforgeGUI-5.4.3 is not available") | ||||
|  | ||||
|         assert traffic_generator_connectivity | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 shivamcandela
					shivamcandela