From c7aeaea941eb959ea3b6d351c13a109134ba2778 Mon Sep 17 00:00:00 2001
From: Matthias Bodenbenner <m.bodenbenner@wzl-mq.rwth-aachen.de>
Date: Thu, 14 Apr 2022 14:54:18 +0200
Subject: [PATCH] removed tests temporarily
---
dev/environment.yml => environment.yml | 0
dev/requirements.txt => requirements.txt | 1 +
test/Sensor.json | 1 -
test/TestRequestPerformance.py | 142 -------------
test/requests.http | 243 -----------------------
test/server/__init__.py | 0
test/server/main.py | 23 ---
test/server/start.py | 133 -------------
test/test.py | 108 ----------
test/test_variable.py | 54 -----
10 files changed, 1 insertion(+), 704 deletions(-)
rename dev/environment.yml => environment.yml (100%)
rename dev/requirements.txt => requirements.txt (93%)
delete mode 100644 test/Sensor.json
delete mode 100644 test/TestRequestPerformance.py
delete mode 100644 test/requests.http
delete mode 100644 test/server/__init__.py
delete mode 100644 test/server/main.py
delete mode 100644 test/server/start.py
delete mode 100644 test/test.py
delete mode 100644 test/test_variable.py
diff --git a/dev/environment.yml b/environment.yml
similarity index 100%
rename from dev/environment.yml
rename to environment.yml
diff --git a/dev/requirements.txt b/requirements.txt
similarity index 93%
rename from dev/requirements.txt
rename to requirements.txt
index c4ff73e..100262d 100644
--- a/dev/requirements.txt
+++ b/requirements.txt
@@ -3,6 +3,7 @@ Deprecated==1.2.13
docstring-parser==0.7.3
jinja2==3.0.3
nest-asyncio==1.4.3
+pytest==7.1.1
sphinx==3.5.2
sphinx-rtd-theme==1.0.0
strict-rfc3339==0.7
diff --git a/test/Sensor.json b/test/Sensor.json
deleted file mode 100644
index 8b20ff9..0000000
--- a/test/Sensor.json
+++ /dev/null
@@ -1 +0,0 @@
-{"objects": [], "functions": [{"arguments": [], "returns": [], "uuid": "FUN-Refresh", "name": "Trigger Refresh", "description": "Manually triggers refresh of the sensors"}, {"arguments": [{"constant": false, "range": [1, null], "datatype": "int", "dimension": [], "value": 1, "uuid": "PAR-Interval", "name": "Interval (s)", "description": "Interval in seconds over which to take RMS."}], "returns": [{"constant": false, "range": [null, null], "datatype": "int", "dimension": [], "value": 0, "uuid": "PAR-Count", "name": "Count", "description": "Number of values used for RMS estimation"}, {"constant": false, "range": [null, null], "datatype": "double", "dimension": [], "value": 0, "uuid": "PAR-RMS", "name": "RMS (*C)", "description": "Estimated RMS form measurement sequence"}, {"constant": false, "range": [null, null], "datatype": "double", "dimension": [], "value": 0, "uuid": "PAR-Mean", "name": "Mean (*C)", "description": "Mean of RMS estimation sequence (*C)"}], "uuid": "FUN-MeasureRMS", "name": "Measure RMS", "description": "Measures the RMS over a given period of time for this sensor."}, {"arguments": [{"constant": false, "range": [0, 100], "datatype": "int", "dimension": [], "value": 1, "uuid": "PAR-Interval", "name": "Refresh Interval (s)", "description": "Current refresh interval in seconds."}, {"constant": false, "range": [null, 20], "datatype": "string", "dimension": [], "value": "outside", "uuid": "PAR-Location", "name": "Location", "description": "Description of the location of the sensor."}], "returns": [], "uuid": "FUN-Reset", "name": "Reset", "description": "Resets various values of the sensor."}], "variables": [{"unit": "CEL", "range": [null, null], "datatype": "double", "dimension": [], "value": 0, "uuid": "VAR-Temperature", "name": "Temperature (*C)", "description": "Most recently measured temperature in degree celsius"}, {"unit": "A97", "range": [null, null], "datatype": "double", "dimension": [], "value": 0, "uuid": "VAR-Pressure", "name": "Pressure (hPa)", "description": "Most recently measured pressure in hPa"}, {"unit": "", "range": [0, 100], "datatype": "int", "dimension": [], "value": 0, "uuid": "VAR-Battery", "name": "Batterylevel (Percent)", "description": "Estimated battery level in percent"}, {"unit": "", "range": [0, 100], "datatype": "int", "dimension": [], "value": 0, "uuid": "VAR-Signal", "name": "Signal strength", "description": "Signal strength in percent"}, {"unit": "", "range": [0, 100], "datatype": "int", "dimension": [], "value": 50, "uuid": "VAR-Humidity", "name": "Humidity (Percent)", "description": "Gives the current humidity in percent."}], "parameters": [{"constant": true, "range": [null, null], "datatype": "string", "dimension": [], "value": "AC-DE-48-00-00-80", "uuid": "PAR-Mac", "name": "MAC-Adress", "description": "Bluetooth MAC-Address of the sensor "}, {"constant": false, "range": [0, 100], "datatype": "int", "dimension": [], "value": 0, "uuid": "PAR-Interval", "name": "Refresh Interval (s)", "description": "Current refresh interval in seconds"}, {"constant": false, "range": [null, 20], "datatype": "string", "dimension": [], "value": "undefined", "uuid": "PAR-Location", "name": "Location", "description": "Description of the location of the sensor"}, {"constant": true, "range": ["False", "True"], "datatype": "bool", "dimension": [], "value": true, "uuid": "PAR-Contacted", "name": "Contacted", "description": "Flag whether the temperature is measured contacted (true) or ambient (false)"}], "uuid": "OBJ-Sensor", "name": "Sensor", "description": "An individual Sensor of the distributed system."}
\ No newline at end of file
diff --git a/test/TestRequestPerformance.py b/test/TestRequestPerformance.py
deleted file mode 100644
index 2abf2af..0000000
--- a/test/TestRequestPerformance.py
+++ /dev/null
@@ -1,142 +0,0 @@
-# import asyncio
-# import datetime
-# import logging
-# import logging.config
-# from asyncio import Lock
-# from concurrent.futures import ThreadPoolExecutor
-#
-# import aiohttp
-# from autobahn.asyncio.websocket import WebSocketClientFactory, WebSocketClientProtocol
-#
-#
-# class PerformanceController(object):
-# last_message = None
-# last_request = None
-# tot_message_diff = datetime.timedelta()
-# tot_request_diff = datetime.timedelta()
-# avg_message_diff = 0
-# avg_request_diff = 0
-# nr_messages = 0
-# nr_requests = 0
-# url = 'http://localhost:8000/objects/OBJ-78da2add-0779-4c91-9f69-907348c409aa/VAR-c39505a8-b264-411a-86f1-3b55f124fec1/'
-#
-# def __init__(self):
-# pass
-#
-# def logMessage(self):
-# now = datetime.datetime.now()
-# if self.last_message is not None:
-# diff = now - self.last_message
-# self.tot_message_diff += diff
-# logging.getLogger(__name__).debug('Time between two messages: {} ms'.format(diff.microseconds / 1000))
-# self.last_message = now
-# self.nr_messages += 1
-#
-# def logRequest(self):
-# now = datetime.datetime.now()
-# if self.last_request is not None:
-# diff = now - self.last_request
-# self.tot_request_diff += diff
-# logging.getLogger(__name__).debug('Time between two requests: {} ms'.format(diff.microseconds / 1000))
-# self.last_request = now
-# self.nr_requests += 1
-#
-# @asyncio.coroutine
-# def wait(self, nr_messages):
-# logging.getLogger(__name__).info('Waiting for {} messages...'.format(nr_messages))
-# while self.nr_messages < nr_messages:
-# logging.getLogger(__name__).debug('Current #messages: {} '.format(self.nr_messages))
-# yield from asyncio.sleep(0.1)
-# logging.getLogger(__name__).info('Enough messages have been recieved...')
-# logging.getLogger(__name__).info('Number of recieved messages: {}'.format(self.nr_messages))
-# self.avg_message_diff = (self.tot_message_diff.seconds * 1000 + self.tot_message_diff.microseconds / 1000) / (self.nr_messages - 1)
-# logging.getLogger(__name__).info('Average diff: {:>6.3f} ms'.format(self.avg_message_diff))
-#
-# @asyncio.coroutine
-# def SpamRequests(self, nr_requests, session, delta):
-# self.last_message = None
-# self.tot_message_diff = datetime.timedelta()
-# self.nr_messages = 0
-# for id in range(nr_requests):
-# yield from self.request(session)
-# yield from asyncio.sleep(delta)
-# logging.getLogger(__name__).info('Number of recieved messages: {}'.format(self.nr_messages))
-# self.avg_message_diff = (self.tot_message_diff.seconds * 1000 + self.tot_message_diff.microseconds / 1000) / (self.nr_messages - 1)
-# logging.getLogger(__name__).info('Average diff: {:>6.3f} ms'.format(self.avg_message_diff))
-# logging.getLogger(__name__).info('Number of performed requests messages: {}'.format(self.nr_requests))
-# self.avg_request_diff = (self.tot_request_diff.seconds * 1000 + self.tot_request_diff.microseconds / 1000) / (self.nr_requests - 1)
-# logging.getLogger(__name__).info('Average diff: {:>6.3f} ms'.format(self.avg_request_diff))
-#
-# async def request(self, session):
-# with aiohttp.Timeout(10):
-# async with session.get(self.url, json={'uuid': True, 'name': True, 'description': True, 'datatype': True, 'value': True, 'dimension': True}) as response:
-# # assert response.status == 200
-# data = await response.read()
-# logging.getLogger(__name__).debug(data)
-# self.logRequest()
-#
-#
-# class MyClientProtocol(WebSocketClientProtocol):
-#
-# def __init__(self):
-# global pc
-# super().__init__()
-# self.pc = pc
-# self.lock = Lock()
-#
-# @asyncio.coroutine
-# def onConnect(self, response):
-# logging.getLogger(__name__).info("Server connected: {0}".format(response.peer))
-#
-# @asyncio.coroutine
-# def onOpen(self):
-# logging.getLogger(__name__).info("WebSocket connection open.")
-#
-# @asyncio.coroutine
-# def onMessage(self, payload, isBinary):
-# if isBinary:
-# logging.getLogger(__name__).debug("Binary message received: {0} bytes".format(len(payload)))
-# else:
-# logging.getLogger(__name__).debug("Text message received: {0}".format(payload.decode('utf8')))
-# self.pc.logMessage()
-#
-# @asyncio.coroutine
-# def onClose(self, wasClean, code, reason):
-# logging.getLogger(__name__).info("WebSocket connection closed: {0}".format(reason))
-#
-#
-# if __name__ == '__main__':
-# # configure logger
-# logging.config.fileConfig('../assets/logger.ini')
-# logger = logging.getLogger('')
-#
-# fh = logging.FileHandler('../logs/testing/log_{:%Y-%m-%d_%H-%M}.txt'.format(datetime.datetime.now()))
-# formatter = logging.Formatter('%(asctime)s %(name)-40s %(levelname)-8s %(message)s')
-# fh.setFormatter(formatter)
-#
-# logger.addHandler(fh)
-#
-# pc = PerformanceController()
-#
-# # set up clients
-# executor = ThreadPoolExecutor(max_workers=100)
-# loop = asyncio.get_event_loop()
-# loop.set_default_executor(executor)
-#
-# logging.getLogger(__name__).info("Register client to get updates")
-# factory = WebSocketClientFactory(loop=loop,
-# url="ws://127.0.0.1:8001/OBJ-78da2add-0779-4c91-9f69-907348c409aa/VAR-dc495055-7134-4055-9d72-c6b6bcb10c0e/")
-# factory.protocol = MyClientProtocol
-#
-# coro = loop.create_connection(factory, '127.0.0.1', 8001)
-# loop.run_until_complete(coro)
-#
-# # start performance test
-# logging.getLogger(__name__).info("Starting Performance Test...")
-#
-# wait = loop.create_task(pc.wait(200))
-# loop.run_until_complete(wait)
-#
-# session = aiohttp.ClientSession(loop=loop)
-# request = loop.create_task(pc.SpamRequests(200, session, 0.001))
-# loop.run_until_complete(request)
diff --git a/test/requests.http b/test/requests.http
deleted file mode 100644
index fb1cb22..0000000
--- a/test/requests.http
+++ /dev/null
@@ -1,243 +0,0 @@
-GET http://127.0.0.1:8000/objects
-
-###
-
-GET http://127.0.0.1:8015/objects/OBJ-Environment/OBJ-200ae749-2d95-452f-a27e-70ec83f440a2
-
-### Test read
-
-GET http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-200ae749-2d95-452f-a27e-70ec83f440a2/PAR-Mac
-
-### Test asnyc function call
-POST http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-200ae749-2d95-452f-a27e-70ec83f440a2/FUN-MeasureRMS
-content-type: application/json
-
-{
- "arguments": [{"value": 5, "uuid": "PAR-Interval"}]
-}
-
-
-### Test not implemented write
-POST http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-200ae749-2d95-452f-a27e-70ec83f440a2/PAR-Mac
-content-type: application/json
-
-{
- "value": "AC-DE-48-00-00-88"
-}
-
-### Test implemented write
-POST http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-200ae749-2d95-452f-a27e-70ec83f440a2/PAR-Location
-content-type: application/json
-
-{
- "value": "Aachen"
-}
-
-### Test changed value
-GET http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-200ae749-2d95-452f-a27e-70ec83f440a2/PAR-Location
-
-
-### Test deleting a sensor
-DELETE http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-836562ce-9dc5-408d-8296-8cc22c594f72
-content-type: application/json
-
-{
- "args": ["AE-DE-48-00-00-80"],
- "kwargs": {}
-}
-
-### Try get the new sensor
-GET http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-3f4cfad3-fe41-497b-b31c-e93babf9d0c4
-
-
-### Try adding a new sensor
-PUT http://127.0.0.1:8000/objects/OBJ-Environment/OBJ-3f4cfad3-fe41-497b-b31c-e93babf9d0c4
-content-type: application/json
-
-{
- "class_name": "Sensor",
- "json_file": {
- "uuid": "OBJ-3f4cfad3-fe41-497b-b31c-e93babf9d0c4",
- "name": "Sensor 3f4cfad3-fe41-497b-b31c-e93babf9d0c4",
- "description": "An individual Sensor of the distributed system with ID 3f4cfad3-fe41-497b-b31c-e93babf9d0c4.",
- "variables": [
- {
- "uuid": "VAR-Temperature",
- "name": "Temperature (*C)",
- "description": "Most recently measured temperature in degree celsius",
- "datatype": "double",
- "value": null,
- "dimension": [],
- "range": [],
- "unit": "CEL"
- },
- {
- "uuid": "VAR-Humidity",
- "name": "Humidity (Percent)",
- "description": "Most recently measured humidity in percent",
- "datatype": "double",
- "value": null,
- "range": [
- 0,
- 100
- ],
- "dimension": [],
- "unit": ""
- },
- {
- "uuid": "VAR-Pressure",
- "name": "Pressure (hPa)",
- "description": "Most recently measured pressure in hPa",
- "datatype": "double",
- "value": null,
- "range": [],
- "dimension": [],
- "unit": "A97"
- },
- {
- "uuid": "VAR-Battery",
- "name": "Batterylevel (Percent)",
- "description": "Estimated battery level in percent",
- "datatype": "int",
- "value": null,
- "range": [
- 0,
- 100
- ],
- "dimension": [],
- "unit": ""
- },
- {
- "uuid": "VAR-Signal",
- "name": "Signal strength",
- "description": "Signal strength in percent",
- "datatype": "int",
- "value": null,
- "range": [
- 0,
- 100
- ],
- "dimension": [],
- "unit": ""
- }
- ],
- "parameters": [
- {
- "uuid": "PAR-Mac",
- "name": "MAC-Adress",
- "description": "Bluetooth MAC-Address of the sensor ",
- "datatype": "string",
- "value": "AC-DE-48-00-00-80",
- "dimension": [],
- "range": []
- },
- {
- "uuid": "PAR-Interval",
- "name": "Refresh Interval (s)",
- "description": "Current refresh interval in seconds",
- "datatype": "int",
- "value": null,
- "range": [
- 0,
- 100
- ],
- "dimension": []
- },
- {
- "uuid": "PAR-Location",
- "name": "Location",
- "description": "Description of the location of the sensor",
- "datatype": "string",
- "value": "undefined",
- "range": [
- null,
- 20
- ],
- "dimension": []
- },
- {
- "uuid": "PAR-Contacted",
- "name": "Contacted",
- "description": "Flag whether the temperature is measured contacted (true) or ambient (false)",
- "datatype": "bool",
- "value": true,
- "range": [],
- "dimension": []
- }
- ],
- "functions": [
- {
- "uuid": "FUN-Refresh",
- "name": "Trigger Refresh",
- "description": "Manually triggers refresh of the sensors",
- "arguments": [],
- "returns": []
- },
- {
- "uuid": "FUN-MeasureRMS",
- "name": "Measure RMS",
- "description": "Measures the RMS over a given period of time for this sensor.",
- "arguments": [
- {
- "uuid": "PAR-Interval",
- "name": "Interval (s)",
- "description": "Interval in seconds over which to take RMS.",
- "datatype": "int",
- "value": 1,
- "range": [
- 1,
- null
- ],
- "dimension": []
- }
- ],
- "returns": [
- {
- "uuid": "PAR-Count",
- "name": "Count",
- "description": "Number of values used for RMS estimation",
- "datatype": "int",
- "value": null,
- "range": [],
- "dimension": []
- },
- {
- "uuid": "PAR-RMS",
- "name": "RMS (*C)",
- "description": "Estimated RMS form measurement sequence",
- "datatype": "double",
- "value": null,
- "range": [],
- "dimension": []
- },
- {
- "uuid": "PAR-Mean",
- "name": "Mean (*C)",
- "description": "Mean of RMS estimation sequence (*C)",
- "datatype": "double",
- "value": null,
- "range": [],
- "dimension": []
- }
- ]
- }
- ],
- "objects": []
- },
- "args": ["AC-DE-48-00-7F-80"],
- "kwargs": {}
-}
-
-
-### Test implemented write
-POST http://127.0.0.1:8000/objects/OBJ-Environment/FUN-StartTemperatureMeasurementJob
-content-type: application/json
-
-{
- "arguments": [
- {"value": ["1", "2", "3", "4", "5", "6"], "uuid": "PAR-Addresses"},
- {"value": "asdf", "uuid": "PAR-MeasurementJobID"},
- {"value": 1, "uuid": "PAR-TimeInterval"},
- {"value": 0, "uuid": "PAR-NrOfCycles"}
- ]
-}
\ No newline at end of file
diff --git a/test/server/__init__.py b/test/server/__init__.py
deleted file mode 100644
index e69de29..0000000
diff --git a/test/server/main.py b/test/server/main.py
deleted file mode 100644
index 5162fbb..0000000
--- a/test/server/main.py
+++ /dev/null
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-import os
-import sys
-
-import toml as toml
-
-sys.path.insert(0, os.path.abspath(os.path.join('..', '..', 'examples', 'virtual_lasertracker')))
-sys.path.insert(0, os.path.abspath(os.path.join('..', '..')))
-
-from start import start
-from hwc.com_lasertracker import COMLasertracker
-from lt_device import LTDevice
-
-if __name__ == "__main__":
-
- config = toml.load('server_config.toml')
- soil_model_file = os.path.join('../..', 'examples', 'virtual_lasertracker', 'Lasertracker.json')
-
- device = LTDevice()
- lasertracker = COMLasertracker(device)
- device.start()
-
- start(lasertracker, config, soil_model_file)
diff --git a/test/server/start.py b/test/server/start.py
deleted file mode 100644
index b4c01c1..0000000
--- a/test/server/start.py
+++ /dev/null
@@ -1,133 +0,0 @@
-# -*- coding: utf-8 -*-
-import asyncio
-import sys
-from concurrent.futures import ThreadPoolExecutor
-from typing import Dict
-
-from wzl.mqtt import MQTTPublisher
-from wzl.utilities import root_logger
-
-from src.http.server import HTTPServer
-from src.soil.component import Component
-from src.soil.event import Event, EventSeverity, EventTrigger
-from src.soil.stream import FixedJob, EventJob, UpdateJob, StreamScheduler
-from device.enums import StateEnum
-from hwc.com_lasertracker import COMLasertracker
-
-sys.setswitchinterval(0.0005)
-
-
-def start(com_lasertracker: COMLasertracker, config: Dict, soil_model_file: str):
- # server settings
- address = config['http']['address']
- port = config['http']['port']
-
- # mqtt settings
- mqtt_host = config['mqtt']['host']
- mqtt_port = config['mqtt']['port']
- mqtt_vhost = config['mqtt']['vhost']
- mqtt_username = config['mqtt']['username']
- mqtt_password = config['mqtt']['password']
- mqtt_ssl = config['mqtt']['ssl']
- mqtt_websockets = config['mqtt']['websockets']
-
- main_logger = root_logger.get(__name__)
-
- # set up servers
- executor = ThreadPoolExecutor(max_workers=100)
- loop = asyncio.get_event_loop()
- loop.set_default_executor(executor)
-
- # configure mqtt
- mqtt = MQTTPublisher(mqtt_username, prefix=mqtt_username)
- mqtt.connect(mqtt_host, mqtt_username, mqtt_password, vhost=mqtt_vhost, port=mqtt_port, ssl=mqtt_ssl,
- websocket=mqtt_websockets)
-
- # configure messages
- schedule = []
- schedule += [FixedJob("COM-Lasertracker/COM-BaseStations/COM-Base/MEA-Position", 30,
- com_lasertracker._com_basestations._com_base.get_mea_position)]
- for child0_uuid in com_lasertracker._com_mobileentities._com_target:
- schedule += [UpdateJob("COM-Lasertracker/COM-MobileEntities/{}/MEA-Position".format(child0_uuid),
- com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_position)]
- schedule += [UpdateJob("COM-Lasertracker/COM-MobileEntities/{}/MEA-Quaternion".format(child0_uuid),
- com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_quaternion)]
-
- # configure events
- schedule += [EventJob("COM-Lasertracker/COM-BaseStations/COM-Base/MEA-Distance", 10,
- com_lasertracker._com_basestations._com_base.get_mea_distance,
- Event(EventSeverity.WARNING, EventTrigger.LARGER, "double", 50,
- "The target is distance is large. Uncertainty might be high."))]
- schedule += [EventJob("COM-Lasertracker/COM-BaseStations/COM-Base/PAR-State", 10,
- com_lasertracker._com_basestations._com_base.get_par_state,
- Event(EventSeverity.ERROR, EventTrigger.EQUALS, "enum", StateEnum.ERROR,
- "An error occured!"))]
- for child0_uuid in com_lasertracker._com_mobileentities._com_target:
- schedule += [EventJob("COM-Lasertracker/COM-MobileEntities/{}/PAR-Locked".format(child0_uuid), 10,
- com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_locked,
- Event(EventSeverity.WARNING, EventTrigger.EQUALS, "bool", False,
- "Target is not locked!"))]
-
- scheduler = StreamScheduler(loop, schedule, [mqtt], start_immediately=True)
-
- # configure model
- mapping = {}
- mapping['COM-Lasertracker'] = {'add': None, 'remove': None}
- submapping = mapping['COM-Lasertracker']
- submapping['PAR-State'] = {'getter': com_lasertracker.get_par_state, 'setter': com_lasertracker.set_par_state}
- submapping['PAR-Manufacturer'] = {'getter': com_lasertracker.get_par_manufacturer, 'setter': None}
- submapping['PAR-Version'] = {'getter': com_lasertracker.get_par_version, 'setter': None}
- submapping['PAR-Time'] = {'getter': com_lasertracker.get_par_time, 'setter': com_lasertracker.set_par_time}
- submapping['FUN-Reset'] = {'method': com_lasertracker.fun_reset, 'signature': {'arguments': {}, 'returns': []}}
- submapping['FUN-Shutdown'] = {'method': com_lasertracker.fun_shutdown,
- 'signature': {'arguments': {}, 'returns': []}}
- mapping['COM-Lasertracker']['COM-BaseStations'] = {'add': None, 'remove': None}
- submapping = mapping['COM-Lasertracker']['COM-BaseStations']
- mapping['COM-Lasertracker']['COM-BaseStations']['COM-Base'] = {'add': None, 'remove': None}
- submapping = mapping['COM-Lasertracker']['COM-BaseStations']['COM-Base']
- submapping['MEA-Position'] = com_lasertracker._com_basestations._com_base.get_mea_position
- submapping['MEA-Quaternion'] = com_lasertracker._com_basestations._com_base.get_mea_quaternion
- submapping['MEA-Azimuth'] = com_lasertracker._com_basestations._com_base.get_mea_azimuth
- submapping['MEA-Elevation'] = com_lasertracker._com_basestations._com_base.get_mea_elevation
- submapping['MEA-Distance'] = com_lasertracker._com_basestations._com_base.get_mea_distance
- submapping['PAR-State'] = {'getter': com_lasertracker._com_basestations._com_base.get_par_state, 'setter': None}
- submapping['PAR-Interval'] = {'getter': com_lasertracker._com_basestations._com_base.get_par_interval,
- 'setter': com_lasertracker._com_basestations._com_base.set_par_interval}
- submapping['FUN-Jog'] = {'method': com_lasertracker._com_basestations._com_base.fun_jog, 'signature': {
- 'arguments': {'ARG-Azimuth': 'arg_azimuth', 'ARG-Elevation': 'arg_elevation'}, 'returns': []}}
- submapping['FUN-PointTo'] = {'method': com_lasertracker._com_basestations._com_base.fun_pointto,
- 'signature': {'arguments': {'ARG-Position': 'arg_position'}, 'returns': []}}
- mapping['COM-Lasertracker']['COM-MobileEntities'] = {'add': com_lasertracker._com_mobileentities.add,
- 'remove': com_lasertracker._com_mobileentities.remove}
- submapping = mapping['COM-Lasertracker']['COM-MobileEntities']
- for child0_uuid in com_lasertracker._com_mobileentities._com_target:
- mapping['COM-Lasertracker']['COM-MobileEntities'][child0_uuid] = {'add': None, 'remove': None}
- submapping = mapping['COM-Lasertracker']['COM-MobileEntities'][child0_uuid]
- submapping['MEA-Position'] = com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_position
- submapping['MEA-Quaternion'] = com_lasertracker._com_mobileentities._com_target[child0_uuid].get_mea_quaternion
- submapping['PAR-State'] = {
- 'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_state, 'setter': None}
- submapping['PAR-Mode'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_mode,
- 'setter': None}
- submapping['PAR-Type'] = {'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_type,
- 'setter': None}
- submapping['PAR-Locked'] = {
- 'getter': com_lasertracker._com_mobileentities._com_target[child0_uuid].get_par_locked,
- 'setter': com_lasertracker._com_mobileentities._com_target[child0_uuid].set_par_locked}
- submapping['FUN-Reset'] = {'method': com_lasertracker._com_mobileentities._com_target[child0_uuid].fun_reset,
- 'signature': {'arguments': {}, 'returns': []}}
- submapping['FUN-Trigger'] = {
- 'method': com_lasertracker._com_mobileentities._com_target[child0_uuid].fun_trigger,
- 'signature': {'arguments': {}, 'returns': []}, 'mqtt_callback': mqtt.publish}
- model = Component.load(soil_model_file, mapping['COM-Lasertracker'])
-
- http = HTTPServer(loop, address, port, model)
-
- # start servers
- main_logger.info("Starting main asynchronous loop")
- try:
- loop.run_forever()
- except:
- pass
- finally:
- loop.close()
diff --git a/test/test.py b/test/test.py
deleted file mode 100644
index 1ed17d2..0000000
--- a/test/test.py
+++ /dev/null
@@ -1,108 +0,0 @@
-import json
-from typing import Callable, Dict
-
-import requests
-
-
-def test(request: Callable, url: str, body: Dict = None, expect_success: bool = True):
- global nr_success, nr_tests
- body = {} if body is None else body
-
- nr_tests += 1
- if request.__name__ != 'get':
- ret = request(url, data=json.dumps(body))
- else:
- ret = request(url)
-
- print('Status-Code: {}'.format(ret.status_code))
- if (expect_success and 200 <= ret.status_code < 300) or (not expect_success and (ret.status_code < 200 or ret.status_code >= 300)):
- nr_success += 1
- print('Test {} succeeded.'.format(nr_tests))
- else:
- print('Test {} failed.'.format(nr_tests))
- print('\t{} {}'.format(request.__name__.upper(), url))
- print('\tExpected: {}, Got Status-Code: {}'.format('SUCCESS' if expect_success else 'FAILURE', ret.status_code))
- print('\tDescription: {}'.format(ret.text))
-
-
-if __name__ == '__main__':
- nr_tests = 0
- nr_success = 0
-
- GET = requests.get
- POST = requests.post
- PATCH = requests.patch
- PUT = requests.put
- DELETE = requests.delete
-
- print("\n########## Test: GET root")
- test(GET, 'http://localhost:8015/')
- test(GET, 'http://localhost:8015/objects/')
- test(GET, 'http://localhost:8015/COM-Environment/')
-
- print("\n########## Test: optional trailing slash")
- test(GET, 'http://localhost:8015/COM-Environment/')
- test(GET, 'http://localhost:8015/COM-Environment')
-
- print("\n########## Test: get asynchronous variable")
- test(GET, 'http://localhost:8015/objects/COM-Environment/COM-836562ce-9dc5-408d-8296-8cc22c594f72/MEA-Pressure')
-
- print("\n########## Test: Set Parameter with POST")
- data = {'value': 'Inside'}
- test(POST, 'http://localhost:8015/objects/COM-Environment/COM-836562ce-9dc5-408d-8296-8cc22c594f72/PAR-Location', data, False)
-
- print("\n########## Test: Set Parameter with PATCH")
- data = {'value': 'Inside'}
- test(PATCH, 'http://localhost:8015/objects/COM-Environment/COM-836562ce-9dc5-408d-8296-8cc22c594f72/PAR-Location', data)
-
- print("\n########## Test: Call function via POST")
- data = {'arguments': [{'uuid': 'ARG-Interval', 'value': 1}]}
- test(POST, 'http://localhost:8015/objects/COM-Environment/COM-836562ce-9dc5-408d-8296-8cc22c594f72/FUN-MeasureRMS', data)
-
- print("\n########## Test: Call function via PATCH")
- data = {'arguments': [{'uuid': 'ARG-Interval', 'value': 1}]}
- test(PATCH, 'http://localhost:8015/objects/COM-Environment/COM-836562ce-9dc5-408d-8296-8cc22c594f72/FUN-MeasureRMS', data, False)
-
- print("\n########## Test: Malicious URLS or not existing nodes")
- test(GET, 'http://localhost:8015/COM-EnvironmentMEA-Temperature', expect_success=False)
- test(GET, 'http://localhost:8015/COM-Environment/MEA-Temperature//', expect_success=False)
- test(GET, 'http://localhost:8015/COM-Environment//MEA-Temperature', expect_success=False)
- test(GET, 'http://localhost:8015//COM-Environment/MEA-Temperature', expect_success=False)
-
- print("\n########## Test: Add sensor to the system via PUT")
-
- with open('./devices/environmental_sensor/Sensor.json') as infile:
- json_model = json.load(infile)
- # add the sensor
- test(PUT, 'http://localhost:8015/COM-Environment/COM-Sensor', body={'class_name': 'Sensor', 'json_file': json_model, 'args': ['AB-CD-EF-01-23'], 'kwargs': {}})
- test(GET, 'http://localhost:8015/COM-Environment/COM-Sensor')
- # try to add the sensor again
- test(PUT, 'http://localhost:8015/COM-Environment/COM-Sensor',
- body={'class_name': 'Sensor', 'json_file': json_model, 'args': ['AB-CD-EF-01-23'], 'kwargs': {}}, expect_success=False)
- # try to add a sensor without arguments
- test(PUT, 'http://localhost:8015/COM-Environment/COM-Sensor2',
- body={'class_name': 'Sensor', 'json_file': json_model, 'args': [], 'kwargs': {}}, expect_success=False)
- test(GET, 'http://localhost:8015/COM-Environment/COM-Sensor2', expect_success=False)
-
-
- print("\n########## Test: Deleting objects")
- # deleting existing sensor with correct args
- test(DELETE, 'http://localhost:8015/COM-Environment/COM-Sensor', body={'args': ['AB-CD-EF-01-23'], 'kwargs': {}})
- test(GET, 'http://localhost:8015/COM-Environment/COM-Sensor', expect_success=False)
- # deleting non existing sensor
- test(DELETE, 'http://localhost:8015/COM-Environment/COM-Sensor', body={'args': ['AB-CD-EF-01-23'], 'kwargs': {}}, expect_success=False)
- # deleting existing sensor with incorrect args
- test(DELETE, 'http://localhost:8015/COM-Environment/COM-200ae749-2d95-452f-a27e-70ec83f440a2', body={'args': ['AB-CD-EF-01-23'], 'kwargs': {}}, expect_success=False)
- test(GET, 'http://localhost:8015/COM-Environment/COM-200ae749-2d95-452f-a27e-70ec83f440a2')
- # deleting non existing sensor without body
- test(DELETE, 'http://localhost:8015/COM-Environment/COM-200ae749-2d95-452f-a27e-70ec83f440a2', expect_success=False)
-
-
- print('\n')
- print('+------------------- Test Summary --------------------+')
- print('|{0:<53}|'.format(' Overall test result: {}'.format('SUCCESS' if nr_success == nr_tests else "FAILURE")))
- print('|{0:<53}|'.format(' Executed tests: {}'.format(nr_tests)))
- print('|{0:<53}|'.format(' Successful tests: {0} ({1:> 4.1f} %)'.format(nr_success, nr_success / nr_tests * 100)))
- print('|{0:<53}|'.format(' Failed tests: {0} ({1:> 4.1f} %)'.format(nr_tests - nr_success, (nr_tests - nr_success) / nr_tests * 100)))
- print('+-----------------------------------------------------+')
- print('\n')
diff --git a/test/test_variable.py b/test/test_variable.py
deleted file mode 100644
index 18c78d7..0000000
--- a/test/test_variable.py
+++ /dev/null
@@ -1,54 +0,0 @@
-import unittest
-
-from soil.error import DimensionException, TypeException
-from soil import Figure
-
-
-class TestVariable(unittest.TestCase):
- values = [4,
- [5, 'test', 9],
- [[1, [1, 0]], [0, 1]],
- [[3.2, 1.4], [1.3]],
- [True, False],
- [['a', 'b'], ['c', 'd']],
- 'test',
- [2, 1],
- [[[1, 2], [3, 4]], [[5, 6], [7, 8]]],
- ['test'],
- [5.3],
- [12, 0, 0, 3],
- "1985-04-12T23:20:50.525368Z",
- ["1985-04-12T23:20:50.525368Z", "1985-04-12T23:20:50.525368Z"],
- ["1985-04-12T23:20:50.525368Z", 3]
- ]
-
- def test_is_scalar(self):
- expectations = [True, False, False, False, False, False, True, False, False, False, False, False, True, False, False]
- for value, expectation in zip(self.values, expectations):
- self.assertEqual(Figure.is_scalar(value), expectation)
-
- def test_check_dimension(self):
- dimensions = [[], [0], [2, 2], [2, 1], [2, 2], [0], [-1], [], [2, 2, 2], [[0]], 'test', [3], [], [2], [2]]
- expectations = [True, True, False, False, False, False, False, False, True, False, False, False, True, True, True]
- for value, dimension, expectation in zip(self.values, dimensions, expectations):
- if not expectation:
- self.assertRaises(DimensionException, Figure.check_dimension, dimension, value)
- else:
- try:
- Figure.check_dimension(dimension, value)
- except Exception as e:
- self.fail('Check_dimension throwed Exception "{}" with value "{}" and dimension "{}"'.format(e, value, dimension))
-
- def test_check_type(self):
- datatypes = ['int', 'int', 'string', 'double', 'bool', 'int', 'string', 'double', 'bool', 'int', 'int', 'int', 'time', 'time', 'time']
- expectations = [True, False, False, True, True, False, True, True, False, False, False, True, True, True, False]
- for value, datatype, expectation in zip(self.values, datatypes, expectations):
- if not expectation:
- self.assertRaises(TypeException, Figure.check_type, datatype, value)
- else:
- try:
- Figure.check_type(datatype, value)
- except Exception as e:
- self.fail('Check_dimension throwed Exception "{}" with value "{}" and datatype "{}"'.format(e, value, datatype))
-
- # TODO test check_range
\ No newline at end of file
--
GitLab