Skip to content

Commit

Permalink
Homogenize fake URLs (#798)
Browse files Browse the repository at this point in the history
  • Loading branch information
BenjaminPelletier authored Oct 2, 2024
1 parent 6f762b1 commit 8f2dc53
Show file tree
Hide file tree
Showing 41 changed files with 185 additions and 100 deletions.
6 changes: 6 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,9 @@ If the test scenario is long, note that the documentation does not need to be cr
### Scenario implementation

Once all necessary prerequisites (e.g., resources) are available and the test scenario documentation is complete, actually writing the code of the test scenario should be fairly straightforward. Before creating a PR, the test scenario code must at least have been successfully tested by the developer. Ideally, a test configuration included in the CI (see list of configurations tested in [uss_qualifier's run_locally.sh](monitoring/uss_qualifier/run_locally.sh)) should run the test scenario. If the test scenario is not run as part of the CI, the PR author must clearly indicate why they are sure the test scenario has been implemented correctly.

#### Fake URLs

In some tests, fake URLs must be provided (for instance, the base URL when creating an operational intent reference in a DSS instance when the details for that operational intent reference will not actually be served by any USS). In all cases when such fake URLs are provided, they should use the value obtained (or would be obtained) from `make_fake_url` in [monitorlib/testing.py](./monitoring/monitorlib/testing.py). If the fake URL is specified in a data file rather than a Python file, it should follow the format of `https://testdummy.interuss.org/interuss` followed by the path of the file (minus extension) relative to the repository root; e.g., `https://testdummy.interuss.org/interuss/monitoring/uss_qualifier/configurations/dev/f3548_self_contained` if the URL was defined in [uss_qualifier/configurations/dev/f3548_self_contained.yaml](./monitoring/uss_qualifier/configurations/dev/f3548_self_contained.yaml). One or more suffix paths can be appended if multiple different fake URLs are needed in the same originating file; e.g., `https://testdummy.interuss.org/interuss/monitoring/uss_qualifier/configurations/dev/f3548_self_contained/planning_area/original`

This convention allows a user to more easily determine where a stray resource/link (e.g., operational intent reference) originated if/when it is encountered outside its intended test.
6 changes: 4 additions & 2 deletions monitoring/loadtest/locust_files/ISA.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
from monitoring.prober.rid.v1 import common
from locust import task, between

from monitoring.monitorlib.testing import make_fake_url


class ISA(client.USS):
wait_time = between(0.01, 1)
Expand All @@ -34,7 +36,7 @@ def create_isa(self):
"time_start": time_start.strftime(rid_v1.DATE_FORMAT),
"time_end": time_end.strftime(rid_v1.DATE_FORMAT),
},
"flights_url": "https://example.interuss.org/dss",
"flights_url": make_fake_url(),
},
)
if resp.status_code == 200:
Expand Down Expand Up @@ -63,7 +65,7 @@ def update_isa(self):
"time_start": time_start.strftime(rid_v1.DATE_FORMAT),
"time_end": time_end.strftime(rid_v1.DATE_FORMAT),
},
"flights_url": "https://example.interuss.org/dss",
"flights_url": make_fake_url(),
},
)
if resp.status_code == 200:
Expand Down
10 changes: 4 additions & 6 deletions monitoring/loadtest/locust_files/Sub.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
from monitoring.monitorlib import rid_v1
from locust import task, between

from monitoring.monitorlib.testing import make_fake_url


class Sub(client.USS):
wait_time = between(0.01, 1)
Expand Down Expand Up @@ -42,9 +44,7 @@ def create_sub(self):
"time_start": time_start.strftime(rid_v1.DATE_FORMAT),
"time_end": time_end.strftime(rid_v1.DATE_FORMAT),
},
"callbacks": {
"identification_service_area_url": "https://example.interuss.org/foo"
},
"callbacks": {"identification_service_area_url": make_fake_url()},
},
)
if resp.status_code == 200:
Expand Down Expand Up @@ -83,9 +83,7 @@ def update_sub(self):
"time_start": time_start.strftime(rid_v1.DATE_FORMAT),
"time_end": time_end.strftime(rid_v1.DATE_FORMAT),
},
"callbacks": {
"identification_service_area_url": "https://example.interuss.org/foo"
},
"callbacks": {"identification_service_area_url": make_fake_url()},
},
)
if resp.status_code == 200:
Expand Down
25 changes: 25 additions & 0 deletions monitoring/monitorlib/testing.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
import inspect
import os
from typing import Optional

from monitoring.monitorlib.formatting import make_datetime


Expand All @@ -11,3 +15,24 @@ def assert_datetimes_are_equal(t1, t2, tolerance_seconds: float = 0) -> None:
assert t1_datetime == t2_datetime
else:
assert abs((t1_datetime - t2_datetime).total_seconds()) < tolerance_seconds


def make_fake_url(suffix: Optional[str] = None, frames_above: int = 1) -> str:
"""Create a dummy URL revealing the location from which this function was called.
The URL generated is a function solely of the file from which this function is called and the provided suffix.
Args:
suffix: String to append to the end of the URL (e.g., "uss/v1")
frames_above: Number of stack frames above this function that the source of this URL is.
"""

layers = os.path.splitext(inspect.stack()[frames_above].filename)[0].split(
os.path.sep
)
layers = [layer for layer in layers if layer]
if "monitoring" in layers:
layers = layers[layers.index("monitoring") :]
if suffix is not None:
layers.append(suffix)
return "https://testdummy.interuss.org/interuss/" + "/".join(layers)
4 changes: 2 additions & 2 deletions monitoring/prober/scd/resources/op_missing_initial.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -463,7 +463,7 @@ extents:
value: 18.288000000000004
old_version: 0
state: 'Accepted'
uss_base_url: 'https://example.interuss.org'
uss_base_url: 'https://testdummy.interuss.org/interuss/monitoring/prober/scd/resources/op_missing_initial'
new_subscription:
uss_base_url: 'https://example.interuss.org'
uss_base_url: 'https://testdummy.interuss.org/interuss/monitoring/prober/scd/resources/op_missing_initial'
notify_for_constraints: false
Original file line number Diff line number Diff line change
Expand Up @@ -1223,7 +1223,7 @@ extents:
value: 18.288000000000004
old_version: 0
state: 'Accepted'
uss_base_url: 'https://example.interuss.org'
uss_base_url: 'https://testdummy.interuss.org/interuss/monitoring/prober/scd/resources/op_missing_preexisting_unknown'
new_subscription:
uss_base_url: 'https://example.interuss.org'
uss_base_url: 'https://testdummy.interuss.org/interuss/monitoring/prober/scd/resources/op_missing_preexisting_unknown'
notify_for_constraints: false
13 changes: 8 additions & 5 deletions monitoring/prober/scd/test_constraint_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
SCOPE_CM_SA,
SCOPE_AA,
)
from monitoring.monitorlib.testing import assert_datetimes_are_equal
from monitoring.monitorlib.testing import (
assert_datetimes_are_equal,
make_fake_url,
)
from monitoring.prober.infrastructure import (
depends_on,
for_api_versions,
Expand All @@ -32,7 +35,7 @@
import pytest


BASE_URL = "https://example.interuss.org/uss"
BASE_URL = make_fake_url()
CONSTRAINT_TYPE = register_resource_type(1, "Single constraint")


Expand Down Expand Up @@ -304,7 +307,7 @@ def test_mutate_constraint(ids, scd_api, scd_session):
"key": [existing_constraint["ovn"]],
"extents": req["extents"],
"old_version": existing_constraint["version"],
"uss_base_url": "https://example.interuss.org/uss2",
"uss_base_url": make_fake_url("uss2"),
}

ovn = existing_constraint["ovn"]
Expand Down Expand Up @@ -337,7 +340,7 @@ def test_mutate_constraint(ids, scd_api, scd_session):
data = resp.json()
constraint = data["constraint_reference"]
assert constraint["id"] == id
assert constraint["uss_base_url"] == "https://example.interuss.org/uss2"
assert constraint["uss_base_url"] == make_fake_url("uss2")
assert constraint["uss_availability"] == "Unknown"
assert constraint["version"] == 2

Expand All @@ -357,7 +360,7 @@ def test_delete_constraint(ids, scd_api, scd_session):
"key": [existing_constraint["ovn"]],
"extents": req["extents"],
"old_version": existing_constraint["version"],
"uss_base_url": "https://example.interuss.org/uss2",
"uss_base_url": make_fake_url("uss2"),
}

ovn = existing_constraint["ovn"]
Expand Down
11 changes: 6 additions & 5 deletions monitoring/prober/scd/test_constraints_with_subscriptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,16 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_CM, SCOPE_SC, SCOPE_CP
from monitoring.monitorlib.testing import make_fake_url
from monitoring.prober.infrastructure import for_api_versions, register_resource_type
from monitoring.prober.scd import actions


CONSTRAINT_BASE_URL_1 = "https://example.interuss.org/con1/uss"
CONSTRAINT_BASE_URL_2 = "https://example.interuss.org/con2/uss"
CONSTRAINT_BASE_URL_3 = "https://example.interuss.org/con3/uss"
SUB_BASE_URL_A = "https://example.interuss.org/sub1/uss"
SUB_BASE_URL_B = "https://example.interuss.org/sub2/uss"
CONSTRAINT_BASE_URL_1 = make_fake_url("con1/uss")
CONSTRAINT_BASE_URL_2 = make_fake_url("con2/uss")
CONSTRAINT_BASE_URL_3 = make_fake_url("con3/uss")
SUB_BASE_URL_A = make_fake_url("sub1/uss")
SUB_BASE_URL_B = make_fake_url("sub2/uss")

CONSTRAINT_TYPE = register_resource_type(2, "Single constraint")
SUB1_TYPE = register_resource_type(3, "Constraint subscription 1")
Expand Down
11 changes: 7 additions & 4 deletions monitoring/prober/scd/test_operation_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_SC, SCOPE_CM, SCOPE_CP
from monitoring.monitorlib.testing import assert_datetimes_are_equal
from monitoring.monitorlib.testing import (
assert_datetimes_are_equal,
make_fake_url,
)
from monitoring.prober.infrastructure import (
depends_on,
for_api_versions,
Expand All @@ -24,7 +27,7 @@
from monitoring.prober.scd import actions


BASE_URL = "https://example.interuss.org/uss"
BASE_URL = make_fake_url()
OP_TYPE = register_resource_type(341, "Operational intent")


Expand Down Expand Up @@ -372,7 +375,7 @@ def test_mutate_op(ids, scd_api, scd_session, scd_session_cp, scd_session_cm):
"extents": req["extents"],
"old_version": existing_op["version"],
"state": "Activated",
"uss_base_url": "https://example.interuss.org/uss2",
"uss_base_url": make_fake_url("uss2"),
"subscription_id": existing_op["subscription_id"],
}

Expand Down Expand Up @@ -402,7 +405,7 @@ def test_mutate_op(ids, scd_api, scd_session, scd_session_cp, scd_session_cm):
data = resp.json()
op = data["operational_intent_reference"]
assert op["id"] == ids(OP_TYPE)
assert op["uss_base_url"] == "https://example.interuss.org/uss2"
assert op["uss_base_url"] == make_fake_url("uss2")
assert op["version"] == 2
assert op["subscription_id"] == existing_op["subscription_id"]
# assert 'state' not in op
Expand Down
11 changes: 7 additions & 4 deletions monitoring/prober/scd/test_operation_simple_heavy_traffic.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,18 @@
from monitoring.monitorlib.geotemporal import Volume4D
from monitoring.monitorlib.scd import SCOPE_SC
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib.testing import assert_datetimes_are_equal
from monitoring.monitorlib.testing import (
assert_datetimes_are_equal,
make_fake_url,
)
from monitoring.prober.infrastructure import (
for_api_versions,
register_resource_type,
)
from monitoring.prober.scd import actions


BASE_URL = "https://example.interuss.org/uss"
BASE_URL = make_fake_url()
OP_TYPES = [
register_resource_type(10 + i, "Operational intent {}".format(i)) for i in range(20)
]
Expand Down Expand Up @@ -259,7 +262,7 @@ def test_mutate_ops(ids, scd_api, scd_session):
"extents": req["extents"],
"old_version": existing_op["version"],
"state": "Activated",
"uss_base_url": "https://example.interuss.org/uss2",
"uss_base_url": make_fake_url("uss2"),
"subscription_id": existing_op["subscription_id"],
}

Expand All @@ -273,7 +276,7 @@ def test_mutate_ops(ids, scd_api, scd_session):
data = resp.json()
op = data["operational_intent_reference"]
assert op["id"] == op_id
assert op["uss_base_url"] == "https://example.interuss.org/uss2"
assert op["uss_base_url"] == make_fake_url("uss2")
assert op["uss_availability"] == "Unknown"
assert op["version"] != existing_op["version"]
assert op["subscription_id"] == existing_op["subscription_id"]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,10 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_SC
from monitoring.monitorlib.testing import assert_datetimes_are_equal
from monitoring.monitorlib.testing import (
assert_datetimes_are_equal,
make_fake_url,
)
from monitoring.prober.infrastructure import (
depends_on,
for_api_versions,
Expand All @@ -32,7 +35,7 @@
from monitoring.prober.scd import actions


BASE_URL = "https://example.interuss.org/uss"
BASE_URL = make_fake_url()
# TODO(#742): Increase number of concurrent operations from 20 to 100
OP_TYPES = [
register_resource_type(110 + i, "Operational intent {}".format(i))
Expand Down Expand Up @@ -210,7 +213,7 @@ def _build_mutate_request(idx, op_id, op_map, scd_session, scd_api):
"extents": req["extents"],
"old_version": existing_op["version"],
"state": "Activated",
"uss_base_url": "https://example.interuss.org/uss2",
"uss_base_url": make_fake_url("uss2"),
"subscription_id": existing_op["subscription_id"],
}
return req
Expand Down Expand Up @@ -458,7 +461,7 @@ def test_mutate_ops_concurrent(ids, scd_api, scd_session, scd_session_async):
data = resp["content"]
op = data["operational_intent_reference"]
assert op["id"] == op_id
assert op["uss_base_url"] == "https://example.interuss.org/uss2"
assert op["uss_base_url"] == make_fake_url("uss2")
assert op["version"] == 2
assert op["subscription_id"] == existing_op["subscription_id"]

Expand Down
3 changes: 2 additions & 1 deletion monitoring/prober/scd/test_operation_special_cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_SC
from monitoring.monitorlib.testing import make_fake_url
from monitoring.prober.infrastructure import for_api_versions, register_resource_type
from monitoring.prober.scd import actions

Expand Down Expand Up @@ -118,7 +119,7 @@ def test_id_conversion_bug(ids, scd_api, scd_session):
"time_end": {"value": time_end.isoformat() + "Z", "format": "RFC3339"},
},
"old_version": 0,
"uss_base_url": "https://example.interuss.org/uss/v1/",
"uss_base_url": make_fake_url("uss/v1/"),
"notify_for_constraints": True,
}
resp = scd_session.put("/subscriptions/{}".format(sub_uuid), json=req)
Expand Down
13 changes: 8 additions & 5 deletions monitoring/prober/scd/test_operations_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,18 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_SC
from monitoring.monitorlib.testing import assert_datetimes_are_equal
from monitoring.monitorlib.testing import (
assert_datetimes_are_equal,
make_fake_url,
)
from monitoring.prober.infrastructure import for_api_versions, register_resource_type
from monitoring.prober.scd import actions


URL_OP1 = "https://example.interuss.org/op1/dss"
URL_SUB1 = "https://example.interuss.org/subs1/dss"
URL_OP2 = "https://example.interuss.org/op2/dss"
URL_SUB2 = "https://example.interuss.org/subs2/dss"
URL_OP1 = make_fake_url("op1")
URL_SUB1 = make_fake_url("subs1")
URL_OP2 = make_fake_url("op2")
URL_SUB2 = make_fake_url("subs2")

OP1_TYPE = register_resource_type(213, "Operational intent 1")
OP2_TYPE = register_resource_type(214, "Operational intent 2")
Expand Down
7 changes: 4 additions & 3 deletions monitoring/prober/scd/test_subscription_queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_SC
from monitoring.monitorlib.testing import make_fake_url
from monitoring.prober.infrastructure import for_api_versions, register_resource_type
from monitoring.prober.scd import actions

Expand All @@ -36,7 +37,7 @@ def _make_sub1_req(scd_api):
"extents": Volume4D.from_values(
None, time_end, 0, 300, Circle.from_meters(lat, LNG0, 100)
).to_f3548v21(),
"uss_base_url": "https://example.interuss.org/foo",
"uss_base_url": make_fake_url(),
"notify_for_constraints": False,
}
req.update({"notify_for_operational_intents": True})
Expand All @@ -51,7 +52,7 @@ def _make_sub2_req(scd_api):
time_start, time_end, 350, 650, Circle.from_meters(LAT0, LNG0, 100)
).to_f3548v21(),
"old_version": 0,
"uss_base_url": "https://example.interuss.org/foo",
"uss_base_url": make_fake_url(),
"notify_for_operations": True,
"notify_for_constraints": False,
}
Expand All @@ -67,7 +68,7 @@ def _make_sub3_req(scd_api):
"extents": Volume4D.from_values(
time_start, time_end, 700, 1000, Circle.from_meters(lat, LNG0, 100)
).to_f3548v21(),
"uss_base_url": "https://example.interuss.org/foo",
"uss_base_url": make_fake_url(),
"notify_for_constraints": False,
}
req.update({"notify_for_operational_intents": True})
Expand Down
3 changes: 2 additions & 1 deletion monitoring/prober/scd/test_subscription_query_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,10 @@
from monitoring.monitorlib.infrastructure import default_scope
from monitoring.monitorlib import scd
from monitoring.monitorlib.scd import SCOPE_SC
from monitoring.monitorlib.testing import make_fake_url
from monitoring.prober.infrastructure import for_api_versions, register_resource_type

BASE_URL = "https://example.interuss.org/uss"
BASE_URL = make_fake_url()

SUB_TYPE = register_resource_type(219, "Subscription")

Expand Down
Loading

0 comments on commit 8f2dc53

Please sign in to comment.