Skip to content
Snippets Groups Projects
Commit 3f6c6030 authored by Timon Römer's avatar Timon Römer
Browse files

Removes duplicate usage of helper_functions

parent 50454936
No related tags found
1 merge request!14test: Adds testing parameter randomness and improves overall structure
Pipeline #164095 passed
...@@ -21,6 +21,14 @@ class JSON_KEYS(Enum): ...@@ -21,6 +21,14 @@ class JSON_KEYS(Enum):
firstId = "firstId" firstId = "firstId"
model = "model" model = "model"
count = "count" count = "count"
attributes = 'attributes'
multimeterId = 'multimeterId'
num_processes = 'num_processes'
local_num_threads = 'local_num_threads'
gid = "gid"
properties = "properties"
population = "population"
position = "position"
class NEST_API_ENDPOINTS(Enum): class NEST_API_ENDPOINTS(Enum):
spikes = "spikes" spikes = "spikes"
...@@ -32,3 +40,6 @@ class NEST_API_PARAMS (Enum): ...@@ -32,3 +40,6 @@ class NEST_API_PARAMS (Enum):
nodeIds = "nodeIds" nodeIds = "nodeIds"
skip = "skip" skip = "skip"
top = "top" top = "top"
#Base URL and prefix for HTTP-queries
BASE_REQUEST_URL_NEST = "http://localhost:9000"
\ No newline at end of file
from copy import deepcopy
import enum
import itertools
import json
from nturl2path import url2pathname
import time
import numbers
import math
import pytest
from enum import Enum
import requests
import random
from test_config import *
#Receives an enum or a string and converts it to a string. Throws an error if its neither a string nor an enum with a string.
def convert_enum_or_string_to_string(input):
if isinstance(input, Enum):
input = input.value
if isinstance(input, str):
return input
else:
return ValueError("Dict key is neither of type String nor Enum!")
#Builds and returns a HTTP-Query String including the given parameters and values
def build_query_string(prefix_string, query_params = None):
query_string = prefix_string
if (query_params == None) or (len(query_params) == 0):
return prefix_string
is_first_parameter = True
for param_name, (param_value, param_enabled) in query_params.parameters.items():
if not param_enabled:
continue
if is_first_parameter:
query_string += "?"
is_first_parameter = False
else:
query_string += "&"
query_string += param_name + "="
if (isinstance(param_value,list)):
query_string += ','.join(map(str,param_value))
else:
query_string += str(param_value)
return query_string
#Builds a request URL from the baseurl and the optional query parameters
#Returns the data in Json format if request is valid
def get_json_from_url(base_url, query_params = None):
query_url = build_query_string(base_url, query_params)
response = requests.get(query_url)
assert(response.status_code == requests.codes.ok)
return response.json()
from enum import Enum
#Base URL and prefix for HTTP-queries
BASE_REQUEST_URL = "http://localhost:9000"
#Relates every value to its corresponding name
class JSON_QUERY_KEYS(Enum):
spikedetectorId = 'spikedetectorId'
nodeIds = 'nodeIds'
attributes = 'attributes'
multimeterId = 'multimeterId'
num_processes = 'num_processes'
local_num_threads = 'local_num_threads'
stepSize = "stepSize"
current = "current"
begin = "begin"
end = "end"
gid = "gid"
properties = "properties"
population = "population"
position = "position"
import requests import requests
import numbers import numbers
from ..general_config.helper_functions import * import sys
from ..general_config.test_config import * sys.path.insert(1, '.../access-node/test')
from utility_functions import *
from config import *
REQUEST_URL = BASE_REQUEST_URL + "/multimeters" REQUEST_URL = BASE_REQUEST_URL_NEST + "/multimeters"
def test_get_multimeters(nest_simulation): def test_get_multimeters(nest_simulation):
multimeters = get_json_from_url(REQUEST_URL) multimeters = get_json_from_url(REQUEST_URL)
...@@ -11,17 +13,17 @@ def test_get_multimeters(nest_simulation): ...@@ -11,17 +13,17 @@ def test_get_multimeters(nest_simulation):
assert(isinstance(multimeters, list)) assert(isinstance(multimeters, list))
for multimeter in multimeters: for multimeter in multimeters:
assert(JSON_QUERY_KEYS.multimeterId.value in multimeter) assert(JSON_KEYS.multimeterId.value in multimeter)
assert(isinstance(multimeter[JSON_QUERY_KEYS.multimeterId.value], int)) assert(isinstance(multimeter[JSON_KEYS.multimeterId.value], int))
assert(JSON_QUERY_KEYS.attributes.value in multimeter) assert(JSON_KEYS.attributes.value in multimeter)
assert(isinstance(multimeter[JSON_QUERY_KEYS.attributes.value], list)) assert(isinstance(multimeter[JSON_KEYS.attributes.value], list))
for attribute in multimeter[JSON_QUERY_KEYS.attributes.value]: for attribute in multimeter[JSON_KEYS.attributes.value]:
assert(isinstance(attribute, str)) assert(isinstance(attribute, str))
assert(JSON_QUERY_KEYS.nodeIds.value in multimeter) assert(JSON_KEYS.nodeIds.value in multimeter)
assert(isinstance(multimeter[JSON_QUERY_KEYS.nodeIds.value], list)) assert(isinstance(multimeter[JSON_KEYS.nodeIds.value], list))
for node_id in multimeter[JSON_QUERY_KEYS.nodeIds.value]: for node_id in multimeter[JSON_KEYS.nodeIds.value]:
assert(isinstance(node_id, int)) assert(isinstance(node_id, int))
import requests import requests
import numbers import numbers
from ..general_config.helper_functions import * import sys
from ..general_config.test_config import * sys.path.insert(1, '.../access-node/test')
from utility_functions import *
from config import *
#Currently, this endpoint does not behave according to the specs, remove early return statements if they do #Currently, this endpoint does not behave according to the specs, remove early return statements if they do
...@@ -14,14 +16,14 @@ def test_get_neuron_properties(nest_simulation): ...@@ -14,14 +16,14 @@ def test_get_neuron_properties(nest_simulation):
assert(isinstance(neurons_properties, list)) assert(isinstance(neurons_properties, list))
for neuron_properties in neurons_properties: for neuron_properties in neurons_properties:
assert(JSON_QUERY_KEYS.gid.value in neuron_properties) assert(JSON_KEYS.gid.value in neuron_properties)
assert(isinstance(neuron_properties[JSON_QUERY_KEYS.gid.value], numbers.Number)) assert(isinstance(neuron_properties[JSON_KEYS.gid.value], numbers.Number))
assert(JSON_QUERY_KEYS.properties.value in neuron_properties) assert(JSON_KEYS.properties.value in neuron_properties)
assert(JSON_QUERY_KEYS.population.value in neuron_properties[JSON_QUERY_KEYS.properties.value]) assert(JSON_KEYS.population.value in neuron_properties[JSON_KEYS.properties.value])
assert(isinstance(neuron_properties[JSON_QUERY_KEYS.properties.value][JSON_QUERY_KEYS.population.value], numbers.Integral)) assert(isinstance(neuron_properties[JSON_KEYS.properties.value][JSON_KEYS.population.value], numbers.Integral))
assert(JSON_QUERY_KEYS.population.value in neuron_properties[JSON_QUERY_KEYS.properties.value]) assert(JSON_KEYS.population.value in neuron_properties[JSON_KEYS.properties.value])
assert(isinstance(neuron_properties[JSON_QUERY_KEYS.properties.value][JSON_QUERY_KEYS.population.value], list)) assert(isinstance(neuron_properties[JSON_KEYS.properties.value][JSON_KEYS.population.value], list))
import requests import requests
import numbers import numbers
from ..general_config.helper_functions import * import sys
from ..general_config.test_config import * sys.path.insert(1, '.../access-node/test')
from utility_functions import *
from config import *
#Currently, this endpoint does not behave according to the specs, remove early return statements if they do #Currently, this endpoint does not behave according to the specs, remove early return statements if they do
......
...@@ -3,10 +3,12 @@ import pytest ...@@ -3,10 +3,12 @@ import pytest
import time import time
import numbers import numbers
import math import math
from ..general_config.helper_functions import * import sys
from ..general_config.test_config import * sys.path.insert(1, '.../access-node/test')
from utility_functions import *
from config import *
REQUEST_URL = BASE_REQUEST_URL + "/simulationTimeInfo" REQUEST_URL = BASE_REQUEST_URL_NEST + "/simulationTimeInfo"
class NestSimulationTime: class NestSimulationTime:
def __init__(self): def __init__(self):
...@@ -19,23 +21,23 @@ def simulation_time(request): ...@@ -19,23 +21,23 @@ def simulation_time(request):
def test_simulation_time_info(nest_simulation, simulation_time): def test_simulation_time_info(nest_simulation, simulation_time):
simulation_time_info = get_json_from_url(REQUEST_URL) simulation_time_info = get_json_from_url(REQUEST_URL)
assert(JSON_QUERY_KEYS.stepSize.value in simulation_time_info) assert(JSON_KEYS.stepSize.value in simulation_time_info)
assert(isinstance(simulation_time_info[JSON_QUERY_KEYS.stepSize.value], numbers.Number)) assert(isinstance(simulation_time_info[JSON_KEYS.stepSize.value], numbers.Number))
assert(JSON_QUERY_KEYS.current.value in simulation_time_info) assert(JSON_KEYS.current.value in simulation_time_info)
assert(isinstance(simulation_time_info[JSON_QUERY_KEYS.current.value], numbers.Number)) assert(isinstance(simulation_time_info[JSON_KEYS.current.value], numbers.Number))
assert(JSON_QUERY_KEYS.begin.value in simulation_time_info) assert(JSON_KEYS.begin.value in simulation_time_info)
assert(isinstance(simulation_time_info[JSON_QUERY_KEYS.begin.value], numbers.Number)) assert(isinstance(simulation_time_info[JSON_KEYS.begin.value], numbers.Number))
assert(JSON_QUERY_KEYS.end.value in simulation_time_info) assert(JSON_KEYS.end.value in simulation_time_info)
assert(isinstance(simulation_time_info[JSON_QUERY_KEYS.end.value], numbers.Number)) assert(isinstance(simulation_time_info[JSON_KEYS.end.value], numbers.Number))
assert(simulation_time_info[JSON_QUERY_KEYS.begin.value] <= simulation_time_info[JSON_QUERY_KEYS.current.value]) assert(simulation_time_info[JSON_KEYS.begin.value] <= simulation_time_info[JSON_KEYS.current.value])
assert(simulation_time_info[JSON_QUERY_KEYS.end.value] >= simulation_time_info[JSON_QUERY_KEYS.current.value]) assert(simulation_time_info[JSON_KEYS.end.value] >= simulation_time_info[JSON_KEYS.current.value])
# In theory these should be true but due to floating point inaccuracies and bad default values for 'step_size' it is not # In theory these should be true but due to floating point inaccuracies and bad default values for 'step_size' it is not
# assert(math.fmod(simulation_time_info['current'], simulation_time_info['step_size']) == 0.0) # assert(math.fmod(simulation_time_info['current'], simulation_time_info['step_size']) == 0.0)
# assert(math.fmod(simulation_time_info['begin'], simulation_time_info['step_size']) == 0.0) # assert(math.fmod(simulation_time_info['begin'], simulation_time_info['step_size']) == 0.0)
# assert(math.fmod(simulation_time_info['end'], simulation_time_info['step_size']) == 0.0) # assert(math.fmod(simulation_time_info['end'], simulation_time_info['step_size']) == 0.0)
new_time = simulation_time_info[JSON_QUERY_KEYS.current.value] new_time = simulation_time_info[JSON_KEYS.current.value]
assert(simulation_time.current_time <= new_time) assert(simulation_time.current_time <= new_time)
simulation_time.current_time = new_time simulation_time.current_time = new_time
from distutils.command.config import config from distutils.command.config import config
import requests import requests
import numbers import numbers
from ..general_config.helper_functions import * import sys
from ..general_config.test_config import * sys.path.insert(1, '.../access-node/test')
from utility_functions import *
from config import *
REQUEST_URL = BASE_REQUEST_URL + "/spikedetectors" REQUEST_URL = BASE_REQUEST_URL_NEST + "/spikedetectors"
def test_get_spikedetectors(nest_simulation): def test_get_spikedetectors(nest_simulation):
spike_detectors = get_json_from_url(REQUEST_URL) spike_detectors = get_json_from_url(REQUEST_URL)
...@@ -12,11 +14,11 @@ def test_get_spikedetectors(nest_simulation): ...@@ -12,11 +14,11 @@ def test_get_spikedetectors(nest_simulation):
assert(isinstance(spike_detectors, list)) assert(isinstance(spike_detectors, list))
for spike_detector in spike_detectors: for spike_detector in spike_detectors:
assert(JSON_QUERY_KEYS.spikedetectorId.value in spike_detector) assert(JSON_KEYS.spikedetectorId.value in spike_detector)
assert(isinstance(spike_detector[JSON_QUERY_KEYS.spikedetectorId.value], int)) assert(isinstance(spike_detector[JSON_KEYS.spikedetectorId.value], int))
assert(JSON_QUERY_KEYS.nodeIds.value in spike_detector) assert(JSON_KEYS.nodeIds.value in spike_detector)
assert(isinstance(spike_detector[JSON_QUERY_KEYS.nodeIds.value], list)) assert(isinstance(spike_detector[JSON_KEYS.nodeIds.value], list))
for node_id in spike_detector[JSON_QUERY_KEYS.nodeIds.value]: for node_id in spike_detector[JSON_KEYS.nodeIds.value]:
assert(isinstance(node_id, int)) assert(isinstance(node_id, int))
import requests import requests
import numbers import numbers
from ..general_config.helper_functions import * import sys
from ..general_config.test_config import * sys.path.insert(1, '.../access-node/test')
from utility_functions import *
from config import *
REQUEST_URL = BASE_REQUEST_URL + "/kernelStatus" REQUEST_URL = BASE_REQUEST_URL_NEST + "/kernelStatus"
def test_get_kernel_status(nest_simulation): def test_get_kernel_status(nest_simulation):
kernel_status = get_json_from_url(REQUEST_URL) kernel_status = get_json_from_url(REQUEST_URL)
assert(isinstance(kernel_status, dict)) assert(isinstance(kernel_status, dict))
assert(JSON_QUERY_KEYS.num_processes.value in kernel_status) assert(JSON_KEYS.num_processes.value in kernel_status)
assert(isinstance(kernel_status[JSON_QUERY_KEYS.num_processes.value],numbers.Number)) assert(isinstance(kernel_status[JSON_KEYS.num_processes.value],numbers.Number))
assert(JSON_QUERY_KEYS.local_num_threads.value in kernel_status) assert(JSON_KEYS.local_num_threads.value in kernel_status)
assert(isinstance(kernel_status[JSON_QUERY_KEYS.local_num_threads.value],numbers.Number)) assert(isinstance(kernel_status[JSON_KEYS.local_num_threads.value],numbers.Number))
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment