Add full integration test with real Technitium DNS server

- Add docker-compose.integration.yml with Technitium + DDNS services
- Add full-integration-test.sh for end-to-end testing
- Add technitium-init.sh for automated zone/token setup
- Add comprehensive logging to DNS client
- Test creates real DNS records and verifies them in Technitium
- 8/9 tests passing with real DNS integration
This commit is contained in:
2026-02-03 08:13:06 -05:00
parent 01694f66a8
commit ee187ff1c0
4 changed files with 364 additions and 11 deletions

View File

@@ -0,0 +1,69 @@
version: '3.8'
services:
technitium:
image: docker.io/technitium/dns-server:11.0.2
container_name: technitium-dns
hostname: dns
ports:
- "5380:5380"
volumes:
- technitium-data:/etc/dns/config
- ./tests/integration/technitium-init.sh:/init.sh:ro
environment:
- DNS_SERVER_DOMAIN=dns.test.rip
- DNS_SERVER_ADMIN_PASSWORD=admin123
- DNS_SERVER_ADMIN_PASSWORD_FILE=
- DNS_SERVER_WEB_SERVICE_HTTP_PORT=5380
- DNS_SERVER_WEB_SERVICE_ENABLE_HTTPS=false
- DNS_SERVER_WEB_SERVICE_USE_SELF_SIGNED_CERT=false
- DNS_SERVER_OPTIONAL_PROTOCOL_DNS_OVER_HTTP=false
- DNS_SERVER_RECURSION=AllowOnlyForPrivateNetworks
- DNS_SERVER_LOG_USING_LOCAL_TIME=true
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:5380/"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
- dyn-test
dyn:
build: .
container_name: dyn-ddns-test
ports:
- "8080:8080"
volumes:
- dyn-data:/data
environment:
- SERVER_PORT=8080
- DATABASE_PATH=/data/dyn.db
- TECHNITIUM_URL=http://technitium:5380
- TECHNITIUM_TOKEN=dns-api-token-12345
- TECHNITIUM_USERNAME=
- TECHNITIUM_PASSWORD=
- BASE_DOMAIN=test.rip
- SPACE_SUBDOMAIN=space
- RATE_LIMIT_PER_IP=1000
- RATE_LIMIT_PER_TOKEN=1000
- TRUSTED_PROXIES=
depends_on:
technitium:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8080/"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
networks:
- dyn-test
volumes:
technitium-data:
dyn-data:
networks:
dyn-test:
driver: bridge