Automated Testing Interface (Inter USS) Rotas que devem ser implementadas pelo provedor para poder realizar os testes automatizados implementados pelo BR-UTM Lab. Para mais detalhes, consultar o repositório: https://github.com/dp-icea/automated_testing_interfaces Remote ID Test Data Injection (v0.5.1) Esta interface é fornecida por cada Provedor de Serviço (Service Provider) que deseja ser testado pelo framework de testes automatizados. A suíte de testes chama esta interface para injetar dados de voo no sistema sob teste. Segurança (Autenticação) Tipo: OAuth2 (Client Credentials) Escopo Necessário: rid.inject_test_data Descrição: Acesso concedido para injetar dados de teste em um Provedor de Serviços. Endpoints 1. Criar Teste Rota: PUT /tests/{test_id} Solicita a criação de um ou mais voos lógicos baseados na injeção dos dados fornecidos. O ID de injeção (injection_id) não pode ser modificado pelo provedor. Parâmetros de Rota: test_id (obrigatório) - O ID do teste. Exemplo: 2979bd18-7f06-441c-bda6-e82c841c35d6 Corpo da Requisição: Requer o objeto CreateTestParameters (uma lista de voos). Respostas Esperadas: 200 OK: Teste criado com sucesso. Retorna ChangeTestResponse. 409 Conflict: O teste já existe. 2. Deletar Teste Rota: DELETE /tests/{test_id}/{version} Remove todos os dados de teste associados a este teste do injetor do Provedor de Serviços. Parâmetros de Rota: test_id (obrigatório) e version (obrigatório). Respostas Esperadas: 200 OK: Teste deletado com sucesso. Retorna DeleteTestResponse. 3. Consultar Notificações de Usuário Rota: GET /user_notifications Retorna a lista de notificações observadas pelo usuário virtual. As notificações devem estar disponíveis em até 5 segundos após a observação. Parâmetros de Query: * after (obrigatório): Não incluir notificações observadas antes deste horário. before (opcional): Não incluir notificações após este horário. O padrão é o agora. Respostas Esperadas: 200 OK: Notificações recuperadas com sucesso. 400 Bad Request: Faltando o parâmetro 'after' ou requisição inválida. 401 Unauthorized: Token ausente, não pôde ser decodificado ou é inválido. 403 Forbidden: Token decodificado, mas sem o escopo apropriado. Payload de Exemplo (JSON) Formato esperado para o envio das informações do voo: JSON { "requested_flights": [ { "injection_id": "edb7695f-8737-4b9f-91f8-e2afbb333f41", "aircraft_type": "Aeroplane", "telemetry": [ { "timestamp": "2024-04-22T16:36:50.52Z", "position": { "lat": -23.1791, "lng": -45.8872, "alt": 100.0 } } ], "details_responses": [ { "effective_after": "2024-04-22T16:36:50.52Z", "details": { "id": "a3423b-213401-0023" } } ] } ] } Remote ID Display Data Observation (v0.3.0) Esta interface é fornecida por cada Provedor de Exibição (Display Provider) que deseja ser testado pelo framework de testes automatizados. A suíte de testes chama esta interface para obter as informações atuais do Remote ID sob a perspectiva de um usuário do Provedor de Exibição. Segurança (Autenticação) Tipo: OAuth2 (Client Credentials) Escopo Necessário: dss.read.identification_service_areas Descrição: Acesso concedido para ler informações atuais do Remote ID. O token JWT deve ser enviado no header Authorization: Bearer . Endpoints 1. Consultar Dados de Exibição (Poll Display Data) Rota: GET /display_data Solicita os dados atuais de exibição do Remote ID da mesma forma que seriam visualizados por uma Aplicação de Exibição (Display Application). Parâmetros de Query: * view (obrigatório): A área desta visualização no formato lat1,lng1,lat2,lng2. A visualização é a menor caixa delimitada (bounding box) pelos pontos de canto fornecidos. Exemplo: 29.97816,31.13296,29.98025,31.13535 Respostas Esperadas: 200 OK: Dados de exibição do Remote ID recuperados com sucesso. Retorna o schema GetDisplayDataResponse (contendo listas de voos e clusters). 2. Obter Detalhes do Voo Rota: GET /display_data/{id} Obtém os detalhes de um voo específico que foi previamente identificado através da rota /display_data . Parâmetros de Rota: * id (obrigatório): O identificador do voo. Exemplo: 1e3adb99-acc9-424f-a04e-a0743538849a Respostas Esperadas: 200 OK: Detalhes sobre o voo solicitado foram recuperados com sucesso. Retorna o schema GetDetailsResponse. 404 Not Found: O voo solicitado não foi encontrado. Payloads de Exemplo (JSON) Exemplo de Resposta para /display_data Formato esperado retornando voos conhecidos e aglomerados (clusters) onde a posição precisa não é exata: JSON { "flights": [ { "id": "1e3adb99-acc9-424f-a04e-a0743538849a", "aircraft_type": "Aeroplane", "current_state": { "timestamp": "2024-04-22T16:36:50.52Z", "operational_status": "Airborne" }, "most_recent_position": { "lat": -23.1791, "lng": -45.8872, "alt": 100.0 } } ], "clusters": [ { "corners": [ { "lat": -23.179, "lng": -45.887 }, { "lat": -23.180, "lng": -45.888 } ], "area_sqm": 15000.5, "number_of_flights": 3 } ] } Exemplo de Resposta para /display_data/{id} Formato esperado retornando os detalhes do operador e da aeronave: JSON { "operator": { "id": "OP-BR-987654321", "location": { "lat": -23.1805, "lng": -45.8881 }, "altitude": { "altitude": 550.0, "altitude_type": "Takeoff" } }, "uas": { "id": "UAS-XT-550", "eu_classification": "Class0" } } Flight Planning Automated Testing Interface (v0.7.0) Esta interface é fornecida por um USS (UAS Service Supplier) que deseja participar de testes automatizados envolvendo tentativas de planejamento de voo. Um cliente (geralmente o uss_qualifier ) instrui um usuário virtual a interagir com a interface do USS para planejar, atualizar e fechar planos de voo. Segurança (Autenticação) Tipo: OAuth2 (Client Credentials) Escopos Necessários: interuss.flight_planning.direct_automated_test : Permite determinar a prontidão do USS para o teste e instruir o administrador a preparar a área de testes. interuss.flight_planning.plan : Permite enviar instruções ao usuário virtual para planejar, modificar ou fechar um plano de voo. Descrição: O token JWT deve ser enviado no header Authorization: Bearer . Endpoints 1. Consultar Status da Interface Rota: GET /status Obtém o status atual desta interface de testes automatizados. Escopo Exigido: interuss.flight_planning.direct_automated_test Respostas Esperadas: 200 OK: Interface disponível. Retorna se está Starting ou Ready . 404 Not Found: A interface de testes não está disponível. 2. Limpar Área (Clear Area) Rota: POST /clear_area_requests Solicita que o administrador do USS cancele e remova todos os planos de voo gerenciados por ele que interceptem a área especificada no payload. Escopo Exigido: interuss.flight_planning.direct_automated_test Corpo da Requisição: Requer request_id único e a extensão da área ( extent ). Respostas Esperadas: 200 OK: Área limpa com sucesso. Retorna ClearAreaResponse (indicando sucesso ou detalhes de falha na limpeza). 3. Criar ou Atualizar Plano de Voo (Upsert) Rota: PUT /flight_plans/{flight_plan_id} Simula a intenção de um usuário de enviar um plano de voo novo ou atualizado. Escopo Exigido: interuss.flight_planning.plan Parâmetros de Rota: flight_plan_id (obrigatório) - UUID formato v4. Ex: 03e5572a-f733-49af-bc14-8a18bd53ee39 Corpo da Requisição: Requer o objeto UpsertFlightPlanRequest . Respostas Esperadas: 200 OK: Dados processados com sucesso. Retorna UpsertFlightPlanResponse com o status do planejamento ( Completed , Rejected , Failed , etc). 409 Conflict: Conflito de request_id duplicado ou outra condição de conflito. 4. Fechar/Deletar Plano de Voo Rota: DELETE /flight_plans/{flight_plan_id} Permite que o diretor de testes instrua o USS a remover um plano de voo que não é mais necessário para os testes. Escopo Exigido: interuss.flight_planning.direct_automated_test Parâmetros de Rota: flight_plan_id (obrigatório). Respostas Esperadas: 200 OK: Plano de voo deletado com sucesso. Retorna DeleteFlightPlanResponse . 404 Not Found: Plano de voo não encontrado (já pode ter sido deletado). 5. Consultar Notificações de Usuário Rota: GET /user_notifications Retorna a lista de notificações observadas pelo usuário virtual. Devem estar disponíveis para consulta em até 5 segundos após a observação. Escopo Exigido: interuss.flight_planning.plan Parâmetros de Query: * after (obrigatório): Limite inferior de tempo. before (opcional): Limite superior de tempo (padrão é o momento atual). Respostas Esperadas: 200 OK: Notificações recuperadas. 400 Bad Request: Parâmetros de tempo ausentes ou inválidos. Payload de Exemplo (JSON) Formato simplificado esperado para a criação/atualização de um plano de voo ( PUT /flight_plans/{flight_plan_id} ): JSON { "request_id": "b5a9b837-1234-4a2b-9876-c5096a295a12", "execution_style": "IfAllowed", "flight_plan": { "basic_information": { "usage_state": "Planned", "description": "Medical supplies delivery operated by Example Drone Company", "utm_id": "ae1fa066-6d68-4018-8274-af867966978e", "area": [ { "volume": { "outline_polygon": { "vertices": [ { "lat": -23.179, "lng": -45.887 }, { "lat": -23.180, "lng": -45.888 } ] }, "altitude_lower": { "value": 0, "reference": "W84", "units": "M" }, "altitude_upper": { "value": 120, "reference": "W84", "units": "M" } }, "time_start": { "value": "2024-04-22T16:30:00Z", "format": "RFC3339" }, "time_end": { "value": "2024-04-22T17:30:00Z", "format": "RFC3339" } } ] } } } Versioning Automated Testing Interface (v0.1.2) Esta interface é fornecida por um USS (UAS Service Supplier) que deseja fornecer informações sobre a(s) versão(ões) do seu software para destinatários autorizados de maneira automatizada. Segurança (Autenticação) Tipo: OAuth2 (Client Credentials) Escopo Necessário: interuss.versioning.read_system_versions Descrição: Permite que o cliente leia a(s) versão(ões) do software do USS implantado neste ambiente. O token JWT deve ser enviado no header Authorization: Bearer . Endpoints 1. Consultar Versão do Sistema (System Version) Rota: GET /versions/{system_identity} Obtém a versão do sistema solicitado com base em seu identificador de limite (system boundary). Parâmetros de Rota: system_identity (obrigatório) - Um identificador de limite de sistema conhecido tanto pelo cliente quanto pelo USS. O valor deve ser URL-safe (geralmente estruturado em ordem reversa de domínio, similar a pacotes Java). Exemplo: gov.eu.uspace.v1.netid ou gov.au.casa.operating_rules.v2_6 . Respostas Esperadas: 200 OK: A interface forneceu com sucesso a versão do sistema/limite solicitado. Retorna o schema GetVersionResponse . 401 Unauthorized: Token ausente, não decodificado ou inválido. 403 Forbidden: O token foi decodificado com sucesso, mas não inclui o escopo apropriado para este endpoint. 404 Not Found: A identidade/limite do sistema solicitada não é conhecida, ou a interface de automação de versão não está disponível. Payload de Exemplo (JSON) Exemplo de Resposta de Versão ( GET /versions/{system_identity} ) Formato esperado retornando a identidade do sistema solicitado e sua versão atual (preferencialmente utilizando controle de versão semântico). JSON { "system_identity": "gov.au.casa.operating_rules.v2_6", "system_version": "v2.19.53117-rc8+d3a7521f" }