Commit e1120fa6 authored by Trishna Saeharaseelan's avatar Trishna Saeharaseelan
Browse files

test: schema and spec validation

parent 36a44fff
{
"header": {
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "autonomy_engine",
"destination": "ecosub_c2",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "mission_plan",
"platform_ID": "ecosub-5",
"autonomy_engine_plan_ID": 1,
"plan": [
{
"action": "move",
"flight_style": "go to waypoint",
"latitude_waypoint": -3.237143188645706,
"longitude_waypoint": 52.37072283932642,
"depth": 0.0,
"activate_payload": false,
"send_environmental_data": false
},
{
"action": "dive",
"flight_style": "dive to depth",
"latitude_waypoint": -3.237143188645706,
"longitude_waypoint": 52.37072283932642,
"altitude": 10,
"activate_payload": false,
"send_environmental_data": false
},
{
"action": "scanline",
"flight_style": "go to waypoint",
"latitude_waypoint": -0.237143188645706,
"longitude_waypoint": 60.00000000000000,
"altitude": 10,
"activate_payload": true,
"send_environmental_data": false
},
{
"action": "climb",
"flight_style": "go to surface",
"latitude_waypoint": -0.237143188645706,
"longitude_waypoint": 52.37072283932642,
"depth": 0,
"activate_payload": false,
"send_environmental_data": true
}
]
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "autonomy_engine",
"destination": "hydrosurv_adapter",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "mission_plan",
"platform_ID": "reav-60-1",
"autonomy_engine_plan_ID": 1,
"plan": [
{
"latitude_waypoint": -4.187143188645706,
"longitude_waypoint": 50.37072283932642
},
{
"latitude_waypoint": -3.187143188645706,
"longitude_waypoint": 51.37072283932642
},
{
"latitude_waypoint": -3.237143188645706,
"longitude_waypoint": 52.37072283932642
}
]
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "ecosub_c2",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"planning_config_ID": 3,
"exclusion_zones": [
{
"geometry_coordinates": [
[
[
-4.187143188645706,
50.37072283932642
],
[
-4.202697005964865,
50.368816892405874
],
[
-4.203156724702808,
50.365640144076906
],
[
-4.19449868846155,
50.362267670845654
]
]
]
}
],
"squads": [
{
"squad_ID": 1,
"no_of_platforms": 1,
"squad_mission_type": "tracking",
"squad_state": "active",
"platforms": [
{
"model": "reav",
"platform_ID": "reav-60-1",
"serial": "reav-60",
"emergency": {
"additional_data": {},
"latitude_waypoint": -7.432,
"longitude_waypoint": 50.365,
"safe_command": "go_home",
"target_depth": 10
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {}
}
],
"region_of_interest": {
"geometry_coordinates": [
[
[
-4.187143188645706,
50.37072283932642
],
[
-4.202697005964865,
50.368816892405874
],
[
-4.203156724702808,
50.365640144076906
],
[
-4.19449868846155,
50.362267670845654
]
]
]
}
},
{
"squad_ID": 2,
"no_of_platforms": 3,
"squad_mission_type": "survey",
"squad_state": "active",
"platforms": [
{
"platform_ID": "ecosub-1",
"serial": "ecosub-2",
"model": "ecosub",
"emergency": {
"additional_data": {},
"latitude_waypoint": -7.432,
"longitude_waypoint": 50.365,
"safe_command": "go_home",
"target_depth": 10.0
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {
"scan_type": "DVL",
"swath_width": 10
}
},
{
"platform_ID": "ecosub-2",
"serial": "ecosubxyz-5",
"model": "ecosub",
"emergency": {
"additional_data": {},
"latitude_waypoint": -0.432,
"longitude_waypoint": 20.365,
"safe_command": "go_home",
"target_depth": 0.0
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {
"scan_type": "DVL",
"swath_width": 10
}
}
],
"region_of_interest": {}
},
{
"squad_ID": 3,
"no_of_platforms": 1,
"squad_mission_type": "inspection",
"squad_state": "active",
"platforms": [
{
"platform_ID": "ah-1",
"serial": "autosubhover-1",
"model": "autosub",
"emergency": {
"additional_data": {},
"latitude_waypoint": 20.432,
"longitude_waypoint": 50.365,
"safe_command": "abort_now",
"target_depth": 0.0
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {
"scan_type": "MBES"
}
}
],
"region_of_interest": {}
}
]
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "hermes",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"platform_ID": "ecosub-5",
"platform_timestamp": "2022-12-21T00:00:00Z",
"status_source": "usbl",
"latitude": 178.2,
"longitude": -10.122,
"depth": 50,
"altitude": 20
}
}
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "ecosub_c2",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"platform_ID": "ecosub-2",
"platform_timestamp": "2022-12-21T00:00:00Z",
"status_source": "onboard_platform",
"autonomy_engine_plan_ID": 1,
"battery_remaining_capacity": 80.2,
"active": true,
"platform_state": "ABORT",
"mission_action_ID": 1,
"mission_track_ID": 4,
"latitude": 178.2,
"longitude": -10.122,
"depth": 50,
"altitude": 20,
"heading": 90.0,
"health_status": "Warning",
"localisation_error": 0,
"usbl_fix_seconds_ago": 0,
"range_to_go": 124.3,
"sensor_config": {
"sensor_ID": 22,
"serial": "sidescan-2x",
"sensor_on": true,
"additional_data": {
"whiskers_on": true
}
},
"current_pitch": -4,
"speed_over_ground": 4.3,
"thrust_applied": 124.3,
"water_current_velocity": 124.3
}
}
{
"header": {
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "autonomy_engine",
"destination": "ecosub_c2",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "mission_plan",
"platform_ID": "ecosub-2",
"autonomy_engine_plan_ID": 1,
"plan": [
{
"action": "move",
"flight_style": "go to waypoint",
"latitude_waypoint": -3.237143188645706,
"longitude_waypoint": 52.37072283932642,
"depth": 0.0,
"activate_payload": false,
"send_environmental_data": false
},
{
"action": "dive",
"flight_style": "dive to depth",
"latitude_waypoint": -3.237143188645706,
"longitude_waypoint": 52.37072283932642,
"altitude": 10,
"activate_payload": false,
"send_environmental_data": false
},
{
"action": "scanline",
"flight_style": "go to waypoint",
"latitude_waypoint": -0.237143188645706,
"longitude_waypoint": 60.00000000000000,
"altitude": 10,
"activate_payload": true,
"send_environmental_data": false
},
{
"action": "climb",
"flight_style": "go to surface",
"latitude_waypoint": -0.237143188645706,
"longitude_waypoint": 52.37072283932642,
"depth": 0,
"activate_payload": false,
"send_environmental_data": true
}
]
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "ecosub_c2",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "observation",
"platform_ID": "ecosub-2",
"points_of_interest": [
{
"latitude": 178.2,
"longitude": -10.122,
"quality_of_point": 0.98
},
{
"latitude": 50.1382,
"longitude": -11.122,
"quality_of_point": 0.50
}
],
"region_surveyed": ""
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "hermes",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"platform_ID": "ecosub-5",
"platform_timestamp": "2022-12-21T00:00:00Z",
"status_source": "usbl",
"latitude": 178.2,
"longitude": -10.122,
"depth": 50,
"altitude": 20
}
}
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "ecosub_c2",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"platform_ID": "ecosub-2",
"platform_timestamp": "2022-12-21T00:00:00Z",
"status_source": "onboard_platform",
"autonomy_engine_plan_ID": 1,
"battery_remaining_capacity": 80.2,
"active": true,
"platform_state": "ABORT",
"mission_action_ID": 1,
"mission_track_ID": 4,
"latitude": 178.2,
"longitude": -10.122,
"depth": 50,
"altitude": 20,
"heading": 90.0,
"health_status": "Warning",
"localisation_error": 0,
"usbl_fix_seconds_ago": 0,
"range_to_go": 124.3,
"sensor_config": {
"sensor_ID": 22,
"serial": "sidescan-2x",
"sensor_on": true,
"additional_data": {
"whiskers_on": true
}
},
"current_pitch": -4,
"speed_over_ground": 4.3,
"thrust_applied": 124.3,
"water_current_velocity": 124.3
}
}
#C2#
4338
(4338,)
11111111111111111000000000000000
Health : 722
Content_Mask : 4
Battery Voltage : 82045
Battery Amps : 0
Battery Acc charge : 767
Battery Max Amps : 548
Battery Max Voltage : 18
Inner pressure : 43
Inner Temp : 4
Inner Humidity : 0
Max depth : 0
Current Pitch : -80
Max pitch : 0
Current RPM : 0
Surface Time : 1636015764
last GPS Time : 0
(b'A', 0, 60, 1636016049, 57.33663558959961, -4.444321632385254, 0, 4294934528, 722, 4, 82045, 0, 767, 548, 18, 43, 4, 0, 0, -80, 0, 0, 1636015764, 0)
['Type', 'Version', 'Sub_Num', 'Time', 'Latitude', 'Longitude', 'Health', 'Content_Mask', 'Battery Voltage', 'Battery Amps', 'Battery Acc charge', 'Battery Max Amps', 'Battery Max Voltage', 'Inner pressure', 'Inner Temp', 'Inner Humidity', 'Max depth', 'Current Pitch', 'Max pitch', 'Current RPM', 'Surface Time', 'last GPS Time']
(b'A', 0, 60, 1636016049, 57.33663558959961, -4.444321632385254, 0, 4294934528, 722, 4, 82045, 0, 767, 548, 18, 43, 4, 0, 0, -80, 0, 0, 1636015764, 0)
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "ecosub_c2",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"planning_config_ID": 3,
"exclusion_zones": [
{
"geometry_coordinates": [
[
[
-4.187143188645706,
50.37072283932642
],
[
-4.202697005964865,
50.368816892405874
],
[
-4.203156724702808,
50.365640144076906
],
[
-4.19449868846155,
50.362267670845654
]
]
]
}
],
"squads": [
{
"squad_ID": 1,
"no_of_platforms": 1,
"squad_mission_type": "tracking",
"squad_state": "active",
"platforms": [
{
"model": "reav",
"platform_ID": "reav-60-1",
"serial": "reav-60",
"emergency": {
"additional_data": {},
"latitude_waypoint": -7.432,
"longitude_waypoint": 50.365,
"safe_command": "go_home",
"target_depth": 10
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {}
}
],
"region_of_interest": {
"geometry_coordinates": [
[
[
-4.187143188645706,
50.37072283932642
],
[
-4.202697005964865,
50.368816892405874
],
[
-4.203156724702808,
50.365640144076906
],
[
-4.19449868846155,
50.362267670845654
]
]
]
}
},
{
"squad_ID": 2,
"no_of_platforms": 3,
"squad_mission_type": "survey",
"squad_state": "active",
"platforms": [
{
"platform_ID": "ecosub-2",
"serial": "ecosub-2",
"model": "ecosub",
"emergency": {
"additional_data": {},
"latitude_waypoint": -7.432,
"longitude_waypoint": 50.365,
"safe_command": "go_home",
"target_depth": 10.0
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {
"scan_type": "DVL",
"swath_width": 10
}
},
{
"platform_ID": "ecosub-5",
"serial": "ecosub-5",
"model": "ecosub",
"emergency": {
"additional_data": {},
"latitude_waypoint": -0.432,
"longitude_waypoint": 20.365,
"safe_command": "go_home",
"target_depth": 0.0
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {
"scan_type": "DVL",
"swath_width": 10
}
}
]
},
{
"squad_ID": 3,
"no_of_platforms": 1,
"squad_mission_type": "inspection",
"squad_state": "active",
"platforms": [
{
"platform_ID": "139-ah-1",
"serial": "ah-1",
"model": "autosub",
"emergency": {
"additional_data": {},
"latitude_waypoint": 20.432,
"longitude_waypoint": 50.365,
"safe_command": "abort_now",
"target_depth": 0.0
},
"max_velocity": 0.9,
"min_altitude": 15.2,
"min_velocity": 0.1,
"additional_data": {
"scan_type": "MBES"
}
}
],
"region_of_interest": {}
}
]
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 1,
"source": "hydrosurv_adapter",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "acknowledgement",
"acknowledged_message_ID": "11111111-7bc8-11ed-a1eb-0242ac999999",
"status": "c2_received"
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "autonomy_engine",
"destination": "hydrosurv_adapter",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "mission_plan",
"platform_ID": "reav-60-1",
"autonomy_engine_plan_ID": 1,
"plan": [
{
"latitude_waypoint": -4.187143188645706,
"longitude_waypoint": 50.37072283932642
},
{
"latitude_waypoint": -3.187143188645706,
"longitude_waypoint": 51.37072283932642
},
{
"latitude_waypoint": -3.237143188645706,
"longitude_waypoint": 52.37072283932642
}
]
}
}
\ No newline at end of file
{
"header":{
"message_ID": "b427003c-0000-11aa-a1eb-bvcdfghjgfdd",
"timestamp": "2022-11-16T00:00:00Z",
"version": 2,
"source": "hydrosurv_adapter",
"destination": "autonomy_engine",
"delivery_type": "publish",
"encoded": false
},
"payload":{
"message_type": "platform_status",
"autonomy_engine_plan_ID": 1,
"active": true,
"status_source": "onboard_platform",
"battery_remaining_capacity": 80.2,
"heading": 310.0,
"health_status": "Lost Connection",
"latitude": 178.2,
"longitude": -10.122,
"mission_action_ID": 1,
"mission_track_ID": 4,
"platform_ID": "reav-60-1",
"platform_state": "ABORT",
"platform_timestamp": "2022-12-21T00:00:00Z",
"speed_over_ground": 4.5,
"range_to_go": 0.0,
"thrust_applied": 2.3
}
}
\ No newline at end of file
from openapi_spec_validator import openapi_v30_spec_validator, openapi_v3_spec_validator
from openapi_spec_validator.readers import read_from_filename
from openapi_schema_validator import validate
from jsonschema import FormatChecker
from jsonschema import validate
from fixtures.schemas import (
acknowledgement_schema,
message_header,
observation_schema,
planning_configuration_schema,
platform_status_schema,
mission_plan_schema,
)
import json
"""
Test specs
"""
schema, spec_url = read_from_filename("fixtures/swagger.json")
errors_iterator = openapi_v3_spec_validator.iter_errors(schema)
print(errors_iterator)
print(openapi_v30_spec_validator.validate(schema))
"""
Test schema - Hydrosurv Messages
"""
message_types = ["acknowledgement", "mission_plan", "platform_status"]
for item in message_types:
f = open("mock_data/hydrosurv_adapter/%s.json" % item)
mock_data = json.load(f)
header_data = mock_data["header"]
payload_data = mock_data["payload"]
print(validate(header_data, message_header, format_checker=FormatChecker()))
if item == "acknowledgement":
print(
validate(
payload_data, acknowledgement_schema, format_checker=FormatChecker()
)
)
elif item == "mission_plan":
print(
validate(payload_data, mission_plan_schema, format_checker=FormatChecker())
)
elif item == "platform_status":
print(
validate(
payload_data, platform_status_schema, format_checker=FormatChecker()
)
)
"""
Test schema - GUI Messages
"""
message_types = ["planning_configuration"]
for item in message_types:
f = open("mock_data/gui_adapter/%s.json" % item)
mock_data = json.load(f)
header_data = mock_data["header"]
payload_data = mock_data["payload"]
print(validate(header_data, message_header, format_checker=FormatChecker()))
if item == "planning_configuration":
print(
validate(
payload_data,
planning_configuration_schema,
format_checker=FormatChecker(),
)
)
"""
Test schema - Ecosub Messages
"""
message_types = [
"observation",
"mission_plan",
"platform_status",
"platform_status-from_usbl_example",
]
for item in message_types:
f = open("mock_data/ecosub_adapter/%s.json" % item)
mock_data = json.load(f)
header_data = mock_data["header"]
payload_data = mock_data["payload"]
print(validate(header_data, message_header, format_checker=FormatChecker()))
if item == "platform_status-from_usbl_example.json":
print(
validate(
payload_data, platform_status_schema, format_checker=FormatChecker()
)
)
elif item == "mission_plan":
print(
validate(payload_data, mission_plan_schema, format_checker=FormatChecker())
)
elif item == "platform_status":
print(
validate(
payload_data, platform_status_schema, format_checker=FormatChecker()
)
)
elif item == "observation":
print(
validate(payload_data, observation_schema, format_checker=FormatChecker())
)
"""
Test schema - Autonomy Engine Messages
"""
message_types = [
"planning_configuration",
"mission_plan_AH1",
"mission_plan_ECOSUB",
"mission_plan_HYDROSURV",
"platform_status",
"platform_status-from_usbl_example",
"acknowledgement",
]
for item in message_types:
f = open("mock_data/autonomy_engine_adapter/%s.json" % item)
mock_data = json.load(f)
header_data = mock_data["header"]
payload_data = mock_data["payload"]
print(validate(header_data, message_header, format_checker=FormatChecker()))
if item == "platform_status-from_usbl_example.json":
print(
validate(
payload_data, platform_status_schema, format_checker=FormatChecker()
)
)
elif item == "mission_plan_AH1":
print(
validate(payload_data, mission_plan_schema, format_checker=FormatChecker())
)
elif item == "mission_plan_ECOSUB":
print(
validate(payload_data, mission_plan_schema, format_checker=FormatChecker())
)
elif item == "mission_plan_HYDROSURV":
print(
validate(payload_data, mission_plan_schema, format_checker=FormatChecker())
)
elif item == "platform_status":
print(
validate(
payload_data, platform_status_schema, format_checker=FormatChecker()
)
)
elif item == "observation":
print(
validate(payload_data, observation_schema, format_checker=FormatChecker())
)
elif item == "planning_configuration":
print(
validate(
payload_data,
planning_configuration_schema,
format_checker=FormatChecker(),
)
)
elif item == "acknowledgement":
print(
validate(
payload_data, acknowledgement_schema, format_checker=FormatChecker()
)
)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment