Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Env set up to run Dapi test on testrunner, added dapi health test
Change-Id: Id06c29442da6adce9fe906270cb564464a197ac3 Reviewed-on: https://review.couchbase.org/c/testrunner/+/185191 Reviewed-by: Ritesh Agarwal <ritesh.agarwal@couchbase.com> Tested-by: Saurabh Mishra <saurabh.mishra@couchbase.com>
- Loading branch information
saurabh mishra
committed
Jan 18, 2023
1 parent
89920eb
commit b348af5
Showing
3 changed files
with
108 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
serverless.dapi.restful_dapi.RestfulDAPITest: | ||
test_dapi_health |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
import logging | ||
import requests | ||
import base64 | ||
import json | ||
|
||
log = logging.getLogger() | ||
|
||
class RestfulDAPI: | ||
def __init__(self, args): | ||
self.endpoint = "https://" + args.get("dapi_endpoint") | ||
self.endpoint_v1 = "https://" + args.get("dapi_endpoint") + "/v1" | ||
self.username = args.get("access_token") | ||
self.password = args.get("access_secret") | ||
self.header = self._create_headers(self.username, self.password) | ||
self._log = logging.getLogger(__name__) | ||
|
||
def _create_headers(self, username=None, password=None, contentType='application/json', connection='close'): | ||
if username is None: | ||
username = self.username | ||
if password is None: | ||
password = self.password | ||
authorization = base64.b64encode('{}:{}'.format(username, password).encode()).decode() | ||
return {'Content-Type': contentType, | ||
'Authorization': 'Basic %s' % authorization, | ||
'Connection': connection, | ||
'Accept': '*/*'} | ||
|
||
def _urllib_request(self, api, method='GET', headers=None, | ||
params={}, timeout=300, verify=False): | ||
session = requests.Session() | ||
headers = headers or self.header | ||
params = json.dumps(params) | ||
try: | ||
if method == "GET": | ||
resp = session.get(api, params=params, headers=headers, | ||
timeout=timeout, verify=verify) | ||
elif method == "POST": | ||
resp = session.post(api, data=params, headers=headers, | ||
timeout=timeout, verify=verify) | ||
elif method == "DELETE": | ||
resp = session.delete(api, data=params, headers=headers, | ||
timeout=timeout, verify=verify) | ||
elif method == "PUT": | ||
resp = session.put(api, data=params, headers=headers, | ||
timeout=timeout, verify=verify) | ||
return resp | ||
except requests.exceptions.HTTPError as errh: | ||
self._log.error("HTTP Error {0}".format(errh)) | ||
except requests.exceptions.ConnectionError as errc: | ||
self._log.error("Error Connecting {0}".format(errc)) | ||
except requests.exceptions.Timeout as errt: | ||
self._log.error("Timeout Error: {0}".format(errt)) | ||
except requests.exceptions.RequestException as err: | ||
self._log.error("Something else: {0}".format(err)) | ||
except Exception as err: | ||
self._log.error("Something else: {0}".format(err)) | ||
|
||
def check_dapi_health(self): | ||
url = self.endpoint + "/health" | ||
return self._urllib_request(url) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
from pytests.serverless.serverless_basetestcase import ServerlessBaseTestCase | ||
from lib.serverlessLib.dapi.dapi import RestfulDAPI | ||
import json | ||
|
||
|
||
class RestfulDAPITest(ServerlessBaseTestCase): | ||
def setUp(self): | ||
super().setUp() | ||
self.num_buckets = self.input.param("num_buckets", 1) | ||
self.create_database(self.num_buckets) | ||
|
||
def tearDown(self): | ||
return super().tearDown() | ||
|
||
def create_database(self, num_of_database): | ||
tasks = list() | ||
dapi_list = list() | ||
for i in range(0,num_of_database): | ||
seed = "dapi-" + str(i) | ||
task = self.create_database_async(seed) | ||
tasks.append(task) | ||
for task in tasks: | ||
task.result() | ||
for database in self.databases.values(): | ||
dapi_info = dict() | ||
dapi_info["dapi_endpoint"] = database.data_api | ||
dapi_info["access_token"] = database.access_key | ||
dapi_info["access_secret"] = database.secret_key | ||
dapi_info["database_id"] = database.id | ||
dapi_list.append(dapi_info) | ||
self.dapi_info_list = dapi_list | ||
|
||
|
||
def test_dapi_health(self): | ||
for dapi_info in self.dapi_info_list: | ||
self.rest_dapi = RestfulDAPI({"dapi_endpoint": dapi_info["dapi_endpoint"], | ||
"access_token": dapi_info["access_token"], | ||
"access_secret": dapi_info["access_secret"]}) | ||
|
||
self.log.info("Checking DAPI health for DB: {}".format(dapi_info["database_id"])) | ||
response = self.rest_dapi.check_dapi_health() | ||
self.assertTrue(response.status_code == 200, | ||
"DAPI is not healthy for database: {}".format(dapi_info["database_id"])) | ||
self.log.info(json.loads(response.content)["health"]) | ||
self.assertTrue(json.loads(response.content)["health"].lower() == "ok", | ||
"DAPI health is not OK") |