fix: Fixes sensor service test that was flaky and moves docker stuff into it's own directory.
Some checks failed
CI / Run Tests (push) Failing after 12s

This commit is contained in:
2024-11-14 21:24:23 -05:00
parent ec3cd40fef
commit d4b6f6ad2b
8 changed files with 23 additions and 73 deletions

View File

@@ -14,13 +14,8 @@ jobs:
uses: docker/setup-qemu-action@v3
- name: Setup Docker buildx
uses: docker/setup-buildx-action@v3
- name: Build test image.
run: |
touch .env && docker compose build test
- name: Run Test
run: docker compose run --rm test
run: make test-docker
- name: Cleanup.
if: always()
run: docker compose down
run: docker compose --file docker/docker-compose-test.yaml down

View File

@@ -1,14 +0,0 @@
# Build the executable
FROM swift:5.10 AS build
WORKDIR /build
COPY ./Package.* ./
RUN swift package resolve
COPY . .
RUN swift build -c release -Xswiftc -g
# Run image
FROM swift:5.10-slim
WORKDIR /run
COPY --from=build /build/.build/release/dewpoint-controller /run
CMD ["/bin/bash", "-xc", "./dewpoint-controller"]

View File

@@ -1,3 +0,0 @@
FROM eclipse-mosquitto:latest
COPY ./mosquitto/config/mosquitto.conf /mosquitto/config/mosquitto.conf
EXPOSE 1883

View File

@@ -1,7 +0,0 @@
FROM swift:5.10
WORKDIR /app
COPY ./Package.* ./
RUN swift package resolve
COPY . .
RUN swift build
CMD ["/bin/bash", "-xc", "swift", "test"]

View File

@@ -14,7 +14,7 @@ clean:
rm -rf .build
run:
@swift run dewPoint-controller
@swift run dewpoint-controller
start-mosquitto:
@docker-compose start mosquitto
@@ -23,6 +23,7 @@ stop-mosquitto:
@docker-compose rm -f mosquitto || true
test-docker:
@docker-compose run --build --remove-orphans -i --rm test
@docker-compose kill mosquitto-test
@docker-compose rm -f
@docker-compose --file docker/docker-compose-test.yaml \
--project-directory "${PWD}" \
run --build --remove-orphans -i --rm test
@docker-compose --file docker/docker-compose-test.yaml down

View File

@@ -29,6 +29,9 @@ public actor SensorsService: Service {
/// values to publish back to the MQTT broker.
var sensors: [TemperatureAndHumiditySensor]
@_spi(Internal)
public var isListening: Bool = false
var topics: [String] {
sensors.reduce(into: [String]()) { array, sensor in
array.append(sensor.topics.temperature)
@@ -65,13 +68,16 @@ public actor SensorsService: Service {
switch event {
case .shuttingDown:
logger?.debug("Received shutdown event.")
isListening = false
try await self.shutdown()
case .disconnected:
logger?.debug("Received disconnected event.")
isListening = false
try await Task.sleep(for: .milliseconds(100))
case .connected:
logger?.debug("Received connected event.")
let stream = try await makeStream()
isListening = true
for await result in stream.cancelOnGracefulShutdown() {
logger?.debug("Received result for topic: \(result.topic)")
await self.handleResult(result)

View File

@@ -52,7 +52,16 @@ final class SensorsClientTests: XCTestCase {
try await manager.withClient { client in
try await client.disconnect()
try await client.connect()
try await Task.sleep(for: .milliseconds(100))
while !client.isActive() {
try await Task.sleep(for: .milliseconds(100))
}
// Give time to re-subscribe.
while !(await sensorsService.isListening) {
try await Task.sleep(for: .milliseconds(100))
}
try await client.publish(
to: sensor.topics.temperature,
payload: ByteBufferAllocator().buffer(string: "25"),

View File

@@ -1,37 +0,0 @@
# run this with docker-compose run test
services:
server:
image: swift-mqtt-dewpoint:latest
restart: unless-stopped
env_file: .env
local:
container_name: local-server
build:
context: .
dockerfile: Dockerfile
depends_on:
- mosquitto
environment:
- MQTT_HOST=mosquitto
test:
build:
context: .
dockerfile: Dockerfile.test
working_dir: /app
depends_on:
- mosquitto
environment:
- MOSQUITTO_SERVER=mosquitto
command: /bin/bash -xc "swift test"
mosquitto:
build:
context: .
dockerfile: Dockerfile.mosquitto
networks:
test:
driver: bridge
external: false