From d4b6f6ad2babe4fb47be0812a0b82cd1c09c02a1 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Thu, 14 Nov 2024 21:24:23 -0500 Subject: [PATCH] fix: Fixes sensor service test that was flaky and moves docker stuff into it's own directory. --- .gitea/workflows/ci.yaml | 9 +---- Dockerfile | 14 ------- Dockerfile.mosquitto | 3 -- Dockerfile.test | 7 ---- Makefile | 9 +++-- Sources/SensorsService/SensorsService.swift | 6 +++ .../SensorsClientTests.swift | 11 +++++- docker-compose.yaml | 37 ------------------- 8 files changed, 23 insertions(+), 73 deletions(-) delete mode 100755 Dockerfile delete mode 100644 Dockerfile.mosquitto delete mode 100644 Dockerfile.test delete mode 100755 docker-compose.yaml diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml index 714d059..41be121 100644 --- a/.gitea/workflows/ci.yaml +++ b/.gitea/workflows/ci.yaml @@ -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 diff --git a/Dockerfile b/Dockerfile deleted file mode 100755 index 9a03055..0000000 --- a/Dockerfile +++ /dev/null @@ -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"] diff --git a/Dockerfile.mosquitto b/Dockerfile.mosquitto deleted file mode 100644 index c50a1f7..0000000 --- a/Dockerfile.mosquitto +++ /dev/null @@ -1,3 +0,0 @@ -FROM eclipse-mosquitto:latest -COPY ./mosquitto/config/mosquitto.conf /mosquitto/config/mosquitto.conf -EXPOSE 1883 diff --git a/Dockerfile.test b/Dockerfile.test deleted file mode 100644 index a3fa111..0000000 --- a/Dockerfile.test +++ /dev/null @@ -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"] diff --git a/Makefile b/Makefile index ea8a0ed..f5480c3 100755 --- a/Makefile +++ b/Makefile @@ -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 diff --git a/Sources/SensorsService/SensorsService.swift b/Sources/SensorsService/SensorsService.swift index 978cfc2..e45fe00 100644 --- a/Sources/SensorsService/SensorsService.swift +++ b/Sources/SensorsService/SensorsService.swift @@ -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) diff --git a/Tests/SensorsServiceTests/SensorsClientTests.swift b/Tests/SensorsServiceTests/SensorsClientTests.swift index a935cae..0006e21 100755 --- a/Tests/SensorsServiceTests/SensorsClientTests.swift +++ b/Tests/SensorsServiceTests/SensorsClientTests.swift @@ -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"), diff --git a/docker-compose.yaml b/docker-compose.yaml deleted file mode 100755 index d2aeb9c..0000000 --- a/docker-compose.yaml +++ /dev/null @@ -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