Files
wlan-testing/tests/controller_tests/ucentral_gateway/test_analyticservice.py
Anil Kumar Tegala ee33710327 Analytics API tests (#813)
* initial analytics unit test added

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* analytics other api unit tests added

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* analytics service api tests added

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* analytics service setup obj added into tip_2x libs

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* testcase input data & functions modified as per available prov ui data

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* removed unreachable code

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* removed duplicate method

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* instance variable values replaced with class variables for board data

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* query params encoding issue fixed with urlencode

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* delete board data method name changed

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* request params and random id fixed

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

* index out of range fixed for lists data

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>

---------

Signed-off-by: anil-tegala <anil.tegala@candelatech.com>
2023-07-11 17:31:31 +05:30

298 lines
15 KiB
Python

"""
UCentral Analytics Service OPEN API Tests
"""
import datetime
import json
import random
import string
import time
import allure
import pytest
import logging
@pytest.mark.uc_sanity
@pytest.mark.ow_sdk_tests
@pytest.mark.ow_analytics_api_tests
@allure.parent_suite("OpenWifi SDK Tests")
@allure.suite("OpenWifi Analytics Service Tests")
class TestUcentralAnalyticService(object):
boards, clients = [], []
board_id, entity_id = "", "aefb7254-571f-42c3-be51-39a2b1441234"
@pytest.mark.system_info_analytics
@allure.title("Get System Info Analytics")
def test_analytics_system_info(self, get_target_object):
response = get_target_object.controller_library_object.get_system_ow_analytics()
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.get_boards
@allure.title("Retrieve list of available boards")
def test_analytics_get_boards(self, get_target_object):
response = get_target_object.analytics_library_object.get_boards()
logging.info(response.json())
if response.status_code == 200:
body = response.json()
self.boards = body["boards"]
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.get_board_devices
@allure.title("GET Board Devices")
def test_analytics_get_board_devices(self, get_target_object):
response = get_target_object.analytics_library_object.get_boards()
logging.info(response.json())
if response.status_code == 200:
body = response.json()
self.boards = body["boards"]
else:
assert response.status_code == 200, "Failed in getting boards data"
if len(self.boards) > 0:
response = get_target_object.analytics_library_object.get_board_devices(
board_id=self.boards[random.randint(0, len(self.boards)-1)]['id'])
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200, "Failed in getting devices in a board"
else:
assert False, "No Boards Available"
@pytest.mark.create_board
@allure.title("Create a Board")
def test_analytics_create_board(self, get_target_object):
resp, venue_list = {}, []
temp_response = get_target_object.prov_library_object.get_entity_by_id(TestUcentralAnalyticService.entity_id)
if temp_response.status_code == 200:
resp = temp_response.json()
venue_list = resp['venues']
else:
assert temp_response.status_code == 200, "Failed in getting Venues"
data = {
"name": "Test-Create-Board-" + "".join(random.choices(string.ascii_letters, k=6)),
"description": "Create Board API using Automation Test",
"notes": [
{
"note": "Test-Note"
}
],
"tags": [],
"venueList": [
{
"id": venue_list[random.randint(0, len(venue_list) - 1)],
"name": "Test-create-board-in-a-sub-venue",
"description": "test-create-board-API",
"retention": 604800,
"interval": 60,
"monitorSubVenues": True
}
]
}
response = get_target_object.analytics_library_object.create_board(data)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
if response.status_code == 200:
TestUcentralAnalyticService.board_id = response.json()['id']
assert response.status_code == 200, "Failed in creating a board"
@pytest.mark.get_board
@allure.title("Retrieve a Board")
def test_analytics_get_board(self, get_target_object):
resp = get_target_object.analytics_library_object.get_boards()
if resp.status_code == 200:
body = resp.json()
self.boards = body["boards"]
else:
assert resp.status_code == 200, "Failed in getting boards data"
if TestUcentralAnalyticService.board_id == "" and len(self.boards) > 0:
response = get_target_object.analytics_library_object.get_board(self.boards[random.randint(0, len(self.boards)-1)])
else:
response = get_target_object.analytics_library_object.get_board(TestUcentralAnalyticService.board_id)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.update_board
@allure.title("Update a Board")
def test_analytics_update_board(self, get_target_object):
response = get_target_object.analytics_library_object.get_boards()
if response.status_code == 200:
body = response.json()
self.boards = body["boards"]
else:
assert response.status_code == 200, "Failed in getting boards data"
data = {
"name": "Test-update-board-check-sub-venue",
"description": "This is a test to check Update board API"
}
if TestUcentralAnalyticService.board_id == "" and len(self.boards) > 0:
response = get_target_object.analytics_library_object.edit_board(board_id=self.boards[random.randint(0, len(self.boards)-1)], payload=data)
else:
response = get_target_object.analytics_library_object.edit_board(board_id=TestUcentralAnalyticService.board_id, payload=data)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
if response.status_code == 200:
response1 = get_target_object.analytics_library_object.get_board(response.json()['id'])
if response1.status_code == 200:
allure.attach(name=f"Response: {response1.status_code} - {response1.reason}", body=str(response1.json()),
attachment_type=allure.attachment_type.JSON)
else:
assert response.status_code == 200, "Failed in updating a board"
assert response.status_code == response1.status_code
@pytest.mark.remove_board
@allure.title("Remove a Board")
def test_analytics_delete_board(self, get_target_object):
response = get_target_object.analytics_library_object.get_boards()
if response.status_code == 200:
body = response.json()
self.boards = body["boards"]
else:
assert response.status_code == 200, "Failed in getting boards data"
if TestUcentralAnalyticService.board_id == "" and len(self.boards) > 0:
response = get_target_object.analytics_library_object.delete_board(self.boards[random.randint(0, len(self.boards)-1)]['id'])
else:
response = get_target_object.analytics_library_object.delete_board(TestUcentralAnalyticService.board_id)
if len(response.content) == 0:
logging.info('Response content is empty')
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=response.text,
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.get_wifi_clients_history
@allure.title("Retrieve WiFi clients history")
def test_analytics_get_wificlients_history(self, get_target_object):
resp, venue_list = {}, []
temp_response = get_target_object.prov_library_object.get_entity_by_id(TestUcentralAnalyticService.entity_id)
if temp_response.status_code == 200:
resp = temp_response.json()
venue_list = resp['venues']
else:
assert temp_response.status_code == 200, "Failed in getting Venues"
if len(venue_list) > 0:
venue = venue_list[random.randint(0, len(venue_list)-1)]
else:
assert False, "No Venues found in selected Entity"
response = get_target_object.analytics_library_object.get_wifi_clients_history(venue=venue)
logging.info(response.json())
if response.status_code == 200:
TestUcentralAnalyticService.clients = response.json()['entries']
allure.attach(name="Response:GET - Wifi Clients History ", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.get_wifi_client_history
@allure.title("Retrieve a Wifi Client History")
def test_analytics_get_wifi_client_history(self, get_target_object):
resp, venue_list = {}, []
if len(TestUcentralAnalyticService.clients) > 0:
client = TestUcentralAnalyticService.clients[random.randint(0, len(TestUcentralAnalyticService.clients)-1)]
else:
client = '04f021d405cc'
temp_response = get_target_object.prov_library_object.get_entity_by_id(TestUcentralAnalyticService.entity_id)
if temp_response.status_code == 200:
resp = temp_response.json()
venue_list = resp['venues']
else:
assert temp_response.status_code == 200, "Failed in getting Venues"
if len(venue_list) > 0:
venue = venue_list[random.randint(0, len(venue_list) - 1)]
else:
venue = 'eb5c5165-b168-4748-8609-fcabd564b5e3'
response = get_target_object.analytics_library_object.get_wifi_client_history(client=client, venue=venue)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.delete_wifi_client_history
@allure.title("Delete specific Wifi Client History")
def test_analytics_remove_wificlient_history(self, get_target_object):
resp, venue_list = {}, []
if len(TestUcentralAnalyticService.clients) > 0:
client = TestUcentralAnalyticService.clients[random.randint(0, len(TestUcentralAnalyticService.clients)-1)]
else:
client = '04f021d405cc'
temp_response = get_target_object.prov_library_object.get_entity_by_id(TestUcentralAnalyticService.entity_id)
if temp_response.status_code == 200:
resp = temp_response.json()
venue_list = resp['venues']
else:
assert temp_response.status_code == 200, "Failed in getting Venues"
if len(venue_list) > 0:
venue = venue_list[random.randint(0, len(venue_list)-1)]
else:
venue = 'eb5c5165-b168-4748-8609-fcabd564b5e3'
response = get_target_object.analytics_library_object.delete_wifi_client_history(client=client, venue=venue)
logging.info(response.json())
allure.attach(name="Response:DEL - A Wifi Client History ", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.retireve_board_timepoints
@allure.title("Retrieve a Board within a time period")
def test_analytics_get_board_data(self, get_target_object):
response = get_target_object.analytics_library_object.get_boards()
if response.status_code == 200:
body = response.json()
self.boards = body["boards"]
else:
assert response.status_code == 200, "Failed in getting boards data"
if TestUcentralAnalyticService.board_id == "":
response = get_target_object.analytics_library_object.get_board_data(self.boards[random.randint(0, len(self.boards)-1)])
else:
response = get_target_object.analytics_library_object.get_board_data(TestUcentralAnalyticService.board_id)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.remove_board_timepoints
@allure.title("Remove a Board within a time period")
def test_analytics_remove_board_data(self, get_target_object):
response = get_target_object.analytics_library_object.get_boards()
if response.status_code == 200:
body = response.json()
self.boards = body["boards"]
else:
assert response.status_code == 200, "Failed in getting boards data"
if TestUcentralAnalyticService.board_id == "":
response = get_target_object.analytics_library_object.delete_board_data(self.boards[random.randint(0, len(self.boards)-1)])
else:
response = get_target_object.analytics_library_object.delete_board_data(TestUcentralAnalyticService.board_id)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.post_system_commands
@allure.title("Perform some system wide commands")
def test_analytics_post_system_commands(self, get_target_object):
payload = {
"command": "getsubsystemnames"
}
response = get_target_object.analytics_library_object.post_system_commands(payload)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200
@pytest.mark.get_system_commands
@allure.title("Retrieve different values from the running service")
def test_analytics_get_system_commands(self, get_target_object):
command = 'info'
response = get_target_object.analytics_library_object.get_system_commands(command)
logging.info(response.json())
allure.attach(name=f"Response: {response.status_code} - {response.reason}", body=str(response.json()),
attachment_type=allure.attachment_type.JSON)
assert response.status_code == 200