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
Some checks failed
CI / Run Tests (push) Failing after 12s
This commit is contained in:
@@ -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
|
||||
|
||||
14
Dockerfile
14
Dockerfile
@@ -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"]
|
||||
@@ -1,3 +0,0 @@
|
||||
FROM eclipse-mosquitto:latest
|
||||
COPY ./mosquitto/config/mosquitto.conf /mosquitto/config/mosquitto.conf
|
||||
EXPOSE 1883
|
||||
@@ -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"]
|
||||
9
Makefile
9
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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"),
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user