! This merge denotes the MVP completion for the backend decentralization endpoints
More routes are to be added in the future but for now this should suffice Doc's are now required and the roadmap need to be updated as well
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import subprocess
|
||||
import os
|
||||
import sys
|
||||
import json
|
||||
|
||||
class Server:
|
||||
@@ -8,6 +9,15 @@ class Server:
|
||||
self.wsurl = meta.get('wsurl')
|
||||
self.serv_name = meta.get('name')
|
||||
|
||||
def __str__(self) -> str:
|
||||
fields = {
|
||||
'url': self.url,
|
||||
'wsurl': self.wsurl,
|
||||
'name': self.serv_name
|
||||
}
|
||||
return str(fields)
|
||||
|
||||
|
||||
class Admin:
|
||||
def __init__(self, user: dict, server: dict):
|
||||
self.id = user.get('id')
|
||||
@@ -20,7 +30,15 @@ class Admin:
|
||||
self.server = Server(server)
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f'{self.name}#{self.id}'
|
||||
acc = {
|
||||
'id': self.id,
|
||||
'name': self.name,
|
||||
'permissions': self.permissions,
|
||||
'secret': self.secret,
|
||||
'jwt': self.jwt,
|
||||
}
|
||||
container = {'user': acc, 'server': str(self.server)}
|
||||
return str(container)
|
||||
|
||||
def create_admin() -> Admin :
|
||||
CARGO_BIN = os.getenv('CARGO_BIN')
|
||||
@@ -37,10 +55,12 @@ def create_admin() -> Admin :
|
||||
if user is None or server is None:
|
||||
print('stderr ', e)
|
||||
print('stdout ', proc.stdout)
|
||||
print(f'User/Server Data was not serializable => {raw}', file=sys.stderr)
|
||||
return None
|
||||
else:
|
||||
return Admin(user, server)
|
||||
except:
|
||||
except Exception as e:
|
||||
print(f'[create_admin] General exception caught in parsing => {e}', file=sys.stderr)
|
||||
print('stderr ', proc.stderr)
|
||||
print('stdout ', proc.stdout)
|
||||
return None
|
||||
|
||||
@@ -2,12 +2,14 @@ from time import time
|
||||
from request import Request
|
||||
from config import create_admin, Admin
|
||||
from config import Server
|
||||
from json import dumps as to_json
|
||||
|
||||
RESPONSES = []
|
||||
VOICE_CHAN = 1
|
||||
TEXT_CHAN = 2
|
||||
|
||||
def login() -> (Request, str):
|
||||
def login(admin: Admin) -> (Request, str):
|
||||
print(f'Provided admin account {admin}')
|
||||
req = Request(
|
||||
admin.server.url + '/login',
|
||||
'post',
|
||||
@@ -67,9 +69,11 @@ def make_and_receive_invite(admin: Admin) -> (Request, Request):
|
||||
make_inv_req.fire()
|
||||
if make_inv_req.response is None:
|
||||
return (make_inv_req, user_inv_req)
|
||||
elif make_inv_req.response.status_code >= 400:
|
||||
print('Params used ', make_inv_req)
|
||||
return (make_inv_req, None)
|
||||
|
||||
# Setup to fire the second request, .fire() is safe to blindly use at this point
|
||||
print('Response text from /join ', make_inv_req.response.text)
|
||||
new_invite_body = make_inv_req.response.json()['invite']
|
||||
code = new_invite_body['id']
|
||||
user_inv_req = req(admin , 'get' , '/join', {'code': code}, 200, verbose=True)
|
||||
@@ -89,7 +93,7 @@ if __name__ == '__main__':
|
||||
|
||||
# First a quick sanity check for login
|
||||
# add this after we fire the generic tests
|
||||
login_req, jwt = login()
|
||||
login_req, jwt = login(admin)
|
||||
if jwt is None:
|
||||
print('Unable to /login - stopping now to avoid pointless failure')
|
||||
req.show_response()
|
||||
@@ -104,6 +108,19 @@ if __name__ == '__main__':
|
||||
# Invite test
|
||||
|
||||
# Container for most/all the generic requests we want to fire off
|
||||
now = time()
|
||||
tmp_neighbor = {
|
||||
'name': str(now),
|
||||
'wsurl': 'wsurl',
|
||||
'url': str(now),
|
||||
'description': 'asdf',
|
||||
'tags': ['red','blue']
|
||||
}
|
||||
# This neighbor is used to "update" the tmp one above in /neighbor tests
|
||||
updated_neighbor = tmp_neighbor.copy()
|
||||
updated_neighbor['name'] = 'new'
|
||||
print('Updated neighbor as json ', to_json(updated_neighbor))
|
||||
|
||||
requests.extend([
|
||||
req(fake_user, 'get', '/channels/list', {}, 401),
|
||||
req(admin, 'post', '/channels/list', {'kind': TEXT_CHAN}, 404),
|
||||
@@ -117,8 +134,18 @@ if __name__ == '__main__':
|
||||
req(admin, 'get', '/message/recent', {'channel_id': 123, 'limit': 20}, 404),
|
||||
req(admin, 'get', '/members/me', {}, 200),
|
||||
req(admin, 'get', '/members/get_online', {}, 200),
|
||||
req(admin, 'post', '/members/me/nickname', {'nick': f'randy-{time()}'}, 200),
|
||||
req(admin , 'get', '/invite/join', {'code': 123}, 404)
|
||||
req(admin, 'post', '/members/me/nickname', {'nick': f'randy-{now}'}, 200),
|
||||
req(admin , 'get', '/invite/join', {'code': 123}, 404),
|
||||
req(admin , "get", "/meta", {}, 200),
|
||||
req(admin, 'get', '/neighbor/list', {}, 200),
|
||||
req(admin,'post', '/neighbor/add', {}, 200, body=to_json(tmp_neighbor)),
|
||||
req(admin, 'get', '/neighbor/list', {}, 200, verbose=True),
|
||||
req(admin, 'put', '/neighbor/update', {'url':str(now)}, 200, body=to_json(updated_neighbor)),
|
||||
req(admin, 'put', '/neighbor/update', {'url':'fake'}, 404, body=to_json(updated_neighbor)),
|
||||
req(admin, 'get', '/neighbor/list', {}, 200),
|
||||
req(admin, 'delete', '/neighbor/delete', {'url':'fake'}, 200),
|
||||
req(admin, 'delete', '/neighbor/delete', {'url': str(now)}, 200),
|
||||
req(admin, 'get', '/neighbor/list', {}, 200, verbose=True),
|
||||
])
|
||||
|
||||
# add this after fire the generic tests
|
||||
@@ -142,6 +169,7 @@ if __name__ == '__main__':
|
||||
r.show_response()
|
||||
if r.passing:
|
||||
pass_count += 1
|
||||
|
||||
|
||||
req_count = len(requests)
|
||||
print(f'Passing {pass_count}/{req_count}')
|
||||
|
||||
@@ -4,6 +4,7 @@ import requests
|
||||
NC = '\033[0m'
|
||||
RED = '\033[1;31m'
|
||||
GREEN = '\033[1;32m'
|
||||
YELLOW = '\033[1;33m'
|
||||
|
||||
class Request:
|
||||
|
||||
@@ -21,6 +22,9 @@ class Request:
|
||||
self.verbose = verbose
|
||||
|
||||
|
||||
def __str__(self):
|
||||
return str(self.qs)
|
||||
|
||||
@property
|
||||
def passing(self):
|
||||
if self.response is None:
|
||||
@@ -36,6 +40,8 @@ class Request:
|
||||
self.response = requests.post(self.url, headers=self.headers, params=self.qs, data=self.body)
|
||||
elif self.method == 'delete':
|
||||
self.response = requests.delete(self.url, headers=self.headers, params=self.qs)
|
||||
elif self.method == 'put':
|
||||
self.response = requests.put(self.url, headers=self.headers, params=self.qs, data=self.body)
|
||||
|
||||
return self.response
|
||||
except Exception as e:
|
||||
@@ -45,34 +51,36 @@ class Request:
|
||||
|
||||
|
||||
def show_response(self):
|
||||
if self.response is None:
|
||||
print('Response := None')
|
||||
return
|
||||
|
||||
real_code = self.response.status_code
|
||||
real_code = None
|
||||
if self.response is not None:
|
||||
real_code = self.response.status_code
|
||||
|
||||
if self.hope != real_code:
|
||||
abstract = RED + 'Fail ' + NC + 'Expected ' + str(self.hope) + ' Got ' + str(real_code)
|
||||
if self.response is None:
|
||||
print('\tNo Response to show for')
|
||||
|
||||
print(abstract)
|
||||
print('\t', self.method, ' ', self.url)
|
||||
if len(self.headers) != 0:
|
||||
print('\tRequest-Headers ', self.headers)
|
||||
print(YELLOW + '\tRequest-Headers ' + NC, self.headers)
|
||||
|
||||
if len(self.qs) != 0:
|
||||
print('\tQuery-Dictionary ', self.qs)
|
||||
print(YELLOW + '\tQuery-Dictionary' + NC, self.qs)
|
||||
|
||||
if self.body is not None:
|
||||
print('\tRequest-Body ', str(self.body))
|
||||
print(YELLOW + '\tRequest-Body' + NC, str(self.body))
|
||||
|
||||
if self.verbose:
|
||||
print(f'\tResponse-Status {self.response.status_code}')
|
||||
print(f'\tResponse-Headers {self.response.headers}')
|
||||
print(f'\tResponse-Text {self.response.text}')
|
||||
print(f'\t{YELLOW}Response-Status{NC} {self.response.status_code}')
|
||||
print(f'\t{YELLOW}Response-Headers{NC} {self.response.headers}')
|
||||
print(f'\t{YELLOW}Response-Text{NC} {self.response.text}')
|
||||
|
||||
else:
|
||||
print(f'{GREEN}Pass{NC} {self.method} {self.url}')
|
||||
if self.verbose:
|
||||
print(f'\tResponse-Status {self.response.status_code}')
|
||||
print(f'\tResponse-Headers {self.response.headers}')
|
||||
print(f'\tResponse-Text {self.response.text}')
|
||||
print(f'\t{YELLOW}Response-Status{NC} {self.response.status_code}')
|
||||
print(f'\t{YELLOW}Response-Headers{NC} {self.response.headers}')
|
||||
print(f'\t{YELLOW}Response-Text{NC} {self.response.text}')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user