From b02aba153a2bb37b3c980574a6053ec7b6052e60 Mon Sep 17 00:00:00 2001 From: Neelam Kushwah Date: Mon, 3 Jun 2024 12:21:49 -0400 Subject: [PATCH 1/2] Add linting and formatting checks --- .github/ruff.toml | 38 ++++++++++++++++++++++++++++++++ .github/workflows/lint.yml | 44 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 .github/ruff.toml create mode 100644 .github/workflows/lint.yml diff --git a/.github/ruff.toml b/.github/ruff.toml new file mode 100644 index 0000000..31e1118 --- /dev/null +++ b/.github/ruff.toml @@ -0,0 +1,38 @@ +# ruff.toml + +line-length = 120 + +# Exclude specific files or directories. +exclude = [ + "build/", + "dist/", + ".venv/", + "__pycache__/", + "uprotocol/cloudevent/cloudevents_pb2.py" +] + +[lint] +# Enable all basic PEP 8 checks and other common linting rules. +select = [ + "E", # PEP 8 rules (formatting issues) + "F", # Pyflakes rules (undefined names, etc.) + "W", # Additional PEP 8 rules (warning-level issues) + "I", # Import order checker (ensuring imports are ordered correctly) + "ERA", # flake8-eradicate (identifying commented-out code) + "N" # Naming convention rules +] + +ignore = [ + "F811", # Ignore the error for multimethod function +] + +[lint.flake8-annotations] +allow-star-arg-any = true + +[format] +quote-style = "preserve" +indent-style = "space" +docstring-code-format = true +docstring-code-line-length = 100 + + diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 0000000..81cd2ed --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,44 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +name: Run Linter + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +permissions: + contents: read + +jobs: + deploy: + + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + + - name: Set up Python + uses: actions/setup-python@v3 + with: + python-version: '3.x' + + - name: Install Dependencies + run: | + python -m pip install --upgrade pip + python -m pip install ruff + + - name: Lint Python Code with Ruff + run: | + ruff check --config .github/ruff.toml + + - name: Check Python Code Formatting with Ruff + run: | + ruff format --check --config .github/ruff.toml + From c6b5f80d2df844c92d3734d4f622626ad99cac53 Mon Sep 17 00:00:00 2001 From: Neelam Kushwah Date: Tue, 4 Jun 2024 01:05:19 -0400 Subject: [PATCH 2/2] Address linting issues identified by Ruff --- .github/ruff.toml | 5 +- clean_project.py | 2 +- scripts/pull_and_compile_protos.py | 32 +- .../test_datamodel/test_ucloudevent.py | 162 +++----- .../test_ucloudeventattributes.py | 137 ++----- .../test_factory/cloudevent.json | 4 +- .../test_factory/test_cloudeventfactory.py | 138 ++----- .../cloudevent_to_protobuf.json | 4 +- .../test_base64protobufserializer.py | 4 +- .../test_cloudeventtojsonserializer.py | 31 +- .../test_cloudeventtoprotobufserializer.py | 53 +-- .../test_cloudeventvalidator.py | 67 +--- .../test_validator/test_validationresult.py | 6 +- tests/test_rpc/test_calloptions.py | 4 +- tests/test_rpc/test_rpc.py | 163 +++----- tests/test_rpc/test_rpcresult.py | 125 +++---- .../test_builder/test_uattributesbuilder.py | 83 ++--- .../test_builder/test_upayloadbuilder.py | 16 +- tests/test_transport/test_utransport.py | 16 +- .../test_uattributesvalidator.py | 350 +++++------------- ...tity_factory.py => test_uentityfactory.py} | 41 +- ...ce_builder.py => test_uresourcebuilder.py} | 14 +- .../test_serializer/test_ipaddress.py | 16 +- .../test_serializer/test_longuriserializer.py | 135 +++---- .../test_microuriserializer.py | 85 ++--- .../test_shorturiserializer.py | 10 +- .../test_serializer/test_uriserializer.py | 158 +++----- .../test_validator/test_urivalidator.py | 151 ++------ .../test_factory/test_uuidfactory.py | 38 +- .../test_uuid/test_factory/test_uuidutils.py | 38 +- .../test_validator/test_uuidvalidator.py | 20 +- uprotocol/cloudevent/cloudevents_pb2.py | 2 +- .../datamodel/ucloudeventattributes.py | 21 +- .../cloudevent/factory/cloudeventfactory.py | 7 +- uprotocol/cloudevent/factory/ucloudevent.py | 104 ++---- .../serialize/base64protobufserializer.py | 3 +- .../serialize/cloudeventserializer.py | 4 +- .../serialize/cloudeventserializers.py | 4 +- .../serialize/cloudeventtojsonserializer.py | 3 +- .../cloudeventtoprotobufserializer.py | 5 +- .../validate/cloudeventvalidator.py | 84 ++--- uprotocol/rpc/rpcclient.py | 13 +- uprotocol/rpc/rpcmapper.py | 45 +-- uprotocol/rpc/rpcresult.py | 69 ++-- .../transport/builder/uattributesbuilder.py | 43 +-- .../transport/builder/upayloadbuilder.py | 11 +- uprotocol/transport/ulistener.py | 3 +- uprotocol/transport/utransport.py | 7 +- .../validate/uattributesvalidator.py | 67 +--- .../{uentity_factory.py => uentityfactory.py} | 39 +- ...esource_builder.py => uresourcebuilder.py} | 31 +- uprotocol/uri/serializer/ipaddress.py | 16 +- uprotocol/uri/serializer/longuriserializer.py | 41 +- .../uri/serializer/microuriserializer.py | 41 +- .../uri/serializer/shorturiserializer.py | 28 +- uprotocol/uri/serializer/uriserializer.py | 4 +- uprotocol/uri/validator/urivalidator.py | 56 +-- uprotocol/uuid/factory/__init__.py | 9 +- uprotocol/uuid/factory/uuidfactory.py | 12 +- uprotocol/uuid/factory/uuidutils.py | 56 +-- .../uuid/serializer/longuuidserializer.py | 15 +- .../uuid/serializer/microuuidserializer.py | 11 +- uprotocol/uuid/serializer/uuidserializer.py | 5 +- uprotocol/uuid/validate/uuidvalidator.py | 11 +- uprotocol/validation/validationresult.py | 6 +- 65 files changed, 947 insertions(+), 2037 deletions(-) rename tests/test_uri/test_factory/{test_uentity_factory.py => test_uentityfactory.py} (80%) rename tests/test_uri/test_factory/{test_uresource_builder.py => test_uresourcebuilder.py} (89%) rename uprotocol/uri/factory/{uentity_factory.py => uentityfactory.py} (61%) rename uprotocol/uri/factory/{uresource_builder.py => uresourcebuilder.py} (78%) diff --git a/.github/ruff.toml b/.github/ruff.toml index 31e1118..9f91e69 100644 --- a/.github/ruff.toml +++ b/.github/ruff.toml @@ -8,7 +8,8 @@ exclude = [ "dist/", ".venv/", "__pycache__/", - "uprotocol/cloudevent/cloudevents_pb2.py" + "uprotocol/cloudevent/cloudevents_pb2.py", + "uprotocol/proto/*" ] [lint] @@ -34,5 +35,3 @@ quote-style = "preserve" indent-style = "space" docstring-code-format = true docstring-code-line-length = 100 - - diff --git a/clean_project.py b/clean_project.py index 399da8a..0f0c265 100644 --- a/clean_project.py +++ b/clean_project.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional diff --git a/scripts/pull_and_compile_protos.py b/scripts/pull_and_compile_protos.py index 0f3ed40..bf459de 100644 --- a/scripts/pull_and_compile_protos.py +++ b/scripts/pull_and_compile_protos.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -34,16 +34,16 @@ PROTO_OUTPUT_DIR = os.path.abspath("../uprotocol/proto") -def clone_or_pull(repo_url, PROTO_REPO_DIR): +def clone_or_pull(repo_url, proto_repo_dir): try: - repo = Repo.clone_from(repo_url, PROTO_REPO_DIR) - print(f"Repository cloned successfully from {repo_url} to {PROTO_REPO_DIR}") + repo = Repo.clone_from(repo_url, proto_repo_dir) + print(f"Repository cloned successfully from {repo_url} to {proto_repo_dir}") # Checkout the specific tag repo.git.checkout(TAG_NAME) except git.exc.GitCommandError: try: git_pull_command = ["git", "pull", "origin", TAG_NAME] - subprocess.run(git_pull_command, cwd=PROTO_REPO_DIR, check=True) + subprocess.run(git_pull_command, cwd=proto_repo_dir, check=True) print("Git pull successful after clone failure.") except subprocess.CalledProcessError as pull_error: print(f"Error during Git pull: {pull_error}") @@ -51,8 +51,14 @@ def clone_or_pull(repo_url, PROTO_REPO_DIR): def execute_maven_command(project_dir, command): try: - with subprocess.Popen(command, cwd=os.path.join(os.getcwd(), project_dir), shell=True, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, text=True) as process: + with subprocess.Popen( + command, + cwd=os.path.join(os.getcwd(), project_dir), + shell=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + text=True, + ) as process: stdout, stderr = process.communicate() print(stdout) @@ -60,10 +66,9 @@ def execute_maven_command(project_dir, command): print(f"Error: {stderr}") else: print("Maven command executed successfully.") - src_directory = os.path.join(os.getcwd(), project_dir, "target", "generated-sources", "protobuf", - "python") - # if not os.path.exists(PROTO_OUTPUT_DIR): - # os.makedirs(PROTO_OUTPUT_DIR) + src_directory = os.path.join( + os.getcwd(), project_dir, "target", "generated-sources", "protobuf", "python" + ) shutil.copytree(src_directory, PROTO_OUTPUT_DIR, dirs_exist_ok=True) process_python_protofiles(PROTO_OUTPUT_DIR) @@ -89,8 +94,9 @@ def process_python_protofiles(directory): file_path = os.path.join(root, file) replace_in_file(file_path, r'import uri_pb2', 'import uprotocol.proto.uri_pb2') replace_in_file(file_path, r'import uuid_pb2', 'import uprotocol.proto.uuid_pb2') - replace_in_file(file_path, r'import uprotocol_options_pb2', - 'import uprotocol.proto.uprotocol_options_pb2') + replace_in_file( + file_path, r'import uprotocol_options_pb2', 'import uprotocol.proto.uprotocol_options_pb2' + ) replace_in_file(file_path, r'import uattributes_pb2', 'import uprotocol.proto.uattributes_pb2') replace_in_file(file_path, r'import upayload_pb2', 'import uprotocol.proto.upayload_pb2') replace_in_file(file_path, r'import ustatus_pb2', 'import uprotocol.proto.ustatus_pb2') diff --git a/tests/test_cloudevent/test_datamodel/test_ucloudevent.py b/tests/test_cloudevent/test_datamodel/test_ucloudevent.py index b6024f0..a73ef4f 100644 --- a/tests/test_cloudevent/test_datamodel/test_ucloudevent.py +++ b/tests/test_cloudevent/test_datamodel/test_ucloudevent.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,26 +20,25 @@ SPDX-License-Identifier: Apache-2.0 """ -from datetime import datetime, timezone - -from uprotocol.proto.uri_pb2 import UUri, UEntity, UResource -from uprotocol.uri.serializer.longuriserializer import LongUriSerializer -from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent -from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority -from uprotocol.proto.upayload_pb2 import UPayloadFormat -from uprotocol.cloudevent.factory.cloudeventfactory import CloudEventFactory -from uprotocol.proto.ustatus_pb2 import UCode -from uprotocol.uuid.factory.uuidfactory import Factories -from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer import time import unittest +from datetime import datetime, timezone from google.protobuf import any_pb2 +from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( UCloudEventAttributesBuilder, ) +from uprotocol.cloudevent.factory.cloudeventfactory import CloudEventFactory from uprotocol.cloudevent.factory.ucloudevent import UCloudEvent +from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority +from uprotocol.proto.upayload_pb2 import UPayloadFormat +from uprotocol.proto.uri_pb2 import UEntity, UResource, UUri +from uprotocol.proto.ustatus_pb2 import UCode +from uprotocol.uri.serializer.longuriserializer import LongUriSerializer +from uprotocol.uuid.factory.uuidfactory import Factories +from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer def build_uri_for_test(): @@ -133,18 +132,18 @@ def test_extract_sink_from_cloudevent_when_sink_does_not_exist(self): cloud_event = build_cloud_event_for_test() self.assertEqual(None, UCloudEvent.get_sink(cloud_event)) - def test_extract_requestId_from_cloudevent_when_requestId_exists(self): + def test_extract_request_id_from_cloudevent_when_request_id_exists(self): cloud_event = build_cloud_event_for_test() cloud_event.__setitem__("reqid", "somereqid") self.assertEqual("somereqid", UCloudEvent.get_request_id(cloud_event)) - def test_extract_requestId_from_cloudevent_when_requestId_does_not_exist( + def test_extract_request_id_from_cloudevent_when_request_id_does_not_exist( self, ): cloud_event = build_cloud_event_for_test() self.assertEqual(None, UCloudEvent.get_request_id(cloud_event)) - def test_extract_requestId_from_cloudevent_when_requestId_value_is_null( + def test_extract_request_id_from_cloudevent_when_request_id_value_is_null( self, ): cloud_event = build_cloud_event_for_test() @@ -176,9 +175,7 @@ def test_extract_priority_from_cloudevent_when_priority_does_not_exist( def test_extract_ttl_from_cloudevent_when_ttl_exists(self): cloud_event = build_cloud_event_for_test() - self.assertEqual( - UCode.INVALID_ARGUMENT, UCloudEvent.get_ttl(cloud_event) - ) + self.assertEqual(UCode.INVALID_ARGUMENT, UCloudEvent.get_ttl(cloud_event)) def test_extract_ttl_from_cloudevent_when_ttl_does_not_exists(self): cloud_event = build_cloud_event_for_test() @@ -197,26 +194,20 @@ def test_extract_token_from_cloudevent_when_token_does_not_exists(self): def test_cloudevent_has_platform_error_when_platform_error_exists(self): cloud_event = build_cloud_event_for_test() cloud_event.__setitem__("commstatus", UCode.ABORTED) - self.assertEqual( - UCode.ABORTED, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.ABORTED, UCloudEvent.get_communication_status(cloud_event)) def test_cloudevent_has_platform_error_when_platform_error_does_not_exist( self, ): cloud_event = build_cloud_event_for_test() - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) def test_extract_platform_error_from_cloudevent_when_platform_error_exists_in_wrong_format( self, ): cloud_event = build_cloud_event_for_test() cloud_event.__setitem__("commstatus", "boom") - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) def test_extract_platform_error_from_cloudevent_when_platform_error_exists( self, @@ -232,25 +223,17 @@ def test_extract_platform_error_from_cloudevent_when_platform_error_does_not_exi self, ): cloud_event = build_cloud_event_for_test() - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) def test_adding_platform_error_to_existing_cloudevent( self, ): cloud_event = build_cloud_event_for_test() - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) - cloud_event_1 = UCloudEvent.add_communication_status( - cloud_event, UCode.DEADLINE_EXCEEDED - ) + cloud_event_1 = UCloudEvent.add_communication_status(cloud_event, UCode.DEADLINE_EXCEEDED) - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) self.assertEqual( UCode.DEADLINE_EXCEEDED, @@ -261,33 +244,27 @@ def test_adding_empty_platform_error_to_existing_cloudevent( self, ): cloud_event = build_cloud_event_for_test() - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) cloud_event_1 = UCloudEvent.add_communication_status(cloud_event, None) - self.assertEqual( - UCode.OK, UCloudEvent.get_communication_status(cloud_event) - ) + self.assertEqual(UCode.OK, UCloudEvent.get_communication_status(cloud_event)) self.assertEqual(cloud_event, cloud_event_1) - def test_extract_creation_timestamp_from_cloudevent_UUID_Id_when_not_a_UUIDV8_id( + def test_extract_creation_timestamp_from_cloudevent_uuid_id_when_not_a_uuid_v8_id( self, ): cloud_event = build_cloud_event_for_test() self.assertEqual(None, UCloudEvent.get_creation_timestamp(cloud_event)) - def test_extract_creation_timestamp_from_cloudevent_UUIDV8_Id_when_UUIDV8_id_is_valid( + def test_extract_creation_timestamp_from_cloudevent_uuid_v8_id_when_uuid_v8_id_is_valid( self, ): uuid = Factories.UPROTOCOL.create() str_uuid = LongUuidSerializer.instance().serialize(uuid) cloud_event = build_cloud_event_for_test_with_id(str_uuid) - maybe_creation_timestamp = UCloudEvent.get_creation_timestamp( - cloud_event - ) + maybe_creation_timestamp = UCloudEvent.get_creation_timestamp(cloud_event) self.assertIsNotNone(maybe_creation_timestamp) creation_timestamp = maybe_creation_timestamp / 1000 @@ -297,31 +274,23 @@ def test_extract_creation_timestamp_from_cloudevent_UUIDV8_Id_when_UUIDV8_id_is_ def test_cloudevent_is_not_expired_cd_when_no_ttl_configured(self): cloud_event = build_cloud_event_for_test() cloud_event.__delitem__("ttl") - self.assertFalse( - UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event) - ) + self.assertFalse(UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event)) def test_cloudevent_is_not_expired_cd_when_ttl_is_zero(self): cloud_event = build_cloud_event_for_test() cloud_event.__setitem__("ttl", 0) - self.assertFalse( - UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event) - ) + self.assertFalse(UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event)) def test_cloudevent_is_not_expired_cd_when_ttl_is_minus_one(self): cloud_event = build_cloud_event_for_test() cloud_event.__setitem__("ttl", -1) - self.assertFalse( - UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event) - ) + self.assertFalse(UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event)) def test_cloudevent_is_expired_cd_when_ttl_is_one(self): cloud_event = build_cloud_event_for_test() cloud_event.__setitem__("ttl", 1) time.sleep(0.002) - self.assertTrue( - UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event) - ) + self.assertTrue(UCloudEvent.is_expired_by_cloud_event_creation_date(cloud_event)) def test_cloudevent_is_expired_when_ttl_1_mili(self): uuid = Factories.UPROTOCOL.create() @@ -338,7 +307,7 @@ def test_cloudevent_is_expired_for_invalid_uuid(self): cloud_event.__setitem__("id", "") self.assertFalse(UCloudEvent.is_expired(cloud_event)) - def test_cloudevent_has_a_UUIDV8_id(self): + def test_cloudevent_has_a_uuid_v8_id(self): uuid = Factories.UPROTOCOL.create() str_uuid = LongUuidSerializer.instance().serialize(uuid) cloud_event = build_cloud_event_for_test() @@ -348,17 +317,14 @@ def test_cloudevent_has_a_UUIDV8_id(self): def test_to_message_with_valid_event(self): # additional attributes u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_priority(UPriority.UPRIORITY_CS2) - .with_ttl(3) - .build() + UCloudEventAttributesBuilder().with_priority(UPriority.UPRIORITY_CS2).with_ttl(3).build() ) cloud_event = CloudEventFactory.publish( build_uri_for_test(), build_proto_payload_for_test(), u_cloud_event_attributes, ) - u_message = UCloudEvent.toMessage(cloud_event) + u_message = UCloudEvent.to_message(cloud_event) self.assertIsNotNone(u_message) def test_from_message_with_valid_message(self): @@ -375,9 +341,9 @@ def test_from_message_with_valid_message(self): build_proto_payload_for_test(), u_cloud_event_attributes, ) - u_message = UCloudEvent.toMessage(cloud_event) + u_message = UCloudEvent.to_message(cloud_event) self.assertIsNotNone(u_message) - cloud_event1 = UCloudEvent.fromMessage(u_message) + cloud_event1 = UCloudEvent.from_message(u_message) self.assertIsNotNone(cloud_event1) cloud_event.__delitem__("time") cloud_event1.__delitem__("time") @@ -395,9 +361,7 @@ def test_from_message_with_valid_message(self): UCloudEvent.get_priority(cloud_event), UCloudEvent.get_priority(cloud_event1), ) - self.assertEqual( - UCloudEvent.get_id(cloud_event), UCloudEvent.get_id(cloud_event1) - ) + self.assertEqual(UCloudEvent.get_id(cloud_event), UCloudEvent.get_id(cloud_event1)) self.assertEqual( UCloudEvent.get_type(cloud_event), UCloudEvent.get_type(cloud_event1), @@ -420,14 +384,10 @@ def test_to_from_message_from_request_cloudevent(self): build_proto_payload_for_test(), u_cloud_event_attributes, ) - result = UCloudEvent.toMessage(cloud_event) + result = UCloudEvent.to_message(cloud_event) self.assertIsNotNone(result) - self.assertEqual( - UCloudEvent.get_ttl(cloud_event), result.attributes.ttl - ) - self.assertEqual( - UCloudEvent.get_token(cloud_event), result.attributes.token - ) + self.assertEqual(UCloudEvent.get_ttl(cloud_event), result.attributes.ttl) + self.assertEqual(UCloudEvent.get_token(cloud_event), result.attributes.token) self.assertEqual( UCloudEvent.get_sink(cloud_event), LongUriSerializer().serialize(result.attributes.sink), @@ -445,7 +405,7 @@ def test_to_from_message_from_request_cloudevent(self): UPriority.Name(result.attributes.priority), ) - cloud_event1 = UCloudEvent.fromMessage(result) + cloud_event1 = UCloudEvent.from_message(result) cloud_event.__delitem__("time") cloud_event1.__delitem__("time") self.assertEqual(cloud_event, cloud_event1) @@ -466,9 +426,7 @@ def test_to_from_message_from_request_cloudevent(self): UCloudEvent.get_priority(cloud_event), UCloudEvent.get_priority(cloud_event1), ) - self.assertEqual( - UCloudEvent.get_id(cloud_event), UCloudEvent.get_id(cloud_event1) - ) + self.assertEqual(UCloudEvent.get_id(cloud_event), UCloudEvent.get_id(cloud_event1)) self.assertEqual( UCloudEvent.get_type(cloud_event), UCloudEvent.get_type(cloud_event1), @@ -489,7 +447,7 @@ def test_to_from_message_from_request_cloudevent_without_attributes(self): build_proto_payload_for_test(), u_cloud_event_attributes, ) - result = UCloudEvent.toMessage(cloud_event) + result = UCloudEvent.to_message(cloud_event) self.assertIsNotNone(result) self.assertFalse(result.attributes.HasField("ttl")) self.assertEqual( @@ -506,7 +464,7 @@ def test_to_from_message_from_request_cloudevent_without_attributes(self): ) self.assertEqual(result.attributes.priority, 0) - cloud_event1 = UCloudEvent.fromMessage(result) + cloud_event1 = UCloudEvent.from_message(result) self.assertEqual(cloud_event.get_data(), cloud_event1.get_data()) self.assertEqual( UCloudEvent.get_source(cloud_event), @@ -524,9 +482,7 @@ def test_to_from_message_from_request_cloudevent_without_attributes(self): UCloudEvent.get_priority(cloud_event), UCloudEvent.get_priority(cloud_event1), ) - self.assertEqual( - UCloudEvent.get_id(cloud_event), UCloudEvent.get_id(cloud_event1) - ) + self.assertEqual(UCloudEvent.get_id(cloud_event), UCloudEvent.get_id(cloud_event1)) self.assertEqual( UCloudEvent.get_type(cloud_event), UCloudEvent.get_type(cloud_event1), @@ -536,14 +492,9 @@ def test_to_from_message_from_request_cloudevent_without_attributes(self): UCloudEvent.get_request_id(cloud_event1), ) - def test_to_from_message_from_UCP_cloudevent(self): + def test_to_from_message_from_ucp_cloudevent(self): # additional attributes - u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_ttl(3) - .with_token("someOAuthToken") - .build() - ) + u_cloud_event_attributes = UCloudEventAttributesBuilder().with_ttl(3).with_token("someOAuthToken").build() cloud_event = CloudEventFactory.request( build_uri_for_test(), @@ -556,10 +507,10 @@ def test_to_from_message_from_UCP_cloudevent(self): cloud_event.__setitem__("commstatus", 16) cloud_event.__setitem__("permission_level", 4) - result = UCloudEvent.toMessage(cloud_event) + result = UCloudEvent.to_message(cloud_event) self.assertIsNotNone(result) self.assertEqual(UPriority.UPRIORITY_CS4, result.attributes.priority) - cloud_event1 = UCloudEvent.fromMessage(result) + cloud_event1 = UCloudEvent.from_message(result) self.assertEqual( UCloudEvent.get_priority(cloud_event1), UPriority.Name(result.attributes.priority), @@ -567,16 +518,11 @@ def test_to_from_message_from_UCP_cloudevent(self): def test_from_message_with_null_message(self): with self.assertRaises(ValueError) as context: - UCloudEvent.fromMessage(None) + UCloudEvent.from_message(None) self.assertTrue("message cannot be null." in context.exception) def test_cloud_event_to_string(self): - u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_ttl(3) - .with_token("someOAuthToken") - .build() - ) + u_cloud_event_attributes = UCloudEventAttributesBuilder().with_ttl(3).with_token("someOAuthToken").build() cloud_event = CloudEventFactory.request( build_uri_for_test(), @@ -596,12 +542,10 @@ def test_cloud_event_to_string_none(self): self.assertEqual(cloud_event_string, "null") def test_get_upayload_format_from_content_type(self): - new_format = UCloudEvent().get_upayload_format_from_content_type( - "application/json" - ) + new_format = UCloudEvent().get_upayload_format_from_content_type("application/json") self.assertEqual(new_format, UPayloadFormat.UPAYLOAD_FORMAT_JSON) def test_to_message_none_entry(self): with self.assertRaises(ValueError) as context: - UCloudEvent().toMessage(None) + UCloudEvent().to_message(None) self.assertTrue("Cloud Event can't be None" in context.exception) diff --git a/tests/test_cloudevent/test_datamodel/test_ucloudeventattributes.py b/tests/test_cloudevent/test_datamodel/test_ucloudeventattributes.py index b05136e..14925a4 100644 --- a/tests/test_cloudevent/test_datamodel/test_ucloudeventattributes.py +++ b/tests/test_cloudevent/test_datamodel/test_ucloudeventattributes.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -23,14 +23,13 @@ import unittest from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( - UCloudEventAttributesBuilder, UCloudEventAttributes, + UCloudEventAttributesBuilder, ) from uprotocol.proto.uattributes_pb2 import UPriority class TestUCloudEventAttributes(unittest.TestCase): - def test_to_string(self): u_cloud_event_attributes = ( UCloudEventAttributesBuilder() @@ -56,25 +55,17 @@ def test_create_valid_with_blank_traceparent(self): ) self.assertTrue(u_cloud_event_attributes.get_hash() is not None) self.assertEqual("somehash", u_cloud_event_attributes.get_hash()) - self.assertFalse( - u_cloud_event_attributes.get_traceparent() is not None - ) + self.assertFalse(u_cloud_event_attributes.get_traceparent() is not None) def test_create_empty_with_only_traceparent(self): - u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_traceparent("someTraceParent") - .build() - ) + u_cloud_event_attributes = UCloudEventAttributesBuilder().with_traceparent("someTraceParent").build() self.assertFalse(u_cloud_event_attributes.get_hash() is not None) self.assertFalse(u_cloud_event_attributes.get_priority() is not None) self.assertFalse(u_cloud_event_attributes.get_token() is not None) self.assertFalse(u_cloud_event_attributes.get_ttl() is not None) self.assertTrue(u_cloud_event_attributes.get_traceparent() is not None) self.assertFalse(u_cloud_event_attributes.is_empty()) - self.assertEqual( - "someTraceParent", u_cloud_event_attributes.get_traceparent() - ) + self.assertEqual("someTraceParent", u_cloud_event_attributes.get_traceparent()) def test_create_valid(self): u_cloud_event_attributes = ( @@ -92,9 +83,7 @@ def test_create_valid(self): u_cloud_event_attributes.get_priority(), ) self.assertEqual(3, u_cloud_event_attributes.get_ttl()) - self.assertEqual( - "someOAuthToken", u_cloud_event_attributes.get_token() - ) + self.assertEqual("someOAuthToken", u_cloud_event_attributes.get_token()) def test_is_empty_function(self): u_cloud_event_attributes = UCloudEventAttributes.empty() @@ -104,12 +93,7 @@ def test_is_empty_function(self): self.assertTrue(u_cloud_event_attributes.ttl is None) def test_is_empty_function_when_built_with_blank_strings(self): - u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) + u_cloud_event_attributes = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() self.assertTrue(u_cloud_event_attributes.is_empty()) self.assertTrue(u_cloud_event_attributes.hash.isspace()) self.assertTrue(u_cloud_event_attributes.priority is None) @@ -117,114 +101,43 @@ def test_is_empty_function_when_built_with_blank_strings(self): self.assertTrue(u_cloud_event_attributes.ttl is None) def test_is_empty_function_permutations(self): - u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) + u_cloud_event_attributes = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() self.assertTrue(u_cloud_event_attributes.is_empty()) - u_cloud_event_attributes2 = ( - UCloudEventAttributesBuilder() - .with_hash("someHash") - .with_token(" ") - .build() - ) + u_cloud_event_attributes2 = UCloudEventAttributesBuilder().with_hash("someHash").with_token(" ").build() self.assertFalse(u_cloud_event_attributes2.is_empty()) - u_cloud_event_attributes3 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token("SomeToken") - .build() - ) + u_cloud_event_attributes3 = UCloudEventAttributesBuilder().with_hash(" ").with_token("SomeToken").build() self.assertFalse(u_cloud_event_attributes3.is_empty()) - u_cloud_event_attributes4 = ( - UCloudEventAttributesBuilder() - .with_priority(UPriority.UPRIORITY_CS0) - .build() - ) + u_cloud_event_attributes4 = UCloudEventAttributesBuilder().with_priority(UPriority.UPRIORITY_CS0).build() self.assertFalse(u_cloud_event_attributes4.is_empty()) - u_cloud_event_attributes5 = ( - UCloudEventAttributesBuilder().with_ttl(8).build() - ) + u_cloud_event_attributes5 = UCloudEventAttributesBuilder().with_ttl(8).build() self.assertFalse(u_cloud_event_attributes5.is_empty()) def test__eq__is_same(self): - u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) - self.assertTrue( - u_cloud_event_attributes.__eq__(u_cloud_event_attributes) - ) + u_cloud_event_attributes = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() + self.assertTrue(u_cloud_event_attributes.__eq__(u_cloud_event_attributes)) def test__eq__is_equal(self): - u_cloud_event_attributes_1 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) - u_cloud_event_attributes_2 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) - self.assertTrue( - u_cloud_event_attributes_1.__eq__(u_cloud_event_attributes_2) - ) + u_cloud_event_attributes_1 = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() + u_cloud_event_attributes_2 = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() + self.assertTrue(u_cloud_event_attributes_1.__eq__(u_cloud_event_attributes_2)) def test__eq__is_not_equal(self): - u_cloud_event_attributes_1 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) - u_cloud_event_attributes_2 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token("12345") - .build() - ) - self.assertFalse( - u_cloud_event_attributes_1.__eq__(u_cloud_event_attributes_2) - ) + u_cloud_event_attributes_1 = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() + u_cloud_event_attributes_2 = UCloudEventAttributesBuilder().with_hash(" ").with_token("12345").build() + self.assertFalse(u_cloud_event_attributes_1.__eq__(u_cloud_event_attributes_2)) def test__hash__same(self): - u_cloud_event_attributes_1 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) - self.assertEqual( - hash(u_cloud_event_attributes_1), hash(u_cloud_event_attributes_1) - ) + u_cloud_event_attributes_1 = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() + self.assertEqual(hash(u_cloud_event_attributes_1), hash(u_cloud_event_attributes_1)) def test__hash__different(self): - u_cloud_event_attributes_1 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token(" ") - .build() - ) - u_cloud_event_attributes_2 = ( - UCloudEventAttributesBuilder() - .with_hash(" ") - .with_token("12345") - .build() - ) - self.assertNotEqual( - hash(u_cloud_event_attributes_1), hash(u_cloud_event_attributes_2) - ) + u_cloud_event_attributes_1 = UCloudEventAttributesBuilder().with_hash(" ").with_token(" ").build() + u_cloud_event_attributes_2 = UCloudEventAttributesBuilder().with_hash(" ").with_token("12345").build() + self.assertNotEqual(hash(u_cloud_event_attributes_1), hash(u_cloud_event_attributes_2)) if __name__ == "__main__": diff --git a/tests/test_cloudevent/test_factory/cloudevent.json b/tests/test_cloudevent/test_factory/cloudevent.json index a11e728..2e70355 100644 --- a/tests/test_cloudevent/test_factory/cloudevent.json +++ b/tests/test_cloudevent/test_factory/cloudevent.json @@ -77,7 +77,7 @@ "priority": "UPRIORITY_CS2", "ttl": 3, "hash": "somehash", - "reqid": "requestIdFromRequestCloudEvent", + "reqid": "request_idFromRequestCloudEvent", "sink": "/body.access//door.front_left#Door", "test_detail": "test_create_response_cloud_event_originating_from_local_use" }, @@ -90,7 +90,7 @@ "priority": "UPRIORITY_CS2", "ttl": 3, "hash": "somehash", - "reqid": "requestIdFromRequestCloudEvent", + "reqid": "request_idFromRequestCloudEvent", "sink": "/body.access//door.front_left#Door", "commstatus": 3, "test_detail": "test_create_a_failed_response_cloud_event" diff --git a/tests/test_cloudevent/test_factory/test_cloudeventfactory.py b/tests/test_cloudevent/test_factory/test_cloudeventfactory.py index 7e31431..d328030 100644 --- a/tests/test_cloudevent/test_factory/test_cloudeventfactory.py +++ b/tests/test_cloudevent/test_factory/test_cloudeventfactory.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,14 +20,16 @@ SPDX-License-Identifier: Apache-2.0 """ - -import unittest import json import os +import unittest + from google.protobuf import any_pb2 + +from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( - UCloudEventAttributesBuilder, UCloudEventAttributes, + UCloudEventAttributesBuilder, ) from uprotocol.cloudevent.factory.cloudeventfactory import CloudEventFactory from uprotocol.cloudevent.factory.ucloudevent import UCloudEvent @@ -37,11 +39,9 @@ from uprotocol.cloudevent.serialize.cloudeventtojsonserializer import ( CloudEventToJsonSerializer, ) -from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority -from uprotocol.proto.uri_pb2 import UUri, UEntity, UResource +from uprotocol.proto.uri_pb2 import UEntity, UResource, UUri from uprotocol.proto.ustatus_pb2 import UCode - from uprotocol.uri.serializer.longuriserializer import LongUriSerializer @@ -89,42 +89,24 @@ class TestCloudEventFactory(unittest.TestCase): def test_all_cloud_events_from_json(self): cloudevents = get_json_object() for ce_json in cloudevents: - bytes_ce = Base64ProtobufSerializer().serialize( - ce_json["serialized_ce"] - ) + bytes_ce = Base64ProtobufSerializer().serialize(ce_json["serialized_ce"]) cloudevent = CloudEventToJsonSerializer().deserialize(bytes_ce) self.assertEqual(UCloudEvent.get_id(cloudevent), ce_json["id"]) - self.assertEqual( - UCloudEvent.get_specversion(cloudevent), ce_json["specversion"] - ) + self.assertEqual(UCloudEvent.get_specversion(cloudevent), ce_json["specversion"]) if "source" in ce_json: - self.assertEqual( - UCloudEvent.get_source(cloudevent), ce_json["source"] - ) + self.assertEqual(UCloudEvent.get_source(cloudevent), ce_json["source"]) if "sink" in ce_json: - self.assertEqual( - UCloudEvent.get_sink(cloudevent), ce_json["sink"] - ) + self.assertEqual(UCloudEvent.get_sink(cloudevent), ce_json["sink"]) if "type" in ce_json: - self.assertEqual( - UCloudEvent.get_type(cloudevent), ce_json["type"] - ) + self.assertEqual(UCloudEvent.get_type(cloudevent), ce_json["type"]) if "priority" in ce_json: - self.assertEqual( - UCloudEvent.get_priority(cloudevent), ce_json["priority"] - ) + self.assertEqual(UCloudEvent.get_priority(cloudevent), ce_json["priority"]) if "ttl" in ce_json: - self.assertEqual( - UCloudEvent.get_ttl(cloudevent), ce_json["ttl"] - ) + self.assertEqual(UCloudEvent.get_ttl(cloudevent), ce_json["ttl"]) if "hash" in ce_json: - self.assertEqual( - UCloudEvent.get_hash(cloudevent), ce_json["hash"] - ) + self.assertEqual(UCloudEvent.get_hash(cloudevent), ce_json["hash"]) if "token" in ce_json: - self.assertEqual( - UCloudEvent.get_token(cloudevent), ce_json["token"] - ) + self.assertEqual(UCloudEvent.get_token(cloudevent), ce_json["token"]) if "dataschema" in ce_json: self.assertEqual( UCloudEvent.get_data_schema(cloudevent), @@ -180,12 +162,8 @@ def test_create_base_cloud_event(self): ) self.assertEqual(3, UCloudEvent.get_ttl(cloud_event)) self.assertEqual("someOAuthToken", UCloudEvent.get_token(cloud_event)) - self.assertEqual( - "sometraceparent", UCloudEvent.get_traceparent(cloud_event) - ) - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual("sometraceparent", UCloudEvent.get_traceparent(cloud_event)) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_base_cloud_event_with_datacontenttype_and_schema(self): source = build_uri_for_test() @@ -213,9 +191,7 @@ def test_create_base_cloud_event_with_datacontenttype_and_schema(self): UCloudEvent.get_event_type(UMessageType.UMESSAGE_TYPE_PUBLISH), ) - cloud_event.__setitem__( - "datacontenttype", CloudEventFactory.PROTOBUF_CONTENT_TYPE - ) + cloud_event.__setitem__("datacontenttype", CloudEventFactory.PROTOBUF_CONTENT_TYPE) cloud_event.__setitem__("dataschema", proto_payload.type_url) # test all attributes @@ -230,9 +206,7 @@ def test_create_base_cloud_event_with_datacontenttype_and_schema(self): self.DATA_CONTENT_TYPE, UCloudEvent.get_data_content_type(cloud_event), ) - self.assertEqual( - proto_payload.type_url, UCloudEvent.get_data_schema(cloud_event) - ) + self.assertEqual(proto_payload.type_url, UCloudEvent.get_data_schema(cloud_event)) self.assertNotIn("sink", cloud_event.get_attributes()) self.assertEqual("somehash", UCloudEvent.get_hash(cloud_event)) self.assertEqual( @@ -241,9 +215,7 @@ def test_create_base_cloud_event_with_datacontenttype_and_schema(self): ) self.assertEqual(3, UCloudEvent.get_ttl(cloud_event)) self.assertEqual("someOAuthToken", UCloudEvent.get_token(cloud_event)) - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_base_cloud_event_without_attributes(self): source = build_uri_for_test() @@ -277,9 +249,7 @@ def test_create_base_cloud_event_without_attributes(self): self.assertNotIn("hash", cloud_event.get_attributes()) self.assertNotIn("priority", cloud_event.get_attributes()) self.assertNotIn("ttl", cloud_event.get_attributes()) - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_publish_cloud_event(self): # source @@ -297,9 +267,7 @@ def test_create_publish_cloud_event(self): .build() ) - cloud_event = CloudEventFactory.publish( - source, proto_payload, u_cloud_event_attributes - ) + cloud_event = CloudEventFactory.publish(source, proto_payload, u_cloud_event_attributes) # test all attributes self.assertEqual("1.0", UCloudEvent.get_specversion(cloud_event)) @@ -317,9 +285,7 @@ def test_create_publish_cloud_event(self): ) self.assertEqual(3, UCloudEvent.get_ttl(cloud_event)) - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_notification_cloud_event(self): # source @@ -342,9 +308,7 @@ def test_create_notification_cloud_event(self): ) # build the cloud event of type publish with destination - a notification - cloud_event = CloudEventFactory.notification( - source, sink, proto_payload, u_cloud_event_attributes - ) + cloud_event = CloudEventFactory.notification(source, sink, proto_payload, u_cloud_event_attributes) # test all attributes self.assertEqual("1.0", UCloudEvent.get_specversion(cloud_event)) @@ -365,9 +329,7 @@ def test_create_notification_cloud_event(self): ) self.assertEqual(3, UCloudEvent.get_ttl(cloud_event)) - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_request_cloud_event_from_local_use(self): # UriPart for the application requesting the RPC @@ -401,9 +363,7 @@ def test_create_request_cloud_event_from_local_use(self): # test all attributes self.assertEqual("1.0", UCloudEvent.get_specversion(cloud_event)) self.assertIsNotNone(UCloudEvent.get_id(cloud_event)) - self.assertEqual( - application_uri_for_rpc, UCloudEvent.get_source(cloud_event) - ) + self.assertEqual(application_uri_for_rpc, UCloudEvent.get_source(cloud_event)) self.assertIn("sink", cloud_event.get_attributes()) self.assertEqual(service_method_uri, UCloudEvent.get_sink(cloud_event)) @@ -417,9 +377,7 @@ def test_create_request_cloud_event_from_local_use(self): self.assertEqual(3, UCloudEvent.get_ttl(cloud_event)) self.assertEqual("someOAuthToken", UCloudEvent.get_token(cloud_event)) - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_response_cloud_event_originating_from_local_use(self): # UriPart for the application requesting the RPC @@ -444,7 +402,7 @@ def test_create_response_cloud_event_originating_from_local_use(self): cloud_event = CloudEventFactory.response( application_uri_for_rpc, service_method_uri, - "requestIdFromRequestCloudEvent", + "request_idFromRequestCloudEvent", proto_payload, u_cloud_event_attributes, ) @@ -452,14 +410,10 @@ def test_create_response_cloud_event_originating_from_local_use(self): # test all attributes self.assertEqual("1.0", UCloudEvent.get_specversion(cloud_event)) self.assertIsNotNone(UCloudEvent.get_id(cloud_event)) - self.assertEqual( - service_method_uri, UCloudEvent.get_source(cloud_event) - ) + self.assertEqual(service_method_uri, UCloudEvent.get_source(cloud_event)) self.assertIn("sink", cloud_event.get_attributes()) - self.assertEqual( - application_uri_for_rpc, UCloudEvent.get_sink(cloud_event) - ) + self.assertEqual(application_uri_for_rpc, UCloudEvent.get_sink(cloud_event)) self.assertEqual("res.v1", UCloudEvent.get_type(cloud_event)) self.assertEqual("somehash", UCloudEvent.get_hash(cloud_event)) @@ -470,14 +424,12 @@ def test_create_response_cloud_event_originating_from_local_use(self): self.assertEqual(3, UCloudEvent.get_ttl(cloud_event)) self.assertEqual( - "requestIdFromRequestCloudEvent", + "request_idFromRequestCloudEvent", UCloudEvent.get_request_id(cloud_event), ) # Use assertEqual to compare byte arrays - self.assertEqual( - proto_payload.SerializeToString(), cloud_event.get_data() - ) + self.assertEqual(proto_payload.SerializeToString(), cloud_event.get_data()) def test_create_failed_response_cloud_event_originating_from_local_use( self, @@ -501,7 +453,7 @@ def test_create_failed_response_cloud_event_originating_from_local_use( cloud_event = CloudEventFactory.failed_response( application_uri_for_rpc, service_method_uri, - "requestIdFromRequestCloudEvent", + "request_idFromRequestCloudEvent", UCode.INVALID_ARGUMENT, u_cloud_event_attributes, ) @@ -509,14 +461,10 @@ def test_create_failed_response_cloud_event_originating_from_local_use( # test all attributes self.assertEqual("1.0", UCloudEvent.get_specversion(cloud_event)) self.assertIsNotNone(UCloudEvent.get_id(cloud_event)) - self.assertEqual( - service_method_uri, UCloudEvent.get_source(cloud_event) - ) + self.assertEqual(service_method_uri, UCloudEvent.get_source(cloud_event)) self.assertIn("sink", cloud_event.get_attributes()) - self.assertEqual( - application_uri_for_rpc, UCloudEvent.get_sink(cloud_event) - ) + self.assertEqual(application_uri_for_rpc, UCloudEvent.get_sink(cloud_event)) self.assertEqual("res.v1", UCloudEvent.get_type(cloud_event)) self.assertEqual("somehash", UCloudEvent.get_hash(cloud_event)) @@ -531,7 +479,7 @@ def test_create_failed_response_cloud_event_originating_from_local_use( ) self.assertEqual( - "requestIdFromRequestCloudEvent", + "request_idFromRequestCloudEvent", UCloudEvent.get_request_id(cloud_event), ) @@ -557,7 +505,7 @@ def test_create_failed_response_cloud_event_originating_from_remote_use( cloud_event = CloudEventFactory.failed_response( application_uri_for_rpc, service_method_uri, - "requestIdFromRequestCloudEvent", + "request_idFromRequestCloudEvent", UCode.INVALID_ARGUMENT, u_cloud_event_attributes, ) @@ -565,14 +513,10 @@ def test_create_failed_response_cloud_event_originating_from_remote_use( # test all attributes self.assertEqual("1.0", UCloudEvent.get_specversion(cloud_event)) self.assertIsNotNone(UCloudEvent.get_id(cloud_event)) - self.assertEqual( - service_method_uri, UCloudEvent.get_source(cloud_event) - ) + self.assertEqual(service_method_uri, UCloudEvent.get_source(cloud_event)) self.assertIn("sink", cloud_event.get_attributes()) - self.assertEqual( - application_uri_for_rpc, UCloudEvent.get_sink(cloud_event) - ) + self.assertEqual(application_uri_for_rpc, UCloudEvent.get_sink(cloud_event)) self.assertEqual("res.v1", UCloudEvent.get_type(cloud_event)) self.assertEqual("somehash", UCloudEvent.get_hash(cloud_event)) @@ -587,7 +531,7 @@ def test_create_failed_response_cloud_event_originating_from_remote_use( ) self.assertEqual( - "requestIdFromRequestCloudEvent", + "request_idFromRequestCloudEvent", UCloudEvent.get_request_id(cloud_event), ) diff --git a/tests/test_cloudevent/test_serialize/cloudevent_to_protobuf.json b/tests/test_cloudevent/test_serialize/cloudevent_to_protobuf.json index bd10a51..35f9c50 100644 --- a/tests/test_cloudevent/test_serialize/cloudevent_to_protobuf.json +++ b/tests/test_cloudevent/test_serialize/cloudevent_to_protobuf.json @@ -65,7 +65,7 @@ "priority": "UPRIORITY_CS2", "ttl": 3, "hash": "somehash", - "reqid": "requestIdFromRequestCloudEvent", + "reqid": "request_idFromRequestCloudEvent", "sink": "/body.access//door.front_left#Door", "test_detail": "test_create_response_cloud_event_originating_from_local_use" }, @@ -78,7 +78,7 @@ "priority": "UPRIORITY_CS2", "ttl": 3, "hash": "somehash", - "reqid": "requestIdFromRequestCloudEvent", + "reqid": "request_idFromRequestCloudEvent", "sink": "/body.access//door.front_left#Door", "commstatus": 3, "test_detail": "test_create_a_failed_response_cloud_event" diff --git a/tests/test_cloudevent/test_serialize/test_base64protobufserializer.py b/tests/test_cloudevent/test_serialize/test_base64protobufserializer.py index 6c0835c..e036085 100644 --- a/tests/test_cloudevent/test_serialize/test_base64protobufserializer.py +++ b/tests/test_cloudevent/test_serialize/test_base64protobufserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( @@ -36,7 +35,6 @@ class TestBase64ProtobufSerializer(unittest.TestCase): - def test_deserialize_bytes_to_string(self): ce = CloudEventFactory.build_base_cloud_event( "hello", diff --git a/tests/test_cloudevent/test_serialize/test_cloudeventtojsonserializer.py b/tests/test_cloudevent/test_serialize/test_cloudeventtojsonserializer.py index 975d452..7f5540d 100644 --- a/tests/test_cloudevent/test_serialize/test_cloudeventtojsonserializer.py +++ b/tests/test_cloudevent/test_serialize/test_cloudeventtojsonserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,11 +20,11 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest from google.protobuf import any_pb2 +from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( UCloudEventAttributesBuilder, ) @@ -33,10 +33,9 @@ from uprotocol.cloudevent.serialize.cloudeventserializers import ( CloudEventSerializers, ) -from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent -from uprotocol.proto.uattributes_pb2 import UPriority, UMessageType +from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority -protoContentType = CloudEventFactory.PROTOBUF_CONTENT_TYPE +PROTO_CONTENT_TYPE = CloudEventFactory.PROTOBUF_CONTENT_TYPE serializer = CloudEventSerializers.JSON.serializer() @@ -56,15 +55,11 @@ def build_proto_payload_for_test(): class TestCloudEventToJsonSerializer(unittest.TestCase): - def test_serialize_cloud_event_to_json(self): proto_payload = build_proto_payload_for_test() # additional attributes u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_priority(UPriority.UPRIORITY_CS1) - .with_ttl(3) - .build() + UCloudEventAttributesBuilder().with_priority(UPriority.UPRIORITY_CS1).with_ttl(3).build() ) # build the cloud event @@ -76,7 +71,7 @@ def test_serialize_cloud_event_to_json(self): u_cloud_event_attributes, UCloudEvent.get_event_type(UMessageType.UMESSAGE_TYPE_PUBLISH), ) - cloud_event.__setitem__("datacontenttype", protoContentType) + cloud_event.__setitem__("datacontenttype", PROTO_CONTENT_TYPE) cloud_event.__setitem__("dataschema", proto_payload.type_url) cloud_event.__delitem__("time") bytes_data = serializer.serialize(cloud_event) @@ -95,10 +90,7 @@ def test_serialize_and_deserialize_cloud_event_to_json(self): proto_payload = build_proto_payload_for_test() # additional attributes u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_priority(UPriority.UPRIORITY_CS1) - .with_ttl(3) - .build() + UCloudEventAttributesBuilder().with_priority(UPriority.UPRIORITY_CS1).with_ttl(3).build() ) # build the cloud event @@ -110,7 +102,7 @@ def test_serialize_and_deserialize_cloud_event_to_json(self): u_cloud_event_attributes, UCloudEvent.get_event_type(UMessageType.UMESSAGE_TYPE_PUBLISH), ) - cloud_event.__setitem__("datacontenttype", protoContentType) + cloud_event.__setitem__("datacontenttype", PROTO_CONTENT_TYPE) cloud_event.__setitem__("dataschema", proto_payload.type_url) cloud_event.__delitem__("time") serialized_data = serializer.serialize(cloud_event) @@ -125,10 +117,7 @@ def test_double_serialization_protobuf_when_creating_cloud_event_with_factory_me proto_payload = build_proto_payload_for_test() # additional attributes u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_priority(UPriority.UPRIORITY_CS1) - .with_ttl(3) - .build() + UCloudEventAttributesBuilder().with_priority(UPriority.UPRIORITY_CS1).with_ttl(3).build() ) # build the cloud event @@ -140,7 +129,7 @@ def test_double_serialization_protobuf_when_creating_cloud_event_with_factory_me u_cloud_event_attributes, UCloudEvent.get_event_type(UMessageType.UMESSAGE_TYPE_PUBLISH), ) - cloud_event1.__setitem__("datacontenttype", protoContentType) + cloud_event1.__setitem__("datacontenttype", PROTO_CONTENT_TYPE) cloud_event1.__setitem__("dataschema", proto_payload.type_url) cloud_event1.__delitem__("time") serialized_data1 = serializer.serialize(cloud_event1) diff --git a/tests/test_cloudevent/test_serialize/test_cloudeventtoprotobufserializer.py b/tests/test_cloudevent/test_serialize/test_cloudeventtoprotobufserializer.py index 0062cdf..08212d6 100644 --- a/tests/test_cloudevent/test_serialize/test_cloudeventtoprotobufserializer.py +++ b/tests/test_cloudevent/test_serialize/test_cloudeventtoprotobufserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -27,6 +27,7 @@ from cloudevents.http import CloudEvent as ApacheCloudEvent from google.protobuf import any_pb2 +from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( UCloudEventAttributesBuilder, ) @@ -41,9 +42,8 @@ from uprotocol.cloudevent.serialize.cloudeventtoprotobufserializer import ( CloudEventToProtobufSerializer, ) -from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent -from uprotocol.proto.uattributes_pb2 import UPriority, UMessageType -from uprotocol.proto.uri_pb2 import UUri, UEntity, UResource +from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority +from uprotocol.proto.uri_pb2 import UEntity, UResource, UUri from uprotocol.uri.serializer.longuriserializer import LongUriSerializer serializer = CloudEventSerializers.PROTOBUF.serializer() @@ -88,46 +88,27 @@ def get_json_object(): class TestCloudEventToProtobufSerializer(unittest.TestCase): - def test_all_cloud_events_from_json(self): cloudevents = get_json_object() for ce_json in cloudevents: - bytes_ce = Base64ProtobufSerializer().serialize( - ce_json["serialized_ce"] - ) + bytes_ce = Base64ProtobufSerializer().serialize(ce_json["serialized_ce"]) cloudevent = CloudEventToProtobufSerializer().deserialize(bytes_ce) self.assertEqual(UCloudEvent.get_id(cloudevent), ce_json["id"]) - self.assertEqual( - UCloudEvent.get_specversion(cloudevent), ce_json["specversion"] - ) + self.assertEqual(UCloudEvent.get_specversion(cloudevent), ce_json["specversion"]) if "source" in ce_json: - self.assertEqual( - UCloudEvent.get_source(cloudevent), ce_json["source"] - ) + self.assertEqual(UCloudEvent.get_source(cloudevent), ce_json["source"]) if "sink" in ce_json: - self.assertEqual( - UCloudEvent.get_sink(cloudevent), ce_json["sink"] - ) + self.assertEqual(UCloudEvent.get_sink(cloudevent), ce_json["sink"]) if "type" in ce_json: - self.assertEqual( - UCloudEvent.get_type(cloudevent), ce_json["type"] - ) + self.assertEqual(UCloudEvent.get_type(cloudevent), ce_json["type"]) if "priority" in ce_json: - self.assertEqual( - UCloudEvent.get_priority(cloudevent), ce_json["priority"] - ) + self.assertEqual(UCloudEvent.get_priority(cloudevent), ce_json["priority"]) if "ttl" in ce_json: - self.assertEqual( - UCloudEvent.get_ttl(cloudevent), ce_json["ttl"] - ) + self.assertEqual(UCloudEvent.get_ttl(cloudevent), ce_json["ttl"]) if "hash" in ce_json: - self.assertEqual( - UCloudEvent.get_hash(cloudevent), ce_json["hash"] - ) + self.assertEqual(UCloudEvent.get_hash(cloudevent), ce_json["hash"]) if "token" in ce_json: - self.assertEqual( - UCloudEvent.get_token(cloudevent), ce_json["token"] - ) + self.assertEqual(UCloudEvent.get_token(cloudevent), ce_json["token"]) if "dataschema" in ce_json: self.assertEqual( UCloudEvent.get_data_schema(cloudevent), @@ -179,9 +160,7 @@ def test_serialize_two_different_cloud_event_are_not_the_same(self): "source": "/body.access/1/door.front_left", "type": "pub.v1", } - cloud_event1 = ApacheCloudEvent( - json_attributes1, proto_payload.SerializeToString() - ) + cloud_event1 = ApacheCloudEvent(json_attributes1, proto_payload.SerializeToString()) cloud_event1.__setitem__("datacontenttype", "application/protobuf") cloud_event1.__setitem__("dataschema", proto_payload.type_url) cloud_event1.__delitem__("time") @@ -190,9 +169,7 @@ def test_serialize_two_different_cloud_event_are_not_the_same(self): "source": "/body.access/1/door.front_left", "type": "file.v1", } - cloud_event2 = ApacheCloudEvent( - json_attributes2, proto_payload.SerializeToString() - ) + cloud_event2 = ApacheCloudEvent(json_attributes2, proto_payload.SerializeToString()) cloud_event2.__delitem__("time") serialized1 = serializer.serialize(cloud_event1) serialized2 = serializer.serialize(cloud_event2) diff --git a/tests/test_cloudevent/test_validator/test_cloudeventvalidator.py b/tests/test_cloudevent/test_validator/test_cloudeventvalidator.py index eb56773..683fd40 100644 --- a/tests/test_cloudevent/test_validator/test_cloudeventvalidator.py +++ b/tests/test_cloudevent/test_validator/test_cloudeventvalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,11 +20,11 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest from google.protobuf import any_pb2 +from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent from uprotocol.cloudevent.datamodel.ucloudeventattributes import ( UCloudEventAttributesBuilder, ) @@ -34,9 +34,8 @@ CloudEventValidator, Validators, ) -from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent -from uprotocol.proto.uattributes_pb2 import UPriority, UMessageType -from uprotocol.proto.uri_pb2 import UUri, UEntity, UResource +from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority +from uprotocol.proto.uri_pb2 import UEntity, UResource, UUri from uprotocol.proto.ustatus_pb2 import UCode from uprotocol.uri.serializer.longuriserializer import LongUriSerializer from uprotocol.uuid.factory.uuidfactory import Factories @@ -128,7 +127,6 @@ def build_long_uri_for_test(): class TestCloudEventValidator(unittest.TestCase): - def test_get_a_publish_cloud_event_validator(self): cloud_event = build_base_publish_cloud_event_for_test() validator = CloudEventValidator.get_validator(cloud_event) @@ -251,9 +249,7 @@ def test_validate_cloud_event_id_when_not_uuidv8_type_id(self): status = CloudEventValidator.validate_id(cloud_event).to_status() self.assertEqual(UCode.INVALID_ARGUMENT, status.code) self.assertEqual( - "Invalid CloudEvent Id [" - + str_uuid - + "]. CloudEvent Id must be of type UUIDv8.", + "Invalid CloudEvent Id [" + str_uuid + "]. CloudEvent Id must be of type UUIDv8.", status.message, ) @@ -276,9 +272,7 @@ def test_publish_type_cloudevent_is_valid_when_everything_is_valid_local( cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "pub.v1") - cloud_event.__setitem__( - "source", "/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "/body.access/1/door.front_left#Door") validator = Validators.PUBLISH.validator() result = validator.validate(cloud_event) self.assertEqual(ValidationResult.success(), result) @@ -291,9 +285,7 @@ def test_publish_type_cloudevent_is_valid_when_everything_is_valid_remote( cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "pub.v1") - cloud_event.__setitem__( - "source", "//VCU.myvin/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "//VCU.myvin/body.access/1/door.front_left#Door") validator = Validators.PUBLISH.validator() result = validator.validate(cloud_event) self.assertEqual(ValidationResult.success(), result) @@ -306,9 +298,7 @@ def test_publish_type_cloudevent_is_valid_when_everything_is_valid_remote_with_a cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "pub.v1") - cloud_event.__setitem__( - "source", "//VCU.myvin/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "//VCU.myvin/body.access/1/door.front_left#Door") cloud_event.__setitem__("sink", "//bo.cloud/petapp") validator = Validators.PUBLISH.validator() result = validator.validate(cloud_event) @@ -322,9 +312,7 @@ def test_publish_type_cloudevent_is_not_valid_when_remote_with_invalid_sink( cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "pub.v1") - cloud_event.__setitem__( - "source", "//VCU.myvin/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "//VCU.myvin/body.access/1/door.front_left#Door") cloud_event.__setitem__("sink", "//bo.cloud") validator = Validators.PUBLISH.validator() result = validator.validate(cloud_event) @@ -402,9 +390,7 @@ def test_notification_type_cloudevent_is_valid_when_everything_is_valid( cloud_event = build_base_notification_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "not.v1") - cloud_event.__setitem__( - "source", "/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "/body.access/1/door.front_left#Door") cloud_event.__setitem__("sink", "//bo.cloud/petapp") validator = Validators.NOTIFICATION.validator() result = validator.validate(cloud_event) @@ -416,9 +402,7 @@ def test_notification_type_cloudevent_is_not_valid_missing_sink(self): cloud_event = build_base_notification_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "not.v1") - cloud_event.__setitem__( - "source", "/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "/body.access/1/door.front_left#Door") validator = Validators.NOTIFICATION.validator() result = validator.validate(cloud_event) self.assertEqual( @@ -433,9 +417,7 @@ def test_notification_type_cloudevent_is_not_valid_invalid_sink(self): cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "not.v1") cloud_event.__setitem__("sink", "//bo.cloud") - cloud_event.__setitem__( - "source", "/body.access/1/door.front_left#Door" - ) + cloud_event.__setitem__("source", "/body.access/1/door.front_left#Door") validator = Validators.NOTIFICATION.validator() result = validator.validate(cloud_event) self.assertEqual( @@ -449,9 +431,7 @@ def test_request_type_cloudevent_is_valid_when_everything_is_valid(self): cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "req.v1") - cloud_event.__setitem__( - "sink", "//VCU.myvin/body.access/1/rpc.UpdateDoor" - ) + cloud_event.__setitem__("sink", "//VCU.myvin/body.access/1/rpc.UpdateDoor") cloud_event.__setitem__("source", "//bo.cloud/petapp//rpc.response") validator = Validators.REQUEST.validator() result = validator.validate(cloud_event) @@ -463,9 +443,7 @@ def test_request_type_cloudevent_is_not_valid_invalid_source(self): cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "req.v1") - cloud_event.__setitem__( - "sink", "//VCU.myvin/body.access/1/rpc.UpdateDoor" - ) + cloud_event.__setitem__("sink", "//VCU.myvin/body.access/1/rpc.UpdateDoor") cloud_event.__setitem__("source", "//bo.cloud/petapp//dog") validator = Validators.REQUEST.validator() result = validator.validate(cloud_event) @@ -516,9 +494,7 @@ def test_response_type_cloudevent_is_valid_when_everything_is_valid(self): cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "res.v1") cloud_event.__setitem__("sink", "//bo.cloud/petapp//rpc.response") - cloud_event.__setitem__( - "source", "//VCU.myvin/body.access/1/rpc.UpdateDoor" - ) + cloud_event.__setitem__("source", "//VCU.myvin/body.access/1/rpc.UpdateDoor") validator = Validators.RESPONSE.validator() result = validator.validate(cloud_event) self.assertEqual(ValidationResult.success(), result) @@ -530,9 +506,7 @@ def test_response_type_cloudevent_is_not_valid_invalid_source(self): cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "res.v1") cloud_event.__setitem__("sink", "//bo.cloud/petapp//rpc.response") - cloud_event.__setitem__( - "source", "//VCU.myvin/body.access/1/UpdateDoor" - ) + cloud_event.__setitem__("source", "//VCU.myvin/body.access/1/UpdateDoor") validator = Validators.RESPONSE.validator() result = validator.validate(cloud_event) self.assertEqual( @@ -550,9 +524,7 @@ def test_response_type_cloudevent_is_not_valid_missing_sink_and_invalid_source( cloud_event = build_base_publish_cloud_event_for_test() cloud_event.__setitem__("id", str_uuid) cloud_event.__setitem__("type", "res.v1") - cloud_event.__setitem__( - "source", "//VCU.myvin/body.access/1/UpdateDoor" - ) + cloud_event.__setitem__("source", "//VCU.myvin/body.access/1/UpdateDoor") validator = Validators.RESPONSE.validator() result = validator.validate(cloud_event) self.assertEqual( @@ -612,10 +584,7 @@ def test_create_a_v6_cloudevent_and_validate_it_against_sdk(self): proto_payload = build_proto_payload_for_test() # additional attributes u_cloud_event_attributes = ( - UCloudEventAttributesBuilder() - .with_priority(UPriority.UPRIORITY_CS0) - .with_ttl(1000) - .build() + UCloudEventAttributesBuilder().with_priority(UPriority.UPRIORITY_CS0).with_ttl(1000).build() ) # build the cloud event cloud_event = CloudEventFactory.build_base_cloud_event( diff --git a/tests/test_cloudevent/test_validator/test_validationresult.py b/tests/test_cloudevent/test_validator/test_validationresult.py index 201a9cb..225efa3 100644 --- a/tests/test_cloudevent/test_validator/test_validationresult.py +++ b/tests/test_cloudevent/test_validator/test_validationresult.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,15 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest +from uprotocol.proto.ustatus_pb2 import UCode, UStatus from uprotocol.validation.validationresult import ValidationResult -from uprotocol.proto.ustatus_pb2 import UStatus, UCode class TestValidationResultTest(unittest.TestCase): - def test_success_validation_result_to_string(self): success = ValidationResult.success() self.assertEqual("ValidationResult.Success()", str(success)) diff --git a/tests/test_rpc/test_calloptions.py b/tests/test_rpc/test_calloptions.py index 8f6468a..15b39ee 100644 --- a/tests/test_rpc/test_calloptions.py +++ b/tests/test_rpc/test_calloptions.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,14 +20,12 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest from uprotocol.proto.uattributes_pb2 import CallOptions class TestCallOptions(unittest.TestCase): - def test_to_string(self): call_options = CallOptions(ttl=30, token="someToken") self.assertEqual(30, call_options.ttl) diff --git a/tests/test_rpc/test_rpc.py b/tests/test_rpc/test_rpc.py index 9348507..08a2053 100644 --- a/tests/test_rpc/test_rpc.py +++ b/tests/test_rpc/test_rpc.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,22 +20,22 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest from concurrent.futures import Future + from google.protobuf.any_pb2 import Any from google.protobuf.wrappers_pb2 import Int32Value -from uprotocol.proto.uattributes_pb2 import CallOptions from uprotocol.cloudevent.cloudevents_pb2 import CloudEvent +from uprotocol.proto.uattributes_pb2 import CallOptions +from uprotocol.proto.umessage_pb2 import UMessage from uprotocol.proto.upayload_pb2 import UPayload, UPayloadFormat -from uprotocol.proto.uri_pb2 import UUri, UEntity, UAuthority -from uprotocol.proto.ustatus_pb2 import UStatus, UCode +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UUri +from uprotocol.proto.ustatus_pb2 import UCode, UStatus from uprotocol.rpc.rpcclient import RpcClient from uprotocol.rpc.rpcmapper import RpcMapper +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.longuriserializer import LongUriSerializer -from uprotocol.uri.factory.uresource_builder import UResourceBuilder -from uprotocol.proto.umessage_pb2 import UMessage def build_source(): @@ -72,9 +72,7 @@ def build_calloptions(): class ReturnsNumber3(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() any_obj = Any() any_obj.Pack(Int32Value(value=3)) @@ -87,9 +85,7 @@ def invoke_method( class HappyPath(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() data = build_upayload() future.set_result(UMessage(payload=data)) @@ -97,9 +93,7 @@ def invoke_method( class WithUStatusCodeInsteadOfHappyPath(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() status = UStatus(code=UCode.INVALID_ARGUMENT, message="boom") any_value = Any() @@ -113,9 +107,7 @@ def invoke_method( class WithUStatusCodeHappyPath(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() status = UStatus(code=UCode.OK, message="all good") any_value = Any() @@ -129,30 +121,22 @@ def invoke_method( class ThatBarfsCrapyPayload(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() - response = UPayload( - format=UPayloadFormat.UPAYLOAD_FORMAT_RAW, value=bytes([0]) - ) + response = UPayload(format=UPayloadFormat.UPAYLOAD_FORMAT_RAW, value=bytes([0])) future.set_result(UMessage(payload=response)) return future class ThatCompletesWithAnException(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() future.set_exception(RuntimeError("Boom")) return future class ThatReturnsTheWrongProto(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() any_value = Any() any_value.Pack(Int32Value(value=42)) @@ -165,18 +149,14 @@ def invoke_method( class WithNullMessage(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() future.set_result(UMessage()) return future class WithNullInPayload(RpcClient): - def invoke_method( - self, topic: UUri, payload: UPayload, options: CallOptions - ): + def invoke_method(self, topic: UUri, payload: UPayload, options: CallOptions): future = Future() future.set_result(None) return future @@ -210,9 +190,7 @@ def rpc_response(invoke_method_response: Future): try: status = UStatus() any_value.Unpack(status) - raise RuntimeError( - f"Error returned, status code: [{status.code}], message: [{status.message}]" - ) + raise RuntimeError(f"Error returned, status code: [{status.code}], message: [{status.message}]") except Exception as e: raise RuntimeError(f"{str(e)} [com.google.grpc.UStatus]") from e @@ -220,130 +198,107 @@ def rpc_response(invoke_method_response: Future): class TestRpc(unittest.TestCase): - def test_compose_happy_path(self): rpc_response = RpcMapper.map_response_to_result( - ReturnsNumber3().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + ReturnsNumber3().invoke_method(build_topic(), build_upayload(), build_calloptions()), Int32Value, ) mapped = rpc_response.map(lambda x: x.value + 5) - self.assertTrue(rpc_response.isSuccess()) - self.assertEqual(8, mapped.successValue()) + self.assertTrue(rpc_response.is_success()) + self.assertEqual(8, mapped.success_value()) def test_compose_that_returns_status(self): rpc_response = RpcMapper.map_response_to_result( - WithUStatusCodeInsteadOfHappyPath().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + WithUStatusCodeInsteadOfHappyPath().invoke_method(build_topic(), build_upayload(), build_calloptions()), Int32Value, ) mapped = rpc_response.map(lambda x: x.value + 5) - self.assertTrue(rpc_response.isFailure()) - self.assertEqual(UCode.INVALID_ARGUMENT, mapped.failureValue().code) - self.assertEqual("boom", mapped.failureValue().message) + self.assertTrue(rpc_response.is_failure()) + self.assertEqual(UCode.INVALID_ARGUMENT, mapped.failure_value().code) + self.assertEqual("boom", mapped.failure_value().message) def test_compose_with_failure(self): rpc_response = RpcMapper.map_response_to_result( - ThatCompletesWithAnException().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + ThatCompletesWithAnException().invoke_method(build_topic(), build_upayload(), build_calloptions()), Int32Value, ) mapped = rpc_response.map(lambda x: x.value + 5) - self.assertTrue(rpc_response.isFailure()) + self.assertTrue(rpc_response.is_failure()) status = UStatus(code=UCode.UNKNOWN, message="Boom") - self.assertEqual(status, mapped.failureValue()) + self.assertEqual(status, mapped.failure_value()) def test_map_response_with_payload_is_null(self): rpc_response = RpcMapper.map_response_to_result( - WithNullInPayload().invoke_method( - build_topic(), None, build_calloptions() - ), + WithNullInPayload().invoke_method(build_topic(), None, build_calloptions()), UStatus, ) mapped = rpc_response.map(lambda x: x.value + 5) - self.assertTrue(rpc_response.isFailure()) - self.assertEqual(UCode.UNKNOWN, mapped.failureValue().code) + self.assertTrue(rpc_response.is_failure()) + self.assertEqual(UCode.UNKNOWN, mapped.failure_value().code) self.assertEqual( "Server returned a null payload. Expected UStatus", - mapped.failureValue().message, + mapped.failure_value().message, ) - def test_success_invoke_method_happy_flow_using_mapResponseToRpcResponse( + def test_success_invoke_method_happy_flow_using_map_response_to_rpc_response( self, ): rpc_response = RpcMapper.map_response_to_result( - HappyPath().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + HappyPath().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) - self.assertTrue(rpc_response.isSuccess()) - self.assertEqual(build_cloud_event(), rpc_response.successValue()) + self.assertTrue(rpc_response.is_success()) + self.assertEqual(build_cloud_event(), rpc_response.success_value()) - def test_fail_invoke_method_when_invoke_method_returns_a_status_using_mapResponseToRpcResponse( + def test_fail_invoke_method_when_invoke_method_returns_a_status_using_map_response_to_rpc_response( self, ): rpc_response = RpcMapper.map_response_to_result( - WithUStatusCodeInsteadOfHappyPath().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + WithUStatusCodeInsteadOfHappyPath().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) - self.assertTrue(rpc_response.isFailure()) - self.assertEqual( - UCode.INVALID_ARGUMENT, rpc_response.failureValue().code - ) - self.assertEqual("boom", rpc_response.failureValue().message) + self.assertTrue(rpc_response.is_failure()) + self.assertEqual(UCode.INVALID_ARGUMENT, rpc_response.failure_value().code) + self.assertEqual("boom", rpc_response.failure_value().message) - def test_fail_invoke_method_when_invoke_method_threw_an_exception_using_mapResponseToRpcResponse( + def test_fail_invoke_method_when_invoke_method_threw_an_exception_using_map_response_to_rpc_response( self, ): rpc_response = RpcMapper.map_response_to_result( - ThatCompletesWithAnException().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + ThatCompletesWithAnException().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) - self.assertTrue(rpc_response.isFailure()) - self.assertEqual(UCode.UNKNOWN, rpc_response.failureValue().code) - self.assertEqual("Boom", rpc_response.failureValue().message) + self.assertTrue(rpc_response.is_failure()) + self.assertEqual(UCode.UNKNOWN, rpc_response.failure_value().code) + self.assertEqual("Boom", rpc_response.failure_value().message) - def test_fail_invoke_method_when_invoke_method_returns_a_bad_proto_using_mapResponseToRpcResponse( + def test_fail_invoke_method_when_invoke_method_returns_a_bad_proto_using_map_response_to_rpc_response( self, ): rpc_response = RpcMapper.map_response_to_result( - ThatReturnsTheWrongProto().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + ThatReturnsTheWrongProto().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) - self.assertTrue(rpc_response.isFailure()) - self.assertEqual(UCode.UNKNOWN, rpc_response.failureValue().code) + self.assertTrue(rpc_response.is_failure()) + self.assertEqual(UCode.UNKNOWN, rpc_response.failure_value().code) self.assertEqual( "Unknown payload type [type.googleapis.com/google.protobuf.Int32Value]. Expected [" "io.cloudevents.v1.CloudEvent]", - rpc_response.failureValue().message, + rpc_response.failure_value().message, ) - def test_success_invoke_method_happy_flow_using_mapResponse(self): + def test_success_invoke_method_happy_flow_using_map_response(self): rpc_response = RpcMapper.map_response( - HappyPath().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + HappyPath().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) self.assertEqual(build_cloud_event(), rpc_response.result()) - def test_fail_invoke_method_when_invoke_method_returns_a_status_using_mapResponse( + def test_fail_invoke_method_when_invoke_method_returns_a_status_using_map_response( self, ): rpc_response = RpcMapper.map_response( - WithUStatusCodeInsteadOfHappyPath().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + WithUStatusCodeInsteadOfHappyPath().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) exception = RuntimeError( @@ -353,12 +308,8 @@ def test_fail_invoke_method_when_invoke_method_returns_a_status_using_mapRespons def test_map_response_when_response_message_is_null(self): rpc_response = RpcMapper.map_response( - WithNullMessage().invoke_method( - build_topic(), build_upayload(), build_calloptions() - ), + WithNullMessage().invoke_method(build_topic(), build_upayload(), build_calloptions()), CloudEvent, ) - exception = RuntimeError( - "Server returned a null payload. Expected CloudEvent" - ) + exception = RuntimeError("Server returned a null payload. Expected CloudEvent") self.assertEqual(str(exception), str(rpc_response.exception())) diff --git a/tests/test_rpc/test_rpcresult.py b/tests/test_rpc/test_rpcresult.py index a81cdd8..c33d137 100644 --- a/tests/test_rpc/test_rpcresult.py +++ b/tests/test_rpc/test_rpcresult.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,14 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest from uprotocol.proto.ustatus_pb2 import UCode, UStatus from uprotocol.rpc.rpcresult import RpcResult -def getDefault(): +def get_default(): return 5 @@ -36,87 +35,86 @@ def multiply_by_2(x): class TestRpcResult(unittest.TestCase): - - def test_isSuccess_on_Success(self): + def test_is_success_on_success(self): result = RpcResult.success(2) - self.assertTrue(result.isSuccess()) + self.assertTrue(result.is_success()) - def test_isSuccess_on_Failure(self): + def test_is_success_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertFalse(result.isSuccess()) + self.assertFalse(result.is_success()) - def test_isFailure_on_Success(self): + def test_is_failure_on_success(self): result = RpcResult.success(2) - self.assertFalse(result.isFailure()) + self.assertFalse(result.is_failure()) - def test_isFailure_on_Failure(self): + def test_is_failure_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertTrue(result.isFailure()) + self.assertTrue(result.is_failure()) - def testGetOrElseOnSuccess(self): + def test_get_or_else_on_success(self): result = RpcResult.success(2) - self.assertEqual(2, result.getOrElse(getDefault())) + self.assertEqual(2, result.get_or_else(get_default())) - def testGetOrElseOnFailure(self): + def test_get_or_else_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertEqual(getDefault(), result.getOrElse(getDefault)) + self.assertEqual(get_default(), result.get_or_else(get_default)) - def testGetOrElseOnSuccess_(self): + def test_get_or_else_on_success_(self): result = RpcResult.success(2) - self.assertEqual(2, result.getOrElse(5)) + self.assertEqual(2, result.get_or_else(5)) - def testGetOrElseOnFailure_(self): + def test_get_or_else_on_failure_(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertEqual(5, result.getOrElse(5)) + self.assertEqual(5, result.get_or_else(5)) - def testSuccessValue_onSuccess(self): + def test_success_value_on_success(self): result = RpcResult.success(2) - self.assertEqual(2, result.successValue()) + self.assertEqual(2, result.success_value()) - def testSuccessValue_onFailure_(self): + def test_success_value_on_failure_(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") with self.assertRaises(Exception) as context: - result.successValue() - self.assertEqual(str(context.exception), "Method successValue() called on a Failure instance") + result.success_value() + self.assertEqual(str(context.exception), "Method success_value() called on a Failure instance") - def testFailureValue_onSuccess(self): + def test_failure_value_on_success(self): result = RpcResult.success(2) with self.assertRaises(Exception) as context: - result.failureValue() - self.assertEqual(str(context.exception), "Method failureValue() called on a Success instance") + result.failure_value() + self.assertEqual(str(context.exception), "Method failure_value() called on a Success instance") - def testFailureValue_onFailure_(self): + def test_failure_value_on_failure_(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - result_value = result.failureValue() + result_value = result.failure_value() expected_result = UStatus(code=UCode.INVALID_ARGUMENT, message="boom") self.assertEqual(expected_result, result_value) - def testMapOnSuccess(self): + def test_map_on_success(self): result = RpcResult.success(2) mapped = result.map(lambda x: x * 2) - self.assertTrue(mapped.isSuccess()) - self.assertEqual(4, mapped.successValue()) + self.assertTrue(mapped.is_success()) + self.assertEqual(4, mapped.success_value()) def test_map_success_when_function_throws_exception(self): result = RpcResult.success(2) mapped = result.map(self.fun_that_throws_exception_for_map) - self.assertTrue(mapped.isFailure()) - self.assertEqual(UCode.UNKNOWN, mapped.failureValue().code) - self.assertEqual("2 went boom", mapped.failureValue().message) + self.assertTrue(mapped.is_failure()) + self.assertEqual(UCode.UNKNOWN, mapped.failure_value().code) + self.assertEqual("2 went boom", mapped.failure_value().message) def test_map_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") mapped = result.map(lambda x: x * 2) - self.assertTrue(mapped.isFailure()) + self.assertTrue(mapped.is_failure()) expected_status = UStatus(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertEqual(expected_status, mapped.failureValue()) + self.assertEqual(expected_status, mapped.failure_value()) def test_flat_map_success_when_function_throws_exception(self): result = RpcResult.success(2) - flat_mapped = result.flatMap(self.fun_that_throws_exception_for_flat_map) - self.assertTrue(flat_mapped.isFailure()) - self.assertEqual(UCode.UNKNOWN, flat_mapped.failureValue().code) - self.assertEqual("2 went boom", flat_mapped.failureValue().message) + flat_mapped = result.flat_map(self.fun_that_throws_exception_for_flat_map) + self.assertTrue(flat_mapped.is_failure()) + self.assertEqual(UCode.UNKNOWN, flat_mapped.failure_value().code) + self.assertEqual("2 went boom", flat_mapped.failure_value().message) def fun_that_throws_exception_for_flat_map(self, x): raise ValueError(f"{x} went boom") @@ -126,36 +124,36 @@ def fun_that_throws_exception_for_map(self, x): def test_flat_map_on_success(self): result = RpcResult.success(2) - flat_mapped = result.flatMap(lambda x: RpcResult.success(x * 2)) - self.assertTrue(flat_mapped.isSuccess()) - self.assertEqual(4, flat_mapped.successValue()) + flat_mapped = result.flat_map(lambda x: RpcResult.success(x * 2)) + self.assertTrue(flat_mapped.is_success()) + self.assertEqual(4, flat_mapped.success_value()) def test_flat_map_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - flat_mapped = result.flatMap(lambda x: RpcResult.success(x * 2)) - self.assertTrue(flat_mapped.isFailure()) + flat_mapped = result.flat_map(lambda x: RpcResult.success(x * 2)) + self.assertTrue(flat_mapped.is_failure()) expected_status = UStatus(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertEqual(expected_status, flat_mapped.failureValue()) + self.assertEqual(expected_status, flat_mapped.failure_value()) def test_filter_on_success_that_fails(self): result = RpcResult.success(2) filter_result = result.filter(lambda i: i > 5) - self.assertTrue(filter_result.isFailure()) + self.assertTrue(filter_result.is_failure()) expected_status = UStatus(code=UCode.FAILED_PRECONDITION, message="filtered out") - self.assertEqual(expected_status, filter_result.failureValue()) + self.assertEqual(expected_status, filter_result.failure_value()) def test_filter_on_success_that_succeeds(self): result = RpcResult.success(2) filter_result = result.filter(lambda i: i < 5) - self.assertTrue(filter_result.isSuccess()) - self.assertEqual(2, filter_result.successValue()) + self.assertTrue(filter_result.is_success()) + self.assertEqual(2, filter_result.success_value()) def test_filter_on_success_when_function_throws_exception(self): result = RpcResult.success(2) filter_result = result.filter(self.predicate_that_throws_exception) - self.assertTrue(filter_result.isFailure()) + self.assertTrue(filter_result.is_failure()) expected_status = UStatus(code=UCode.UNKNOWN, message="2 went boom") - self.assertEqual(expected_status, filter_result.failureValue()) + self.assertEqual(expected_status, filter_result.failure_value()) def predicate_that_throws_exception(self, x): raise ValueError(f"{x} went boom") @@ -163,32 +161,32 @@ def predicate_that_throws_exception(self, x): def test_filter_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") filter_result = result.filter(lambda i: i > 5) - self.assertTrue(filter_result.isFailure()) + self.assertTrue(filter_result.is_failure()) expected_status = UStatus(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertEqual(expected_status, filter_result.failureValue()) + self.assertEqual(expected_status, filter_result.failure_value()) def test_flatten_on_success(self): result = RpcResult.success(2) mapped = result.map(multiply_by_2) mapped_flattened = RpcResult.flatten(mapped) - self.assertTrue(mapped_flattened.isSuccess()) - self.assertEqual(4, mapped_flattened.successValue()) + self.assertTrue(mapped_flattened.is_success()) + self.assertEqual(4, mapped_flattened.success_value()) def test_flatten_on_success_with_function_that_fails(self): result = RpcResult.success(2) mapped = result.map(self.fun_that_throws_exception_for_flat_map) mapped_flattened = RpcResult.flatten(mapped) - self.assertTrue(mapped_flattened.isFailure()) + self.assertTrue(mapped_flattened.is_failure()) expected_status = UStatus(code=UCode.UNKNOWN, message="2 went boom") - self.assertEqual(expected_status, mapped_flattened.failureValue()) + self.assertEqual(expected_status, mapped_flattened.failure_value()) def test_flatten_on_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") mapped = result.map(multiply_by_2) mapped_flattened = RpcResult.flatten(mapped) - self.assertTrue(mapped_flattened.isFailure()) + self.assertTrue(mapped_flattened.is_failure()) expected_status = UStatus(code=UCode.INVALID_ARGUMENT, message="boom") - self.assertEqual(expected_status, mapped_flattened.failureValue()) + self.assertEqual(expected_status, mapped_flattened.failure_value()) def test_to_string_success(self): result = RpcResult.success(2) @@ -196,8 +194,7 @@ def test_to_string_success(self): def test_to_string_failure(self): result = RpcResult.failure(code=UCode.INVALID_ARGUMENT, message="boom") - expected_string = ("Failure(code: INVALID_ARGUMENT\n" - "message: \"boom\"\n)") + expected_string = "Failure(code: INVALID_ARGUMENT\n" "message: \"boom\"\n)" self.assertEqual(expected_string, str(result)) diff --git a/tests/test_transport/test_builder/test_uattributesbuilder.py b/tests/test_transport/test_builder/test_uattributesbuilder.py index a7b999f..25872c7 100644 --- a/tests/test_transport/test_builder/test_uattributesbuilder.py +++ b/tests/test_transport/test_builder/test_uattributesbuilder.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ - import unittest -from uprotocol.transport.builder.uattributesbuilder import UAttributesBuilder -from uprotocol.proto.uattributes_pb2 import UPriority, UMessageType -from uprotocol.proto.uri_pb2 import UUri, UAuthority, UEntity + +from uprotocol.proto.uattributes_pb2 import UMessageType, UPriority +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UUri from uprotocol.proto.ustatus_pb2 import UCode -from uprotocol.uri.factory.uresource_builder import UResourceBuilder +from uprotocol.transport.builder.uattributesbuilder import UAttributesBuilder +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uuid.factory.uuidfactory import Factories @@ -51,7 +51,6 @@ def get_uuid(): class TestUAttributesBuilder(unittest.TestCase): - def test_publish(self): source = build_source() builder = UAttributesBuilder.publish(source, UPriority.UPRIORITY_CS1) @@ -64,15 +63,11 @@ def test_publish(self): def test_notification(self): source = build_source() sink = build_sink() - builder = UAttributesBuilder.notification( - source, sink, UPriority.UPRIORITY_CS1 - ) + builder = UAttributesBuilder.notification(source, sink, UPriority.UPRIORITY_CS1) self.assertIsNotNone(builder) attributes = builder.build() self.assertIsNotNone(attributes) - self.assertEqual( - UMessageType.UMESSAGE_TYPE_NOTIFICATION, attributes.type - ) + self.assertEqual(UMessageType.UMESSAGE_TYPE_NOTIFICATION, attributes.type) self.assertEqual(UPriority.UPRIORITY_CS1, attributes.priority) self.assertEqual(sink, attributes.sink) @@ -80,9 +75,7 @@ def test_request(self): source = build_source() sink = build_sink() ttl = 1000 - builder = UAttributesBuilder.request( - source, sink, UPriority.UPRIORITY_CS4, ttl - ) + builder = UAttributesBuilder.request(source, sink, UPriority.UPRIORITY_CS4, ttl) self.assertIsNotNone(builder) attributes = builder.build() self.assertIsNotNone(attributes) @@ -95,9 +88,7 @@ def test_response(self): source = build_source() sink = build_sink() req_id = get_uuid() - builder = UAttributesBuilder.response( - source, sink, UPriority.UPRIORITY_CS6, req_id - ) + builder = UAttributesBuilder.response(source, sink, UPriority.UPRIORITY_CS6, req_id) self.assertIsNotNone(builder) attributes = builder.build() self.assertIsNotNone(attributes) @@ -107,9 +98,7 @@ def test_response(self): self.assertEqual(req_id, attributes.reqid) def test_response_with_existing_request(self): - request = UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS6, 1000 - ).build() + request = UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS6, 1000).build() builder = UAttributesBuilder.response(request) self.assertIsNotNone(builder) response = builder.build() @@ -124,13 +113,13 @@ def test_build(self): req_id = get_uuid() builder = ( UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS1) - .withTtl(1000) - .withToken("test_token") - .withSink(build_sink()) - .withPermissionLevel(2) - .withCommStatus(UCode.CANCELLED) - .withReqId(req_id) - .withTraceparent("test_traceparent") + .with_ttl(1000) + .with_token("test_token") + .with_sink(build_sink()) + .with_permission_level(2) + .with_comm_status(UCode.CANCELLED) + .with_req_id(req_id) + .with_traceparent("test_traceparent") ) attributes = builder.build() self.assertIsNotNone(attributes) @@ -157,9 +146,7 @@ def test_publish_priority_is_none(self): def test_notification_source_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.notification( - None, build_sink(), UPriority.UPRIORITY_CS1 - ) + UAttributesBuilder.notification(None, build_sink(), UPriority.UPRIORITY_CS1) self.assertTrue("Source cannot be None." in context.exception) def test_notification_priority_is_none(self): @@ -169,58 +156,42 @@ def test_notification_priority_is_none(self): def test_notification_sink_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.notification( - build_source(), None, UPriority.UPRIORITY_CS1 - ) + UAttributesBuilder.notification(build_source(), None, UPriority.UPRIORITY_CS1) self.assertTrue("sink cannot be null." in context.exception) def test_request_source_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.request( - None, build_sink(), UPriority.UPRIORITY_CS1, 1000 - ) + UAttributesBuilder.request(None, build_sink(), UPriority.UPRIORITY_CS1, 1000) self.assertTrue("Source cannot be None." in context.exception) def test_request_priority_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.request( - build_source(), build_sink(), None, 1000 - ) + UAttributesBuilder.request(build_source(), build_sink(), None, 1000) self.assertTrue("UPriority cannot be null." in context.exception) def test_request_sink_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.request( - build_source(), None, UPriority.UPRIORITY_CS1, 1000 - ) + UAttributesBuilder.request(build_source(), None, UPriority.UPRIORITY_CS1, 1000) self.assertTrue("sink cannot be null." in context.exception) def test_request_ttl_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS1, None - ) + UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS1, None) self.assertTrue("ttl cannot be null." in context.exception) def test_response_priority_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.response( - build_source(), build_sink(), None, get_uuid() - ) + UAttributesBuilder.response(build_source(), build_sink(), None, get_uuid()) self.assertTrue("UPriority cannot be null." in context.exception) def test_response_sink_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.response( - build_source(), None, UPriority.UPRIORITY_CS1, get_uuid() - ) + UAttributesBuilder.response(build_source(), None, UPriority.UPRIORITY_CS1, get_uuid()) self.assertTrue("sink cannot be null." in context.exception) def test_response_reqid_is_none(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.response( - build_source(), build_sink(), UPriority.UPRIORITY_CS1, None - ) + UAttributesBuilder.response(build_source(), build_sink(), UPriority.UPRIORITY_CS1, None) self.assertTrue("reqid cannot be null." in context.exception) def test_response_request_is_none(self): diff --git a/tests/test_transport/test_builder/test_upayloadbuilder.py b/tests/test_transport/test_builder/test_upayloadbuilder.py index a381ee7..ffb38d5 100644 --- a/tests/test_transport/test_builder/test_upayloadbuilder.py +++ b/tests/test_transport/test_builder/test_upayloadbuilder.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -21,17 +21,17 @@ """ import unittest + from google.protobuf.any_pb2 import Any -from google.protobuf.wrappers_pb2 import BoolValue from google.protobuf.api_pb2 import Method from google.protobuf.message import Message -from uprotocol.proto.upayload_pb2 import UPayload, UPayloadFormat +from google.protobuf.wrappers_pb2 import BoolValue +from uprotocol.proto.upayload_pb2 import UPayload, UPayloadFormat from uprotocol.transport.builder.upayloadbuilder import UPayloadBuilder class TestUPayloadBuilder(unittest.TestCase): - def _create_upayload_builder(self): return UPayloadBuilder() @@ -86,9 +86,7 @@ def test_pack_to_any_given_method_returns_upayload(self): self._assert_pack_to_any(any_message, upayload) def _assert_pack(self, expected: Message, actual: UPayload): - self.assertEqual( - UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF, actual.format - ) + self.assertEqual(UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF, actual.format) self.assertEqual(0, actual.length) self.assertEqual(0, actual.reference) self.assertEqual(expected.SerializeToString(), actual.value) @@ -260,9 +258,7 @@ def test_unpack_given_none_returns_none(self): def test_unpack_given_no_upayload_value_returns_none(self): builder = self._create_upayload_builder() - upayload: UPayload = UPayload( - format=UPayloadFormat.UPAYLOAD_FORMAT_JSON - ) + upayload: UPayload = UPayload(format=UPayloadFormat.UPAYLOAD_FORMAT_JSON) unpacked_msg: Any = builder.unpack(upayload, Any) diff --git a/tests/test_transport/test_utransport.py b/tests/test_transport/test_utransport.py index d4367c4..9e20390 100644 --- a/tests/test_transport/test_utransport.py +++ b/tests/test_transport/test_utransport.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,12 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ -from uprotocol.transport.ulistener import UListener -from uprotocol.transport.utransport import UTransport -from uprotocol.proto.ustatus_pb2 import UStatus, UCode -from uprotocol.proto.umessage_pb2 import UMessage import unittest + +from uprotocol.proto.umessage_pb2 import UMessage from uprotocol.proto.uri_pb2 import UUri +from uprotocol.proto.ustatus_pb2 import UCode, UStatus +from uprotocol.transport.ulistener import UListener +from uprotocol.transport.utransport import UTransport class MyListener(UListener): @@ -35,13 +36,10 @@ def on_receive(self, message): class HappyUTransport(UTransport): - def send(self, message): super().send(message) - return UStatus( - code=UCode.INVALID_ARGUMENT if message is None else UCode.OK - ) + return UStatus(code=UCode.INVALID_ARGUMENT if message is None else UCode.OK) def register_listener(self, topic, listener): super().register_listener(topic, listener) diff --git a/tests/test_transport/test_validate/test_uattributesvalidator.py b/tests/test_transport/test_validate/test_uattributesvalidator.py index 9ecb63c..dc57fa1 100644 --- a/tests/test_transport/test_validate/test_uattributesvalidator.py +++ b/tests/test_transport/test_validate/test_uattributesvalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -23,16 +23,15 @@ import time import unittest -from uprotocol.proto.uattributes_pb2 import UPriority -from uprotocol.proto.uri_pb2 import UUri, UAuthority, UEntity +from uprotocol.proto.uattributes_pb2 import UAttributes, UPriority +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UUri from uprotocol.proto.uuid_pb2 import UUID -from uprotocol.proto.uattributes_pb2 import UAttributes from uprotocol.transport.builder.uattributesbuilder import UAttributesBuilder from uprotocol.transport.validate.uattributesvalidator import ( UAttributesValidator, Validators, ) -from uprotocol.uri.factory.uresource_builder import UResourceBuilder +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.longuriserializer import LongUriSerializer from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.validation.validationresult import ValidationResult @@ -55,20 +54,15 @@ def build_source(): class TestUAttributesValidator(unittest.TestCase): - def test_fetching_validator_for_publish_type(self): publish = UAttributesValidator.get_validator( - UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() ) self.assertEqual("UAttributesValidator.Publish", str(publish)) def test_fetching_validator_for_request_type(self): request = UAttributesValidator.get_validator( - UAttributesBuilder.request( - build_source(), UUri(), UPriority.UPRIORITY_CS4, 1000 - ).build() + UAttributesBuilder.request(build_source(), UUri(), UPriority.UPRIORITY_CS4, 1000).build() ) self.assertEqual("UAttributesValidator.Request", str(request)) @@ -85,9 +79,7 @@ def test_fetching_validator_for_response_type(self): def test_fetching_validator_for_notification_type(self): response = UAttributesValidator.get_validator( - UAttributesBuilder.notification( - build_source(), UUri(), UPriority.UPRIORITY_CS4 - ).build() + UAttributesBuilder.notification(build_source(), UUri(), UPriority.UPRIORITY_CS4).build() ) self.assertEqual("UAttributesValidator.Notification", str(response)) @@ -95,23 +87,21 @@ def test_fetching_validator_for_no_type(self): response = UAttributesValidator.get_validator(UAttributes()) self.assertEqual("UAttributesValidator.Publish", str(response)) - def test_validate_uAttributes_for_publish_message_payload(self): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + def test_validate_u_attributes_for_publish_message_payload(self): + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() validator = Validators.PUBLISH.validator() status = validator.validate(attributes) self.assertTrue(status.is_success()) self.assertEqual("", status.get_message()) - def test_validate_uAttributes_for_publish_message_payload_alls(self): + def test_validate_u_attributes_for_publish_message_payload_alls(self): attributes = ( UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(1000) - .withSink(build_sink()) - .withPermissionLevel(2) - .withCommStatus(3) - .withReqId(Factories.UPROTOCOL.create()) + .with_ttl(1000) + .with_sink(build_sink()) + .with_permission_level(2) + .with_comm_status(3) + .with_req_id(Factories.UPROTOCOL.create()) .build() ) @@ -120,7 +110,7 @@ def test_validate_uAttributes_for_publish_message_payload_alls(self): self.assertTrue(status.is_success()) self.assertEqual("", status.get_message()) - def test_validate_uAttributes_for_publish_message_payload_invalid_type( + def test_validate_u_attributes_for_publish_message_payload_invalid_type( self, ): attributes = UAttributesBuilder.response( @@ -137,65 +127,42 @@ def test_validate_uAttributes_for_publish_message_payload_invalid_type( status.get_message(), ) - def test_validate_uAttributes_for_publish_message_payload_invalid_ttl( + def test_validate_u_attributes_for_publish_message_payload_invalid_ttl( self, ): with self.assertRaises(ValueError) as context: - UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).withTtl(-1).build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(-1).build() self.assertTrue("Value out of range: -1" in context.exception) - def test_validate_uAttributes_for_publish_message_payload_invalid_sink( + def test_validate_u_attributes_for_publish_message_payload_invalid_sink( self, ): - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withSink(UUri()) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_sink(UUri()).build() validator = Validators.PUBLISH.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) self.assertEqual("Uri is empty.", status.get_message()) - def test_validate_uAttributes_for_publish_message_payload_invalid_permission_level( + def test_validate_u_attributes_for_publish_message_payload_invalid_permission_level( self, ): with self.assertRaises(ValueError) as context: - UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).withPermissionLevel(-42).build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_permission_level(-42).build() self.assertTrue("Value out of range: -42" in context.exception) - # def test_validate_uAttributes_for_publish_message_payload_invalid_request_id(self): - # uuid = java.util.UUID.randomUUID() - # attributes = UAttributesBuilder.publish(UPriority.UPRIORITY_CS0).withReqId( - # UUID.newBuilder().setMsb(uuid_java.getMostSignificantBits()).setLsb(uuid_java.getLeastSignificantBits()) - # .build()).build() - # - # validator = Validators.PUBLISH.validator() - # status = validator.validate(attributes) - # self.assertTrue(status.is_failure()) - # self.assertEqual("Invalid UUID", status.get_message()) - - def test_validate_uAttributes_for_rpc_request_message_payload(self): - attributes = UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS4, 1000 - ).build() + def test_validate_u_attributes_for_rpc_request_message_payload(self): + attributes = UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS4, 1000).build() validator = Validators.REQUEST.validator() status = validator.validate(attributes) self.assertTrue(status.is_success()) self.assertEqual("", status.get_message()) - def test_validate_uAttributes_for_rpc_request_message_payload_alls(self): + def test_validate_u_attributes_for_rpc_request_message_payload_alls(self): attributes = ( - UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS4, 1000 - ) - .withPermissionLevel(2) - .withCommStatus(3) - .withReqId(Factories.UPROTOCOL.create()) + UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS4, 1000) + .with_permission_level(2) + .with_comm_status(3) + .with_req_id(Factories.UPROTOCOL.create()) .build() ) @@ -204,7 +171,7 @@ def test_validate_uAttributes_for_rpc_request_message_payload_alls(self): self.assertTrue(status.is_success()) self.assertEqual("", status.get_message()) - def test_validate_uAttributes_for_rpc_request_message_payload_invalid_type( + def test_validate_u_attributes_for_rpc_request_message_payload_invalid_type( self, ): attributes = ( @@ -214,7 +181,7 @@ def test_validate_uAttributes_for_rpc_request_message_payload_invalid_type( UPriority.UPRIORITY_CS4, Factories.UPROTOCOL.create(), ) - .withTtl(1000) + .with_ttl(1000) .build() ) @@ -226,48 +193,33 @@ def test_validate_uAttributes_for_rpc_request_message_payload_invalid_type( status.get_message(), ) - def test_validate_uAttributes_for_rpc_request_message_payload_invalid_ttl( + def test_validate_u_attributes_for_rpc_request_message_payload_invalid_ttl( self, ): with self.assertRaises(ValueError) as context: - UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS4, -1 - ).build() + UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS4, -1).build() self.assertTrue("Value out of range: -1" in context.exception) - def test_validate_uAttributes_for_rpc_request_message_payload_invalid_sink( + def test_validate_u_attributes_for_rpc_request_message_payload_invalid_sink( self, ): - attributes = UAttributesBuilder.request( - build_source(), UUri(), UPriority.UPRIORITY_CS4, 1000 - ).build() + attributes = UAttributesBuilder.request(build_source(), UUri(), UPriority.UPRIORITY_CS4, 1000).build() validator = Validators.REQUEST.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) self.assertEqual("Uri is empty.", status.get_message()) - def test_validate_uAttributes_for_rpc_request_message_payload_invalid_permission_level( + def test_validate_u_attributes_for_rpc_request_message_payload_invalid_permission_level( self, ): with self.assertRaises(ValueError) as context: UAttributesBuilder.request( build_source(), build_sink(), UPriority.UPRIORITY_CS4, 1000 - ).withPermissionLevel(-42).build() + ).with_permission_level(-42).build() self.assertTrue("Value out of range: -42" in context.exception) - # def test_validate_uAttributes_for_rpc_request_message_payload_invalid_request_id(self): - # uuid_java = java.util.UUID.randomUUID() - # attributes = UAttributesBuilder.request(UPriority.UPRIORITY_CS4, build_sink(), 1000).withReqId( - # UUID.newBuilder().setMsb(uuid_java.getMostSignificantBits()).setLsb(uuid_java.getLeastSignificantBits()) - # .build()).build() - # - # validator = Validators.REQUEST.validator() - # status = validator.validate(attributes) - # self.assertTrue(status.is_failure()) - # self.assertEqual("Invalid UUID", status.get_message()) - - def test_validate_uAttributes_for_rpc_response_message_payload(self): + def test_validate_u_attributes_for_rpc_response_message_payload(self): attributes = UAttributesBuilder.response( build_source(), build_sink(), @@ -280,7 +232,7 @@ def test_validate_uAttributes_for_rpc_response_message_payload(self): self.assertTrue(status.is_success()) self.assertEqual("", status.get_message()) - def test_validate_uAttributes_for_rpc_response_message_payload_alls(self): + def test_validate_u_attributes_for_rpc_response_message_payload_alls(self): attributes = ( UAttributesBuilder.response( build_source(), @@ -288,8 +240,8 @@ def test_validate_uAttributes_for_rpc_response_message_payload_alls(self): UPriority.UPRIORITY_CS4, Factories.UPROTOCOL.create(), ) - .withPermissionLevel(2) - .withCommStatus(3) + .with_permission_level(2) + .with_comm_status(3) .build() ) @@ -298,12 +250,10 @@ def test_validate_uAttributes_for_rpc_response_message_payload_alls(self): self.assertTrue(status.is_success()) self.assertEqual("", status.get_message()) - def test_validate_uAttributes_for_rpc_response_message_payload_invalid_type( + def test_validate_u_attributes_for_rpc_response_message_payload_invalid_type( self, ): - attributes = UAttributesBuilder.notification( - build_source(), build_sink(), UPriority.UPRIORITY_CS4 - ).build() + attributes = UAttributesBuilder.notification(build_source(), build_sink(), UPriority.UPRIORITY_CS4).build() validator = Validators.RESPONSE.validator() status = validator.validate(attributes) @@ -313,7 +263,7 @@ def test_validate_uAttributes_for_rpc_response_message_payload_invalid_type( status.get_message(), ) - def test_validate_uAttributes_for_rpc_response_message_payload_invalid_ttl( + def test_validate_u_attributes_for_rpc_response_message_payload_invalid_ttl( self, ): with self.assertRaises(ValueError) as context: @@ -322,24 +272,20 @@ def test_validate_uAttributes_for_rpc_response_message_payload_invalid_ttl( build_sink(), UPriority.UPRIORITY_CS4, Factories.UPROTOCOL.create(), - ).withTtl(-1).build() + ).with_ttl(-1).build() self.assertTrue("Value out of range: -1" in context.exception) - def test_validate_uAttributes_for_rpc_response_message_payload_missing_sink_and_missing_requestId( + def test_validate_u_attributes_for_rpc_response_message_payload_missing_sink_and_missing_request_id( self, ): - attributes = UAttributesBuilder.response( - build_source(), UUri(), UPriority.UPRIORITY_CS4, UUID() - ).build() + attributes = UAttributesBuilder.response(build_source(), UUri(), UPriority.UPRIORITY_CS4, UUID()).build() validator = Validators.RESPONSE.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) - self.assertEqual( - "Missing Sink,Missing correlationId", status.get_message() - ) + self.assertEqual("Missing Sink,Missing correlationId", status.get_message()) - def test_validate_uAttributes_for_rpc_response_message_payload_invalid_permission_level( + def test_validate_u_attributes_for_rpc_response_message_payload_invalid_permission_level( self, ): with self.assertRaises(ValueError) as context: @@ -348,75 +294,47 @@ def test_validate_uAttributes_for_rpc_response_message_payload_invalid_permissio build_sink(), UPriority.UPRIORITY_CS4, Factories.UPROTOCOL.create(), - ).withPermissionLevel(-42).build() + ).with_permission_level(-42).build() self.assertTrue("Value out of range: -42" in context.exception) - def test_validate_uAttributes_for_rpc_response_message_payload_missing_request_id( + def test_validate_u_attributes_for_rpc_response_message_payload_missing_request_id( self, ): - attributes = UAttributesBuilder.response( - build_source(), build_sink(), UPriority.UPRIORITY_CS4, UUID() - ).build() + attributes = UAttributesBuilder.response(build_source(), build_sink(), UPriority.UPRIORITY_CS4, UUID()).build() validator = Validators.RESPONSE.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) self.assertEqual("Missing correlationId", status.get_message()) - # def test_validate_uAttributes_for_rpc_response_message_payload_invalid_request_id(self): - # uuid_java = java.util.UUID.randomUUID() - # reqid = UUID.newBuilder().setMsb(uuid_java.getMostSignificantBits()).setLsb( - # uuid_java.getLeastSignificantBits()).build() - # attributes = UAttributesBuilder.response(UPriority.UPRIORITY_CS4, build_sink(), reqid).build() - # - # validator = Validators.RESPONSE.validator() - # status = validator.validate(attributes) - # self.assertTrue(status.is_failure()) - # self.assertEqual(f"Invalid correlationId [{reqid}]", status.get_message()) - - # ---- - def test_validate_uAttributes_for_publish_message_payload_not_expired( + def test_validate_u_attributes_for_publish_message_payload_not_expired( self, ): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() validator = Validators.PUBLISH.validator() self.assertFalse(validator.is_expired(attributes)) - def test_validate_uAttributes_for_publish_message_payload_not_expired_withTtl_zero( + def test_validate_u_attributes_for_publish_message_payload_not_expired_with_ttl_zero( self, ): - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(0) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(0).build() validator = Validators.PUBLISH.validator() self.assertFalse(validator.is_expired(attributes)) - def test_validate_uAttributes_for_publish_message_payload_not_expired_withTtl( + def test_validate_u_attributes_for_publish_message_payload_not_expired_with_ttl( self, ): - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(10000) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(10000).build() validator = Validators.PUBLISH.validator() self.assertFalse(validator.is_expired(attributes)) - def test_validate_uAttributes_for_publish_message_payload_expired_withTtl( + def test_validate_u_attributes_for_publish_message_payload_expired_with_ttl( self, ): - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(1) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(1).build() time.sleep(0.8) @@ -427,17 +345,11 @@ def test_validate_uAttributes_for_publish_message_payload_expired_withTtl( def test_validating_publish_invalid_ttl_attribute(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).withTtl(-1).build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(-1).build() self.assertTrue("Value out of range: -1" in context.exception) def test_validating_valid_ttl_attribute(self): - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(100) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(100).build() validator = Validators.PUBLISH.validator() status = validator.validate_ttl(attributes) @@ -445,11 +357,7 @@ def test_validating_valid_ttl_attribute(self): def test_validating_invalid_sink_attribute(self): uri = LongUriSerializer().deserialize("//") - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withSink(uri) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_sink(uri).build() validator = Validators.PUBLISH.validator() status = validator.validate_sink(attributes) self.assertTrue(status.is_failure()) @@ -461,34 +369,16 @@ def test_validating_valid_sink_attribute(self): entity=UEntity(name="petapp.steven.gm.com", version_major=1), resource=UResourceBuilder.for_rpc_response(), ) - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withSink(uri) - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_sink(uri).build() validator = Validators.PUBLISH.validator() status = validator.validate_sink(attributes) self.assertEqual(ValidationResult.success(), status) - # def test_validating_invalid_ReqId_attribute(self): - # uuid_python = uuid.UUID('12345678123456781234567812345678') - - # attributes = ( - # UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - # .withReqId(None) - # .build() - # ) - - # validator = Validators.PUBLISH.validator() - # status = validator.validate_req_id(attributes) - # self.assertTrue(status.is_failure()) - # self.assertEqual("Invalid UUID", status.get_message()) - - def test_validating_valid_ReqId_attribute(self): + def test_validating_valid_req_id_attribute(self): attributes = ( UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withReqId(Factories.UPROTOCOL.create()) + .with_req_id(Factories.UPROTOCOL.create()) .build() ) @@ -498,10 +388,8 @@ def test_validating_valid_ReqId_attribute(self): def test_validating_valid_type_attribute(self): attributes = ( - UAttributesBuilder.notification( - build_source(), build_sink(), UPriority.UPRIORITY_CS0 - ) - .withReqId(Factories.UPROTOCOL.create()) + UAttributesBuilder.notification(build_source(), build_sink(), UPriority.UPRIORITY_CS0) + .with_req_id(Factories.UPROTOCOL.create()) .build() ) @@ -511,10 +399,8 @@ def test_validating_valid_type_attribute(self): def test_validating_valid_sink_attribute(self): attributes = ( - UAttributesBuilder.notification( - build_source(), build_sink(), UPriority.UPRIORITY_CS0 - ) - .withReqId(Factories.UPROTOCOL.create()) + UAttributesBuilder.notification(build_source(), build_sink(), UPriority.UPRIORITY_CS0) + .with_req_id(Factories.UPROTOCOL.create()) .build() ) @@ -531,10 +417,8 @@ def test_validating_none_attribute(self): def test_validating_invalid_sink_attribute(self): attributes = ( - UAttributesBuilder.notification( - build_source(), UUri(), UPriority.UPRIORITY_CS0 - ) - .withReqId(Factories.UPROTOCOL.create()) + UAttributesBuilder.notification(build_source(), UUri(), UPriority.UPRIORITY_CS0) + .with_req_id(Factories.UPROTOCOL.create()) .build() ) @@ -542,29 +426,23 @@ def test_validating_invalid_sink_attribute(self): status = validator.validate_sink(attributes) self.assertEqual("Missing Sink", status.get_message()) - def test_validating_invalid_PermissionLevel_attribute(self): + def test_validating_invalid_permission_level_attribute(self): with self.assertRaises(ValueError) as context: - UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).withPermissionLevel(-1).build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_permission_level(-1).build() self.assertTrue("Value out of range: -1" in context.exception) - def test_validating_valid_PermissionLevel_attribute(self): + def test_validating_valid_permission_level_attribute(self): attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withPermissionLevel(3) - .build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_permission_level(3).build() ) validator = Validators.PUBLISH.validator() status = validator.validate_permission_level(attributes) self.assertEqual(ValidationResult.success(), status) - def test_validating_valid_PermissionLevel_attribute_invalid(self): + def test_validating_valid_permission_level_attribute_invalid(self): attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withPermissionLevel(0) - .build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_permission_level(0).build() ) validator = Validators.PUBLISH.validator() @@ -573,9 +451,7 @@ def test_validating_valid_PermissionLevel_attribute_invalid(self): self.assertEqual("Invalid Permission Level", status.get_message()) def test_validating_request_message_types(self): - attributes = UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS6, 100 - ).build() + attributes = UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS6, 100).build() validator = UAttributesValidator.get_validator(attributes) self.assertEqual("UAttributesValidator.Request", str(validator)) @@ -584,9 +460,7 @@ def test_validating_request_message_types(self): self.assertEqual("", status.get_message()) def test_validating_request_validator_with_wrong_messagetype(self): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS6 - ).build() + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS6).build() validator = Validators.REQUEST.validator() self.assertEqual("UAttributesValidator.Request", str(validator)) @@ -614,13 +488,11 @@ def test_validating_response_validator_with_wrong_bad_ttl(self): LongUriSerializer().deserialize("/hartley/1/rpc.response"), UPriority.UPRIORITY_CS6, Factories.UPROTOCOL.create(), - ).withTtl(-1).build() + ).with_ttl(-1).build() self.assertTrue("Value out of range: -1" in context.exception) def test_validating_publish_validator_with_wrong_messagetype(self): - attributes = UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS6, 1000 - ).build() + attributes = UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS6, 1000).build() validator = Validators.PUBLISH.validator() self.assertEqual("UAttributesValidator.Publish", str(validator)) status = validator.validate(attributes) @@ -631,9 +503,7 @@ def test_validating_publish_validator_with_wrong_messagetype(self): ) def test_validating_response_validator_with_wrong_messagetype(self): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS6 - ).build() + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS6).build() validator = Validators.RESPONSE.validator() self.assertEqual("UAttributesValidator.Response", str(validator)) @@ -645,11 +515,7 @@ def test_validating_response_validator_with_wrong_messagetype(self): ) def test_validating_request_containing_token(self): - attributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withToken("null") - .build() - ) + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_token("null").build() validator = UAttributesValidator.get_validator(attributes) self.assertEqual("UAttributesValidator.Publish", str(validator)) @@ -658,9 +524,7 @@ def test_validating_request_containing_token(self): def test_valid_request_methoduri_in_sink(self): sink = LongUriSerializer().deserialize("/test.service/1/rpc.method") - attributes = UAttributesBuilder.request( - build_source(), sink, UPriority.UPRIORITY_CS0, 3000 - ).build() + attributes = UAttributesBuilder.request(build_source(), sink, UPriority.UPRIORITY_CS0, 3000).build() validator = UAttributesValidator.get_validator(attributes) self.assertEqual("UAttributesValidator.Request", str(validator)) status = validator.validate(attributes) @@ -668,9 +532,7 @@ def test_valid_request_methoduri_in_sink(self): def test_invalid_request_methoduri_in_sink(self): sink = LongUriSerializer().deserialize("/test.client/1/test.response") - attributes = UAttributesBuilder.request( - build_source(), sink, UPriority.UPRIORITY_CS0, 3000 - ).build() + attributes = UAttributesBuilder.request(build_source(), sink, UPriority.UPRIORITY_CS0, 3000).build() validator = UAttributesValidator.get_validator(attributes) self.assertEqual("UAttributesValidator.Request", str(validator)) status = validator.validate(attributes) @@ -706,9 +568,7 @@ def test_invalid_response_uri_in_sink(self): self.assertEqual("Invalid RPC response type.", status.get_message()) def test_publish_validation_without_id(self): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() attributes.ClearField("id") validator = Validators.PUBLISH.validator() status = validator.validate(attributes) @@ -716,9 +576,7 @@ def test_publish_validation_without_id(self): self.assertEqual("Missing id", status.get_message()) def test_notification_validation_without_id(self): - attributes = UAttributesBuilder.notification( - build_source(), build_sink(), UPriority.UPRIORITY_CS0 - ).build() + attributes = UAttributesBuilder.notification(build_source(), build_sink(), UPriority.UPRIORITY_CS0).build() attributes.ClearField("id") validator = Validators.NOTIFICATION.validator() status = validator.validate(attributes) @@ -726,9 +584,7 @@ def test_notification_validation_without_id(self): self.assertEqual("Missing id", status.get_message()) def test_request_validation_without_id(self): - attributes = UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS0, 1000 - ).build() + attributes = UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS0, 1000).build() attributes.ClearField("id") validator = Validators.REQUEST.validator() status = validator.validate(attributes) @@ -749,9 +605,7 @@ def test_response_validation_without_id(self): self.assertEqual("Missing id", status.get_message()) def test_publish_validation_invalid_id(self): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() attributes.id.CopyFrom(UUID()) validator = Validators.PUBLISH.validator() status = validator.validate(attributes) @@ -762,9 +616,7 @@ def test_publish_validation_invalid_id(self): ) def test_notification_validation_invalid_id(self): - attributes = UAttributesBuilder.notification( - build_source(), build_sink(), UPriority.UPRIORITY_CS0 - ).build() + attributes = UAttributesBuilder.notification(build_source(), build_sink(), UPriority.UPRIORITY_CS0).build() attributes.id.CopyFrom(UUID()) validator = Validators.NOTIFICATION.validator() status = validator.validate(attributes) @@ -775,9 +627,7 @@ def test_notification_validation_invalid_id(self): ) def test_request_validation_invalid_id(self): - attributes = UAttributesBuilder.request( - build_source(), build_sink(), UPriority.UPRIORITY_CS0, 1000 - ).build() + attributes = UAttributesBuilder.request(build_source(), build_sink(), UPriority.UPRIORITY_CS0, 1000).build() attributes.id.CopyFrom(UUID()) validator = Validators.REQUEST.validator() status = validator.validate(attributes) @@ -804,15 +654,11 @@ def test_response_validation_invalid_id(self): ) def test_publish_validation_when_an_invalid_priority(self): - attributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_UNSPECIFIED - ).build() + attributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_UNSPECIFIED).build() validator = Validators.PUBLISH.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) - self.assertEqual( - "Invalid UPriority [UPRIORITY_UNSPECIFIED]", status.get_message() - ) + self.assertEqual("Invalid UPriority [UPRIORITY_UNSPECIFIED]", status.get_message()) def test_request_validation_with_invalid_priority(self): attributes = UAttributesBuilder.request( @@ -821,9 +667,7 @@ def test_request_validation_with_invalid_priority(self): validator = Validators.REQUEST.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) - self.assertEqual( - "Invalid UPriority [UPRIORITY_UNSPECIFIED]", status.get_message() - ) + self.assertEqual("Invalid UPriority [UPRIORITY_UNSPECIFIED]", status.get_message()) def test_response_validation_with_invalid_priority(self): attributes = UAttributesBuilder.response( @@ -835,9 +679,7 @@ def test_response_validation_with_invalid_priority(self): validator = Validators.RESPONSE.validator() status = validator.validate(attributes) self.assertTrue(status.is_failure()) - self.assertEqual( - "Invalid UPriority [UPRIORITY_UNSPECIFIED]", status.get_message() - ) + self.assertEqual("Invalid UPriority [UPRIORITY_UNSPECIFIED]", status.get_message()) if __name__ == "__main__": diff --git a/tests/test_uri/test_factory/test_uentity_factory.py b/tests/test_uri/test_factory/test_uentityfactory.py similarity index 80% rename from tests/test_uri/test_factory/test_uentity_factory.py rename to tests/test_uri/test_factory/test_uentityfactory.py index af638da..e48d573 100644 --- a/tests/test_uri/test_factory/test_uentity_factory.py +++ b/tests/test_uri/test_factory/test_uentityfactory.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -22,23 +22,22 @@ import unittest -from uprotocol.proto.core.usubscription.v3.usubscription_pb2 import ( - DESCRIPTOR as USubscriptionFileDescriptor, -) +from google.protobuf.descriptor import FileDescriptor, ServiceDescriptor + from uprotocol.proto.core.udiscovery.v3.udiscovery_pb2 import ( - DESCRIPTOR as UDiscoveryFileDescriptor, + DESCRIPTOR as U_DISCOVERY_FILE_DESCRIPTOR, +) +from uprotocol.proto.core.usubscription.v3.usubscription_pb2 import ( + DESCRIPTOR as U_SUBSCRIPTION_FILE_DESCRIPTOR, ) from uprotocol.proto.core.utwin.v2.utwin_pb2 import ( - DESCRIPTOR as UTwinFileDescriptor, + DESCRIPTOR as U_TWIN_FILE_DESCRIPTOR, ) from uprotocol.proto.uri_pb2 import UEntity -from uprotocol.uri.factory.uentity_factory import UEntityFactory - -from google.protobuf.descriptor import ServiceDescriptor, FileDescriptor +from uprotocol.uri.factory.uentityfactory import UEntityFactory class TestUEntityFactory(unittest.TestCase): - def test_from_proto_given_usubscription_descriptor_return_uentity(self): """ Get default service values: @@ -53,10 +52,8 @@ def test_from_proto_given_usubscription_descriptor_return_uentity(self): ... } """ - file_descriptor: FileDescriptor = USubscriptionFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uSubscription"] - ) + file_descriptor: FileDescriptor = U_SUBSCRIPTION_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uSubscription"] default_service_name: str = "core.usubscription" default_version_major: str = 3 default_version_minor: str = 0 @@ -71,13 +68,11 @@ def test_from_proto_given_usubscription_descriptor_return_uentity(self): self.assertEqual(default_id, actual_uentity.id) def test_from_proto_given_udiscovery_descriptor_return_uentity(self): - file_descriptor: FileDescriptor = UDiscoveryFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uDiscovery"] - ) + file_descriptor: FileDescriptor = U_DISCOVERY_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uDiscovery"] default_service_name: str = "core.udiscovery" - default_version_major: str = 3 - default_version_minor: str = 0 + default_version_major: int = 3 + default_version_minor: int = 0 default_id = 1 actual_uentity: UEntity = UEntityFactory.from_proto(service_descriptor) @@ -89,10 +84,8 @@ def test_from_proto_given_udiscovery_descriptor_return_uentity(self): self.assertEqual(default_id, actual_uentity.id) def test_from_proto_given_utwin_descriptor_return_uentity(self): - file_descriptor: FileDescriptor = UTwinFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uTwin"] - ) + file_descriptor: FileDescriptor = U_TWIN_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uTwin"] default_service_name: str = "core.utwin" default_version_major: str = 2 default_version_minor: str = 0 diff --git a/tests/test_uri/test_factory/test_uresource_builder.py b/tests/test_uri/test_factory/test_uresourcebuilder.py similarity index 89% rename from tests/test_uri/test_factory/test_uresource_builder.py rename to tests/test_uri/test_factory/test_uresourcebuilder.py index fad0718..009609d 100644 --- a/tests/test_uri/test_factory/test_uresource_builder.py +++ b/tests/test_uri/test_factory/test_uresourcebuilder.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -21,12 +21,12 @@ """ import unittest -from uprotocol.uri.factory.uresource_builder import UResourceBuilder + from uprotocol.proto.uprotocol_options_pb2 import UServiceTopic +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder class TestUResourceBuilder(unittest.TestCase): - def test_from_id_valid_id(self): id = 0 resource = UResourceBuilder.from_id(id) @@ -55,9 +55,7 @@ def test_from_id_valid_id_above_min_topic_id(self): self.assertEqual(resource.id, 0x8000) def test_from_uservice_topic_valid_service_topic(self): - topic = UServiceTopic( - name="SubscriptionChange", id=0, message="Update" - ) + topic = UServiceTopic(name="SubscriptionChange", id=0, message="Update") resource = UResourceBuilder.from_uservice_topic(topic) self.assertEqual(resource.name, "SubscriptionChange") self.assertEqual(resource.instance, "") @@ -65,9 +63,7 @@ def test_from_uservice_topic_valid_service_topic(self): self.assertEqual(resource.message, "Update") def test_from_uservice_topic_valid_service_topic_with_instance(self): - topic = UServiceTopic( - name="door.front_left", id=0x8000, message="Door" - ) + topic = UServiceTopic(name="door.front_left", id=0x8000, message="Door") resource = UResourceBuilder.from_uservice_topic(topic) self.assertEqual(resource.name, "door") self.assertEqual(resource.instance, "front_left") diff --git a/tests/test_uri/test_serializer/test_ipaddress.py b/tests/test_uri/test_serializer/test_ipaddress.py index 2a24aa6..2c9e886 100644 --- a/tests/test_uri/test_serializer/test_ipaddress.py +++ b/tests/test_uri/test_serializer/test_ipaddress.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ +import socket import unittest + from uprotocol.uri.serializer.ipaddress import IpAddress -import socket class TestIpAddress(unittest.TestCase): - def test_to_bytes_with_null_ip_address(self): bytes_ = IpAddress.to_bytes(None) self.assertEqual(len(bytes_), 0) @@ -71,11 +71,7 @@ def test_is_valid_with_invalid_ipv4_address(self): self.assertFalse(IpAddress.is_valid("192.168.1.2586")) def test_is_valid_with_invalid_ipv4_passing_large_number(self): - self.assertFalse( - IpAddress.is_valid( - "2875687346587326457836485623874658723645782364875623847562378465.1.1.abc" - ) - ) + self.assertFalse(IpAddress.is_valid("2875687346587326457836485623874658723645782364875623847562378465.1.1.abc")) def test_is_valid_with_invalid_ipv4_passing_negative(self): self.assertFalse(IpAddress.is_valid("-1.1.1.abc")) @@ -92,9 +88,7 @@ def test_is_valid_with_invalid_ipv6_address_passing_weird_values(self): def test_is_valid_with_invalid_ipv6_address_that_has_way_too_many_groups( self, ): - self.assertFalse( - IpAddress.is_valid("2001:db8:85a3:0:0:8a2e:370:7334:1234") - ) + self.assertFalse(IpAddress.is_valid("2001:db8:85a3:0:0:8a2e:370:7334:1234")) def test_is_valid_with_valid_ipv6_address_that_has_8_groups(self): self.assertTrue(IpAddress.is_valid("2001:db8:85a3:0:0:8a2e:370:7334")) diff --git a/tests/test_uri/test_serializer/test_longuriserializer.py b/tests/test_uri/test_serializer/test_longuriserializer.py index ae49175..091b675 100644 --- a/tests/test_uri/test_serializer/test_longuriserializer.py +++ b/tests/test_uri/test_serializer/test_longuriserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -22,14 +22,13 @@ import unittest -from uprotocol.proto.uri_pb2 import UEntity, UUri, UAuthority, UResource -from uprotocol.uri.factory.uresource_builder import UResourceBuilder +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.longuriserializer import LongUriSerializer from uprotocol.uri.validator.urivalidator import UriValidator class TestLongUriSerializer(unittest.TestCase): - def test_using_the_serializers(self): uri = UUri( entity=UEntity(name="hartley"), @@ -165,7 +164,7 @@ def test_parse_protocol_uri_with_local_service_no_version_with_resource_with_ins self.assertEqual("front_left", uuri.resource.instance) self.assertTrue(len(uuri.resource.message) == 0) - def test_parse_protocol_uri_with_local_service_with_version_with_resource_with_getMessage( + def test_parse_protocol_uri_with_local_service_with_version_with_resource_with_get_message( self, ): uri = "/body.access/1/door.front_left" @@ -179,7 +178,7 @@ def test_parse_protocol_uri_with_local_service_with_version_with_resource_with_g self.assertEqual("front_left", uuri.resource.instance) self.assertTrue(len(uuri.resource.message) == 0) - def test_parse_protocol_uri_with_local_service_no_version_with_resource_with_instance_and_getMessage( + def test_parse_protocol_uri_with_local_service_no_version_with_resource_with_instance_and_get_message( self, ): uri = "/body.access//door.front_left#Door" @@ -193,7 +192,7 @@ def test_parse_protocol_uri_with_local_service_no_version_with_resource_with_ins self.assertFalse(len(uuri.resource.message) == 0) self.assertEqual("Door", uuri.resource.message) - def test_parse_protocol_uri_with_local_service_with_version_with_resource_with_instance_and_getMessage( + def test_parse_protocol_uri_with_local_service_with_version_with_resource_with_instance_and_get_message( self, ): uri = "/body.access/1/door.front_left#Door" @@ -359,7 +358,7 @@ def test_parse_protocol_uri_with_remote_service_cloud_with_version_with_resource self.assertTrue(len(uuri.resource.instance) == 0) self.assertTrue(len(uuri.resource.message) == 0) - def test_parse_protocol_uri_with_remote_service_no_version_with_resource_and_instance_no_getMessage( + def test_parse_protocol_uri_with_remote_service_no_version_with_resource_and_instance_no_get_message( self, ): uri = "//VCU.MY_CAR_VIN/body.access//door.front_left" @@ -375,7 +374,7 @@ def test_parse_protocol_uri_with_remote_service_no_version_with_resource_and_ins self.assertEqual("front_left", uuri.resource.instance) self.assertTrue(len(uuri.resource.message) == 0) - def test_parse_protocol_uri_with_remote_service_with_version_with_resource_and_instance_no_getMessage( + def test_parse_protocol_uri_with_remote_service_with_version_with_resource_and_instance_no_get_message( self, ): uri = "//VCU.MY_CAR_VIN/body.access/1/door.front_left" @@ -392,7 +391,7 @@ def test_parse_protocol_uri_with_remote_service_with_version_with_resource_and_i self.assertEqual("front_left", uuri.resource.instance) self.assertTrue(len(uuri.resource.message) == 0) - def test_parse_protocol_uri_with_remote_service_no_version_with_resource_and_instance_and_getMessage( + def test_parse_protocol_uri_with_remote_service_no_version_with_resource_and_instance_and_get_message( self, ): uri = "//VCU.MY_CAR_VIN/body.access//door.front_left#Door" @@ -409,7 +408,7 @@ def test_parse_protocol_uri_with_remote_service_no_version_with_resource_and_ins self.assertFalse(len(uuri.resource.message) == 0) self.assertEqual("Door", uuri.resource.message) - def test_parse_protocol_uri_with_remote_cloud_service_no_version_with_resource_and_instance_and_getMessage( + def test_parse_protocol_uri_with_remote_cloud_service_no_version_with_resource_and_instance_and_get_message( self, ): uri = "//cloud.uprotocol.example.com/body.access//door.front_left#Door" @@ -426,7 +425,7 @@ def test_parse_protocol_uri_with_remote_cloud_service_no_version_with_resource_a self.assertFalse(len(uuri.resource.message) == 0) self.assertEqual("Door", uuri.resource.message) - def test_parse_protocol_uri_with_remote_service_with_version_with_resource_and_instance_and_getMessage( + def test_parse_protocol_uri_with_remote_service_with_version_with_resource_and_instance_and_get_message( self, ): uri = "//VCU.MY_CAR_VIN/body.access/1/door.front_left#Door" @@ -444,12 +443,10 @@ def test_parse_protocol_uri_with_remote_service_with_version_with_resource_and_i self.assertFalse(len(uuri.resource.message) == 0) self.assertEqual("Door", uuri.resource.message) - def test_parse_protocol_uri_with_remote_cloud_service_with_version_with_resource_and_instance_and_getMessage( + def test_parse_protocol_uri_with_remote_cloud_service_with_version_with_resource_and_instance_and_get_message( self, ): - uri = ( - "//cloud.uprotocol.example.com/body.access/1/door.front_left#Door" - ) + uri = "//cloud.uprotocol.example.com/body.access/1/door.front_left#Door" uuri = LongUriSerializer().deserialize(uri) self.assertTrue(UriValidator.is_remote(uuri.authority)) self.assertFalse(len(uuri.authority.name) == 0) @@ -514,7 +511,7 @@ def test_build_protocol_uri_from__uri_when__uri_isnull(self): uprotocol_uri = LongUriSerializer().serialize(None) self.assertEqual("", uprotocol_uri) - def test_build_protocol_uri_from__uri_when__uri_isEmpty(self): + def test_build_protocol_uri_from__uri_when__uri_is_empty(self): uuri = UUri() uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("", uprotocol_uri) @@ -555,48 +552,40 @@ def test_build_protocol_uri_from__uri_when__uri_has_local_authority_service_and_ uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("/body.access/1/door", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_l_authority_service_n_vsn_with_rsrc_with_instance_n_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_l_authority_service_n_vsn_with_rsrc_with_instance_n_get_message( self, ): use = UEntity(name="body.access") - uuri = UUri( - entity=use, resource=UResource(name="door", instance="front_left") - ) + uuri = UUri(entity=use, resource=UResource(name="door", instance="front_left")) uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("/body.access//door.front_left", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_l_authority_service_and_vsn_with_rsrc_with_instance_n_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_l_authority_service_and_vsn_with_rsrc_with_instance_n_get_message( self, ): use = UEntity(name="body.access", version_major=1) - uuri = UUri( - entity=use, resource=UResource(name="door", instance="front_left") - ) + uuri = UUri(entity=use, resource=UResource(name="door", instance="front_left")) uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("/body.access/1/door.front_left", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_l_authority_svc_no_vsn_with_rsrc_with_instance_with_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_l_authority_svc_no_vsn_with_rsrc_with_instance_with_get_message( self, ): use = UEntity(name="body.access") uuri = UUri( entity=use, - resource=UResource( - name="door", instance="front_left", message="Door" - ), + resource=UResource(name="door", instance="front_left", message="Door"), ) uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("/body.access//door.front_left#Door", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_l_authority_svc_and_vsn_with_rsrc_with_instance_with_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_l_authority_svc_and_vsn_with_rsrc_with_instance_with_get_message( self, ): use = UEntity(name="body.access", version_major=1) uuri = UUri( entity=use, - resource=UResource( - name="door", instance="front_left", message="Door" - ), + resource=UResource(name="door", instance="front_left", message="Door"), ) uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("/body.access/1/door.front_left#Door", uprotocol_uri) @@ -626,9 +615,7 @@ def test_build_protocol_uri_from_uri_when_uri_has_remote_cloud_authority_service entity=use, ) uprotocol_uri = LongUriSerializer().serialize(uuri) - self.assertEqual( - "//cloud.uprotocol.example.com/body.access/1", uprotocol_uri - ) + self.assertEqual("//cloud.uprotocol.example.com/body.access/1", uprotocol_uri) def test_build_protocol_uri_from_uri_when_uri_has_remote_authority_service_and_version_with_resource( self, @@ -654,7 +641,7 @@ def test_build_protocol_uri_from_uri_when_uri_has_remote_authority_service_no_ve uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual("//vcu.my_car_vin/body.access//door", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_and_vsn_with_rsrc_with_instance_no_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_and_vsn_with_rsrc_with_instance_no_get_message( self, ): use = UEntity(name="body.access", version_major=1) @@ -664,11 +651,9 @@ def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_and_vsn_with_r resource=UResource(name="door", instance="front_left"), ) uprotocol_uri = LongUriSerializer().serialize(uuri) - self.assertEqual( - "//vcu.my_car_vin/body.access/1/door.front_left", uprotocol_uri - ) + self.assertEqual("//vcu.my_car_vin/body.access/1/door.front_left", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_r_cld_authority_svc_and_vsn_with_rsrc_with_instance_n_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_r_cld_authority_svc_and_vsn_with_rsrc_with_instance_n_get_message( self, ): use = UEntity(name="body.access", version_major=1) @@ -683,7 +668,7 @@ def test_build_protocol_uri_from_uri_when_uri_has_r_cld_authority_svc_and_vsn_wi uprotocol_uri, ) - def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_no_vsn_with_resource_with_instance_n_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_no_vsn_with_resource_with_instance_n_get_message( self, ): use = UEntity(name="body.access") @@ -693,20 +678,16 @@ def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_no_vsn_with_re resource=UResource(name="door", instance="front_left"), ) uprotocol_uri = LongUriSerializer().serialize(uuri) - self.assertEqual( - "//vcu.my_car_vin/body.access//door.front_left", uprotocol_uri - ) + self.assertEqual("//vcu.my_car_vin/body.access//door.front_left", uprotocol_uri) - def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_and_version_with_rsrc_with_i_and_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_and_version_with_rsrc_with_i_and_get_message( self, ): use = UEntity(name="body.access", version_major=1) uuri = UUri( authority=UAuthority(name="vcu.my_car_vin"), entity=use, - resource=UResource( - name="door", instance="front_left", message="Door" - ), + resource=UResource(name="door", instance="front_left", message="Door"), ) uprotocol_uri = LongUriSerializer().serialize(uuri) self.assertEqual( @@ -714,45 +695,35 @@ def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_and_version_wi uprotocol_uri, ) - def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_no_version_with_rsrc_with_i_and_getMessage( + def test_build_protocol_uri_from_uri_when_uri_has_r_authority_svc_no_version_with_rsrc_with_i_and_get_message( self, ): use = UEntity(name="body.access") uuri = UUri( authority=UAuthority(name="vcu.my_car_vin"), entity=use, - resource=UResource( - name="door", instance="front_left", message="Door" - ), + resource=UResource(name="door", instance="front_left", message="Door"), ) uprotocol_uri = LongUriSerializer().serialize(uuri) - self.assertEqual( - "//vcu.my_car_vin/body.access//door.front_left#Door", uprotocol_uri - ) + self.assertEqual("//vcu.my_car_vin/body.access//door.front_left#Door", uprotocol_uri) def test_build_protocol_uri_for_source_part_of_rpc_request_where_source_is_local( self, ): use = UEntity(name="petapp", version_major=1) resource = UResource(name="rpc", instance="response") - uprotocol_uri = LongUriSerializer().serialize( - UUri(entity=use, resource=resource) - ) + uprotocol_uri = LongUriSerializer().serialize(UUri(entity=use, resource=resource)) self.assertEqual("/petapp/1/rpc.response", uprotocol_uri) def test_build_protocol_uri_for_source_part_of_rpc_request_where_source_is_remote( self, ): - uAuthority = UAuthority(name="cloud.uprotocol.example.com") + u_authority = UAuthority(name="cloud.uprotocol.example.com") use = UEntity(name="petapp") resource = UResource(name="rpc", instance="response") - uprotocol_uri = LongUriSerializer().serialize( - UUri(authority=uAuthority, entity=use, resource=resource) - ) - self.assertEqual( - "//cloud.uprotocol.example.com/petapp//rpc.response", uprotocol_uri - ) + uprotocol_uri = LongUriSerializer().serialize(UUri(authority=u_authority, entity=use, resource=resource)) + self.assertEqual("//cloud.uprotocol.example.com/petapp//rpc.response", uprotocol_uri) def test_build_protocol_uri_from_uri_parts_when_uri_has_remote_authority_service_and_version_with_resource( self, @@ -760,18 +731,14 @@ def test_build_protocol_uri_from_uri_parts_when_uri_has_remote_authority_service u_authority = UAuthority(name="vcu.my_car_vin") use = UEntity(name="body.access", version_major=1) resource = UResource(name="door") - uprotocol_uri = LongUriSerializer().serialize( - UUri(authority=u_authority, entity=use, resource=resource) - ) + uprotocol_uri = LongUriSerializer().serialize(UUri(authority=u_authority, entity=use, resource=resource)) self.assertEqual("//vcu.my_car_vin/body.access/1/door", uprotocol_uri) def test_custom_scheme_no_scheme(self): u_authority = UAuthority(name="vcu.my_car_vin") use = UEntity(name="body.access", version_major=1) resource = UResource(name="door") - ucustom_uri = LongUriSerializer().serialize( - UUri(authority=u_authority, entity=use, resource=resource) - ) + ucustom_uri = LongUriSerializer().serialize(UUri(authority=u_authority, entity=use, resource=resource)) self.assertEqual("//vcu.my_car_vin/body.access/1/door", ucustom_uri) def test_parse_local_protocol_uri_with_custom_scheme(self): @@ -803,33 +770,21 @@ def test_b_prtcl_uri__uri__uri_rmte_auth_srvc_vsn_rsrc_emp_instc(self): u_authority = UAuthority(name="vcu.my_car_vin") use = UEntity(name="body.access", version_major=1) resource = UResource(name="door", instance="", message="Door") - ucustom_uri = LongUriSerializer().serialize( - UUri(authority=u_authority, entity=use, resource=resource) - ) - self.assertEqual( - "//vcu.my_car_vin/body.access/1/door#Door", ucustom_uri - ) + ucustom_uri = LongUriSerializer().serialize(UUri(authority=u_authority, entity=use, resource=resource)) + self.assertEqual("//vcu.my_car_vin/body.access/1/door#Door", ucustom_uri) def test_b_prtcl_uri__uri__uri_rmte_auth_srvc_vsn_rsrc_emp_msg(self): u_authority = UAuthority(name="vcu.my_car_vin") use = UEntity(name="body.access", version_major=1) resource = UResource(name="door", instance="front_left", message="") - ucustom_uri = LongUriSerializer().serialize( - UUri(authority=u_authority, entity=use, resource=resource) - ) - self.assertEqual( - "//vcu.my_car_vin/body.access/1/door.front_left", ucustom_uri - ) + ucustom_uri = LongUriSerializer().serialize(UUri(authority=u_authority, entity=use, resource=resource)) + self.assertEqual("//vcu.my_car_vin/body.access/1/door.front_left", ucustom_uri) def test_b_prtcl_uri__uri__uri_empty_auth_service_ver_w_rsrc(self): u_authority = UAuthority(name="") use = UEntity(name="body.access", version_major=1) - resource = UResource( - name="door", instance="front_left", message="Door" - ) - ucustom_uri = LongUriSerializer().serialize( - UUri(authority=u_authority, entity=use, resource=resource) - ) + resource = UResource(name="door", instance="front_left", message="Door") + ucustom_uri = LongUriSerializer().serialize(UUri(authority=u_authority, entity=use, resource=resource)) self.assertEqual("/body.access/1/door.front_left#Door", ucustom_uri) diff --git a/tests/test_uri/test_serializer/test_microuriserializer.py b/tests/test_uri/test_serializer/test_microuriserializer.py index afffad5..1b67ea9 100644 --- a/tests/test_uri/test_serializer/test_microuriserializer.py +++ b/tests/test_uri/test_serializer/test_microuriserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -23,14 +23,13 @@ import socket import unittest -from uprotocol.proto.uri_pb2 import UEntity, UUri, UAuthority, UResource -from uprotocol.uri.factory.uresource_builder import UResourceBuilder +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.microuriserializer import MicroUriSerializer from uprotocol.uri.validator.urivalidator import UriValidator class TestMicroUriSerializer(unittest.TestCase): - def test_empty(self): bytes_uuri = MicroUriSerializer().serialize(UUri()) self.assertEqual(len(bytes_uuri), 0) @@ -77,54 +76,40 @@ def test_serialize_uri_missing_resource_id(self): self.assertTrue(len(bytes_uuri) == 0) def test_deserialize_bad_microuri_length(self): - badMicroUUri = bytes([0x1, 0x0, 0x0, 0x0, 0x0]) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x1, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) - badMicroUUri = bytes( - [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0] - ) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) def test_deserialize_bad_microuri_not_version_1(self): - badMicroUUri = bytes( - [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0] - ) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) def test_deserialize_bad_microuri_not_valid_address_type(self): - badMicroUUri = bytes( - [0x1, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0] - ) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x1, 0x5, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) def test_deserialize_bad_microuri_valid_address_type_invalid_length(self): - badMicroUUri = bytes( - [0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0] - ) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) - badMicroUUri = bytes( - [0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0] - ) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) - badMicroUUri = bytes( - [0x1, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0] - ) - uuri = MicroUriSerializer().deserialize(badMicroUUri) + bad_micro_uuri = bytes([0x1, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]) + uuri = MicroUriSerializer().deserialize(bad_micro_uuri) self.assertTrue(UriValidator.is_empty(uuri)) def test_serialize_good_ipv4_based_authority(self): uri = UUri( - authority=UAuthority( - ip=socket.inet_pton(socket.AF_INET, "10.0.3.3") - ), + authority=UAuthority(ip=socket.inet_pton(socket.AF_INET, "10.0.3.3")), entity=UEntity(id=29999, version_major=254), resource=UResourceBuilder.for_rpc_request(99), ) @@ -147,11 +132,7 @@ def test_serialize_bad_authority(self): def test_serialize_good_ipv6_based_authority(self): uri = UUri( - authority=UAuthority( - ip=socket.inet_pton( - socket.AF_INET6, "2001:0db8:85a3:0000:0000:8a2e:0370:7334" - ) - ), + authority=UAuthority(ip=socket.inet_pton(socket.AF_INET6, "2001:0db8:85a3:0000:0000:8a2e:0370:7334")), entity=UEntity(id=29999, version_major=254), resource=UResource(id=19999, name="rpc"), ) @@ -163,9 +144,9 @@ def test_serialize_good_ipv6_based_authority(self): def test_serialize_id_based_authority(self): size = 13 - byteArray = bytearray(i for i in range(size)) + byte_array = bytearray(i for i in range(size)) uri = UUri( - authority=UAuthority(id=bytes(byteArray)), + authority=UAuthority(id=bytes(byte_array)), entity=UEntity(id=29999, version_major=254), resource=UResource(id=19999, name="rpc"), ) @@ -176,9 +157,9 @@ def test_serialize_id_based_authority(self): self.assertTrue(uri == uri2) def test_serialize_bad_length_ip_based_authority(self): - byteArray = bytes([127, 1, 23, 123, 12, 6]) + byte_array = bytes([127, 1, 23, 123, 12, 6]) uri = UUri( - authority=UAuthority(ip=byteArray), + authority=UAuthority(ip=byte_array), entity=UEntity(id=29999, version_major=254), resource=UResource(id=19999), ) @@ -187,9 +168,9 @@ def test_serialize_bad_length_ip_based_authority(self): def test_serialize_id_size_255_based_authority(self): size = 129 - byteArray = bytes(i for i in range(size)) + byte_array = bytes(i for i in range(size)) uri = UUri( - authority=UAuthority(id=byteArray), + authority=UAuthority(id=byte_array), entity=UEntity(id=29999, version_major=254), resource=UResourceBuilder.for_rpc_request(99), ) @@ -200,12 +181,12 @@ def test_serialize_id_size_255_based_authority(self): self.assertTrue(uri == uri2) def test_serialize_id_out_of_range_2(self): - byteArray = bytearray(258) + byte_array = bytearray(258) for i in range(256): - byteArray[i] = i - byteArray = bytes(byteArray) + byte_array[i] = i + byte_array = bytes(byte_array) uri = UUri( - authority=UAuthority(id=byteArray), + authority=UAuthority(id=byte_array), entity=UEntity(id=29999, version_major=254), resource=UResourceBuilder.from_id(19999), ) @@ -214,9 +195,9 @@ def test_serialize_id_out_of_range_2(self): def test_serialize_resource_id_out_of_range(self): size = 129 - byteArray = bytes(i for i in range(size)) + byte_array = bytes(i for i in range(size)) uri = UUri( - authority=UAuthority(id=byteArray), + authority=UAuthority(id=byte_array), entity=UEntity(id=29999, version_major=254), resource=UResourceBuilder.from_id(65536), ) @@ -225,9 +206,9 @@ def test_serialize_resource_id_out_of_range(self): def test_serialize_entity_id_out_of_range(self): size = 129 - byteArray = bytes(i for i in range(size)) + byte_array = bytes(i for i in range(size)) uri = UUri( - authority=UAuthority(id=byteArray), + authority=UAuthority(id=byte_array), entity=UEntity(id=65536, version_major=254), resource=UResourceBuilder.from_id(19999), ) diff --git a/tests/test_uri/test_serializer/test_shorturiserializer.py b/tests/test_uri/test_serializer/test_shorturiserializer.py index efd596a..0edc320 100644 --- a/tests/test_uri/test_serializer/test_shorturiserializer.py +++ b/tests/test_uri/test_serializer/test_shorturiserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -21,14 +21,14 @@ """ import unittest -from uprotocol.uri.serializer.shorturiserializer import ShortUriSerializer -from uprotocol.uri.factory.uresource_builder import UResourceBuilder -from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri from socket import inet_aton +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder +from uprotocol.uri.serializer.shorturiserializer import ShortUriSerializer + class ShortUriSerializerTest(unittest.TestCase): - def test_serialize_with_null_uri(self): str_uri = ShortUriSerializer().serialize(None) self.assertEqual("", str_uri) diff --git a/tests/test_uri/test_serializer/test_uriserializer.py b/tests/test_uri/test_serializer/test_uriserializer.py index 24402f8..3ba97bc 100644 --- a/tests/test_uri/test_serializer/test_uriserializer.py +++ b/tests/test_uri/test_serializer/test_uriserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,34 +20,25 @@ SPDX-License-Identifier: Apache-2.0 """ -import unittest import socket +import unittest + +from google.protobuf.descriptor import FileDescriptor, ServiceDescriptor +from google.protobuf.descriptor_pb2 import ServiceOptions +from google.protobuf.internal.containers import RepeatedCompositeFieldContainer +from uprotocol.proto.core.usubscription.v3.usubscription_pb2 import DESCRIPTOR as U_SUBSCRIPTION_FILE_DESCRIPTOR +from uprotocol.proto.uprotocol_options_pb2 import UServiceTopic, notification_topic from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri -from uprotocol.uri.factory.uentity_factory import UEntityFactory +from uprotocol.uri.factory.uentityfactory import UEntityFactory from uprotocol.uri.serializer.longuriserializer import LongUriSerializer from uprotocol.uri.serializer.microuriserializer import MicroUriSerializer from uprotocol.uri.serializer.shorturiserializer import ShortUriSerializer - from uprotocol.uri.validator.urivalidator import UriValidator -from uprotocol.proto.core.usubscription.v3.usubscription_pb2 import ( - DESCRIPTOR as USubscriptionFileDescriptor, -) -from uprotocol.proto.uprotocol_options_pb2 import ( - notification_topic as Notification_Topic, -) -from uprotocol.proto.uprotocol_options_pb2 import UServiceTopic - -from google.protobuf.descriptor import ServiceDescriptor, FileDescriptor -from google.protobuf.descriptor_pb2 import ServiceOptions -from google.protobuf.internal.containers import RepeatedCompositeFieldContainer class TestUriSerializer(unittest.TestCase): - - def get_uresource( - self, container: RepeatedCompositeFieldContainer - ) -> UResource: + def get_uresource(self, container: RepeatedCompositeFieldContainer) -> UResource: if len(container) == 0: resrc = UResource() else: @@ -72,15 +63,10 @@ def check_given_test_data_is_formed_correctly(self, uuri: UUri): self.assertTrue(UriValidator.is_short_form(uuri)) def test_build_resolved_full_information_compare(self): - - file_descriptor: FileDescriptor = USubscriptionFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uSubscription"] - ) + file_descriptor: FileDescriptor = U_SUBSCRIPTION_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uSubscription"] options: ServiceOptions = service_descriptor.GetOptions() - container: RepeatedCompositeFieldContainer = options.Extensions[ - Notification_Topic - ] + container: RepeatedCompositeFieldContainer = options.Extensions[notification_topic] uresrc: UResource = self.get_uresource(container) uentity: UEntity = UEntityFactory.from_proto(service_descriptor) @@ -90,33 +76,21 @@ def test_build_resolved_full_information_compare(self): actual_short_uri: str = ShortUriSerializer().serialize(uuri) actual_micro_uri: bytes = MicroUriSerializer().serialize(uuri) - expected_longuri_given_no_uauthority: str = ( - "/core.usubscription/3/SubscriptionChange#Update" - ) + expected_longuri_given_no_uauthority: str = "/core.usubscription/3/SubscriptionChange#Update" expected_shorturi_given_no_uauthority: str = "/0/3/32768" - expected_micro_uri_given_no_uauthority = bytearray( - b"\x01\x00\x80\x00\x00\x00\x03\x00" - ) + expected_micro_uri_given_no_uauthority = bytearray(b"\x01\x00\x80\x00\x00\x00\x03\x00") self.check_given_test_data_is_formed_correctly(uuri) self.assertEqual(expected_longuri_given_no_uauthority, actual_long_uri) - self.assertEqual( - expected_shorturi_given_no_uauthority, actual_short_uri - ) - self.assertEqual( - expected_micro_uri_given_no_uauthority, actual_micro_uri - ) + self.assertEqual(expected_shorturi_given_no_uauthority, actual_short_uri) + self.assertEqual(expected_micro_uri_given_no_uauthority, actual_micro_uri) def test_build_resolved_full_information_compare_with_ipv4(self): - file_descriptor: FileDescriptor = USubscriptionFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uSubscription"] - ) + file_descriptor: FileDescriptor = U_SUBSCRIPTION_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uSubscription"] options: ServiceOptions = service_descriptor.GetOptions() - container: RepeatedCompositeFieldContainer = options.Extensions[ - Notification_Topic - ] + container: RepeatedCompositeFieldContainer = options.Extensions[notification_topic] uresrc: UResource = self.get_uresource(container) uentity: UEntity = UEntityFactory.from_proto(service_descriptor) @@ -124,9 +98,7 @@ def test_build_resolved_full_information_compare_with_ipv4(self): ipv4_address: str = "192.168.1.100" ipv4_packed_ip: bytes = socket.inet_pton(socket.AF_INET, ipv4_address) - authority: UAuthority = UAuthority( - name="vcu.veh.gm.com", ip=ipv4_packed_ip - ) + authority: UAuthority = UAuthority(name="vcu.veh.gm.com", ip=ipv4_packed_ip) uuri: UUri = UUri(entity=uentity, resource=uresrc, authority=authority) self.check_given_test_data_is_formed_correctly(uuri) @@ -135,42 +107,24 @@ def test_build_resolved_full_information_compare_with_ipv4(self): actual_short_uri: str = ShortUriSerializer().serialize(uuri) actual_micro_uri: bytes = MicroUriSerializer().serialize(uuri) - expected_longuri_given_ipv4_uathority: str = ( - "//vcu.veh.gm.com/core.usubscription/3/SubscriptionChange#Update" - ) - expected_shorturi_given_ipv4_uathority: str = ( - "//192.168.1.100/0/3/32768" - ) - expected_microuri_given_ipv4_uathority = bytearray( - b"\x01\x01\x80\x00\x00\x00\x03\x00\xc0\xa8\x01d" - ) + expected_longuri_given_ipv4_uathority: str = "//vcu.veh.gm.com/core.usubscription/3/SubscriptionChange#Update" + expected_shorturi_given_ipv4_uathority: str = "//192.168.1.100/0/3/32768" + expected_microuri_given_ipv4_uathority = bytearray(b"\x01\x01\x80\x00\x00\x00\x03\x00\xc0\xa8\x01d") - self.assertEqual( - expected_longuri_given_ipv4_uathority, actual_long_uri - ) - self.assertEqual( - expected_shorturi_given_ipv4_uathority, actual_short_uri - ) - self.assertEqual( - expected_microuri_given_ipv4_uathority, actual_micro_uri - ) + self.assertEqual(expected_longuri_given_ipv4_uathority, actual_long_uri) + self.assertEqual(expected_shorturi_given_ipv4_uathority, actual_short_uri) + self.assertEqual(expected_microuri_given_ipv4_uathority, actual_micro_uri) def test_build_resolved_full_information_compare_with_id(self): - file_descriptor: FileDescriptor = USubscriptionFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uSubscription"] - ) + file_descriptor: FileDescriptor = U_SUBSCRIPTION_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uSubscription"] options: ServiceOptions = service_descriptor.GetOptions() - container: RepeatedCompositeFieldContainer = options.Extensions[ - Notification_Topic - ] + container: RepeatedCompositeFieldContainer = options.Extensions[notification_topic] uresrc: UResource = self.get_uresource(container) uentity: UEntity = UEntityFactory.from_proto(service_descriptor) - authority: UAuthority = UAuthority( - name="1G1YZ23J9P5800001.veh.gm.com", id=b"1G1YZ23J9P5800001" - ) + authority: UAuthority = UAuthority(name="1G1YZ23J9P5800001.veh.gm.com", id=b"1G1YZ23J9P5800001") uuri: UUri = UUri(entity=uentity, resource=uresrc, authority=authority) self.check_given_test_data_is_formed_correctly(uuri) @@ -182,30 +136,18 @@ def test_build_resolved_full_information_compare_with_id(self): expected_longuri_given_id_uathority: str = ( "//1G1YZ23J9P5800001.veh.gm.com/core.usubscription/3/SubscriptionChange#Update" ) - expected_shorturi_given_id_uathority: str = ( - "//1G1YZ23J9P5800001/0/3/32768" - ) - expected_microuri_given_id_uathority = bytearray( - b"\x01\x03\x80\x00\x00\x00\x03\x00\x111G1YZ23J9P5800001" - ) + expected_shorturi_given_id_uathority: str = "//1G1YZ23J9P5800001/0/3/32768" + expected_microuri_given_id_uathority = bytearray(b"\x01\x03\x80\x00\x00\x00\x03\x00\x111G1YZ23J9P5800001") self.assertEqual(expected_longuri_given_id_uathority, actual_long_uri) - self.assertEqual( - expected_shorturi_given_id_uathority, actual_short_uri - ) - self.assertEqual( - expected_microuri_given_id_uathority, actual_micro_uri - ) + self.assertEqual(expected_shorturi_given_id_uathority, actual_short_uri) + self.assertEqual(expected_microuri_given_id_uathority, actual_micro_uri) def test_build_resolved_full_information_compare_with_ipv6(self): - file_descriptor: FileDescriptor = USubscriptionFileDescriptor - service_descriptor: ServiceDescriptor = ( - file_descriptor.services_by_name["uSubscription"] - ) + file_descriptor: FileDescriptor = U_SUBSCRIPTION_FILE_DESCRIPTOR + service_descriptor: ServiceDescriptor = file_descriptor.services_by_name["uSubscription"] options: ServiceOptions = service_descriptor.GetOptions() - container: RepeatedCompositeFieldContainer = options.Extensions[ - Notification_Topic - ] + container: RepeatedCompositeFieldContainer = options.Extensions[notification_topic] uresrc: UResource = self.get_uresource(container) uentity: UEntity = UEntityFactory.from_proto(service_descriptor) @@ -214,9 +156,7 @@ def test_build_resolved_full_information_compare_with_ipv6(self): ipv6_address: str = "2001:db8:85a3:0:0:8a2e:370:7334" ipv6_packed_ip: bytes = socket.inet_pton(socket.AF_INET6, ipv6_address) - authority: UAuthority = UAuthority( - name="vcu.veh.gm.com", ip=ipv6_packed_ip - ) + authority: UAuthority = UAuthority(name="vcu.veh.gm.com", ip=ipv6_packed_ip) uuri: UUri = UUri(entity=uentity, resource=uresrc, authority=authority) self.check_given_test_data_is_formed_correctly(uuri) @@ -225,25 +165,15 @@ def test_build_resolved_full_information_compare_with_ipv6(self): actual_short_uri: str = ShortUriSerializer().serialize(uuri) actual_micro_uri: bytes = MicroUriSerializer().serialize(uuri) - expected_longuri_given_ipv6_uathority: str = ( - "//vcu.veh.gm.com/core.usubscription/3/SubscriptionChange#Update" - ) - expected_shorturi_given_ipv6_uathority: str = ( - "//2001:db8:85a3::8a2e:370:7334/0/3/32768" - ) + expected_longuri_given_ipv6_uathority: str = "//vcu.veh.gm.com/core.usubscription/3/SubscriptionChange#Update" + expected_shorturi_given_ipv6_uathority: str = "//2001:db8:85a3::8a2e:370:7334/0/3/32768" expected_microuri_given_ipv6_uathority = bytearray( b"\x01\x02\x80\x00\x00\x00\x03\x00 \x01\r\xb8\x85\xa3\x00\x00\x00\x00\x8a.\x03ps4" ) - self.assertEqual( - expected_longuri_given_ipv6_uathority, actual_long_uri - ) - self.assertEqual( - expected_shorturi_given_ipv6_uathority, actual_short_uri - ) - self.assertEqual( - expected_microuri_given_ipv6_uathority, actual_micro_uri - ) + self.assertEqual(expected_longuri_given_ipv6_uathority, actual_long_uri) + self.assertEqual(expected_shorturi_given_ipv6_uathority, actual_short_uri) + self.assertEqual(expected_microuri_given_ipv6_uathority, actual_micro_uri) if __name__ == "__main__": diff --git a/tests/test_uri/test_validator/test_urivalidator.py b/tests/test_uri/test_validator/test_urivalidator.py index 52610c6..fb71ea2 100644 --- a/tests/test_uri/test_validator/test_urivalidator.py +++ b/tests/test_uri/test_validator/test_urivalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -24,28 +24,27 @@ import os import unittest +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.longuriserializer import LongUriSerializer from uprotocol.uri.validator.urivalidator import UriValidator -from uprotocol.uri.factory.uresource_builder import UResourceBuilder from uprotocol.validation.validationresult import ValidationResult -from uprotocol.proto.uri_pb2 import UUri, UEntity, UResource, UAuthority class TestUriValidator(unittest.TestCase): - def test_validate_blank_uri(self): uri = LongUriSerializer().deserialize(None) status = UriValidator.validate(uri) self.assertTrue(UriValidator.is_empty(uri)) self.assertEqual("Uri is empty.", status.get_message()) - def test_validate_uri_with_no_entity_getName(self): + def test_validate_uri_with_no_entity_get_name(self): uri = LongUriSerializer().deserialize("//") status = UriValidator.validate(uri) self.assertTrue(UriValidator.is_empty(uri)) self.assertEqual("Uri is empty.", status.get_message()) - def test_validate_uri_with_getEntity(self): + def test_validate_uri_with_get_entity(self): uri = LongUriSerializer().deserialize("/neelam") status = UriValidator.validate(uri) self.assertTrue(ValidationResult.success().__eq__(status)) @@ -61,41 +60,41 @@ def test_validate_with_blank_uentity_name_uri(self): self.assertTrue(status.is_failure()) self.assertEqual("Uri is empty.", status.get_message()) - def test_validateRpcMethod_with_valid_uri(self): + def test_validate_rpc_method_with_valid_uri(self): uri = LongUriSerializer().deserialize("/neelam//rpc.echo") status = UriValidator.validate_rpc_method(uri) self.assertTrue(ValidationResult.success().__eq__(status)) - def test_validateRpcMethod_with_invalid_uri(self): + def test_validate_rpc_method_with_invalid_uri(self): uri = LongUriSerializer().deserialize("/neelam/echo") status = UriValidator.validate_rpc_method(uri) self.assertTrue(status.is_failure()) self.assertEqual("Uri is empty.", status.get_message()) - def test_validateRpcMethod_with_malformed_uri(self): + def test_validate_rpc_method_with_malformed_uri(self): uri = LongUriSerializer().deserialize("neelam") status = UriValidator.validate_rpc_method(uri) self.assertTrue(UriValidator.is_empty(uri)) self.assertEqual("Uri is empty.", status.get_message()) - def test_validateRpcResponse_with_valid_uri(self): + def test_validate_rpc_response_with_valid_uri(self): uri = LongUriSerializer().deserialize("/neelam//rpc.response") status = UriValidator.validate_rpc_response(uri) self.assertTrue(ValidationResult.success().__eq__(status)) - def test_validateRpcResponse_with_malformed_uri(self): + def test_validate_rpc_response_with_malformed_uri(self): uri = LongUriSerializer().deserialize("neelam") status = UriValidator.validate_rpc_response(uri) self.assertTrue(UriValidator.is_empty(uri)) self.assertEqual("Uri is empty.", status.get_message()) - def test_validateRpcResponse_with_rpc_type(self): + def test_validate_rpc_response_with_rpc_type(self): uri = LongUriSerializer().deserialize("/neelam//dummy.wrong") status = UriValidator.validate_rpc_response(uri) self.assertTrue(status.is_failure()) self.assertEqual("Invalid RPC response type.", status.get_message()) - def test_validateRpcResponse_with_invalid_rpc_response_type(self): + def test_validate_rpc_response_with_invalid_rpc_response_type(self): uri = LongUriSerializer().deserialize("/neelam//rpc.wrong") status = UriValidator.validate_rpc_response(uri) self.assertTrue(status.is_failure()) @@ -158,37 +157,27 @@ def test_topic_uri_invalid_when_uri_is_missing_use_name_local(self): def test_rpc_topic_uri_with_version_when_it_is_valid_remote(self): uri = "//bo.cloud/petapp/1/rpc.response" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_topic_uri_no_version_when_it_is_valid_remote(self): uri = "//bo.cloud/petapp//rpc.response" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_topic_uri_with_version_when_it_is_valid_local(self): uri = "/petapp/1/rpc.response" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_topic_uri_no_version_when_it_is_valid_local(self): uri = "/petapp//rpc.response" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_topic_uri_invalid_when_uri_has_schema_only(self): uri = ":" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_topic_uri_with_version_when_it_is_not_valid_missing_rpc_response_local(self): @@ -200,106 +189,78 @@ def test_rpc_topic_uri_with_version_when_it_is_not_valid_missing_rpc_response_re self, ): uri = "//petapp/1/dog" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_topic_uri_invalid_when_uri_is_remote_no_authority(self): uri = "//" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_topic_uri_invalid_when_uri_is_remote_no_authority_with_use( self, ): uri = "///body.access/1" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_topic_uri_invalid_when_uri_is_missing_use(self): uri = "//VCU.myvin" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_topic_uri_invalid_when_uri_is_missing_use_name_remote(self): uri = "/1" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_topic_uri_invalid_when_uri_is_missing_use_name_local(self): uri = "//VCU.myvin//1" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_with_version_when_it_is_valid_remote(self): uri = "//VCU.myvin/body.access/1/rpc.UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_method_uri_no_version_when_it_is_valid_remote(self): uri = "//VCU.myvin/body.access//rpc.UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_method_uri_with_version_when_it_is_valid_local(self): uri = "/body.access/1/rpc.UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_method_uri_no_version_when_it_is_valid_local(self): uri = "/body.access//rpc.UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_success) def test_rpc_method_uri_invalid_when_uri_has_schema_only(self): uri = ":" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_with_version_when_it_is_not_valid_not_rpc_method_local( self, ): uri = "/body.access//UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_with_version_when_it_is_not_valid_not_rpc_method_remote( self, ): uri = "//body.access/1/UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_invalid_when_uri_is_remote_no_authority(self): uri = "//" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_invalid_when_uri_is_remote_no_authority_with_use( @@ -321,29 +282,21 @@ def test_rpc_method_uri_invalid_when_uri_is_remote_missing_authority_remotecase( ) status = UriValidator.validate_rpc_method(uuri) self.assertTrue(status.is_failure()) - self.assertEqual( - "Uri is remote missing uAuthority.", status.get_message() - ) + self.assertEqual("Uri is remote missing u_authority.", status.get_message()) def test_rpc_method_uri_invalid_when_uri_is_missing_use(self): uri = "//VCU.myvin" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_invalid_when_uri_is_missing_use_name_local(self): uri = "/1/rpc.UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_rpc_method_uri_invalid_when_uri_is_missing_use_name_remote(self): uri = "//VCU.myvin//1/rpc.UpdateDoor" - status = UriValidator.validate_rpc_method( - LongUriSerializer().deserialize(uri) - ) + status = UriValidator.validate_rpc_method(LongUriSerializer().deserialize(uri)) self.assertTrue(status.is_failure()) def test_all_valid_uris(self): @@ -361,9 +314,7 @@ def test_all_invalid_uris(self): uuri = LongUriSerializer().deserialize(invalid_uri["uri"]) status = UriValidator.validate(uuri) self.assertTrue(status.is_failure()) - self.assertEqual( - status.get_message(), invalid_uri["status_message"] - ) + self.assertEqual(status.get_message(), invalid_uri["status_message"]) def test_all_valid_rpc_uris(self): valid_rpc_uris = self.get_json_object()["validRpcUris"] @@ -378,14 +329,10 @@ def test_all_invalid_rpc_uris(self): uuri = LongUriSerializer().deserialize(invalid_rpc_uri["uri"]) status = UriValidator.validate_rpc_method(uuri) self.assertTrue(status.is_failure()) - self.assertEqual( - status.get_message(), invalid_rpc_uri["status_message"] - ) + self.assertEqual(status.get_message(), invalid_rpc_uri["status_message"]) def test_all_valid_rpc_response_uris(self): - valid_rpc_response_uris = self.get_json_object()[ - "validRpcResponseUris" - ] + valid_rpc_response_uris = self.get_json_object()["validRpcResponseUris"] for valid_rpc_response_uri in valid_rpc_response_uris: uuri = LongUriSerializer().deserialize(valid_rpc_response_uri) status = UriValidator.validate_rpc_response(uuri) @@ -402,9 +349,7 @@ def test_valid_rpc_response_uri(self): self.assertTrue(status.is_success) def test_all_invalid_rpc_response_uris(self): - invalid_rpc_response_uris = self.get_json_object()[ - "invalidRpcResponseUris" - ] + invalid_rpc_response_uris = self.get_json_object()["invalidRpcResponseUris"] for invalid_rpc_response_uri in invalid_rpc_response_uris: uuri = LongUriSerializer().deserialize(invalid_rpc_response_uri) status = UriValidator.validate_rpc_response(uuri) @@ -511,24 +456,6 @@ def test_is_local_when_authority_is_null(self): def test_is_remote_when_authority_is_null(self): self.assertFalse(UriValidator.is_remote(None)) - # def test_is_remote_when_authority_does_not_have_a_name_but_does_have_a_number_set(self): - # authority = UAuthority(id=b"hello Jello") - # self.assertTrue(UriValidator.is_remote(authority)) - # self.assertFalse(authority.name is not None) - # self.assertEqual(authority.number_case(), UAuthority.NumberCase.ID) - - # def test_is_remote_when_authority_has_name_and_number_set(self): - # authority = UAuthority(name="vcu.veh.gm.com", id=b"hello Jello") - # self.assertTrue(UriValidator.is_remote(authority)) - # self.assertTrue(authority.name is not None) - # self.assertEqual(authority.number_case(), UAuthority.NumberCase.ID) - - # def test_is_remote_when_authority_has_name_and_number_is_not_set(self): - # authority = UAuthority(name="vcu.veh.gm.com") - # self.assertTrue(UriValidator.is_remote(authority)) - # self.assertTrue(authority.name is not None) - # self.assertEqual(authority.number_case(), UAuthority.NumberCase.NUMBER_NOT_SET) - if __name__ == "__main__": unittest.main() diff --git a/tests/test_uuid/test_factory/test_uuidfactory.py b/tests/test_uuid/test_factory/test_uuidfactory.py index 479bbc2..b13aa25 100644 --- a/tests/test_uuid/test_factory/test_uuidfactory.py +++ b/tests/test_uuid/test_factory/test_uuidfactory.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2024 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2024 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,18 +20,17 @@ SPDX-License-Identifier: Apache-2.0 """ - -from datetime import datetime, timedelta, timezone import unittest -from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer -from uprotocol.uuid.serializer.microuuidserializer import MicroUuidSerializer +from datetime import datetime, timedelta, timezone + +from uprotocol.proto.uuid_pb2 import UUID from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.uuid.factory.uuidutils import UUIDUtils, Version -from uprotocol.proto.uuid_pb2 import UUID +from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer +from uprotocol.uuid.serializer.microuuidserializer import MicroUuidSerializer class TestUUIDFactory(unittest.TestCase): - def test_uuidv8_creation(self): now = datetime.now() uuid = Factories.UPROTOCOL.create(now) @@ -103,7 +102,6 @@ def test_uuidv6_creation_with_instant(self): now = datetime.now() uuid = Factories.UUIDV6.create(now) version = UUIDUtils.get_version(uuid) - # time = UUIDUtils.getTime(uuid) bytes_data = MicroUuidSerializer.instance().serialize(uuid) uuid_string = LongUuidSerializer.instance().serialize(uuid) @@ -112,8 +110,6 @@ def test_uuidv6_creation_with_instant(self): self.assertTrue(UUIDUtils.is_uuid(uuid)) self.assertFalse(UUIDUtils.is_uprotocol(uuid)) self.assertTrue(version) - # self.assertTrue(time) - # self.assertEqual(time, int(17007094616498160 * 1000)) self.assertGreater(len(bytes_data), 0) self.assertFalse(uuid_string.isspace()) @@ -149,10 +145,8 @@ def test_uuidv6_creation_with_null_instant(self): self.assertEqual(uuid, uuid1) self.assertEqual(uuid, uuid2) - def test_UUIDUtils_for_random_uuid(self): - uuid = LongUuidSerializer.instance().deserialize( - "195f9bd1-526d-4c28-91b1-ff34c8e3632d" - ) + def test_uuid_utils_for_random_uuid(self): + uuid = LongUuidSerializer.instance().deserialize("195f9bd1-526d-4c28-91b1-ff34c8e3632d") version = UUIDUtils.get_version(uuid) time = UUIDUtils.get_time(uuid) bytes_data = MicroUuidSerializer.instance().serialize(uuid) @@ -175,7 +169,7 @@ def test_UUIDUtils_for_random_uuid(self): self.assertEqual(uuid, uuid1) self.assertEqual(uuid, uuid2) - def test_UUIDUtils_for_empty_uuid(self): + def test_uuid_utils_for_empty_uuid(self): uuid = UUID() version = UUIDUtils.get_version(uuid) time = UUIDUtils.get_time(uuid) @@ -203,11 +197,9 @@ def test_UUIDUtils_for_empty_uuid(self): self.assertTrue(uuid2, UUID()) self.assertEqual(uuid, uuid2) - def test_UUIDUtils_for_null_uuid(self): + def test_uuid_utils_for_null_uuid(self): self.assertFalse(UUIDUtils.get_version(None)) - self.assertEqual( - len(MicroUuidSerializer.instance().serialize(None)), 0 - ) + self.assertEqual(len(MicroUuidSerializer.instance().serialize(None)), 0) self.assertEqual(len(LongUuidSerializer.instance().serialize(None)), 0) self.assertFalse(UUIDUtils.is_uuidv6(None)) self.assertFalse(UUIDUtils.is_uprotocol(None)) @@ -218,12 +210,8 @@ def test_uuidutils_from_invalid_uuid(self): uuid = UUID(msb=9 << 12, lsb=0) # Invalid UUID type self.assertFalse(UUIDUtils.get_version(uuid)) self.assertFalse(UUIDUtils.get_time(uuid)) - self.assertTrue( - len(MicroUuidSerializer.instance().serialize(uuid)) > 0 - ) - self.assertFalse( - LongUuidSerializer.instance().serialize(uuid).isspace() - ) + self.assertTrue(len(MicroUuidSerializer.instance().serialize(uuid)) > 0) + self.assertFalse(LongUuidSerializer.instance().serialize(uuid).isspace()) self.assertFalse(UUIDUtils.is_uuidv6(uuid)) self.assertFalse(UUIDUtils.is_uprotocol(uuid)) self.assertFalse(UUIDUtils.is_uuid(uuid)) diff --git a/tests/test_uuid/test_factory/test_uuidutils.py b/tests/test_uuid/test_factory/test_uuidutils.py index daa47bf..3ada7b3 100644 --- a/tests/test_uuid/test_factory/test_uuidutils.py +++ b/tests/test_uuid/test_factory/test_uuidutils.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2024 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2024 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,18 +20,17 @@ SPDX-License-Identifier: Apache-2.0 """ -import unittest -import time import datetime +import time +import unittest +from uprotocol.proto.uattributes_pb2 import UAttributes, UPriority +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri +from uprotocol.proto.uuid_pb2 import UUID from uprotocol.transport.builder.uattributesbuilder import UAttributesBuilder from uprotocol.uuid.factory.uuidfactory import Factories from uprotocol.uuid.factory.uuidutils import UUIDUtils -from uprotocol.proto.uattributes_pb2 import UAttributes, UPriority -from uprotocol.proto.uri_pb2 import UUri, UEntity, UAuthority, UResource -from uprotocol.proto.uuid_pb2 import UUID - def create_id(): return Factories.UPROTOCOL.create() @@ -52,7 +51,6 @@ def build_source(): class TestUUIDUtils(unittest.TestCase): - def test_get_elapsed_time_creation_time_unknown(self): self.assertFalse(UUIDUtils.get_elapsed_time(UUID()) is not None) @@ -68,21 +66,15 @@ def test_remaining_time_none_uuid(self): def test_get_remaining_time_expired(self): id: UUID = create_id() time.sleep(DELAY_MS / 1000) - self.assertFalse( - UUIDUtils.get_remaining_time(id, DELAY_MS - DELTA) is not None - ) + self.assertFalse(UUIDUtils.get_remaining_time(id, DELAY_MS - DELTA) is not None) def test_get_remaining_time_attributes_no_ttl(self): - attributes: UAttributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + attributes: UAttributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() self.assertFalse(UUIDUtils.get_remaining_time(attributes) is not None) def test_get_remaining_time_attributes_expired(self): attributes: UAttributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(DELAY_MS - DELTA) - .build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(DELAY_MS - DELTA).build() ) time.sleep(DELAY_MS / 1000) self.assertFalse(UUIDUtils.get_remaining_time(attributes) is not None) @@ -100,25 +92,19 @@ def test_is_expired_no_ttl(self): def test_is_expired_attributes(self): attributes: UAttributes = ( - UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0) - .withTtl(DELAY_MS - DELTA) - .build() + UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).with_ttl(DELAY_MS - DELTA).build() ) self.assertFalse(UUIDUtils.is_expired(attributes)) time.sleep(DELAY_MS / 1000) self.assertTrue(UUIDUtils.is_expired(attributes)) def test_is_expired_attributes_no_ttl(self): - attributes: UAttributes = UAttributesBuilder.publish( - build_source(), UPriority.UPRIORITY_CS0 - ).build() + attributes: UAttributes = UAttributesBuilder.publish(build_source(), UPriority.UPRIORITY_CS0).build() self.assertFalse(UUIDUtils.is_expired(attributes)) def test_get_elapsed_time_invalid_uuid(self): self.assertFalse(UUIDUtils.get_elapsed_time(None) is not None) def test_get_elapsed_time_past(self): - id: UUID = Factories.UPROTOCOL.create( - datetime.datetime.now() + datetime.timedelta(minutes=1) - ) + id: UUID = Factories.UPROTOCOL.create(datetime.datetime.now() + datetime.timedelta(minutes=1)) self.assertFalse(UUIDUtils.get_elapsed_time(id) is not None) diff --git a/tests/test_uuid/test_validator/test_uuidvalidator.py b/tests/test_uuid/test_validator/test_uuidvalidator.py index 482cff4..0a361f1 100644 --- a/tests/test_uuid/test_validator/test_uuidvalidator.py +++ b/tests/test_uuid/test_validator/test_uuidvalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -23,14 +23,13 @@ import unittest from datetime import datetime, timezone -from uprotocol.uuid.factory.uuidutils import UUIDUtils -from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer - -from uprotocol.validation.validationresult import ValidationResult -from uprotocol.proto.uuid_pb2 import UUID from uprotocol.proto.ustatus_pb2 import UCode +from uprotocol.proto.uuid_pb2 import UUID from uprotocol.uuid.factory.uuidfactory import Factories +from uprotocol.uuid.factory.uuidutils import UUIDUtils +from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer from uprotocol.uuid.validate.uuidvalidator import UuidValidator, Validators +from uprotocol.validation.validationresult import ValidationResult class TestUuidValidator(unittest.TestCase): @@ -40,11 +39,8 @@ def test_validator_with_good_uuid(self): self.assertEqual(ValidationResult.STATUS_SUCCESS, status) def test_good_uuid_string(self): - status = Validators.UPROTOCOL.validator().validate( - Factories.UPROTOCOL.create() - ) + status = Validators.UPROTOCOL.validator().validate(Factories.UPROTOCOL.create()) self.assertEqual(status, ValidationResult.STATUS_SUCCESS) - # self.assertTrue(ValidationResult.success().__eq__(status)) def test_invalid_uuid(self): uuid = UUID(msb=0, lsb=0) @@ -58,9 +54,7 @@ def test_invalid_uuid(self): def test_invalid_time_uuid(self): epoch_time = datetime.fromtimestamp(0, tz=timezone.utc) - uuid = Factories.UPROTOCOL.create( - epoch_time - ) + uuid = Factories.UPROTOCOL.create(epoch_time) status = Validators.UPROTOCOL.validator().validate(uuid) self.assertEqual(UCode.INVALID_ARGUMENT, status.code) self.assertEqual("Invalid UUID Time", status.message) diff --git a/uprotocol/cloudevent/cloudevents_pb2.py b/uprotocol/cloudevent/cloudevents_pb2.py index f84ea9a..dc5340b 100644 --- a/uprotocol/cloudevent/cloudevents_pb2.py +++ b/uprotocol/cloudevent/cloudevents_pb2.py @@ -33,4 +33,4 @@ _globals['_CLOUDEVENT_CLOUDEVENTATTRIBUTEVALUE']._serialized_end=653 _globals['_CLOUDEVENTBATCH']._serialized_start=663 _globals['_CLOUDEVENTBATCH']._serialized_end=727 -# @@protoc_insertion_point(module_scope) +# @@protoc_insertion_point(module_scope) \ No newline at end of file diff --git a/uprotocol/cloudevent/datamodel/ucloudeventattributes.py b/uprotocol/cloudevent/datamodel/ucloudeventattributes.py index 77b9196..e6e7bdc 100644 --- a/uprotocol/cloudevent/datamodel/ucloudeventattributes.py +++ b/uprotocol/cloudevent/datamodel/ucloudeventattributes.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from uprotocol.proto.uattributes_pb2 import UPriority @@ -107,11 +106,7 @@ def get_traceparent(self) -> str: Traceparent of the event. @return: Returns an optional traceparent attribute. """ - return ( - self.traceparent - if self.traceparent and self.traceparent.strip() - else None - ) + return self.traceparent if self.traceparent and self.traceparent.strip() else None def __eq__(self, other): if self is other: @@ -127,14 +122,10 @@ def __eq__(self, other): ) def __hash__(self): - return hash( - (self.hash, self.priority, self.ttl, self.token, self.traceparent) - ) + return hash((self.hash, self.priority, self.ttl, self.token, self.traceparent)) def __str__(self): - traceparent_string = ( - f", traceparent='{self.traceparent}'" if self.traceparent else "" - ) + traceparent_string = f", traceparent='{self.traceparent}'" if self.traceparent else "" return ( f"UCloudEventAttributes{{hash='{self.hash}', priority={self.priority}," f" ttl={self.ttl}, token='{self.token}'{traceparent_string}}}" @@ -205,6 +196,4 @@ def build(self): Construct the UCloudEventAttributes from the builder.

@return: Returns a constructed UProperty. """ - return UCloudEventAttributes( - self.priority, self.hash, self.ttl, self.token, self.traceparent - ) + return UCloudEventAttributes(self.priority, self.hash, self.ttl, self.token, self.traceparent) diff --git a/uprotocol/cloudevent/factory/cloudeventfactory.py b/uprotocol/cloudevent/factory/cloudeventfactory.py index 2cc8272..d725ae1 100644 --- a/uprotocol/cloudevent/factory/cloudeventfactory.py +++ b/uprotocol/cloudevent/factory/cloudeventfactory.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from cloudevents.http import CloudEvent from google.protobuf import empty_pb2 from google.protobuf.any_pb2 import Any @@ -145,9 +144,7 @@ def failed_response( return cloud_event @staticmethod - def publish( - source: str, proto_payload: Any, attributes: UCloudEventAttributes - ) -> CloudEvent: + def publish(source: str, proto_payload: Any, attributes: UCloudEventAttributes) -> CloudEvent: """ Create a CloudEvent for an event for the use case of: Publish generic message. @param source:The uri of the topic being published. diff --git a/uprotocol/cloudevent/factory/ucloudevent.py b/uprotocol/cloudevent/factory/ucloudevent.py index 7b492fa..168c9ee 100644 --- a/uprotocol/cloudevent/factory/ucloudevent.py +++ b/uprotocol/cloudevent/factory/ucloudevent.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,28 +20,26 @@ SPDX-License-Identifier: Apache-2.0 """ - +import copy import time from datetime import datetime, timedelta, timezone -import copy from cloudevents.http import CloudEvent from google.protobuf import any_pb2 from google.protobuf.message import DecodeError -from uprotocol.proto.ustatus_pb2 import UCode from uprotocol.proto.uattributes_pb2 import ( + UAttributes, UMessageType, UPriority, - UAttributes, ) -from uprotocol.proto.upayload_pb2 import UPayload +from uprotocol.proto.umessage_pb2 import UMessage +from uprotocol.proto.upayload_pb2 import UPayload, UPayloadFormat +from uprotocol.proto.ustatus_pb2 import UCode +from uprotocol.proto.uuid_pb2 import UUID from uprotocol.uri.serializer.longuriserializer import LongUriSerializer from uprotocol.uuid.factory.uuidutils import UUIDUtils from uprotocol.uuid.serializer.longuuidserializer import LongUuidSerializer -from uprotocol.proto.upayload_pb2 import UPayloadFormat -from uprotocol.proto.umessage_pb2 import UMessage -from uprotocol.proto.uuid_pb2 import UUID class UCloudEvent: @@ -73,9 +71,7 @@ def get_data_content_type(ce: CloudEvent) -> str: @return:Returns the String value of a CloudEvent source attribute. """ - return UCloudEvent.extract_string_value_from_attributes( - "datacontenttype", ce - ) + return UCloudEvent.extract_string_value_from_attributes("datacontenttype", ce) @staticmethod def get_data_schema(ce: CloudEvent) -> str: @@ -88,9 +84,7 @@ def get_data_schema(ce: CloudEvent) -> str: @return:Returns the String value of a CloudEvent source attribute. """ - return UCloudEvent.extract_string_value_from_attributes( - "dataschema", ce - ) + return UCloudEvent.extract_string_value_from_attributes("dataschema", ce) @staticmethod def get_type(ce: CloudEvent) -> str: @@ -125,9 +119,7 @@ def get_specversion(ce: CloudEvent) -> str: @return:Returns the String value of a CloudEvent spec version attribute. """ - return UCloudEvent.extract_string_value_from_attributes( - "specversion", ce - ) + return UCloudEvent.extract_string_value_from_attributes("specversion", ce) @staticmethod def get_sink(ce: CloudEvent) -> str: @@ -219,9 +211,7 @@ def get_communication_status(ce: CloudEvent) -> UCode: UCode.OK_VALUE. """ try: - comm_status = UCloudEvent.extract_string_value_from_attributes( - "commstatus", ce - ) + comm_status = UCloudEvent.extract_string_value_from_attributes("commstatus", ce) return int(comm_status) if comm_status is not None else UCode.OK except Exception: return UCode.OK @@ -236,9 +226,7 @@ def get_traceparent(ce: CloudEvent) -> str: @return: Returns the string value of the traceparent if it exists, else returns None. """ - return UCloudEvent.extract_string_value_from_attributes( - "traceparent", ce - ) + return UCloudEvent.extract_string_value_from_attributes("traceparent", ce) @staticmethod def has_communication_status_problem(ce: CloudEvent) -> bool: @@ -253,9 +241,7 @@ def has_communication_status_problem(ce: CloudEvent) -> bool: return UCloudEvent.get_communication_status(ce) != UCode.OK @staticmethod - def add_communication_status( - ce: CloudEvent, communication_status - ) -> CloudEvent: + def add_communication_status(ce: CloudEvent, communication_status) -> CloudEvent: """ Returns a new CloudEvent from the supplied CloudEvent, with the platform communication added.

@@ -283,9 +269,7 @@ def get_creation_timestamp(ce: CloudEvent) -> int: timestamp from the UUIDV8 CloudEvent Id or an empty Optional if timestamp can't be extracted. """ - cloud_event_id = UCloudEvent.extract_string_value_from_attributes( - "id", ce - ) + cloud_event_id = UCloudEvent.extract_string_value_from_attributes("id", ce) uuid = LongUuidSerializer.instance().deserialize(cloud_event_id) return UUIDUtils.get_time(uuid) if uuid is not None else None @@ -306,16 +290,12 @@ def is_expired_by_cloud_event_creation_date(ce: CloudEvent) -> bool: if not maybe_ttl or maybe_ttl <= 0: return False - cloud_event_creation_time = ( - UCloudEvent.extract_string_value_from_attributes("time", ce) - ) + cloud_event_creation_time = UCloudEvent.extract_string_value_from_attributes("time", ce) if cloud_event_creation_time is None: return False now = datetime.now(timezone.utc) - creation_time_plus_ttl = datetime.fromisoformat(cloud_event_creation_time) + timedelta( - milliseconds=maybe_ttl - ) + creation_time_plus_ttl = datetime.fromisoformat(cloud_event_creation_time) + timedelta(milliseconds=maybe_ttl) return now > creation_time_plus_ttl @@ -333,9 +313,7 @@ def is_expired(ce: CloudEvent) -> bool: maybe_ttl = UCloudEvent.get_ttl(ce) if not maybe_ttl or maybe_ttl <= 0: return False - cloud_event_id = UCloudEvent.extract_string_value_from_attributes( - "id", ce - ) + cloud_event_id = UCloudEvent.extract_string_value_from_attributes("id", ce) try: uuid = LongUuidSerializer.instance().deserialize(cloud_event_id) @@ -354,9 +332,7 @@ def is_cloud_event_id(ce: CloudEvent) -> bool: @param ce:The CloudEvent with the id to inspect. @return: Returns true if the CloudEvent is valid. """ - cloud_event_id = UCloudEvent.extract_string_value_from_attributes( - "id", ce - ) + cloud_event_id = UCloudEvent.extract_string_value_from_attributes("id", ce) uuid = LongUuidSerializer.instance().deserialize(cloud_event_id) return uuid is not None and UUIDUtils.is_uuid(uuid) @@ -421,9 +397,7 @@ def to_string(ce: CloudEvent) -> str: sink_str = UCloudEvent.get_sink(ce) sink_str = f", sink='{sink_str}'" if sink_str is not None else "" id = UCloudEvent.extract_string_value_from_attributes("id", ce) - source = UCloudEvent.extract_string_value_from_attributes( - "source", ce - ) + source = UCloudEvent.extract_string_value_from_attributes("source", ce) type = UCloudEvent.extract_string_value_from_attributes("type", ce) return f"CloudEvent{{id='{id}', source='{source}'{sink_str}, type='{type}'}}" else: @@ -445,9 +419,7 @@ def extract_string_value_from_attributes(attr_name, ce: CloudEvent) -> str: return ce.get_attributes().get(attr_name) @staticmethod - def extract_integer_value_from_attributes( - attr_name, ce: CloudEvent - ) -> int: + def extract_integer_value_from_attributes(attr_name, ce: CloudEvent) -> int: """ Utility for extracting the Integer value of an attribute.

@@ -538,12 +510,10 @@ def get_upayload_format_from_content_type(contenttype: str): "application/x-someip": UPayloadFormat.UPAYLOAD_FORMAT_SOMEIP, "application/x-someip_tlv": UPayloadFormat.UPAYLOAD_FORMAT_SOMEIP_TLV, } - return content_type_mapping.get( - contenttype, UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF - ) + return content_type_mapping.get(contenttype, UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF) @staticmethod - def fromMessage(message: UMessage) -> CloudEvent: + def from_message(message: UMessage) -> CloudEvent: """ Get the Cloudevent from the UMessage
Note: For now, only the value format of @@ -570,9 +540,7 @@ def fromMessage(message: UMessage) -> CloudEvent: "source": LongUriSerializer().serialize(message.attributes.source), "type": UCloudEvent.get_event_type(attributes.type), } - contenttype = UCloudEvent.get_content_type_from_upayload_format( - payload.format - ) + contenttype = UCloudEvent.get_content_type_from_upayload_format(payload.format) if contenttype: json_attributes["datacontenttype"] = "application/x-protobuf" @@ -587,15 +555,11 @@ def fromMessage(message: UMessage) -> CloudEvent: if attributes.HasField("token"): json_attributes["token"] = attributes.token if attributes.HasField("sink"): - json_attributes["sink"] = LongUriSerializer().serialize( - attributes.sink - ) + json_attributes["sink"] = LongUriSerializer().serialize(attributes.sink) if attributes.HasField("commstatus"): json_attributes["commstatus"] = attributes.commstatus if attributes.HasField("reqid"): - json_attributes["reqid"] = LongUuidSerializer.instance().serialize( - attributes.reqid - ) + json_attributes["reqid"] = LongUuidSerializer.instance().serialize(attributes.reqid) if attributes.HasField("permission_level"): json_attributes["plevel"] = attributes.permission_level if attributes.HasField("traceparent"): @@ -605,7 +569,7 @@ def fromMessage(message: UMessage) -> CloudEvent: return cloud_event @staticmethod - def toMessage(event: CloudEvent) -> UMessage: + def to_message(event: CloudEvent) -> UMessage: """ Get the UMessage from the cloud event @@ -616,19 +580,13 @@ def toMessage(event: CloudEvent) -> UMessage: raise ValueError("Cloud Event can't be None") payload = UPayload( - format=UCloudEvent.get_upayload_format_from_content_type( - UCloudEvent.get_data_content_type(event) - ), + format=UCloudEvent.get_upayload_format_from_content_type(UCloudEvent.get_data_content_type(event)), value=UCloudEvent.get_payload(event).SerializeToString(), ) attributes = UAttributes( - id=LongUuidSerializer.instance().deserialize( - UCloudEvent.get_id(event) - ), + id=LongUuidSerializer.instance().deserialize(UCloudEvent.get_id(event)), type=UCloudEvent.get_message_type(UCloudEvent.get_type(event)), - source=LongUriSerializer().deserialize( - UCloudEvent.get_source(event) - ), + source=LongUriSerializer().deserialize(UCloudEvent.get_source(event)), ) if UCloudEvent.has_communication_status_problem(event): attributes.commstatus = UCloudEvent.get_communication_status(event) @@ -660,9 +618,7 @@ def toMessage(event: CloudEvent) -> UMessage: if traceparent is not None: attributes.traceparent = traceparent - plevel = UCloudEvent.extract_integer_value_from_attributes( - "plevel", event - ) + plevel = UCloudEvent.extract_integer_value_from_attributes("plevel", event) if plevel is not None: attributes.permission_level = plevel diff --git a/uprotocol/cloudevent/serialize/base64protobufserializer.py b/uprotocol/cloudevent/serialize/base64protobufserializer.py index 174c84d..3b70aa8 100644 --- a/uprotocol/cloudevent/serialize/base64protobufserializer.py +++ b/uprotocol/cloudevent/serialize/base64protobufserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - import base64 from builtins import str diff --git a/uprotocol/cloudevent/serialize/cloudeventserializer.py b/uprotocol/cloudevent/serialize/cloudeventserializer.py index 03ea4d9..02f2051 100644 --- a/uprotocol/cloudevent/serialize/cloudeventserializer.py +++ b/uprotocol/cloudevent/serialize/cloudeventserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,11 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from typing import Any class CloudEventSerializer(ABC): - @abstractmethod def serialize(self, cloud_event: Any) -> bytes: pass diff --git a/uprotocol/cloudevent/serialize/cloudeventserializers.py b/uprotocol/cloudevent/serialize/cloudeventserializers.py index 1d22fb8..0040e06 100644 --- a/uprotocol/cloudevent/serialize/cloudeventserializers.py +++ b/uprotocol/cloudevent/serialize/cloudeventserializers.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from enum import Enum from uprotocol.cloudevent.serialize.cloudeventtojsonserializer import CloudEventToJsonSerializer @@ -31,6 +30,7 @@ class CloudEventSerializers(Enum): """ Provides Singleton instances of the CloudEvent Serializers. """ + JSON = CloudEventToJsonSerializer() PROTOBUF = CloudEventToProtobufSerializer() diff --git a/uprotocol/cloudevent/serialize/cloudeventtojsonserializer.py b/uprotocol/cloudevent/serialize/cloudeventtojsonserializer.py index 3e65953..5b23a9d 100644 --- a/uprotocol/cloudevent/serialize/cloudeventtojsonserializer.py +++ b/uprotocol/cloudevent/serialize/cloudeventtojsonserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from cloudevents.conversion import to_json from cloudevents.http import CloudEvent, from_json diff --git a/uprotocol/cloudevent/serialize/cloudeventtoprotobufserializer.py b/uprotocol/cloudevent/serialize/cloudeventtoprotobufserializer.py index 145b675..702601c 100644 --- a/uprotocol/cloudevent/serialize/cloudeventtoprotobufserializer.py +++ b/uprotocol/cloudevent/serialize/cloudeventtoprotobufserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,12 @@ SPDX-License-Identifier: Apache-2.0 """ - from cloudevents.http import CloudEvent +from uprotocol.cloudevent import cloudevents_pb2 from uprotocol.cloudevent.serialize.cloudeventserializer import ( CloudEventSerializer, ) -from uprotocol.cloudevent import cloudevents_pb2 # ToDo- convert cloud event to cloudevent proto diff --git a/uprotocol/cloudevent/validate/cloudeventvalidator.py b/uprotocol/cloudevent/validate/cloudeventvalidator.py index 7f4d6c3..2b78d76 100644 --- a/uprotocol/cloudevent/validate/cloudeventvalidator.py +++ b/uprotocol/cloudevent/validate/cloudeventvalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from enum import Enum @@ -35,7 +34,6 @@ class CloudEventValidator(ABC): - @staticmethod def get_validator(ce: CloudEvent): """ @@ -78,11 +76,7 @@ def validate(self, ce: CloudEvent) -> ValidationResult: self.validate_sink(ce), ] - error_messages = [ - result.get_message() - for result in validation_results - if not result.is_success() - ] + error_messages = [result.get_message() for result in validation_results if not result.is_success()] error_message = ",".join(error_messages) if not error_message: @@ -92,18 +86,14 @@ def validate(self, ce: CloudEvent) -> ValidationResult: @staticmethod def validate_version(ce: CloudEvent) -> ValidationResult: - return CloudEventValidator.validate_version_spec( - ce.get_attributes().get("specversion") - ) + return CloudEventValidator.validate_version_spec(ce.get_attributes().get("specversion")) @staticmethod def validate_version_spec(version) -> ValidationResult: if version == "1.0": return ValidationResult.success() else: - return ValidationResult.failure( - f"Invalid CloudEvent version [{version}]. CloudEvent version must be 1.0." - ) + return ValidationResult.failure(f"Invalid CloudEvent version [{version}]. CloudEvent version must be 1.0.") @staticmethod def validate_id(ce: CloudEvent) -> ValidationResult: @@ -111,9 +101,7 @@ def validate_id(ce: CloudEvent) -> ValidationResult: return ( ValidationResult.success() if UCloudEvent.is_cloud_event_id(ce) - else ValidationResult.failure( - f"Invalid CloudEvent Id [{id}]. CloudEvent Id must be of type UUIDv8." - ) + else ValidationResult.failure(f"Invalid CloudEvent Id [{id}]. CloudEvent Id must be of type UUIDv8.") ) @abstractmethod @@ -154,9 +142,7 @@ def validate_sink(self, ce: CloudEvent) -> ValidationResult: sink = maybe_sink check_sink = self.validate_u_entity_uri(sink) if check_sink.is_failure(): - return ValidationResult.failure( - f"Invalid CloudEvent sink [{sink}]. {check_sink.get_message()}" - ) + return ValidationResult.failure(f"Invalid CloudEvent sink [{sink}]. {check_sink.get_message()}") return ValidationResult.success() @@ -172,10 +158,10 @@ def validate_u_entity_uri(uri: str) -> ValidationResult: message. """ uri = LongUriSerializer().deserialize(uri) - return CloudEventValidator.validate_u_entity_uri_from_UURI(uri) + return CloudEventValidator.validate_u_entity_uri_from_uuri(uri) @staticmethod - def validate_u_entity_uri_from_UURI(uri: UUri) -> ValidationResult: + def validate_u_entity_uri_from_uuri(uri: UUri) -> ValidationResult: return UriValidator.validate(uri) @staticmethod @@ -188,11 +174,11 @@ def validate_topic_uri(uri: str) -> ValidationResult: ValidationResult containing a success or a failure with the error message. """ - Uri = LongUriSerializer().deserialize(uri) - return CloudEventValidator.validate_topic_uri_from_UURI(Uri) + uri = LongUriSerializer().deserialize(uri) + return CloudEventValidator.validate_topic_uri_from_uuri(uri) @staticmethod - def validate_topic_uri_from_UURI(uri: UUri) -> ValidationResult: + def validate_topic_uri_from_uuri(uri: UUri) -> ValidationResult: """ Validate a UriPart that is to be used as a topic in publish scenarios for events such as publish, file and notification.

@@ -201,22 +187,16 @@ def validate_topic_uri_from_UURI(uri: UUri) -> ValidationResult: @return:Returns the ValidationResult containing a success or a failure with the error message. """ - validationResult = CloudEventValidator.validate_u_entity_uri_from_UURI( - uri - ) - if validationResult.is_failure(): - return validationResult + validation_result = CloudEventValidator.validate_u_entity_uri_from_uuri(uri) + if validation_result.is_failure(): + return validation_result u_resource = uri.resource if not u_resource.name: - return ValidationResult.failure( - "UriPart is missing uResource name." - ) + return ValidationResult.failure("UriPart is missing uResource name.") if not u_resource.message: - return ValidationResult.failure( - "UriPart is missing Message information." - ) + return ValidationResult.failure("UriPart is missing Message information.") return ValidationResult.success() @@ -230,8 +210,8 @@ def validate_rpc_topic_uri(uri: str) -> ValidationResult: @return:Returns the ValidationResult containing a success or a failure with the error message. """ - Uri = LongUriSerializer().deserialize(uri) - return CloudEventValidator.validate_rpc_topic_uri_from_uuri(Uri) + uri = LongUriSerializer().deserialize(uri) + return CloudEventValidator.validate_rpc_topic_uri_from_uuri(uri) @staticmethod def validate_rpc_topic_uri_from_uuri(uri: UUri) -> ValidationResult: @@ -244,20 +224,14 @@ def validate_rpc_topic_uri_from_uuri(uri: UUri) -> ValidationResult: the ValidationResult containing a success or a failure with the error message. """ - validationResult = CloudEventValidator.validate_u_entity_uri_from_UURI( - uri - ) - if validationResult.is_failure(): + validation_result = CloudEventValidator.validate_u_entity_uri_from_uuri(uri) + if validation_result.is_failure(): return ValidationResult.failure( - f"Invalid RPC uri application response topic. {validationResult.get_message()}", + f"Invalid RPC uri application response topic. {validation_result.get_message()}", ) u_resource = uri.resource - topic = ( - f"{u_resource.name}.{u_resource.instance}" - if u_resource.instance - else f"{u_resource.name}" - ) + topic = f"{u_resource.name}.{u_resource.instance}" if u_resource.instance else f"{u_resource.name}" if topic != "rpc.response": return ValidationResult.failure( "Invalid RPC uri application response topic. UriPart is missing rpc.response.", @@ -274,13 +248,9 @@ def validate_rpc_method(uri: str) -> ValidationResult: @return:Returns the ValidationResult containing a success or a failure with the error message. """ uuri = LongUriSerializer().deserialize(uri) - validationResult = CloudEventValidator.validate_u_entity_uri_from_UURI( - uuri - ) - if validationResult.is_failure(): - return ValidationResult.failure( - f"Invalid RPC method uri. {validationResult.get_message()}" - ) + validation_result = CloudEventValidator.validate_u_entity_uri_from_uuri(uuri) + if validation_result.is_failure(): + return ValidationResult.failure(f"Invalid RPC method uri. {validation_result.get_message()}") if not UriValidator.is_rpc_method(uuri): return ValidationResult.failure( @@ -355,8 +325,8 @@ def validate_type(self, cl_event: CloudEvent) -> ValidationResult: ValidationResult.success() if UCloudEvent.get_type(cl_event) == "not.v1" else ValidationResult.failure( - f"Invalid CloudEvent type [{UCloudEvent.get_type(cl_event)}]. " + - "CloudEvent of type Notification must have a type of 'not.v1'", + f"Invalid CloudEvent type [{UCloudEvent.get_type(cl_event)}]. " + + "CloudEvent of type Notification must have a type of 'not.v1'", ) ) diff --git a/uprotocol/rpc/rpcclient.py b/uprotocol/rpc/rpcclient.py index 582c8ed..17bbf8d 100644 --- a/uprotocol/rpc/rpcclient.py +++ b/uprotocol/rpc/rpcclient.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,12 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from concurrent.futures import Future -from uprotocol.proto.uri_pb2 import UUri -from uprotocol.proto.upayload_pb2 import UPayload from uprotocol.proto.uattributes_pb2 import CallOptions +from uprotocol.proto.upayload_pb2 import UPayload +from uprotocol.proto.uri_pb2 import UUri class RpcClient(ABC): @@ -41,16 +40,14 @@ class RpcClient(ABC): """ @abstractmethod - def invoke_method( - self, methodUri: UUri, request_payload: UPayload, options: CallOptions - ) -> Future: + def invoke_method(self, method_uri: UUri, request_payload: UPayload, options: CallOptions) -> Future: """ API for clients to invoke a method (send an RPC request) and receive the response (the returned Future UMessage.
Client will set method to be the URI of the method they want to invoke, payload to the request message, and attributes with the various metadata for the method invocation. - @param methodUri The method URI to be invoked, + @param method_uri The method URI to be invoked, ex (long form): /example.hello_world/1/rpc.SayHello. @param requestPayload The request message to be sent to the server. diff --git a/uprotocol/rpc/rpcmapper.py b/uprotocol/rpc/rpcmapper.py index b9830b1..ecc7ff8 100644 --- a/uprotocol/rpc/rpcmapper.py +++ b/uprotocol/rpc/rpcmapper.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,11 @@ SPDX-License-Identifier: Apache-2.0 """ - from concurrent.futures import Future from google.protobuf import any_pb2 -from uprotocol.proto.ustatus_pb2 import UCode -from uprotocol.proto.ustatus_pb2 import UStatus +from uprotocol.proto.ustatus_pb2 import UCode, UStatus from uprotocol.rpc.rpcresult import RpcResult @@ -61,18 +59,14 @@ def handle_response(message): message = message.result() if not message or not message.HasField("payload"): response_future.set_exception( - RuntimeError( - f"Server returned a null payload. Expected {expected_cls.__name__}" - ) + RuntimeError(f"Server returned a null payload. Expected {expected_cls.__name__}") ) return response_future try: any_message = any_pb2.Any() any_message.ParseFromString(message.payload.value) if any_message.Is(expected_cls.DESCRIPTOR): - response_future.set_result( - RpcMapper.unpack_payload(any_message, expected_cls) - ) + response_future.set_result(RpcMapper.unpack_payload(any_message, expected_cls)) else: response_future.set_exception( RuntimeError( @@ -81,9 +75,7 @@ def handle_response(message): ) except Exception as e: - response_future.set_exception( - RuntimeError(f"{str(e)} [{UStatus.__name__}]") - ) + response_future.set_exception(RuntimeError(f"{str(e)} [{UStatus.__name__}]")) message_future.add_done_callback(handle_response) @@ -103,18 +95,12 @@ def map_response_to_result(response_future: Future, expected_cls): def handle_response(message): if message.exception(): exception = message.exception() - return RpcResult.failure( - value=exception, message=str(exception) - ) + return RpcResult.failure(value=exception, message=str(exception)) message = message.result() if not message or not message.HasField("payload"): - exception = RuntimeError( - f"Server returned a null payload. Expected {expected_cls.__name__}" - ) - return RpcResult.failure( - value=exception, message=str(exception) - ) + exception = RuntimeError(f"Server returned a null payload. Expected {expected_cls.__name__}") + return RpcResult.failure(value=exception, message=str(exception)) try: any_message = any_pb2.Any() @@ -124,17 +110,13 @@ def handle_response(message): if expected_cls == UStatus: return RpcMapper.calculate_status_result(any_message) else: - return RpcResult.success( - RpcMapper.unpack_payload(any_message, expected_cls) - ) + return RpcResult.success(RpcMapper.unpack_payload(any_message, expected_cls)) if any_message.Is(UStatus.DESCRIPTOR): return RpcMapper.calculate_status_result(any_message) except Exception as e: exception = RuntimeError(f"{str(e)} [{UStatus.__name__}]") - return RpcResult.failure( - value=exception, message=str(exception) - ) + return RpcResult.failure(value=exception, message=str(exception)) exception = RuntimeError( f"Unknown payload type [{any_message.type_url}]. Expected [{expected_cls.DESCRIPTOR.full_name}]" @@ -153,11 +135,7 @@ def callback_wrapper(payload): @staticmethod def calculate_status_result(payload): status = RpcMapper.unpack_payload(payload, UStatus) - return ( - RpcResult.success(status) - if status.code == UCode.OK - else RpcResult.failure(status) - ) + return RpcResult.success(status) if status.code == UCode.OK else RpcResult.failure(status) @staticmethod def unpack_payload(payload, expected_cls): @@ -172,7 +150,6 @@ def unpack_payload(payload, expected_cls): try: value = expected_cls() value.ParseFromString(payload.value) - # payload.Unpack(expected_cls) return value except Exception as e: raise RuntimeError(f"{str(e)} [{UStatus.__name__}]") from e diff --git a/uprotocol/rpc/rpcresult.py b/uprotocol/rpc/rpcresult.py index 971a0c3..99c296f 100644 --- a/uprotocol/rpc/rpcresult.py +++ b/uprotocol/rpc/rpcresult.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,12 +20,10 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from typing import Callable, TypeVar, Union -from uprotocol.proto.ustatus_pb2 import UCode -from uprotocol.proto.ustatus_pb2 import UStatus +from uprotocol.proto.ustatus_pb2 import UCode, UStatus T = TypeVar("T") @@ -37,15 +35,15 @@ class RpcResult(ABC): """ @abstractmethod - def isSuccess(self) -> bool: + def is_success(self) -> bool: pass @abstractmethod - def isFailure(self) -> bool: + def is_failure(self) -> bool: pass @abstractmethod - def getOrElse(self, default_value: Callable[[], T]) -> T: + def get_or_else(self, default_value: Callable[[], T]) -> T: pass @abstractmethod @@ -53,7 +51,7 @@ def map(self, f: Callable[[T], T]) -> "RpcResult": pass @abstractmethod - def flatMap(self, f: Callable[[T], "RpcResult"]) -> "RpcResult": + def flat_map(self, f: Callable[[T], "RpcResult"]) -> "RpcResult": pass @abstractmethod @@ -61,11 +59,11 @@ def filter(self, f: Callable[[T], bool]) -> "RpcResult": pass @abstractmethod - def failureValue(self) -> UStatus: + def failure_value(self) -> UStatus: pass @abstractmethod - def successValue(self) -> T: + def success_value(self) -> T: pass @staticmethod @@ -86,33 +84,31 @@ def failure( @staticmethod def flatten(result: "RpcResult") -> "RpcResult": - return result.flatMap(lambda x: x) + return result.flat_map(lambda x: x) class Success(RpcResult): - def __init__(self, value: T): self.value = value - def isSuccess(self) -> bool: + def is_success(self) -> bool: return True - def isFailure(self) -> bool: + def is_failure(self) -> bool: return False - def getOrElse(self, default_value: Callable[[], T]) -> T: - return self.successValue() + def get_or_else(self, default_value: Callable[[], T]) -> T: + return self.success_value() def map(self, f: Callable[[T], T]) -> RpcResult: try: - - return self.success(f(self.successValue())) + return self.success(f(self.success_value())) except Exception as e: return self.failure(e) - def flatMap(self, f: Callable[[T], RpcResult]) -> RpcResult: + def flat_map(self, f: Callable[[T], RpcResult]) -> RpcResult: try: - return f(self.successValue()) + return f(self.success_value()) except Exception as e: return self.failure(e) @@ -120,26 +116,23 @@ def filter(self, f: Callable[[T], bool]) -> RpcResult: try: return ( self - if f(self.successValue()) - else self.failure( - code=UCode.FAILED_PRECONDITION, message="filtered out" - ) + if f(self.success_value()) + else self.failure(code=UCode.FAILED_PRECONDITION, message="filtered out") ) except Exception as e: return self.failure(e) - def failureValue(self) -> UStatus: - raise ValueError("Method failureValue() called on a Success instance") + def failure_value(self) -> UStatus: + raise ValueError("Method failure_value() called on a Success instance") - def successValue(self) -> T: + def success_value(self) -> T: return self.value def __str__(self) -> str: - return f"Success({self.successValue()})" + return f"Success({self.success_value()})" class Failure(RpcResult): - def __init__( self, value: Union[UStatus, "Failure", Exception, None] = None, @@ -151,17 +144,17 @@ def __init__( elif isinstance(value, Exception): self.value = UStatus(code=code, message=str(value)) elif isinstance(value, Failure): - self.value = value.failureValue() + self.value = value.failure_value() else: self.value = UStatus(code=code, message=message) - def isSuccess(self) -> bool: + def is_success(self) -> bool: return False - def isFailure(self) -> bool: + def is_failure(self) -> bool: return True - def getOrElse(self, default_value: Callable[[], T]) -> T: + def get_or_else(self, default_value: Callable[[], T]) -> T: if callable(default_value): return default_value() return default_value @@ -169,17 +162,17 @@ def getOrElse(self, default_value: Callable[[], T]) -> T: def map(self, f: Callable[[T], T]) -> RpcResult: return self.failure(self) - def flatMap(self, f: Callable[[T], RpcResult]) -> RpcResult: - return self.failure(self.failureValue()) + def flat_map(self, f: Callable[[T], RpcResult]) -> RpcResult: + return self.failure(self.failure_value()) def filter(self, f: Callable[[T], bool]) -> RpcResult: return self.failure(self) - def failureValue(self) -> UStatus: + def failure_value(self) -> UStatus: return self.value - def successValue(self) -> T: - raise ValueError("Method successValue() called on a Failure instance") + def success_value(self) -> T: + raise ValueError("Method success_value() called on a Failure instance") def __str__(self) -> str: return f"Failure({self.value})" diff --git a/uprotocol/transport/builder/uattributesbuilder.py b/uprotocol/transport/builder/uattributesbuilder.py index 7a21131..9ae8991 100644 --- a/uprotocol/transport/builder/uattributesbuilder.py +++ b/uprotocol/transport/builder/uattributesbuilder.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,14 @@ SPDX-License-Identifier: Apache-2.0 """ -from multimethod import multimethod from typing import Union +from multimethod import multimethod + from uprotocol.proto.uattributes_pb2 import ( UAttributes, - UPriority, UMessageType, + UPriority, ) from uprotocol.proto.uri_pb2 import UUri from uprotocol.proto.ustatus_pb2 import UCode @@ -45,9 +46,7 @@ class UAttributesBuilder: @param priority uProtocol Prioritization classifications. """ - def __init__( - self, source: UUri, id: UUID, type: UMessageType, priority: UPriority - ): + def __init__(self, source: UUri, id: UUID, type: UMessageType, priority: UPriority): self.source = source self.id = id self.type = UMessageType.Name(type) @@ -100,7 +99,7 @@ def notification(source: UUri, sink: UUri, priority: UPriority): Factories.UPROTOCOL.create(), UMessageType.UMESSAGE_TYPE_NOTIFICATION, priority, - ).withSink(sink) + ).with_sink(sink) @staticmethod def request(source: UUri, sink: UUri, priority: UPriority, ttl: int): @@ -129,13 +128,13 @@ def request(source: UUri, sink: UUri, priority: UPriority, ttl: int): UMessageType.UMESSAGE_TYPE_REQUEST, priority, ) - .withTtl(ttl) - .withSink(sink) + .with_ttl(ttl) + .with_sink(sink) ) @multimethod def response( - source: Union[UUri, None], + source: Union[UUri, None], # noqa: N805 sink: Union[UUri, None], priority: Union[int, None], reqid: Union[UUID, None], @@ -164,19 +163,17 @@ def response( UMessageType.UMESSAGE_TYPE_RESPONSE, priority, ) - .withSink(sink) - .withReqId(reqid) + .with_sink(sink) + .with_req_id(reqid) ) @multimethod - def response(request: Union[UAttributes, None]): + def response(request: Union[UAttributes, None]): # noqa: N805 if request is None: raise ValueError("request cannot be null.") - return UAttributesBuilder.response( - request.sink, request.source, request.priority, request.id - ) + return UAttributesBuilder.response(request.sink, request.source, request.priority, request.id) - def withTtl(self, ttl: int): + def with_ttl(self, ttl: int): """ Add the time to live in milliseconds. @@ -186,7 +183,7 @@ def withTtl(self, ttl: int): self.ttl = ttl return self - def withToken(self, token: str): + def with_token(self, token: str): """ dd the authorization token used for TAP. @@ -196,7 +193,7 @@ def withToken(self, token: str): self.token = token return self - def withSink(self, sink: UUri): + def with_sink(self, sink: UUri): """ Add the explicit destination URI. @@ -206,7 +203,7 @@ def withSink(self, sink: UUri): self.sink = sink return self - def withPermissionLevel(self, plevel: int): + def with_permission_level(self, plevel: int): """ Add the permission level of the message. @@ -216,7 +213,7 @@ def withPermissionLevel(self, plevel: int): self.plevel = plevel return self - def withCommStatus(self, commstatus: UCode): + def with_comm_status(self, commstatus: UCode): """ Add the communication status of the message. @@ -226,7 +223,7 @@ def withCommStatus(self, commstatus: UCode): self.commstatus = commstatus return self - def withReqId(self, reqid: UUID): + def with_req_id(self, reqid: UUID): """ Add the request ID. @@ -236,7 +233,7 @@ def withReqId(self, reqid: UUID): self.reqid = reqid return self - def withTraceparent(self, traceparent: str): + def with_traceparent(self, traceparent: str): """ Add the traceparent. diff --git a/uprotocol/transport/builder/upayloadbuilder.py b/uprotocol/transport/builder/upayloadbuilder.py index 9238970..73cf780 100644 --- a/uprotocol/transport/builder/upayloadbuilder.py +++ b/uprotocol/transport/builder/upayloadbuilder.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -22,13 +22,13 @@ from typing import Optional, Type -from uprotocol.proto.upayload_pb2 import UPayload, UPayloadFormat from google.protobuf.any_pb2 import Any from google.protobuf.message import Message +from uprotocol.proto.upayload_pb2 import UPayload, UPayloadFormat + class UPayloadBuilder: - @staticmethod def pack_to_any(message: Message) -> UPayload: """ @@ -70,10 +70,7 @@ def unpack(payload: UPayload, clazz: Type[Message]) -> Optional[Message]: message = clazz() message.ParseFromString(payload.value) return message - elif ( - payload.format - == UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY - ): + elif payload.format == UPayloadFormat.UPAYLOAD_FORMAT_PROTOBUF_WRAPPED_IN_ANY: any_message = Any() any_message.ParseFromString(payload.value) message = clazz() diff --git a/uprotocol/transport/ulistener.py b/uprotocol/transport/ulistener.py index 21d52c2..be05388 100644 --- a/uprotocol/transport/ulistener.py +++ b/uprotocol/transport/ulistener.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from uprotocol.proto.umessage_pb2 import UMessage diff --git a/uprotocol/transport/utransport.py b/uprotocol/transport/utransport.py index f233c83..8536c46 100644 --- a/uprotocol/transport/utransport.py +++ b/uprotocol/transport/utransport.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,12 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod +from uprotocol.proto.umessage_pb2 import UMessage from uprotocol.proto.uri_pb2 import UUri -from uprotocol.transport.ulistener import UListener from uprotocol.proto.ustatus_pb2 import UStatus -from uprotocol.proto.umessage_pb2 import UMessage +from uprotocol.transport.ulistener import UListener class UTransport(ABC): diff --git a/uprotocol/transport/validate/uattributesvalidator.py b/uprotocol/transport/validate/uattributesvalidator.py index 7f6f5b7..f3788f6 100644 --- a/uprotocol/transport/validate/uattributesvalidator.py +++ b/uprotocol/transport/validate/uattributesvalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,16 +20,16 @@ SPDX-License-Identifier: Apache-2.0 """ - import time from abc import abstractmethod from enum import Enum -from uprotocol.proto.uri_pb2 import UUri + from uprotocol.proto.uattributes_pb2 import ( UAttributes, UMessageType, UPriority, ) +from uprotocol.proto.uri_pb2 import UUri from uprotocol.uri.validator.urivalidator import UriValidator from uprotocol.uuid.factory.uuidutils import UUIDUtils from uprotocol.validation.validationresult import ValidationResult @@ -87,14 +87,10 @@ def validate(self, attributes: UAttributes) -> ValidationResult: self.validate_priority(attributes), self.validate_permission_level(attributes), self.validate_req_id(attributes), - self.validate_id(attributes) + self.validate_id(attributes), ] - error_messages = [ - status.get_message() - for status in error_messages - if status.is_failure() - ] + error_messages = [status.get_message() for status in error_messages if status.is_failure()] if error_messages: return ValidationResult.failure(",".join(error_messages)) @@ -108,7 +104,7 @@ def is_expired(u_attributes: UAttributes) -> bool: The message has expired when the current time is greater than the original UUID time plus the ttl attribute. - @param uAttributes UAttributes with time to live value. + @param u_attributes UAttributes with time to live value. @return Returns a true if the original time plus the ttl is less than the current time """ @@ -145,11 +141,7 @@ def validate_sink(attr: UAttributes) -> ValidationResult: @return:Returns a ValidationResult that is success or failed with a failure message. """ - return ( - UriValidator.validate(attr.sink) - if attr.HasField("sink") - else ValidationResult.success() - ) + return UriValidator.validate(attr.sink) if attr.HasField("sink") else ValidationResult.success() @staticmethod def validate_priority(attr: UAttributes): @@ -164,9 +156,7 @@ def validate_priority(attr: UAttributes): return ( ValidationResult.success() if attr.priority >= UPriority.UPRIORITY_CS0 - else ValidationResult.failure( - f"Invalid UPriority [{UPriority.Name(attr.priority)}]" - ) + else ValidationResult.failure(f"Invalid UPriority [{UPriority.Name(attr.priority)}]") ) @staticmethod @@ -246,11 +236,7 @@ def validate_type(self, attributes_value: UAttributes) -> ValidationResult: return ( ValidationResult.success() if attributes_value.type == UMessageType.UMESSAGE_TYPE_PUBLISH - else ( - ValidationResult.failure( - f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]" - ) - ) + else (ValidationResult.failure(f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]")) ) def __str__(self): @@ -275,11 +261,7 @@ def validate_type(self, attributes_value: UAttributes) -> ValidationResult: return ( ValidationResult.success() if attributes_value.type == UMessageType.UMESSAGE_TYPE_REQUEST - else ( - ValidationResult.failure( - f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]" - ) - ) + else (ValidationResult.failure(f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]")) ) def validate_sink(self, attributes_value: UAttributes) -> ValidationResult: @@ -334,11 +316,7 @@ def validate_type(self, attributes_value: UAttributes) -> ValidationResult: return ( ValidationResult.success() if attributes_value.type == UMessageType.UMESSAGE_TYPE_RESPONSE - else ( - ValidationResult.failure( - f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]" - ) - ) + else (ValidationResult.failure(f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]")) ) def validate_sink(self, attributes_value: UAttributes) -> ValidationResult: @@ -351,17 +329,12 @@ def validate_sink(self, attributes_value: UAttributes) -> ValidationResult: @return:Returns a ValidationResult that is success or failed with a failure message. """ - if ( - not attributes_value.HasField("sink") - or attributes_value.sink == UUri() - ): + if not attributes_value.HasField("sink") or attributes_value.sink == UUri(): return ValidationResult.failure("Missing Sink") result = UriValidator.validate_rpc_response(attributes_value.sink) return result - def validate_req_id( - self, attributes_value: UAttributes - ) -> ValidationResult: + def validate_req_id(self, attributes_value: UAttributes) -> ValidationResult: """ Validate the correlationId. n the case of an RPC response, the correlation id is required.

@@ -372,8 +345,7 @@ def validate_req_id( """ return ( ValidationResult.success() - if attributes_value.reqid - and UUIDUtils.is_uuid(attributes_value.reqid) + if attributes_value.reqid and UUIDUtils.is_uuid(attributes_value.reqid) else ValidationResult.failure("Missing correlationId") ) @@ -399,11 +371,7 @@ def validate_type(self, attributes_value: UAttributes) -> ValidationResult: return ( ValidationResult.success() if attributes_value.type == UMessageType.UMESSAGE_TYPE_NOTIFICATION - else ( - ValidationResult.failure( - f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]" - ) - ) + else (ValidationResult.failure(f"Wrong Attribute Type [{UMessageType.Name(attributes_value.type)}]")) ) def validate_sink(self, attributes_value: UAttributes) -> ValidationResult: @@ -418,10 +386,7 @@ def validate_sink(self, attributes_value: UAttributes) -> ValidationResult: """ if attributes_value is None: return ValidationResult.failure("UAttributes cannot be null.") - if ( - not attributes_value.HasField("sink") - or attributes_value.sink == UUri() - ): + if not attributes_value.HasField("sink") or attributes_value.sink == UUri(): return ValidationResult.failure("Missing Sink") return ValidationResult.success() diff --git a/uprotocol/uri/factory/uentity_factory.py b/uprotocol/uri/factory/uentityfactory.py similarity index 61% rename from uprotocol/uri/factory/uentity_factory.py rename to uprotocol/uri/factory/uentityfactory.py index a2564ed..ceea0cf 100644 --- a/uprotocol/uri/factory/uentity_factory.py +++ b/uprotocol/uri/factory/uentityfactory.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,19 +20,16 @@ SPDX-License-Identifier: Apache-2.0 """ - from google.protobuf.descriptor import ServiceDescriptor from google.protobuf.descriptor_pb2 import ServiceOptions -from uprotocol.proto.uri_pb2 import UEntity -from uprotocol.proto.uprotocol_options_pb2 import name as Name from uprotocol.proto.uprotocol_options_pb2 import ( - version_major as Version_Major, + id, + name, + version_major, + version_minor, ) -from uprotocol.proto.uprotocol_options_pb2 import ( - version_minor as Version_Minor, -) -from uprotocol.proto.uprotocol_options_pb2 import id as Id +from uprotocol.proto.uri_pb2 import UEntity class UEntityFactory: @@ -47,19 +44,19 @@ def from_proto(service_descriptor: ServiceDescriptor): options: ServiceOptions = service_descriptor.GetOptions() - name: str = options.Extensions[Name] - version_major: int = options.Extensions[Version_Major] - version_minor: int = options.Extensions[Version_Minor] - id: int = options.Extensions[Id] + name_ext: str = options.Extensions[name] + v_major: int = options.Extensions[version_major] + v_minor: int = options.Extensions[version_minor] + id_ext: int = options.Extensions[id] uentity = UEntity() - if name is not None: - uentity.name = name - if version_major is not None: - uentity.version_major = version_major - if version_minor is not None: - uentity.version_minor = version_minor - if id is not None: - uentity.id = id + if name_ext is not None: + uentity.name = name_ext + if v_major is not None: + uentity.version_major = v_major + if v_minor is not None: + uentity.version_minor = v_minor + if id_ext is not None: + uentity.id = id_ext return uentity diff --git a/uprotocol/uri/factory/uresource_builder.py b/uprotocol/uri/factory/uresourcebuilder.py similarity index 78% rename from uprotocol/uri/factory/uresource_builder.py rename to uprotocol/uri/factory/uresourcebuilder.py index 1d0fbb3..8666847 100644 --- a/uprotocol/uri/factory/uresource_builder.py +++ b/uprotocol/uri/factory/uresourcebuilder.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,12 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ - import re -from uprotocol.proto.uri_pb2 import UResource -from multimethod import multimethod from typing import Union +from multimethod import multimethod + +from uprotocol.proto.uri_pb2 import UResource + class UResourceBuilder: MAX_RPC_ID = 1000 @@ -38,7 +39,7 @@ def for_rpc_response(): return UResource(name="rpc", instance="response", id=0) @multimethod - def for_rpc_request(method: Union[str, None], id: int = None): + def for_rpc_request(method: Union[str, None], id: int = None): # noqa: N805 uresource = UResource(name="rpc") if method is not None: uresource.instance = method @@ -48,8 +49,8 @@ def for_rpc_request(method: Union[str, None], id: int = None): return uresource @multimethod - def for_rpc_request(id: int): - return UResourceBuilder.for_rpc_request(None, id) + def for_rpc_request(id: int): # noqa: N805 + return UResourceBuilder.for_rpc_request(None, id) # noqa: N805 @staticmethod def from_id(id): @@ -59,11 +60,7 @@ def from_id(id): return ( UResourceBuilder.for_rpc_response() if id == 0 - else ( - UResourceBuilder.for_rpc_request(id) - if id < UResourceBuilder.MIN_TOPIC_ID - else UResource(id=id) - ) + else (UResourceBuilder.for_rpc_request(id) if id < UResourceBuilder.MIN_TOPIC_ID else UResource(id=id)) ) @staticmethod @@ -78,15 +75,9 @@ def from_uservice_topic(topic): raise ValueError("topic cannot be None.") name_and_instance_parts = re.split(r"[\\.]", topic.name) resource_name = name_and_instance_parts[0] - resource_instance = ( - None - if len(name_and_instance_parts) <= 1 - else name_and_instance_parts[1] - ) + resource_instance = None if len(name_and_instance_parts) <= 1 else name_and_instance_parts[1] - resource = UResource( - name=resource_name, id=topic.id, message=topic.message - ) + resource = UResource(name=resource_name, id=topic.id, message=topic.message) if resource_instance is not None: resource.instance = resource_instance diff --git a/uprotocol/uri/serializer/ipaddress.py b/uprotocol/uri/serializer/ipaddress.py index a47b5a1..f58747e 100644 --- a/uprotocol/uri/serializer/ipaddress.py +++ b/uprotocol/uri/serializer/ipaddress.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2024 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2024 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -24,7 +24,6 @@ class IpAddress: - @staticmethod def to_bytes(ip_address): if ip_address is None or ip_address.strip() == "": @@ -42,18 +41,13 @@ def is_valid(ip_address): return ( (ip_address is not None) and not ip_address.strip() == "" - and ( - IpAddress.is_valid_ipv4_address(ip_address) - or IpAddress.is_valid_ipv6_address(ip_address) - ) + and (IpAddress.is_valid_ipv4_address(ip_address) or IpAddress.is_valid_ipv6_address(ip_address)) ) @staticmethod def is_valid_ipv4_address(ip_address): try: - return len(ip_address.split(".")) == 4 and socket.inet_pton( - socket.AF_INET, ip_address - ) + return len(ip_address.split(".")) == 4 and socket.inet_pton(socket.AF_INET, ip_address) except OSError: return False @@ -64,9 +58,7 @@ def convert_ipv4_to_byte_array(ip_address): @staticmethod def is_valid_ipv6_address(ip_address): try: - return len(ip_address.split(":")) <= 8 and socket.inet_pton( - socket.AF_INET6, ip_address - ) + return len(ip_address.split(":")) <= 8 and socket.inet_pton(socket.AF_INET6, ip_address) except OSError: return False diff --git a/uprotocol/uri/serializer/longuriserializer.py b/uprotocol/uri/serializer/longuriserializer.py index 548dd7e..21172e5 100644 --- a/uprotocol/uri/serializer/longuriserializer.py +++ b/uprotocol/uri/serializer/longuriserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,9 @@ SPDX-License-Identifier: Apache-2.0 """ - import re -from uprotocol.proto.uri_pb2 import UAuthority -from uprotocol.proto.uri_pb2 import UEntity -from uprotocol.proto.uri_pb2 import UResource -from uprotocol.proto.uri_pb2 import UUri +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri from uprotocol.uri.serializer.uriserializer import UriSerializer from uprotocol.uri.validator.urivalidator import UriValidator @@ -51,11 +47,7 @@ def serialize(self, uri: UUri) -> str: sb = [] - if ( - uri.HasField("authority") - and uri.authority.HasField("name") - and not uri.authority.name.strip() == "" - ): + if uri.HasField("authority") and uri.authority.HasField("name") and not uri.authority.name.strip() == "": sb.append("//") sb.append(uri.authority.name) @@ -68,22 +60,15 @@ def serialize(self, uri: UUri) -> str: @staticmethod def build_resource_part_of_uri(uuri: UUri) -> str: - if not uuri.HasField("resource"): return "" u_resource = uuri.resource sb = "/" + u_resource.name - if ( - u_resource.instance is not None - and not u_resource.instance.strip() == "" - ): + if u_resource.instance is not None and not u_resource.instance.strip() == "": sb += "." + u_resource.instance - if ( - u_resource.message is not None - and not u_resource.message.strip() == "" - ): + if u_resource.message is not None and not u_resource.message.strip() == "": sb += "#" + u_resource.message return sb @@ -186,15 +171,9 @@ def parse_from_string(resource_string: str) -> UResource: parts = LongUriSerializer.remove_empty(resource_string.split("#")) name_and_instance = parts[0] - name_and_instance_parts = LongUriSerializer.remove_empty( - name_and_instance.split(".") - ) + name_and_instance_parts = LongUriSerializer.remove_empty(name_and_instance.split(".")) resource_name = name_and_instance_parts[0] - resource_instance = ( - name_and_instance_parts[1] - if len(name_and_instance_parts) > 1 - else None - ) + resource_instance = name_and_instance_parts[1] if len(name_and_instance_parts) > 1 else None resource_message = parts[1] if len(parts) > 1 else None u_resource = UResource(name=resource_name) @@ -202,11 +181,7 @@ def parse_from_string(resource_string: str) -> UResource: u_resource.instance = resource_instance if resource_message is not None: u_resource.message = resource_message - if ( - "rpc" in resource_name - and resource_instance is not None - and "response" in resource_instance - ): + if "rpc" in resource_name and resource_instance is not None and "response" in resource_instance: u_resource.id = 0 return u_resource diff --git a/uprotocol/uri/serializer/microuriserializer.py b/uprotocol/uri/serializer/microuriserializer.py index 60891db..f083188 100644 --- a/uprotocol/uri/serializer/microuriserializer.py +++ b/uprotocol/uri/serializer/microuriserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,13 +20,10 @@ SPDX-License-Identifier: Apache-2.0 """ - from enum import Enum -from uprotocol.proto.uri_pb2 import UAuthority -from uprotocol.proto.uri_pb2 import UEntity -from uprotocol.proto.uri_pb2 import UUri -from uprotocol.uri.factory.uresource_builder import UResourceBuilder +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.uriserializer import UriSerializer from uprotocol.uri.validator.urivalidator import UriValidator @@ -41,9 +38,6 @@ class AddressType(Enum): IPv6 = 2 ID = 3 - # def getValue(self): - # return bytes(self.value) - @classmethod def from_value(cls, value): for addr_type in cls: @@ -78,11 +72,7 @@ def serialize(self, uri: UUri) -> bytes: @return:Returns a byte[] representing the serialized UUri. """ - if ( - uri is None - or UriValidator.is_empty(uri) - or not UriValidator.is_micro_form(uri) - ): + if uri is None or UriValidator.is_empty(uri) or not UriValidator.is_micro_form(uri): return bytearray() maybe_ue_id: int = uri.entity.id @@ -131,9 +121,7 @@ def serialize(self, uri: UUri) -> bytes: # If the ID length is greater than the maximum allowed, return an empty byte[] if len(uri.authority.id) > self.MAX_ID_LENGTH: return bytearray() - byte_arr.append( - keep_8_least_significant_bits(len(uri.authority.id)) - ) + byte_arr.append(keep_8_least_significant_bits(len(uri.authority.id))) try: if uri.authority.HasField("ip"): byte_arr.extend(bytearray(uri.authority.ip)) @@ -165,20 +153,11 @@ def deserialize(self, micro_uri: bytes) -> UUri: # Validate that the micro_uri is the correct length for the type address_type = addresstype - if ( - address_type == AddressType.LOCAL - and len(micro_uri) != self.LOCAL_MICRO_URI_LENGTH - ): + if address_type == AddressType.LOCAL and len(micro_uri) != self.LOCAL_MICRO_URI_LENGTH: return UUri() - elif ( - address_type == AddressType.IPv4 - and len(micro_uri) != self.IPV4_MICRO_URI_LENGTH - ): + elif address_type == AddressType.IPv4 and len(micro_uri) != self.IPV4_MICRO_URI_LENGTH: return UUri() - elif ( - address_type == AddressType.IPv6 - and len(micro_uri) != self.IPV6_MICRO_URI_LENGTH - ): + elif address_type == AddressType.IPv6 and len(micro_uri) != self.IPV6_MICRO_URI_LENGTH: return UUri() # UENTITY_ID @@ -190,11 +169,11 @@ def deserialize(self, micro_uri: bytes) -> UUri: u_authority = None if address_type in (AddressType.IPv4, AddressType.IPv6): length = 4 if address_type == AddressType.IPv4 else 16 - data = micro_uri[8:8 + length] + data = micro_uri[8 : 8 + length] u_authority = UAuthority(ip=bytes(data)) elif address_type == AddressType.ID: length = micro_uri[8] - u_authority = UAuthority(id=bytes(micro_uri[9:9 + length])) + u_authority = UAuthority(id=bytes(micro_uri[9 : 9 + length])) uri = UUri( entity=UEntity(id=ue_id, version_major=ui_version), diff --git a/uprotocol/uri/serializer/shorturiserializer.py b/uprotocol/uri/serializer/shorturiserializer.py index baa81a0..33728fc 100644 --- a/uprotocol/uri/serializer/shorturiserializer.py +++ b/uprotocol/uri/serializer/shorturiserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -24,13 +24,11 @@ import socket from typing import List -from uprotocol.proto.uri_pb2 import UUri, UAuthority, UEntity -from uprotocol.proto.uri_pb2 import UResource - +from uprotocol.proto.uri_pb2 import UAuthority, UEntity, UResource, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.uri.serializer.ipaddress import IpAddress from uprotocol.uri.serializer.uriserializer import UriSerializer from uprotocol.uri.validator.urivalidator import UriValidator -from uprotocol.uri.factory.uresource_builder import UResourceBuilder def convert_packed_ipaddr_to_string(packed_ipaddr: bytes): @@ -68,9 +66,7 @@ def serialize(self, uri: UUri) -> str: if uri.authority.HasField("ip"): try: string_builder.append("//") - string_builder.append( - convert_packed_ipaddr_to_string(authority.ip) - ) + string_builder.append(convert_packed_ipaddr_to_string(authority.ip)) except Exception: return "" elif uri.authority.HasField("id"): @@ -80,9 +76,7 @@ def serialize(self, uri: UUri) -> str: return "" string_builder.append("/") - string_builder.append( - self.build_software_entity_part_of_uri(uri.entity) - ) + string_builder.append(self.build_software_entity_part_of_uri(uri.entity)) string_builder.append(self.build_resource_part_of_uri(uri)) return re.sub("/+$", "", "".join(string_builder)) @@ -123,9 +117,7 @@ def deserialize(self, uprotocol_uri: str) -> UUri: return UUri() uri = ( - uprotocol_uri[uprotocol_uri.index(":") + 1:] - if ":" in uprotocol_uri - else uprotocol_uri.replace("\\", "/") + uprotocol_uri[uprotocol_uri.index(":") + 1 :] if ":" in uprotocol_uri else uprotocol_uri.replace("\\", "/") ) is_local = not uri.startswith("//") @@ -148,9 +140,7 @@ def deserialize(self, uprotocol_uri: str) -> UUri: ue_version = uri_parts[2] if number_of_parts_in_uri > 3: - resource = ShortUriSerializer.parse_from_string( - uri_parts[3] - ) + resource = ShortUriSerializer.parse_from_string(uri_parts[3]) if number_of_parts_in_uri > 4: return UUri() @@ -167,9 +157,7 @@ def deserialize(self, uprotocol_uri: str) -> UUri: if number_of_parts_in_uri > 4: ue_version = uri_parts[4] if number_of_parts_in_uri > 5: - resource = ShortUriSerializer.parse_from_string( - uri_parts[5] - ) + resource = ShortUriSerializer.parse_from_string(uri_parts[5]) if number_of_parts_in_uri > 6: return UUri() else: diff --git a/uprotocol/uri/serializer/uriserializer.py b/uprotocol/uri/serializer/uriserializer.py index 985b9ea..b7150e2 100644 --- a/uprotocol/uri/serializer/uriserializer.py +++ b/uprotocol/uri/serializer/uriserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,9 +20,9 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from re import T + from uprotocol.proto.uri_pb2 import UUri diff --git a/uprotocol/uri/validator/urivalidator.py b/uprotocol/uri/validator/urivalidator.py index 78750ac..eb0e1bb 100644 --- a/uprotocol/uri/validator/urivalidator.py +++ b/uprotocol/uri/validator/urivalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -22,10 +22,8 @@ from multimethod import multimethod -from uprotocol.proto.uri_pb2 import UAuthority -from uprotocol.proto.uri_pb2 import UResource -from uprotocol.proto.uri_pb2 import UUri -from uprotocol.uri.factory.uresource_builder import UResourceBuilder +from uprotocol.proto.uri_pb2 import UAuthority, UResource, UUri +from uprotocol.uri.factory.uresourcebuilder import UResourceBuilder from uprotocol.validation.validationresult import ValidationResult @@ -46,17 +44,11 @@ def validate(uri: UUri) -> ValidationResult: if UriValidator.is_empty(uri): return ValidationResult.failure("Uri is empty.") - if uri.HasField("authority") and not UriValidator.is_remote( - uri.authority - ): - return ValidationResult.failure( - "Uri is remote missing uAuthority." - ) + if uri.HasField("authority") and not UriValidator.is_remote(uri.authority): + return ValidationResult.failure("Uri is remote missing u_authority.") if uri.entity.name.strip() == "": - return ValidationResult.failure( - "Uri is missing uSoftware Entity name." - ) + return ValidationResult.failure("Uri is missing uSoftware Entity name.") return ValidationResult.success() @@ -112,7 +104,7 @@ def is_empty(uri: UUri) -> bool: return uri is None or uri == UUri() @multimethod - def is_rpc_method(uri: UUri) -> bool: + def is_rpc_method(uri: UUri) -> bool: # noqa: N805 """ Returns true if URI is of type RPC. A UUri is of type RPC if it contains the word rpc in the resource name @@ -124,7 +116,7 @@ def is_rpc_method(uri: UUri) -> bool: return uri is not None and UriValidator.is_rpc_method(uri.resource) @multimethod - def is_rpc_method(uri: None) -> bool: + def is_rpc_method(uri: None) -> bool: # noqa: N805 """ Returns false if input is None. @param uri: None @@ -133,7 +125,7 @@ def is_rpc_method(uri: None) -> bool: return False @multimethod - def is_rpc_method(resource: UResource) -> bool: + def is_rpc_method(resource: UResource) -> bool: # noqa: N805 """ Returns true if Uresource is of type RPC. @param resource: UResource to check if it is of type RPC method @@ -145,29 +137,20 @@ def is_rpc_method(resource: UResource) -> bool: and ( resource.HasField("instance") and resource.instance.strip() != "" - or ( - resource.HasField("id") - and resource.id < UResourceBuilder.MIN_TOPIC_ID - ) + or (resource.HasField("id") and resource.id < UResourceBuilder.MIN_TOPIC_ID) ) ) @staticmethod def is_resolved(uri: UUri) -> bool: - - return UriValidator.is_long_form(uri) and UriValidator.is_micro_form( - uri - ) + return UriValidator.is_long_form(uri) and UriValidator.is_micro_form(uri) @staticmethod def is_rpc_response(uri: UUri) -> bool: - return ( - uri is not None - and uri.resource == UResourceBuilder.for_rpc_response() - ) + return uri is not None and uri.resource == UResourceBuilder.for_rpc_response() @multimethod - def is_micro_form(uri: UUri) -> bool: + def is_micro_form(uri: UUri) -> bool: # noqa: N805 """ Determines if this UUri can be serialized into a micro form UUri.

@@ -185,7 +168,7 @@ def is_micro_form(uri: UUri) -> bool: ) @multimethod - def is_micro_form(authority: UAuthority) -> bool: + def is_micro_form(authority: UAuthority) -> bool: # noqa: N805 """ check if UAuthority can be represented in micro format. Micro UAuthorities are local or ones @@ -194,12 +177,10 @@ def is_micro_form(authority: UAuthority) -> bool: @return Returns true if UAuthority can be represented in micro format """ - return UriValidator.is_local(authority) or ( - authority.HasField("ip") or (authority.HasField("id")) - ) + return UriValidator.is_local(authority) or (authority.HasField("ip") or (authority.HasField("id"))) @multimethod - def is_long_form(uri: UUri) -> bool: + def is_long_form(uri: UUri) -> bool: # noqa: N805 """ Determines if this UUri can be serialized into a long form UUri.

@@ -217,7 +198,7 @@ def is_long_form(uri: UUri) -> bool: ) @multimethod - def is_long_form(authority: UAuthority) -> bool: + def is_long_form(authority: UAuthority) -> bool: # noqa: N805 """ Returns true if UAuthority is local contains names so that it can be serialized into long format. @@ -226,8 +207,7 @@ def is_long_form(authority: UAuthority) -> bool: it can be serialized into long format. """ return authority is not None and ( - UriValidator.is_local(authority) - or (authority.HasField("name") and authority.name.strip() != "") + UriValidator.is_local(authority) or (authority.HasField("name") and authority.name.strip() != "") ) @staticmethod diff --git a/uprotocol/uuid/factory/__init__.py b/uprotocol/uuid/factory/__init__.py index ff4a2a0..ee5b8d2 100644 --- a/uprotocol/uuid/factory/__init__.py +++ b/uprotocol/uuid/factory/__init__.py @@ -1,4 +1,3 @@ - import secrets import time import uuid @@ -17,7 +16,7 @@ def __init__( int: int = None, version: int = None, *, - is_safe=uuid.SafeUUID.unknown + is_safe=uuid.SafeUUID.unknown, ) -> None: r"""Create a UUID.""" @@ -51,11 +50,7 @@ def subsec(self) -> int: @property def time(self) -> int: if self.version == 6: - return ( - (self.time_low << 28) - | (self.time_mid << 12) - | (self.time_hi_version & 0x0FFF) - ) + return (self.time_low << 28) | (self.time_mid << 12) | (self.time_hi_version & 0x0FFF) if self.version == 7: return self.int >> 80 if self.version == 8: diff --git a/uprotocol/uuid/factory/uuidfactory.py b/uprotocol/uuid/factory/uuidfactory.py index c277123..db61f68 100644 --- a/uprotocol/uuid/factory/uuidfactory.py +++ b/uprotocol/uuid/factory/uuidfactory.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - import random from datetime import datetime @@ -40,9 +39,7 @@ def _create(self, instant): class UUIDv6Factory(UUIDFactory): - def _create(self, instant) -> UUID: - python_uuid = uuid6() msb, lsb = UUIDUtils.get_msb_lsb(python_uuid) return UUID(msb=msb, lsb=lsb) @@ -55,11 +52,7 @@ class UUIDv8Factory(UUIDFactory): _msb = UUIDV8_VERSION << 12 def _create(self, instant) -> UUID: - time = ( - int(instant.timestamp() * 1000) - if instant - else int(datetime.now().timestamp() * 1000) - ) + time = int(instant.timestamp() * 1000) if instant else int(datetime.now().timestamp() * 1000) if time == (self._msb >> 16): if (self._msb & 0xFFF) < self.MAX_COUNT: @@ -68,7 +61,6 @@ def _create(self, instant) -> UUID: self._msb = (time << 16) | (8 << 12) return UUID(msb=self._msb, lsb=self._lsb) - # return UUID(msb=msb, lsb=lsb) class Factories: diff --git a/uprotocol/uuid/factory/uuidutils.py b/uprotocol/uuid/factory/uuidutils.py index cd4282d..97370f5 100644 --- a/uprotocol/uuid/factory/uuidutils.py +++ b/uprotocol/uuid/factory/uuidutils.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,16 +20,15 @@ SPDX-License-Identifier: Apache-2.0 """ - -import uuid import time +import uuid from enum import Enum from typing import Optional, Union from multimethod import multimethod -from uprotocol.proto.uuid_pb2 import UUID from uprotocol.proto.uattributes_pb2 import UAttributes +from uprotocol.proto.uuid_pb2 import UUID from uprotocol.uuid.factory import PythonUUID @@ -85,9 +84,7 @@ def get_variant(uuid_obj: UUID) -> Optional[str]: """ if uuid_obj is None: return None - python_uuid = UUIDUtils.create_pythonuuid_from_eclipseuuid( - uuid_obj - ) + python_uuid = UUIDUtils.create_pythonuuid_from_eclipseuuid(uuid_obj) return python_uuid.variant @@ -100,12 +97,7 @@ def is_uprotocol(uuid_obj: UUID) -> bool: passed is null or the UUID is not uProtocol format. """ - return ( - UUIDUtils.get_version(uuid_obj) - == Version.VERSION_UPROTOCOL - if uuid_obj is not None - else False - ) + return UUIDUtils.get_version(uuid_obj) == Version.VERSION_UPROTOCOL if uuid_obj is not None else False @staticmethod def is_uuidv6(uuid_obj: UUID) -> bool: @@ -119,8 +111,7 @@ def is_uuidv6(uuid_obj: UUID) -> bool: return False return ( - UUIDUtils.get_version(uuid_obj) - == Version.VERSION_TIME_ORDERED + UUIDUtils.get_version(uuid_obj) == Version.VERSION_TIME_ORDERED and UUIDUtils.get_variant(uuid_obj) == uuid.RFC_4122 if uuid_obj is not None else False @@ -134,12 +125,7 @@ def is_uuid(uuid_obj: UUID) -> bool: @return:true if is UUID version 6 or 8 """ - return ( - UUIDUtils.is_uprotocol(uuid_obj) - or UUIDUtils.is_uuidv6(uuid_obj) - if uuid_obj is not None - else False - ) + return UUIDUtils.is_uprotocol(uuid_obj) or UUIDUtils.is_uuidv6(uuid_obj) if uuid_obj is not None else False @staticmethod def get_time(uuid: UUID): @@ -159,9 +145,7 @@ def get_time(uuid: UUID): time = uuid.msb >> 16 elif version == Version.VERSION_TIME_ORDERED: try: - python_uuid = ( - UUIDUtils.create_pythonuuid_from_eclipseuuid(uuid) - ) + python_uuid = UUIDUtils.create_pythonuuid_from_eclipseuuid(uuid) # Convert 100-nanoseconds ticks to milliseconds time = python_uuid.time // 10000 except ValueError: @@ -186,7 +170,7 @@ def get_elapsed_time(id: UUID): return now - creation_time if now >= creation_time else None @multimethod - def get_remaining_time(id: Union[UUID, None], ttl: int): + def get_remaining_time(id: Union[UUID, None], ttl: int): # noqa: N805 """ Calculates the remaining time until the expiration of the event identified by the given UUID. @@ -204,7 +188,7 @@ def get_remaining_time(id: Union[UUID, None], ttl: int): return ttl - elapsed_time if ttl > elapsed_time else None @multimethod - def get_remaining_time(attributes: Union[UAttributes, None]): + def get_remaining_time(attributes: Union[UAttributes, None]): # noqa: N805 """ Calculates the remaining time until the expiration of the event identified by the given UAttributes. @@ -214,16 +198,10 @@ def get_remaining_time(attributes: Union[UAttributes, None]): or None if the attributes do not contain TTL information or the creation time cannot be determined. """ - return ( - UUIDUtils.get_remaining_time( - attributes.id, attributes.ttl - ) - if attributes.HasField("ttl") - else None - ) + return UUIDUtils.get_remaining_time(attributes.id, attributes.ttl) if attributes.HasField("ttl") else None @multimethod - def is_expired(id: Union[UUID, None], ttl: int): + def is_expired(id: Union[UUID, None], ttl: int): # noqa: N805 """ Checks if the event identified by the given UUID has expired based on the specified time-to-live (TTL). @@ -234,12 +212,10 @@ def is_expired(id: Union[UUID, None], ttl: int): if TTL is non-positive or creation time cannot be determined. """ - return ( - ttl > 0 and UUIDUtils.get_remaining_time(id, ttl) is None - ) + return ttl > 0 and UUIDUtils.get_remaining_time(id, ttl) is None @multimethod - def is_expired(attributes: Union[UAttributes, None]): + def is_expired(attributes: Union[UAttributes, None]): # noqa: N805 """ Checks if the event identified by the given UAttributes has expired. @@ -249,9 +225,7 @@ def is_expired(attributes: Union[UAttributes, None]): if the attributes do not contain TTL information or creation time cannot be determined. """ - return attributes.HasField("ttl") and UUIDUtils.is_expired( - attributes.id, attributes.ttl - ) + return attributes.HasField("ttl") and UUIDUtils.is_expired(attributes.id, attributes.ttl) @staticmethod def get_msb_lsb(uuid: PythonUUID): diff --git a/uprotocol/uuid/serializer/longuuidserializer.py b/uprotocol/uuid/serializer/longuuidserializer.py index e034290..a1f4f6e 100644 --- a/uprotocol/uuid/serializer/longuuidserializer.py +++ b/uprotocol/uuid/serializer/longuuidserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from uprotocol.proto.uuid_pb2 import UUID from uprotocol.uuid.factory import PythonUUID from uprotocol.uuid.factory.uuidutils import UUIDUtils @@ -45,16 +44,12 @@ def deserialize(self, string_uuid: str) -> UUID: wire. """ if not string_uuid or string_uuid.isspace(): - return ( - UUID() - ) # Return default UUID if string is empty or whitespace + return UUID() # Return default UUID if string is empty or whitespace try: msb, lsb = UUIDUtils.get_msb_lsb(PythonUUID(string_uuid)) return UUID(msb=msb, lsb=lsb) except ValueError: - return ( - UUID() - ) # Return default UUID in case of parsing failure + return UUID() # Return default UUID in case of parsing failure def serialize(self, uuid: UUID) -> str: """ @@ -65,7 +60,5 @@ def serialize(self, uuid: UUID) -> str: if uuid is None: return "" - pythonuuid = UUIDUtils.create_pythonuuid_from_eclipseuuid( - uuid - ) + pythonuuid = UUIDUtils.create_pythonuuid_from_eclipseuuid(uuid) return str(pythonuuid) if uuid else "" diff --git a/uprotocol/uuid/serializer/microuuidserializer.py b/uprotocol/uuid/serializer/microuuidserializer.py index 4320f04..4796915 100644 --- a/uprotocol/uuid/serializer/microuuidserializer.py +++ b/uprotocol/uuid/serializer/microuuidserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - import struct from uprotocol.proto.uuid_pb2 import UUID @@ -46,9 +45,7 @@ def deserialize(self, uuid_bytes: bytes) -> UUID: wire. """ if not uuid_bytes or len(uuid_bytes) != 16: - return ( - UUID() - ) # Return default UUID if bytes are empty or not 16 bytes + return UUID() # Return default UUID if bytes are empty or not 16 bytes msb, lsb = struct.unpack(">QQ", uuid_bytes) return UUID(msb=msb, lsb=lsb) @@ -61,8 +58,6 @@ def serialize(self, uuid: UUID) -> bytes: """ if uuid is None: return bytearray() - pythonuuid = UUIDUtils.create_pythonuuid_from_eclipseuuid( - uuid - ) + pythonuuid = UUIDUtils.create_pythonuuid_from_eclipseuuid(uuid) msb, lsb = divmod(pythonuuid.int, 2**64) return struct.pack(">QQ", msb, lsb) diff --git a/uprotocol/uuid/serializer/uuidserializer.py b/uprotocol/uuid/serializer/uuidserializer.py index 9c8ab53..349f57d 100644 --- a/uprotocol/uuid/serializer/uuidserializer.py +++ b/uprotocol/uuid/serializer/uuidserializer.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,9 +20,8 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod -from typing import TypeVar, Generic +from typing import Generic, TypeVar from uprotocol.proto.uuid_pb2 import UUID diff --git a/uprotocol/uuid/validate/uuidvalidator.py b/uprotocol/uuid/validate/uuidvalidator.py index cdb361b..285b956 100644 --- a/uprotocol/uuid/validate/uuidvalidator.py +++ b/uprotocol/uuid/validate/uuidvalidator.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,14 +20,13 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from enum import Enum +from uprotocol.proto.ustatus_pb2 import UCode, UStatus from uprotocol.proto.uuid_pb2 import UUID from uprotocol.uuid.factory.uuidutils import UUIDUtils, Version from uprotocol.validation.validationresult import ValidationResult -from uprotocol.proto.ustatus_pb2 import UStatus, UCode class UuidVariant(Enum): @@ -54,11 +53,7 @@ def validate(self, uuid: UUID) -> UStatus: self.validate_variant(uuid), self.validate_time(uuid), ] - error_messages = [ - result.get_message() - for result in error_messages - if result.is_failure() - ] + error_messages = [result.get_message() for result in error_messages if result.is_failure()] error_message = ",".join(error_messages) if not error_message: return ValidationResult.success().to_status() diff --git a/uprotocol/validation/validationresult.py b/uprotocol/validation/validationresult.py index 6896e60..97dc537 100644 --- a/uprotocol/validation/validationresult.py +++ b/uprotocol/validation/validationresult.py @@ -1,5 +1,5 @@ """ -SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the +SPDX-FileCopyrightText: Copyright (c) 2023 Contributors to the Eclipse Foundation See the NOTICE file(s) distributed with this work for additional @@ -20,7 +20,6 @@ SPDX-License-Identifier: Apache-2.0 """ - from abc import ABC, abstractmethod from uprotocol.proto.ustatus_pb2 import UCode, UStatus @@ -31,6 +30,7 @@ class ValidationResult(ABC): Class wrapping a ValidationResult of success or failure wrapping the value of a UStatus. """ + STATUS_SUCCESS = UStatus(code=UCode.OK, message="OK") def __init__(self): @@ -84,7 +84,7 @@ def __str__(self): class Success(ValidationResult): """ - Implementation for success, wrapping a UStatus with UCode 0 for success. + Implementation for success, wrapping a UStatus with UCode 0 for success. """ def to_status(self) -> UStatus: