Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fe6bb6ab3a | |||
| 30f81ec1ae | |||
| 1b6f47fa0d | |||
| b1e6ad7c94 | |||
| 1eddfd966b |
@@ -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
|
||||
run: docker build -t local/hub/${{gitea.sha}} -f hub/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}}
|
||||
@@ -1,34 +0,0 @@
|
||||
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:
|
||||
context: ../../
|
||||
dockerfile: agent/Dockerfile
|
||||
depends_on:
|
||||
- mqtt
|
||||
environment:
|
||||
MQTT_BROKER_HOST: "mqtt"
|
||||
MQTT_BROKER_PORT: 1883
|
||||
MQTT_TOPIC: "agent_data_topic"
|
||||
DELAY: 0.1
|
||||
networks:
|
||||
mqtt_network:
|
||||
|
||||
|
||||
networks:
|
||||
mqtt_network:
|
||||
@@ -1,12 +1,12 @@
|
||||
name: "road_vision__hub"
|
||||
name: "road_vision"
|
||||
services:
|
||||
mqtt:
|
||||
image: eclipse-mosquitto
|
||||
container_name: mqtt
|
||||
volumes:
|
||||
- ./mosquitto:/mosquitto
|
||||
- ./mosquitto/data:/mosquitto/data
|
||||
- ./mosquitto/log:/mosquitto/log
|
||||
- ./agent/docker/mosquitto:/mosquitto
|
||||
- ./agent/docker/mosquitto/data:/mosquitto/data
|
||||
- ./agent/docker/mosquitto/log:/mosquitto/log
|
||||
ports:
|
||||
- 1883:1883
|
||||
- 9001:9001
|
||||
@@ -14,6 +14,41 @@ services:
|
||||
mqtt_network:
|
||||
|
||||
|
||||
fake_agent:
|
||||
container_name: agent
|
||||
build:
|
||||
context: .
|
||||
dockerfile: agent/Dockerfile
|
||||
depends_on:
|
||||
- mqtt
|
||||
environment:
|
||||
MQTT_BROKER_HOST: "mqtt"
|
||||
MQTT_BROKER_PORT: 1883
|
||||
MQTT_TOPIC: "agent_data_topic"
|
||||
DELAY: 0.1
|
||||
networks:
|
||||
mqtt_network:
|
||||
|
||||
edge:
|
||||
container_name: edge
|
||||
build:
|
||||
context: .
|
||||
dockerfile: edge/Dockerfile
|
||||
depends_on:
|
||||
- mqtt
|
||||
environment:
|
||||
MQTT_BROKER_HOST: "mqtt"
|
||||
MQTT_BROKER_PORT: 1883
|
||||
MQTT_TOPIC: " "
|
||||
HUB_HOST: "store"
|
||||
HUB_PORT: 8000
|
||||
HUB_MQTT_BROKER_HOST: "mqtt"
|
||||
HUB_MQTT_BROKER_PORT: 1883
|
||||
HUB_MQTT_TOPIC: "processed_data_topic"
|
||||
networks:
|
||||
mqtt_network:
|
||||
edge_hub:
|
||||
|
||||
postgres_db:
|
||||
image: postgres:17
|
||||
container_name: postgres_db
|
||||
@@ -24,13 +59,12 @@ services:
|
||||
POSTGRES_DB: test_db
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
- ./db/structure.sql:/docker-entrypoint-initdb.d/structure.sql
|
||||
- ./store/docker/db/structure.sql:/docker-entrypoint-initdb.d/structure.sql
|
||||
ports:
|
||||
- "5432:5432"
|
||||
networks:
|
||||
db_network:
|
||||
|
||||
|
||||
pgadmin:
|
||||
container_name: pgadmin4
|
||||
image: dpage/pgadmin4
|
||||
@@ -49,7 +83,7 @@ services:
|
||||
store:
|
||||
container_name: store
|
||||
build:
|
||||
context: ../../
|
||||
context: .
|
||||
dockerfile: store/Dockerfile
|
||||
depends_on:
|
||||
- postgres_db
|
||||
@@ -79,7 +113,7 @@ services:
|
||||
hub:
|
||||
container_name: hub
|
||||
build:
|
||||
context: ../../
|
||||
context: .
|
||||
dockerfile: hub/Dockerfile
|
||||
depends_on:
|
||||
- mqtt
|
||||
@@ -101,10 +135,11 @@ services:
|
||||
hub_store:
|
||||
hub_redis:
|
||||
|
||||
|
||||
networks:
|
||||
mqtt_network:
|
||||
db_network:
|
||||
edge_hub:
|
||||
hub:
|
||||
hub_store:
|
||||
hub_redis:
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
version: "3.9"
|
||||
# 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
|
||||
- 19001:9001
|
||||
networks:
|
||||
mqtt_network:
|
||||
|
||||
|
||||
edge:
|
||||
container_name: edge
|
||||
build:
|
||||
context: ../../
|
||||
dockerfile: edge/Dockerfile
|
||||
depends_on:
|
||||
- mqtt
|
||||
environment:
|
||||
MQTT_BROKER_HOST: "mqtt"
|
||||
MQTT_BROKER_PORT: 1883
|
||||
MQTT_TOPIC: " "
|
||||
HUB_HOST: "store"
|
||||
HUB_PORT: 8000
|
||||
HUB_MQTT_BROKER_HOST: "mqtt"
|
||||
HUB_MQTT_BROKER_PORT: 1883
|
||||
HUB_MQTT_TOPIC: "processed_data_topic"
|
||||
networks:
|
||||
mqtt_network:
|
||||
edge_hub:
|
||||
|
||||
|
||||
networks:
|
||||
mqtt_network:
|
||||
db_network:
|
||||
edge_hub:
|
||||
hub:
|
||||
hub_store:
|
||||
hub_redis:
|
||||
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
pgadmin-data:
|
||||
@@ -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"]
|
||||
@@ -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(
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
from app.adapters.store_api_adapter import StoreApiAdapter
|
||||
from app.entities.agent_data import AccelerometerData, AgentData, GpsData
|
||||
from app.entities.processed_agent_data import ProcessedAgentData
|
||||
|
||||
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 = StoreApiAdapter(None).processed_agent_data_batch_to_json(processed_data_batch)
|
||||
|
||||
assert res["data"][0]["agent_data"]["user_id"] == 1
|
||||
assert res["data"][1]["agent_data"]["user_id"] == 2
|
||||
assert res["data"][2]["agent_data"]["user_id"] == 3
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
test_functions = [i for i in dir() if i.startswith('_test_')]
|
||||
|
||||
for i in test_functions:
|
||||
print(i)
|
||||
eval(i)()
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
PYTHONPATH=$PWD python3 app/adapters/store_api_adapter_test.py
|
||||
@@ -1,61 +0,0 @@
|
||||
name: "road_vision__database"
|
||||
services:
|
||||
postgres_db:
|
||||
image: postgres:17
|
||||
container_name: postgres_db
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_USER: user
|
||||
POSTGRES_PASSWORD: pass
|
||||
POSTGRES_DB: test_db
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
- ./db/structure.sql:/docker-entrypoint-initdb.d/structure.sql
|
||||
ports:
|
||||
- "5432:5432"
|
||||
networks:
|
||||
db_network:
|
||||
|
||||
|
||||
pgadmin:
|
||||
container_name: pgadmin4
|
||||
image: dpage/pgadmin4
|
||||
restart: always
|
||||
environment:
|
||||
PGADMIN_DEFAULT_EMAIL: admin@admin.com
|
||||
PGADMIN_DEFAULT_PASSWORD: root
|
||||
volumes:
|
||||
- pgadmin-data:/var/lib/pgadmin
|
||||
ports:
|
||||
- "5050:80"
|
||||
networks:
|
||||
db_network:
|
||||
|
||||
|
||||
store:
|
||||
container_name: store
|
||||
build:
|
||||
context: ../../
|
||||
dockerfile: store/Dockerfile
|
||||
depends_on:
|
||||
- postgres_db
|
||||
restart: always
|
||||
environment:
|
||||
POSTGRES_USER: user
|
||||
POSTGRES_PASSWORD: pass
|
||||
POSTGRES_DB: test_db
|
||||
POSTGRES_HOST: postgres_db
|
||||
POSTGRES_PORT: 5432
|
||||
ports:
|
||||
- "8000:8000"
|
||||
networks:
|
||||
db_network:
|
||||
|
||||
|
||||
networks:
|
||||
db_network:
|
||||
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
pgadmin-data:
|
||||
Reference in New Issue
Block a user