Files
dnsmasq-webui/docker-compose.test.yml
T
alex a0863a663e Hosts: managed file, read-only system/addn-hosts, HostsFileSection UI
- Managed hosts file (zz-dnsmasq-webui.hosts): app reads/writes only this;
  addn-hosts in managed config loads it. SystemHostsPath is read-only display.
- Hosts page: editable managed file; then 'Other hosts (read-only)' (system
  hosts when configured and !no-hosts, plus addn-hosts excluding managed).
- GET api/hosts/readonly for read-only files; no-hosts hides system hosts.
- HostsFileSection.razor component; fix space before read-only badge.
- Test harness: show container /etc/hosts (default SystemHostsPath).
- Config parsing/sources, tests and client updates for new hosts model.
2026-02-02 23:56:20 +10:00

99 lines
3.0 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Run the app with real dnsmasq and several DHCP clients so hosts/leases are real.
# Some clients also make periodic DNS requests so the DNS cache and logs show activity.
# Prepare mount: ./scripts/prepare-test-mount.sh [--prepare-only | --no-build | --recreate | --source DIR | --mount DIR]
# Or set TESTDATA_MOUNT to override the data volume (default: ./testdata-mount).
#
# No systemd in container (dnsmasq runs as a process from entrypoint, like most dnsmasq images).
# StatusShowCommand/LogsCommand use ps so the Service status / Recent logs sections show something
# (process info). On a host with systemd you'd use systemctl status dnsmasq and journalctl instead.
# cap_add NET_ADMIN for dnsmasq.
#
# Networks: testnet 172.28.0.0/16 so dnsmasq can hand out 172.28.0.10–50.
services:
app:
build:
context: .
ports:
- "8080:8080"
cap_add:
- NET_ADMIN
environment:
DNSMASQ_CONF: /data/dnsmasq-test.conf
Dnsmasq__MainConfigPath: /data/dnsmasq-test.conf
Dnsmasq__ManagedFileName: zz-dnsmasq-webui.conf
# System hosts: app default /etc/hosts shows the container's hosts file (read-only).
Dnsmasq__ReloadCommand: "pkill -HUP -x dnsmasq"
Dnsmasq__StatusCommand: "pgrep -x dnsmasq"
# Simulated systemctl status + real logs (dnsmasq logs to /data/dnsmasq.log via log-facility in dnsmasq-test.conf)
Dnsmasq__StatusShowCommand: "/app/dnsmasq-status.sh"
Dnsmasq__LogsCommand: "tail -n 100 /data/dnsmasq.log 2>/dev/null || echo '(no log file yet)'"
volumes:
- ${TESTDATA_MOUNT:-./testdata-mount}:/data
networks:
testnet:
ipv4_address: 172.28.0.2
# DHCP only; keeps running with lease.
dhcp-client:
image: alpine:3.20
command: ["sh", "-c", "sleep 5 && exec udhcpc -i eth0 -f -n"]
networks:
testnet: {}
depends_on:
- app
# DHCP + periodic DNS lookups (every 20s) so DNS cache/logs show activity.
dhcp-client-dns-a:
image: alpine:3.20
command:
- sh
- -c
- |
udhcpc -i eth0 -f -n &
sleep 10
while true; do
nslookup google.com 2>/dev/null || true
nslookup cloudflare.com 2>/dev/null || true
sleep 20
done
networks:
testnet: {}
depends_on:
- app
# DHCP + periodic DNS lookups (every 45s); different interval for variety.
dhcp-client-dns-b:
image: alpine:3.20
command:
- sh
- -c
- |
udhcpc -i eth0 -f -n &
sleep 10
while true; do
nslookup example.com 2>/dev/null || true
nslookup github.com 2>/dev/null || true
sleep 45
done
networks:
testnet: {}
depends_on:
- app
# Third DHCP-only client so the leases table has more entries.
dhcp-client-2:
image: alpine:3.20
command: ["sh", "-c", "sleep 8 && exec udhcpc -i eth0 -f -n"]
networks:
testnet: {}
depends_on:
- app
networks:
testnet:
driver: bridge
ipam:
config:
- subnet: 172.28.0.0/16
gateway: 172.28.0.1