From d100e7d05367d124c3ef65269baf59349a8a4a8e Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Mon, 23 Mar 2026 15:19:19 +0200 Subject: [PATCH] [P] Add CI for updated Hub component part --- .gitea/workflows/hub-test.yaml | 21 +++++++++++++++++ hub/Dockerfile-test | 12 ++++++++++ hub/app/adapters/store_api_adapter.py | 10 +++++++- hub/app/adapters/store_api_adapter_test.py | 27 ++++++++++++++++++++++ hub/test-entry.sh | 3 +++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 .gitea/workflows/hub-test.yaml create mode 100644 hub/Dockerfile-test create mode 100644 hub/app/adapters/store_api_adapter_test.py create mode 100755 hub/test-entry.sh diff --git a/.gitea/workflows/hub-test.yaml b/.gitea/workflows/hub-test.yaml new file mode 100644 index 0000000..614a77b --- /dev/null +++ b/.gitea/workflows/hub-test.yaml @@ -0,0 +1,21 @@ +name: Hub component testing +on: [push, workflow_dispatch] + +jobs: + hub-test: + runs-on: host-arch-x86_64 + steps: + - name: Clone repository + run: git clone --revision ${{ gitea.sha }} --depth 1 ${{ gitea.server_url }}/${{ gitea.repository }} + + - name: Build Hub testing container + working-directory: IoT-Systems/hub + run: docker build -t local/hub/${{gitea.sha}} -f Dockerfile-test . + + - name: Run Hub tests + working-directory: IoT-Systems + run: docker run --rm -it local/hub/${{gitea.sha}} + + - name: Clean up containers + if: ${{always()}} + run: docker image rm local/hub/${{gitea.sha}} diff --git a/hub/Dockerfile-test b/hub/Dockerfile-test new file mode 100644 index 0000000..4b3ae49 --- /dev/null +++ b/hub/Dockerfile-test @@ -0,0 +1,12 @@ +# Use the official Python image as the base image +FROM python:3.9-slim +# Set the working directory inside the container +WORKDIR /app +# Copy the requirements.txt file and install dependencies +COPY hub/requirements.txt . + +RUN pip install --no-cache-dir -r requirements.txt +# Copy the entire application into the container +COPY hub/. . +# Run the main.py script inside the container when it starts +CMD ["./test-entry.sh"] diff --git a/hub/app/adapters/store_api_adapter.py b/hub/app/adapters/store_api_adapter.py index 8ce4945..e06d91c 100644 --- a/hub/app/adapters/store_api_adapter.py +++ b/hub/app/adapters/store_api_adapter.py @@ -13,7 +13,7 @@ class StoreApiAdapter(StoreGateway): def __init__(self, api_base_url): self.api_base_url = api_base_url - def save_data(self, processed_agent_data_batch: List[ProcessedAgentData]): + def processed_agent_data_batch_to_json(self, processed_agent_data_batch: List[ProcessedAgentData]): if not processed_agent_data_batch: return False @@ -25,6 +25,14 @@ class StoreApiAdapter(StoreGateway): "user_id": user_id } + return payload + + def save_data(self, processed_agent_data_batch: List[ProcessedAgentData]): + payload = self.processed_agent_data_batch_to_json(processed_agent_data_batch) + + if payload == False: + return False + try: # Perform a POST request to the Store API with a 10-second timeout response = requests.post( diff --git a/hub/app/adapters/store_api_adapter_test.py b/hub/app/adapters/store_api_adapter_test.py new file mode 100644 index 0000000..7280815 --- /dev/null +++ b/hub/app/adapters/store_api_adapter_test.py @@ -0,0 +1,27 @@ +from store_api_adapter import StoreApiAdapter +from ..entities.agent_data import AccelerometerData, AgentData, GpsData + +def test_processed_agent_data_batch_to_json(): + processed_data_batch = [ + ProcessedAgentData(road_state = "normal", + agent_data = AgentData(user_id = 1, accelerometer = AccelerometerData(x = 0.1, y = 0.2, z = 0.3)), + gps = GpsData(latitude = 10.123, longitude = 20.456), + timestamp = "2023-07-21T12:34:56Z"), + ProcessedAgentData(road_state = "normal", + agent_data = AgentData(user_id = 2, accelerometer = AccelerometerData(x = 0.1, y = 0.2, z = 0.3)), + gps = GpsData(latitude = 10.123, longitude = 20.456), + timestamp = "2023-07-21T12:34:56Z"), + ProcessedAgentData(road_state = "normal", + agent_data = AgentData(user_id = 3, accelerometer = AccelerometerData(x = 0.1, y = 0.2, z = 0.3)), + gps = GpsData(latitude = 10.123, longitude = 20.456), + timestamp = "2023-07-21T12:34:56Z"), + ] + + res = json.loads(StoreApiAdapter(None).processed_agent_data_batch_to_json(processed_data_batch)) + + assert res[0].agent_data.user_id == 1 + assert res[1].agent_data.user_id == 2 + assert res[2].agent_data.user_id == 3 + +if __name__ == "__main__": + test_processed_agent_data_batch_to_json() diff --git a/hub/test-entry.sh b/hub/test-entry.sh new file mode 100755 index 0000000..ec3b77e --- /dev/null +++ b/hub/test-entry.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +python3 app/adapters/store_api_adapter_test.py