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
|
uses: docker/setup-qemu-action@v3
|
||||||
- name: Setup Docker buildx
|
- name: Setup Docker buildx
|
||||||
uses: docker/setup-buildx-action@v3
|
uses: docker/setup-buildx-action@v3
|
||||||
- name: Build test image.
|
|
||||||
run: |
|
|
||||||
touch .env && docker compose build test
|
|
||||||
|
|
||||||
- name: Run Test
|
- name: Run Test
|
||||||
run: docker compose run --rm test
|
run: make test-docker
|
||||||
|
|
||||||
- name: Cleanup.
|
- name: Cleanup.
|
||||||
if: always()
|
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
|
rm -rf .build
|
||||||
|
|
||||||
run:
|
run:
|
||||||
@swift run dewPoint-controller
|
@swift run dewpoint-controller
|
||||||
|
|
||||||
start-mosquitto:
|
start-mosquitto:
|
||||||
@docker-compose start mosquitto
|
@docker-compose start mosquitto
|
||||||
@@ -23,6 +23,7 @@ stop-mosquitto:
|
|||||||
@docker-compose rm -f mosquitto || true
|
@docker-compose rm -f mosquitto || true
|
||||||
|
|
||||||
test-docker:
|
test-docker:
|
||||||
@docker-compose run --build --remove-orphans -i --rm test
|
@docker-compose --file docker/docker-compose-test.yaml \
|
||||||
@docker-compose kill mosquitto-test
|
--project-directory "${PWD}" \
|
||||||
@docker-compose rm -f
|
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.
|
/// values to publish back to the MQTT broker.
|
||||||
var sensors: [TemperatureAndHumiditySensor]
|
var sensors: [TemperatureAndHumiditySensor]
|
||||||
|
|
||||||
|
@_spi(Internal)
|
||||||
|
public var isListening: Bool = false
|
||||||
|
|
||||||
var topics: [String] {
|
var topics: [String] {
|
||||||
sensors.reduce(into: [String]()) { array, sensor in
|
sensors.reduce(into: [String]()) { array, sensor in
|
||||||
array.append(sensor.topics.temperature)
|
array.append(sensor.topics.temperature)
|
||||||
@@ -65,13 +68,16 @@ public actor SensorsService: Service {
|
|||||||
switch event {
|
switch event {
|
||||||
case .shuttingDown:
|
case .shuttingDown:
|
||||||
logger?.debug("Received shutdown event.")
|
logger?.debug("Received shutdown event.")
|
||||||
|
isListening = false
|
||||||
try await self.shutdown()
|
try await self.shutdown()
|
||||||
case .disconnected:
|
case .disconnected:
|
||||||
logger?.debug("Received disconnected event.")
|
logger?.debug("Received disconnected event.")
|
||||||
|
isListening = false
|
||||||
try await Task.sleep(for: .milliseconds(100))
|
try await Task.sleep(for: .milliseconds(100))
|
||||||
case .connected:
|
case .connected:
|
||||||
logger?.debug("Received connected event.")
|
logger?.debug("Received connected event.")
|
||||||
let stream = try await makeStream()
|
let stream = try await makeStream()
|
||||||
|
isListening = true
|
||||||
for await result in stream.cancelOnGracefulShutdown() {
|
for await result in stream.cancelOnGracefulShutdown() {
|
||||||
logger?.debug("Received result for topic: \(result.topic)")
|
logger?.debug("Received result for topic: \(result.topic)")
|
||||||
await self.handleResult(result)
|
await self.handleResult(result)
|
||||||
|
|||||||
@@ -52,7 +52,16 @@ final class SensorsClientTests: XCTestCase {
|
|||||||
try await manager.withClient { client in
|
try await manager.withClient { client in
|
||||||
try await client.disconnect()
|
try await client.disconnect()
|
||||||
try await client.connect()
|
try await client.connect()
|
||||||
|
|
||||||
|
while !client.isActive() {
|
||||||
try await Task.sleep(for: .milliseconds(100))
|
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(
|
try await client.publish(
|
||||||
to: sensor.topics.temperature,
|
to: sensor.topics.temperature,
|
||||||
payload: ByteBufferAllocator().buffer(string: "25"),
|
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