|
| 1 | +# Makefile to build and run firewalld tests in Docker |
| 2 | + |
| 3 | +IMAGE ?= my-firewalld-image |
| 4 | +CONTAINER ?= firewalld-container |
| 5 | +DOCKERFILE ?= firewalld.Dockerfile |
| 6 | +UNAME_S := $(shell uname -s) |
| 7 | +DOCKER ?= docker |
| 8 | +DOCKER_CONTEXT := $(shell docker context show 2>/dev/null) |
| 9 | + |
| 10 | +# On some hosts (e.g. macOS), you may need to override CGROUP_FLAGS to empty: |
| 11 | +# make test CGROUP_FLAGS= |
| 12 | +CGROUP_FLAGS ?= --volume=/sys/fs/cgroup:/sys/fs/cgroup:rw --cgroupns=host |
| 13 | +TMPFS_FLAGS ?= --tmpfs /run --tmpfs /run/lock |
| 14 | +RUN_FLAGS ?= --detach --privileged $(CGROUP_FLAGS) --name $(CONTAINER) |
| 15 | +TEST_SCRIPT := $(abspath firewalld-tests.sh) |
| 16 | +PKG_DIR := $(abspath fds) |
| 17 | + |
| 18 | +.PHONY: build rebuild ensure-image start start-mac stop rm logs shell exec test test-mac tests tests-colima ensure-env stop-colima-if-needed clean up down |
| 19 | + |
| 20 | +build: |
| 21 | + @DOCKER_BUILDKIT=0 $(DOCKER) build -t $(IMAGE) -f $(DOCKERFILE) . |
| 22 | + |
| 23 | +rebuild: |
| 24 | + @DOCKER_BUILDKIT=0 $(DOCKER) build --no-cache -t $(IMAGE) -f $(DOCKERFILE) . |
| 25 | + |
| 26 | +ensure-image: |
| 27 | + @$(DOCKER) image inspect $(IMAGE) >/dev/null 2>&1 || (echo "Building $(IMAGE)..." && DOCKER_BUILDKIT=0 $(DOCKER) build -t $(IMAGE) -f $(DOCKERFILE) .) |
| 28 | + |
| 29 | +start: |
| 30 | + @-$(DOCKER) rm -f $(CONTAINER) >/dev/null 2>&1 || true |
| 31 | + @$(DOCKER) run $(RUN_FLAGS) $(IMAGE) |
| 32 | + @sleep 10 |
| 33 | + @running=$$($(DOCKER) inspect -f '{{.State.Running}}' $(CONTAINER) 2>/dev/null || true); \ |
| 34 | + if [ "$$running" != "true" ]; then \ |
| 35 | + echo "Container failed to start. Logs:"; \ |
| 36 | + $(DOCKER) logs $(CONTAINER) || true; \ |
| 37 | + $(DOCKER) inspect $(CONTAINER) || true; \ |
| 38 | + exit 1; \ |
| 39 | + fi |
| 40 | + |
| 41 | +stop: |
| 42 | + @-$(DOCKER) stop $(CONTAINER) >/dev/null 2>&1 || true |
| 43 | + |
| 44 | +rm: stop |
| 45 | + @-$(DOCKER) rm $(CONTAINER) >/dev/null 2>&1 || true |
| 46 | + |
| 47 | +logs: |
| 48 | + @$(DOCKER) logs -f $(CONTAINER) |
| 49 | + |
| 50 | +shell: |
| 51 | + @$(DOCKER) exec -it $(CONTAINER) /bin/bash |
| 52 | + |
| 53 | +exec: |
| 54 | + @$(DOCKER) exec $(CONTAINER) /bin/bash -c "$(CMD)" |
| 55 | + |
| 56 | +test: ensure-image start |
| 57 | + @$(DOCKER) cp $(TEST_SCRIPT) $(CONTAINER):/app/firewalld-tests.sh |
| 58 | + @$(DOCKER) cp -a $(PKG_DIR) $(CONTAINER):/usr/local/lib/python3.9/site-packages/ |
| 59 | + @$(DOCKER) exec -e FDS_NOCACHE=1 $(CONTAINER) /bin/bash -c "./firewalld-tests.sh" |
| 60 | + |
| 61 | +start-mac: CGROUP_FLAGS= |
| 62 | +start-mac: |
| 63 | + @-$(DOCKER) rm -f $(CONTAINER) >/dev/null 2>&1 || true |
| 64 | + @$(DOCKER) run --detach --privileged $(TMPFS_FLAGS) --name $(CONTAINER) $(IMAGE) sleep infinity |
| 65 | + @sleep 10 |
| 66 | + @running=$$($(DOCKER) inspect -f '{{.State.Running}}' $(CONTAINER) 2>/dev/null || true); \ |
| 67 | + if [ "$$running" != "true" ]; then \ |
| 68 | + echo "Container failed to start. Logs:"; \ |
| 69 | + $(DOCKER) logs $(CONTAINER) || true; \ |
| 70 | + $(DOCKER) inspect $(CONTAINER) || true; \ |
| 71 | + exit 1; \ |
| 72 | + fi |
| 73 | + |
| 74 | +test-mac: CGROUP_FLAGS= |
| 75 | +test-mac: ensure-image start-mac |
| 76 | + @$(DOCKER) cp $(TEST_SCRIPT) $(CONTAINER):/app/firewalld-tests.sh |
| 77 | + @$(DOCKER) cp -a $(PKG_DIR) $(CONTAINER):/usr/local/lib/python3.9/site-packages/ |
| 78 | + @$(DOCKER) exec -e FDS_NOCACHE=1 $(CONTAINER) /bin/bash -c "./firewalld-tests.sh" |
| 79 | + |
| 80 | +ensure-env: |
| 81 | + @# Ensure environment for tests (start Colima on macOS if available) |
| 82 | + @if [ "$(UNAME_S)" = "Darwin" ]; then \ |
| 83 | + if command -v colima >/dev/null 2>&1; then \ |
| 84 | + if ! colima status 2>/dev/null | grep -q Running; then \ |
| 85 | + echo "Starting Colima for systemd-compatible Docker..."; \ |
| 86 | + colima start --cpu 2 --memory 4 --disk 20 || true; \ |
| 87 | + touch .colima-started-by-make; \ |
| 88 | + fi; \ |
| 89 | + else \ |
| 90 | + if command -v brew >/dev/null 2>&1; then \ |
| 91 | + echo "Colima not found. Installing via Homebrew..."; \ |
| 92 | + brew install colima || true; \ |
| 93 | + if command -v colima >/dev/null 2>&1; then \ |
| 94 | + echo "Starting Colima..."; \ |
| 95 | + colima start --cpu 2 --memory 4 --disk 20 || true; \ |
| 96 | + touch .colima-started-by-make; \ |
| 97 | + fi; \ |
| 98 | + fi; \ |
| 99 | + fi; \ |
| 100 | + fi |
| 101 | + |
| 102 | +tests: ensure-env |
| 103 | + @status=0; \ |
| 104 | + if [ "$(UNAME_S)" = "Darwin" ] && command -v colima >/dev/null 2>&1 && colima status 2>/dev/null | grep -q Running; then \ |
| 105 | + echo "Using Colima Docker context"; \ |
| 106 | + $(MAKE) DOCKER='docker --context colima' DOCKER_BUILDKIT=0 test; \ |
| 107 | + status=$$?; \ |
| 108 | + else \ |
| 109 | + if [ "$(UNAME_S)" = "Darwin" ]; then \ |
| 110 | + echo "Colima not available; using Docker Desktop fallback"; \ |
| 111 | + $(MAKE) DOCKER='docker' test-mac; \ |
| 112 | + status=$$?; \ |
| 113 | + else \ |
| 114 | + $(MAKE) DOCKER='docker' test; \ |
| 115 | + status=$$?; \ |
| 116 | + fi; \ |
| 117 | + fi; \ |
| 118 | + $(MAKE) stop-colima-if-needed; \ |
| 119 | + exit $$status |
| 120 | + |
| 121 | +tests-colima: |
| 122 | + @status=0; \ |
| 123 | + if ! command -v colima >/dev/null 2>&1 || ! colima status 2>/dev/null | grep -q Running; then \ |
| 124 | + echo "Starting Colima for systemd-compatible Docker..."; \ |
| 125 | + colima start --cpu 2 --memory 4 --disk 20 || true; \ |
| 126 | + touch .colima-started-by-make; \ |
| 127 | + fi; \ |
| 128 | + $(MAKE) DOCKER='docker --context colima' DOCKER_BUILDKIT=0 test; \ |
| 129 | + status=$$?; \ |
| 130 | + $(MAKE) stop-colima-if-needed; \ |
| 131 | + exit $$status |
| 132 | + |
| 133 | +stop-colima-if-needed: |
| 134 | + @if [ -f .colima-started-by-make ]; then \ |
| 135 | + echo "Stopping Colima started by tests..."; \ |
| 136 | + colima stop; \ |
| 137 | + rm -f .colima-started-by-make; \ |
| 138 | + fi |
| 139 | + |
| 140 | +clean: rm |
| 141 | + @-$(DOCKER) rmi $(IMAGE) >/dev/null 2>&1 || true |
| 142 | + |
| 143 | +up: start |
| 144 | + |
| 145 | +down: rm |
| 146 | + |
| 147 | + |
0 commit comments