Skip to content

Commit

Permalink
Env set up to run Dapi test on testrunner, added dapi health test
Browse files Browse the repository at this point in the history
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
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 0 deletions.
2 changes: 2 additions & 0 deletions conf/serverless/dapi.conf
@@ -0,0 +1,2 @@
serverless.dapi.restful_dapi.RestfulDAPITest:
test_dapi_health
60 changes: 60 additions & 0 deletions lib/serverlessLib/dapi/dapi.py
@@ -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)
46 changes: 46 additions & 0 deletions pytests/serverless/dapi/restful_dapi.py
@@ -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")

0 comments on commit b348af5

Please sign in to comment.