From b3301809093d3451170e9f1419816942f6624bfe Mon Sep 17 00:00:00 2001 From: hasslesstech Date: Mon, 23 Feb 2026 23:53:42 +0200 Subject: [PATCH] lab1: add CI/CD testing --- .gitea/workflows/testing.yaml | 25 ++++++++++++++++++++ agent/docker/docker-compose-test.yaml | 34 +++++++++++++++++++++++++++ agent/docker/docker-compose.yaml | 3 ++- agent/src/config.py | 3 +++ agent/src/main.py | 12 ++++++++-- edge/docker/docker-compose.yaml | 1 + 6 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 .gitea/workflows/testing.yaml create mode 100644 agent/docker/docker-compose-test.yaml diff --git a/.gitea/workflows/testing.yaml b/.gitea/workflows/testing.yaml new file mode 100644 index 0000000..b6bdd09 --- /dev/null +++ b/.gitea/workflows/testing.yaml @@ -0,0 +1,25 @@ +name: Test Agent +on: [push, workflow_dispatch] +jobs: + test-agent-run: + runs-on: arch-x86_64 + steps: + - name: Fetch the repository + run: git clone --branch ${{ gitea.ref_name }} --depth 1 ${{ gitea.server_url }}/${{ gitea.repository }} + + - name: Build containers + run: docker-compose -f docker-compose-test.yaml build + working-directory: sem8-iot-test/agent/docker + + - name: Start MQTT broker + run: docker-compose -f docker-compose-test.yaml up -d mqtt + working-directory: sem8-iot-test/agent/docker + + - name: Start agent + run: docker-compose -f docker-compose-test.yaml run fake_agent + working-directory: sem8-iot-test/agent/docker + + - name: Clean up + if: always() + run: docker-compose -f docker-compose-test.yaml down + working-directory: sem8-iot-test/agent/docker diff --git a/agent/docker/docker-compose-test.yaml b/agent/docker/docker-compose-test.yaml new file mode 100644 index 0000000..73c48db --- /dev/null +++ b/agent/docker/docker-compose-test.yaml @@ -0,0 +1,34 @@ +version: "3.3" +#name: "road_vision" +services: + mqtt: + image: eclipse-mosquitto + container_name: mqtt + volumes: + - ./mosquitto:/mosquitto + - ./mosquitto/data:/mosquitto/data + - ./mosquitto/log:/mosquitto/log + ports: + - 1883:1883 + - 9001:9001 + networks: + mqtt_network: + + + fake_agent: + container_name: agent + build: ../ + depends_on: + - mqtt + environment: + MQTT_BROKER_HOST: "mqtt" + MQTT_BROKER_PORT: 1883 + MQTT_TOPIC: "agent_data_topic" + DELAY: 0.1 + MAX_SENDS: 30 + networks: + mqtt_network: + + +networks: + mqtt_network: diff --git a/agent/docker/docker-compose.yaml b/agent/docker/docker-compose.yaml index 3059c9e..cbedea9 100644 --- a/agent/docker/docker-compose.yaml +++ b/agent/docker/docker-compose.yaml @@ -1,4 +1,5 @@ -name: "road_vision" +version: "3.3" +#name: "road_vision" services: mqtt: image: eclipse-mosquitto diff --git a/agent/src/config.py b/agent/src/config.py index f507c71..180b51c 100644 --- a/agent/src/config.py +++ b/agent/src/config.py @@ -16,3 +16,6 @@ MQTT_TOPIC = os.environ.get("MQTT_TOPIC") or "agent" # Delay for sending data to mqtt in seconds DELAY = try_parse(float, os.environ.get("DELAY")) or 1 + +# Testing switches for CI/CD +MAX_SENDS = try_parse(int, os.environ.get("MAX_SENDS")) diff --git a/agent/src/main.py b/agent/src/main.py index 52351bd..4ab4539 100644 --- a/agent/src/main.py +++ b/agent/src/main.py @@ -24,9 +24,13 @@ def connect_mqtt(broker, port): return client -def publish(client, topic, datasource, delay): +def publish(client, topic, datasource, delay, max_sends = None): datasource.startReading() + + i = 0 while True: + i += 1 + time.sleep(delay) data = datasource.read() msg = AggregatedDataSchema().dumps(data) @@ -39,6 +43,10 @@ def publish(client, topic, datasource, delay): else: print(f"Failed to send message to topic {topic}") + if max_sends and i >= max_sends: + # display test success + exit(0) + def run(): # Prepare mqtt client @@ -46,7 +54,7 @@ def run(): # Prepare datasource datasource = FileDatasource("data/data.csv", "data/gps_data.csv") # Infinity publish data - publish(client, config.MQTT_TOPIC, datasource, config.DELAY) + publish(client, config.MQTT_TOPIC, datasource, config.DELAY, getattr(config, "MAX_SENDS", None)) if __name__ == "__main__": diff --git a/edge/docker/docker-compose.yaml b/edge/docker/docker-compose.yaml index 09f707a..7575152 100644 --- a/edge/docker/docker-compose.yaml +++ b/edge/docker/docker-compose.yaml @@ -13,6 +13,7 @@ services: - 19001:9001 networks: mqtt_network: + user: 1000:1000 edge: