This repository has been archived on 2025-06-01. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
compLIB/test.py
joel 0e0a61d710 finished api client implementation
added tests for api (compapi should run in the background or be installed)
2021-01-16 03:09:31 +01:00

132 lines
3.5 KiB
Python

import json
import os
import time
import unittest
from threading import Thread
import requests
# compapi is a dependency for this test
try:
from compapi import server
START_SERVER = True
except ImportError:
print("[!] error could not import server module from compapi, assuming server is running")
START_SERVER = False
from multiprocessing import Process
from compLib import Api
class MyTestCase(unittest.TestCase):
def test_get_park(self):
ret = Api.Seeding.get_park()
assert type(ret) is int
got = []
while len(got) != 4:
ret = Api.Seeding.get_park()
assert 0 <= ret < 4
if ret not in got:
got.append(ret)
assert True
def test_pay_park(self):
ret = Api.Seeding.pay_park()
assert type(ret) is bool
def test_simon_says(self):
ret = Api.Seeding.simon_says()
assert type(ret) is int
got = []
while len(got) != 4:
ret = Api.Seeding.simon_says()
if ret != -1:
assert 0 <= ret < 4
if ret not in got:
got.append(ret)
else:
self.resetApi()
assert True
def test_simon_says_iterations(self):
for i in range(0, 4):
ret = Api.Seeding.simon_says()
assert type(ret) is int
assert 0 <= ret < 4
# after 4 iterations the api should only return -1 from now
for i in range(0, 10):
assert Api.Seeding.simon_says() == -1
# after api reset this test should work again
self.resetApi()
for i in range(0, 4):
ret = Api.Seeding.simon_says()
assert type(ret) is int
assert 0 <= ret < 4
for i in range(0, 10):
assert Api.Seeding.simon_says() == -1
def test_simon_says_non_reapet(self):
"""
Checks if simons says does not send the robot to the
same position again.
"""
last_pos = Api.Seeding.simon_says()
for i in range(0, 100):
next_pos = Api.Seeding.simon_says()
if next_pos == -1:
last_pos = -1 # state is reset, so reset here as well
self.resetApi()
continue
assert last_pos != next_pos
last_pos = next_pos
def test_get_position(self):
response = Api.DoubleElim.get_position()
assert type(response) == Api.Position
assert 0 <= response.x
assert 0 <= response.y
assert 0 <= response.degrees <= 360
def test_get_opponent(self):
response = Api.DoubleElim.get_opponent()
assert type(response) == Api.Position
def test_get_goal(self):
response = Api.DoubleElim.get_goal()
assert type(response) == Api.Position
assert 0 <= response.x
assert 0 <= response.y
assert response.degrees == -1
def test_get_items(self):
response = Api.DoubleElim.get_items()
assert type(response) == list
def setUp(self) -> None:
if START_SERVER:
self.server = Process(target=server.app.run, kwargs={"host": "0.0.0.0", "port": "5000"})
self.server.start()
time.sleep(0.25)
else:
self.resetApi()
def tearDown(self) -> None:
if START_SERVER:
self.server.terminate()
self.server.join()
def resetApi(self):
assert requests.get(Api.API_URL + "resetState").status_code == 200
if __name__ == '__main__':
unittest.main()