refactor(test): rename test cases for clarity

The test case names in `ufw-docker-service.test.sh` and `ufw-docker.test.sh` were grammatically incorrect and did not clearly describe their purpose.

This commit renames the test cases to be more descriptive and adhere to the Bach testing framework's conventions, using hyphens to improve readability in the test output.
This commit is contained in:
Chai Feng 2025-07-11 17:21:04 +08:00
parent bc04ef1309
commit a90e1fbbe9
No known key found for this signature in database
GPG key ID: 2DCD9A24E523FFD2
2 changed files with 189 additions and 189 deletions

View file

@ -42,142 +42,142 @@ function load-ufw-docker-function() {
} }
test-ufw-docker--service-not-parameters() { test-service-called-without-parameters() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service ufw-docker--service
} }
test-ufw-docker--service-not-parameters-assert() { test-service-called-without-parameters-assert() {
ufw-docker--help ufw-docker--help
} }
test-ufw-docker--service-allow() { test-service-allow-requires-service-name() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service allow ufw-docker--service allow
} }
test-ufw-docker--service-allow-assert() { test-service-allow-requires-service-name-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-allow-webapp() { test-service-allow-requires-port() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service allow webapp ufw-docker--service allow webapp
} }
test-ufw-docker--service-allow-webapp-assert() { test-service-allow-requires-port-assert() {
#ufw-docker--service-allow webapp "" "" #ufw-docker--service-allow webapp "" ""
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-allow-webapp-80tcp() { test-service-allow-succeeds-with-service-and-port() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service allow webapp 80/tcp ufw-docker--service allow webapp 80/tcp
} }
test-ufw-docker--service-allow-webapp-80tcp-assert() { test-service-allow-succeeds-with-service-and-port-assert() {
ufw-docker--service-allow webapp 80/tcp ufw-docker--service-allow webapp 80/tcp
} }
test-ufw-docker--service-delete-deny() { test-service-delete-deny-is-not-supported() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service delete deny ufw-docker--service delete deny
} }
test-ufw-docker--service-delete-deny-assert() { test-service-delete-deny-is-not-supported-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-delete-allow-no-service() { test-service-delete-allow-requires-service-name() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service delete allow ufw-docker--service delete allow
} }
test-ufw-docker--service-delete-allow-no-service-assert() { test-service-delete-allow-requires-service-name-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-delete-allow-webapp() { test-service-delete-allow-succeeds-with-service-name() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service delete allow webapp ufw-docker--service delete allow webapp
} }
test-ufw-docker--service-delete-allow-webapp-assert() { test-service-delete-allow-succeeds-with-service-name-assert() {
ufw-docker--service-delete webapp ufw-docker--service-delete webapp
} }
test-ufw-docker--service-delete-allow-webapp-8080-tcp() { test-service-delete-allow-succeeds-with-service-name-and-port-protocol() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service delete allow webapp 8080/tcp ufw-docker--service delete allow webapp 8080/tcp
} }
test-ufw-docker--service-delete-allow-webapp-8080-tcp-assert() { test-service-delete-allow-succeeds-with-service-name-and-port-protocol-assert() {
ufw-docker--service-delete webapp 8080/tcp ufw-docker--service-delete webapp 8080/tcp
} }
test-ufw-docker--service-delete-allow-webapp-8080() { test-service-delete-allow-succeeds-with-service-name-and-port() {
load-ufw-docker-function ufw-docker--service load-ufw-docker-function ufw-docker--service
ufw-docker--service delete allow webapp 8080 ufw-docker--service delete allow webapp 8080
} }
test-ufw-docker--service-delete-allow-webapp-8080-assert() { test-service-delete-allow-succeeds-with-service-name-and-port-assert() {
ufw-docker--service-delete webapp 8080 ufw-docker--service-delete webapp 8080
} }
test-ufw-docker--get-service-id() { test-get-service-id() {
load-ufw-docker-function ufw-docker--get-service-id load-ufw-docker-function ufw-docker--get-service-id
ufw-docker--get-service-id database ufw-docker--get-service-id database
} }
test-ufw-docker--get-service-id-assert() { test-get-service-id-assert() {
docker service inspect database --format "{{.ID}}" docker service inspect database --format "{{.ID}}"
} }
test-ufw-docker--get-service-name() { test-get-service-name() {
load-ufw-docker-function ufw-docker--get-service-name load-ufw-docker-function ufw-docker--get-service-name
ufw-docker--get-service-name database ufw-docker--get-service-name database
} }
test-ufw-docker--get-service-name-assert() { test-get-service-name-assert() {
docker service inspect database --format "{{.Spec.Name}}" docker service inspect database --format "{{.Spec.Name}}"
} }
test-ufw-docker--service-allow-invalid-port-syntax() { test-service-allow-requires-service-name-invalid-port-syntax() {
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow webapp invalid-port ufw-docker--service-allow webapp invalid-port
} }
test-ufw-docker--service-allow-invalid-port-syntax-assert() { test-service-allow-requires-service-name-invalid-port-syntax-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-allow-an-non-existed-service() { test-service-allow-requires-service-name-an-non-existed-service() {
@mock ufw-docker--get-service-id web404 === @stdout "" @mock ufw-docker--get-service-id web404 === @stdout ""
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow web404 80/tcp ufw-docker--service-allow web404 80/tcp
} }
test-ufw-docker--service-allow-an-non-existed-service-assert() { test-service-allow-requires-service-name-an-non-existed-service-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-allow-a-service-without-ports-published() { test-service-allow-requires-service-name-a-service-without-ports-published() {
@mock ufw-docker--get-service-id private-web === @stdout abcd1234 @mock ufw-docker--get-service-id private-web === @stdout abcd1234
@mock ufw-docker--get-service-name private-web === @stdout private-web @mock ufw-docker--get-service-name private-web === @stdout private-web
@mock ufw-docker--list-service-ports private-web === @stdout "" @mock ufw-docker--list-service-ports private-web === @stdout ""
@ -185,13 +185,13 @@ test-ufw-docker--service-allow-a-service-without-ports-published() {
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow private-web 80/tcp ufw-docker--service-allow private-web 80/tcp
} }
test-ufw-docker--service-allow-a-service-without-ports-published-assert() { test-service-allow-requires-service-name-a-service-without-ports-published-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-allow-a-service-while-agent-not-running() { test-service-allow-requires-service-name-a-service-while-agent-not-running() {
@mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-id webapp === @stdout abcd1234
@mock ufw-docker--get-service-name webapp === @stdout webapp @mock ufw-docker--get-service-name webapp === @stdout webapp
@mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" @mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp"
@ -200,7 +200,7 @@ test-ufw-docker--service-allow-a-service-while-agent-not-running() {
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow webapp 80/tcp ufw-docker--service-allow webapp 80/tcp
} }
test-ufw-docker--service-allow-a-service-while-agent-not-running-assert() { test-service-allow-requires-service-name-a-service-while-agent-not-running-assert() {
docker service create --name ufw-docker-agent --mode global \ docker service create --name ufw-docker-agent --mode global \
--mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \ --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
--mount type=bind,source=/etc/ufw,target=/etc/ufw,readonly=true \ --mount type=bind,source=/etc/ufw,target=/etc/ufw,readonly=true \
@ -211,7 +211,7 @@ test-ufw-docker--service-allow-a-service-while-agent-not-running-assert() {
} }
test-ufw-docker--service-allow-a-service-add-new-env() { test-service-allow-requires-service-name-a-service-add-new-env() {
@mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-id webapp === @stdout abcd1234
@mock ufw-docker--get-service-name webapp === @stdout webapp @mock ufw-docker--get-service-name webapp === @stdout webapp
@mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" @mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp"
@ -221,7 +221,7 @@ test-ufw-docker--service-allow-a-service-add-new-env() {
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow webapp 80/tcp ufw-docker--service-allow webapp 80/tcp
} }
test-ufw-docker--service-allow-a-service-add-new-env-assert() { test-service-allow-requires-service-name-a-service-add-new-env-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \ --env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \
--env-add DEBUG="false" \ --env-add DEBUG="false" \
@ -231,7 +231,7 @@ test-ufw-docker--service-allow-a-service-add-new-env-assert() {
} }
test-ufw-docker--service-allow-a-service-update-a-env() { test-service-allow-requires-service-name-a-service-update-a-env() {
@mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-id webapp === @stdout abcd1234
@mock ufw-docker--get-service-name webapp === @stdout webapp @mock ufw-docker--get-service-name webapp === @stdout webapp
@mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp" @mock ufw-docker--list-service-ports webapp === @stdout "53 53/udp" "80 80/tcp" "8080 8080/tcp"
@ -241,7 +241,7 @@ test-ufw-docker--service-allow-a-service-update-a-env() {
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow webapp 80/tcp ufw-docker--service-allow webapp 80/tcp
} }
test-ufw-docker--service-allow-a-service-update-a-env-assert() { test-service-allow-requires-service-name-a-service-update-a-env-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \ --env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \
--env-add DEBUG="false" \ --env-add DEBUG="false" \
@ -252,7 +252,7 @@ test-ufw-docker--service-allow-a-service-update-a-env-assert() {
} }
test-ufw-docker--service-allow-a-service-add-value-to-an-env() { test-service-allow-requires-service-name-a-service-add-value-to-an-env() {
@mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-id webapp === @stdout abcd1234
@mock ufw-docker--get-service-name webapp === @stdout webapp @mock ufw-docker--get-service-name webapp === @stdout webapp
@mock ufw-docker--list-service-ports webapp === @stdout "5353 53/udp" "8080 80/tcp" "18080 8080/tcp" @mock ufw-docker--list-service-ports webapp === @stdout "5353 53/udp" "8080 80/tcp" "18080 8080/tcp"
@ -263,7 +263,7 @@ test-ufw-docker--service-allow-a-service-add-value-to-an-env() {
ufw-docker--service-allow webapp 80/tcp ufw-docker--service-allow webapp 80/tcp
ufw-docker--service-allow webapp 8080/tcp ufw-docker--service-allow webapp 8080/tcp
} }
test-ufw-docker--service-allow-a-service-add-value-to-an-env-assert() { test-service-allow-requires-service-name-a-service-add-value-to-an-env-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \ --env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \
--env-add DEBUG="false" \ --env-add DEBUG="false" \
@ -280,7 +280,7 @@ test-ufw-docker--service-allow-a-service-add-value-to-an-env-assert() {
ufw-docker-agent ufw-docker-agent
} }
test-ufw-docker--service-allow-a-service-denied-port() { test-service-allow-requires-service-name-a-service-denied-port() {
@mock ufw-docker--get-service-id webapp === @stdout abcd1234 @mock ufw-docker--get-service-id webapp === @stdout abcd1234
@mock ufw-docker--get-service-name webapp === @stdout webapp @mock ufw-docker--get-service-name webapp === @stdout webapp
@mock ufw-docker--list-service-ports webapp === @stdout "5353 53/udp" "8080 80/tcp" "18080 8080/tcp" @mock ufw-docker--list-service-ports webapp === @stdout "5353 53/udp" "8080 80/tcp" "18080 8080/tcp"
@ -290,7 +290,7 @@ test-ufw-docker--service-allow-a-service-denied-port() {
load-ufw-docker-function ufw-docker--service-allow load-ufw-docker-function ufw-docker--service-allow
ufw-docker--service-allow webapp 80/tcp ufw-docker--service-allow webapp 80/tcp
} }
test-ufw-docker--service-allow-a-service-denied-port-assert() { test-service-allow-requires-service-name-a-service-denied-port-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \ --env-add ufw_docker_agent_image="chaifeng/ufw-docker-agent:090502" \
--env-add DEBUG="false" \ --env-add DEBUG="false" \
@ -301,7 +301,7 @@ test-ufw-docker--service-allow-a-service-denied-port-assert() {
} }
test-ufw-docker--get-env-list() { test-get-env-list() {
@mock docker service inspect ufw-docker-agent \ @mock docker service inspect ufw-docker-agent \
--format '{{range $k,$v := .Spec.TaskTemplate.ContainerSpec.Env}}{{ $v }}{{"\n"}}{{end}}' \ --format '{{range $k,$v := .Spec.TaskTemplate.ContainerSpec.Env}}{{ $v }}{{"\n"}}{{end}}' \
=== @stdout \ === @stdout \
@ -317,12 +317,12 @@ test-ufw-docker--get-env-list() {
load-ufw-docker-function ufw-docker--get-env-list load-ufw-docker-function ufw-docker--get-env-list
ufw-docker--get-env-list ufw-docker--get-env-list
} }
test-ufw-docker--get-env-list-assert() { test-get-env-list-assert() {
@stdout "id111111 webapp/9090/tcp" @stdout "id111111 webapp/9090/tcp"
@stdout "id222222 foo/2222/udp" @stdout "id222222 foo/2222/udp"
} }
test-ufw-docker--get-env-list-multiple() { test-get-env-list-with-multiple-values() {
@mock docker service inspect ufw-docker-agent \ @mock docker service inspect ufw-docker-agent \
--format '{{range $k,$v := .Spec.TaskTemplate.ContainerSpec.Env}}{{ $v }}{{"\n"}}{{end}}' \ --format '{{range $k,$v := .Spec.TaskTemplate.ContainerSpec.Env}}{{ $v }}{{"\n"}}{{end}}' \
=== @stdout \ === @stdout \
@ -338,7 +338,7 @@ test-ufw-docker--get-env-list-multiple() {
load-ufw-docker-function ufw-docker--get-env-list load-ufw-docker-function ufw-docker--get-env-list
ufw-docker--get-env-list ufw-docker--get-env-list
} }
test-ufw-docker--get-env-list-multiple-assert() { test-get-env-list-with-multiple-values-assert() {
@stdout "id111111 webapp/9090/tcp" @stdout "id111111 webapp/9090/tcp"
@stdout "id111111 webapp/8888/tcp" @stdout "id111111 webapp/8888/tcp"
@stdout "id111111 webapp/5555/udp" @stdout "id111111 webapp/5555/udp"
@ -347,13 +347,13 @@ test-ufw-docker--get-env-list-multiple-assert() {
} }
test-ufw-docker--service-delete-no-matches() { test-service-delete-fails-for-non-existent-service() {
@mockfalse ufw-docker--get-service-id webapp @mockfalse ufw-docker--get-service-id webapp
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp ufw-docker--service-delete webapp
} }
test-ufw-docker--service-delete-no-matches-assert() { test-service-delete-fails-for-non-existent-service-assert() {
@do-nothing @do-nothing
@fail @fail
} }
@ -364,14 +364,14 @@ function mock-abcd1234-webapp() {
@mock ufw-docker--list-service-ports webapp === @stdout "22 2222/tcp" "80 8080/tcp" "53 5353/udp" @mock ufw-docker--list-service-ports webapp === @stdout "22 2222/tcp" "80 8080/tcp" "53 5353/udp"
} }
test-ufw-docker--service-delete-matches() { test-service-delete-all-ports-for-service() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/22/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/22/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp ufw-docker--service-delete webapp
} }
test-ufw-docker--service-delete-matches-assert() { test-service-delete-all-ports-for-service-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/deny" \ --env-add "ufw_public_abcd1234=webapp/deny" \
@ -380,14 +380,14 @@ test-ufw-docker--service-delete-matches-assert() {
"${ufw_docker_agent}" "${ufw_docker_agent}"
} }
test-ufw-docker--service-delete-matches2() { test-service-delete-all-ports-for-service-with-multiple-rules() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/22/tcp" "abcd1234 webapp/53/udp" "abcd1234 webapp/80/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/22/tcp" "abcd1234 webapp/53/udp" "abcd1234 webapp/80/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp ufw-docker--service-delete webapp
} }
test-ufw-docker--service-delete-matches2-assert() { test-service-delete-all-ports-for-service-with-multiple-rules-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/deny" \ --env-add "ufw_public_abcd1234=webapp/deny" \
@ -397,14 +397,14 @@ test-ufw-docker--service-delete-matches2-assert() {
} }
test-ufw-docker--service-delete-matches-with-a-port() { test-service-delete-specific-port-for-service() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 8080 ufw-docker--service-delete webapp 8080
} }
test-ufw-docker--service-delete-matches-with-a-port-assert() { test-service-delete-specific-port-for-service-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/80/tcp/deny" \ --env-add "ufw_public_abcd1234=webapp/80/tcp/deny" \
@ -414,14 +414,14 @@ test-ufw-docker--service-delete-matches-with-a-port-assert() {
} }
test-ufw-docker--service-delete-matches-with-a-port2() { test-service-delete-specific-port-for-service-from-multiple-rules() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp" "abcd1234 webapp/53/udp" "abcd1234 webapp/53/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp" "abcd1234 webapp/53/udp" "abcd1234 webapp/53/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 8080 ufw-docker--service-delete webapp 8080
} }
test-ufw-docker--service-delete-matches-with-a-port2-assert() { test-service-delete-specific-port-for-service-from-multiple-rules-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/80/tcp/deny,webapp/53/udp,webapp/53/tcp" \ --env-add "ufw_public_abcd1234=webapp/80/tcp/deny,webapp/53/udp,webapp/53/tcp" \
@ -431,14 +431,14 @@ test-ufw-docker--service-delete-matches-with-a-port2-assert() {
} }
test-ufw-docker--service-delete-matches-with-a-port-but-no-previous-rule() { test-service-delete-adds-deny-rule-for-port-without-previous-rule() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/53/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/53/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 2222 ufw-docker--service-delete webapp 2222
} }
test-ufw-docker--service-delete-matches-with-a-port-but-no-previous-rule-assert() { test-service-delete-adds-deny-rule-for-port-without-previous-rule-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/22/tcp/deny,webapp/53/tcp" \ --env-add "ufw_public_abcd1234=webapp/22/tcp/deny,webapp/53/tcp" \
@ -448,14 +448,14 @@ test-ufw-docker--service-delete-matches-with-a-port-but-no-previous-rule-assert(
} }
test-ufw-docker--service-delete-matches-with-a-port-proto-pair() { test-service-delete-specific-port-protocol-for-service() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 8080/tcp ufw-docker--service-delete webapp 8080/tcp
} }
test-ufw-docker--service-delete-matches-with-a-port-proto-pair-assert() { test-service-delete-specific-port-protocol-for-service-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/80/tcp/deny" \ --env-add "ufw_public_abcd1234=webapp/80/tcp/deny" \
@ -464,14 +464,14 @@ test-ufw-docker--service-delete-matches-with-a-port-proto-pair-assert() {
"${ufw_docker_agent}" "${ufw_docker_agent}"
} }
test-ufw-docker--service-delete-matches-with-a-port-proto-pair2() { test-service-delete-specific-port-protocol-for-service-from-multiple-rules() {
mock-abcd1234-webapp mock-abcd1234-webapp
@mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp" "abcd1234 webapp/53/udp" "abcd1234 webapp/53/tcp" @mock ufw-docker--get-env-list === @stdout "xxx 888/tcp" "abcd1234 webapp/80/tcp" "abcd1234 webapp/53/udp" "abcd1234 webapp/53/tcp"
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 5353/udp ufw-docker--service-delete webapp 5353/udp
} }
test-ufw-docker--service-delete-matches-with-a-port-proto-pair2-assert() { test-service-delete-specific-port-protocol-for-service-from-multiple-rules-assert() {
docker service update --update-parallelism=0 \ docker service update --update-parallelism=0 \
--env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \ --env-add ufw_docker_agent_image="${ufw_docker_agent_image}" \
--env-add "ufw_public_abcd1234=webapp/53/udp/deny,webapp/80/tcp,webapp/53/tcp" \ --env-add "ufw_public_abcd1234=webapp/53/udp/deny,webapp/80/tcp,webapp/53/tcp" \
@ -480,18 +480,18 @@ test-ufw-docker--service-delete-matches-with-a-port-proto-pair2-assert() {
"${ufw_docker_agent}" "${ufw_docker_agent}"
} }
test-ufw-docker--service-delete-matches-with-a-not-matched-port() { test-service-delete-fails-for-unmatched-port() {
mock-abcd1234-webapp mock-abcd1234-webapp
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 3333 ufw-docker--service-delete webapp 3333
} }
test-ufw-docker--service-delete-matches-with-a-not-matched-port-assert() { test-service-delete-fails-for-unmatched-port-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--service-delete-matches-with-a-not-matched-protocal() { test-service-delete-fails-for-unmatched-protocol() {
@mock ufw-docker--get-service-id webapp === @stdout "abcd1234" @mock ufw-docker--get-service-id webapp === @stdout "abcd1234"
@mock ufw-docker--get-service-name webapp === @stdout webapp @mock ufw-docker--get-service-name webapp === @stdout webapp
@mock ufw-docker--list-service-ports webapp === @stdout "22 2222/tcp" "80 8080/tcp" "53 5353/udp" @mock ufw-docker--list-service-ports webapp === @stdout "22 2222/tcp" "80 8080/tcp" "53 5353/udp"
@ -499,16 +499,16 @@ test-ufw-docker--service-delete-matches-with-a-not-matched-protocal() {
load-ufw-docker-function ufw-docker--service-delete load-ufw-docker-function ufw-docker--service-delete
ufw-docker--service-delete webapp 8080/udp ufw-docker--service-delete webapp 8080/udp
} }
test-ufw-docker--service-delete-matches-with-a-not-matched-protocal-assert() { test-service-delete-fails-for-unmatched-protocol-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--list-service-ports() { test-list-service-ports() {
load-ufw-docker-function ufw-docker--list-service-ports load-ufw-docker-function ufw-docker--list-service-ports
ufw-docker--list-service-ports foo ufw-docker--list-service-ports foo
} }
test-ufw-docker--list-service-ports-assert() { test-list-service-ports-assert() {
docker service inspect foo --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}' docker service inspect foo --format '{{range .Endpoint.Spec.Ports}}{{.PublishedPort}} {{.TargetPort}}/{{.Protocol}}{{"\n"}}{{end}}'
} }
@ -523,13 +523,13 @@ function setup-mock-for-testing-docker-entrypoint() {
@allow-real tr ',' '\n' @allow-real tr ',' '\n'
} }
test-dockerentrypoint() { test-docker-entrypoint-updates-ufw-rules() {
setup-mock-for-testing-docker-entrypoint setup-mock-for-testing-docker-entrypoint
declare -x ufw_public_id333333=gamma/8080/tcp/deny,gamma/5353/udp declare -x ufw_public_id333333=gamma/8080/tcp/deny,gamma/5353/udp
@run "$working_dir"/../docker-entrypoint.sh update-ufw-rules @run "$working_dir"/../docker-entrypoint.sh update-ufw-rules
} }
test-dockerentrypoint-assert() { test-docker-entrypoint-updates-ufw-rules-assert() {
declare -a docker_opts=(run --rm -t --name ufw-docker-agent-42-200902140731 declare -a docker_opts=(run --rm -t --name ufw-docker-agent-42-200902140731
--cap-add NET_ADMIN --network host --env DEBUG=false --cap-add NET_ADMIN --network host --env DEBUG=false
-v /var/run/docker.sock:/var/run/docker.sock -v /var/run/docker.sock:/var/run/docker.sock
@ -542,13 +542,13 @@ test-dockerentrypoint-assert() {
docker "${docker_opts[@]}" add-service-rule id333333 5353/udp docker "${docker_opts[@]}" add-service-rule id333333 5353/udp
} }
test-dockerentrypoint-deny-first() { test-docker-entrypoint-updates-ufw-rules-with-deny-first() {
setup-mock-for-testing-docker-entrypoint setup-mock-for-testing-docker-entrypoint
declare -x ufw_public_id333333=gamma/5353/udp,gamma/8080/tcp/deny declare -x ufw_public_id333333=gamma/5353/udp,gamma/8080/tcp/deny
@run "$working_dir"/../docker-entrypoint.sh update-ufw-rules @run "$working_dir"/../docker-entrypoint.sh update-ufw-rules
} }
test-dockerentrypoint-deny-first-assert() { test-docker-entrypoint-updates-ufw-rules-with-deny-first-assert() {
declare -a docker_opts=(run --rm -t --name ufw-docker-agent-42-200902140731 declare -a docker_opts=(run --rm -t --name ufw-docker-agent-42-200902140731
--cap-add NET_ADMIN --network host --env DEBUG=false --cap-add NET_ADMIN --network host --env DEBUG=false
-v /var/run/docker.sock:/var/run/docker.sock -v /var/run/docker.sock:/var/run/docker.sock

View file

@ -35,11 +35,11 @@ function load-ufw-docker-function() {
@load_function "$working_dir/../ufw-docker" "$1" @load_function "$working_dir/../ufw-docker" "$1"
} }
test-ufw-docker-init-legacy() { test-init-with-legacy-iptables() {
@mocktrue grep -F '(legacy)' @mocktrue grep -F '(legacy)'
@source <(@sed '/PATH=/d' "$working_dir/../ufw-docker") help @source <(@sed '/PATH=/d' "$working_dir/../ufw-docker") help
} }
test-ufw-docker-init-legacy-assert() { test-init-with-legacy-iptables-assert() {
iptables --version iptables --version
test -n chaifeng/ufw-docker-agent:090502-legacy test -n chaifeng/ufw-docker-agent:090502-legacy
trap on-exit EXIT INT TERM QUIT ABRT ERR trap on-exit EXIT INT TERM QUIT ABRT ERR
@ -47,11 +47,11 @@ test-ufw-docker-init-legacy-assert() {
} }
test-ufw-docker-init-nf_tables() { test-init-with-nf-tables-iptables() {
@mockfalse grep -F '(legacy)' @mockfalse grep -F '(legacy)'
@source <(@sed '/PATH=/d' "$working_dir/../ufw-docker") help @source <(@sed '/PATH=/d' "$working_dir/../ufw-docker") help
} }
test-ufw-docker-init-nf_tables-assert() { test-init-with-nf-tables-iptables-assert() {
iptables --version iptables --version
test -n chaifeng/ufw-docker-agent:090502-nf_tables test -n chaifeng/ufw-docker-agent:090502-nf_tables
trap on-exit EXIT INT TERM QUIT ABRT ERR trap on-exit EXIT INT TERM QUIT ABRT ERR
@ -59,199 +59,199 @@ test-ufw-docker-init-nf_tables-assert() {
} }
test-ufw-docker-init() { test-init-with-custom-agent-image() {
UFW_DOCKER_AGENT_IMAGE=chaifeng/ufw-docker-agent:100917 UFW_DOCKER_AGENT_IMAGE=chaifeng/ufw-docker-agent:100917
@source <(@sed '/PATH=/d' "$working_dir/../ufw-docker") help @source <(@sed '/PATH=/d' "$working_dir/../ufw-docker") help
} }
test-ufw-docker-init-assert() { test-init-with-custom-agent-image-assert() {
test -n chaifeng/ufw-docker-agent:100917 test -n chaifeng/ufw-docker-agent:100917
trap on-exit EXIT INT TERM QUIT ABRT ERR trap on-exit EXIT INT TERM QUIT ABRT ERR
@dryrun cat @dryrun cat
} }
test-ufw-docker-help() { test-help-command() {
ufw-docker help ufw-docker help
} }
test-ufw-docker-help-assert() { test-help-command-assert() {
ufw-docker--help ufw-docker--help
} }
test-ufw-docker-without-parameters() { test-script-called-without-parameters-shows-help() {
ufw-docker ufw-docker
} }
test-ufw-docker-without-parameters-assert() { test-script-called-without-parameters-shows-help-assert() {
test-ufw-docker-help-assert test-help-command-assert
} }
test-ufw-is-disabled() { test-script-fails-if-ufw-is-disabled() {
@mockfalse grep -Fq "Status: active" @mockfalse grep -Fq "Status: active"
@mock iptables --version === @stdout 'iptables v1.8.4 (legacy)' @mock iptables --version === @stdout 'iptables v1.8.4 (legacy)'
ufw-docker ufw-docker
} }
test-ufw-is-disabled-assert() { test-script-fails-if-ufw-is-disabled-assert() {
die "UFW is disabled or you are not root user, or mismatched iptables legacy/nf_tables, current iptables v1.8.4 (legacy)" die "UFW is disabled or you are not root user, or mismatched iptables legacy/nf_tables, current iptables v1.8.4 (legacy)"
ufw-docker--help ufw-docker--help
} }
test-docker-is-installed() { test-script-fails-if-docker-is-not-installed() {
@mockfalse docker -v @mockfalse docker -v
ufw-docker ufw-docker
} }
test-docker-is-installed-assert() { test-script-fails-if-docker-is-not-installed-assert() {
die "Docker executable not found." die "Docker executable not found."
ufw-docker--help ufw-docker--help
} }
test-ufw-docker-status() { test-status-command() {
ufw-docker status ufw-docker status
} }
test-ufw-docker-status-assert() { test-status-command-assert() {
ufw-docker--status ufw-docker--status
} }
test-ufw-docker-install() { test-install-command() {
ufw-docker install ufw-docker install
} }
test-ufw-docker-install-assert() { test-install-command-assert() {
ufw-docker--install ufw-docker--install
} }
test-ufw-docker-install--docker-subnets() { test-install-command-with-docker-subnets() {
ufw-docker install --docker-subnets ufw-docker install --docker-subnets
} }
test-ufw-docker-install--docker-subnets-assert() { test-install-command-with-docker-subnets-assert() {
ufw-docker--install --docker-subnets ufw-docker--install --docker-subnets
} }
test-ufw-docker-check() { test-check-command() {
ufw-docker check ufw-docker check
} }
test-ufw-docker-check-assert() { test-check-command-assert() {
ufw-docker--check ufw-docker--check
} }
test-ufw-docker-check--docker-subnets() { test-check-command-with-docker-subnets() {
ufw-docker check --docker-subnets ufw-docker check --docker-subnets
} }
test-ufw-docker-check--docker-subnets-assert() { test-check-command-with-docker-subnets-assert() {
ufw-docker--check --docker-subnets ufw-docker--check --docker-subnets
} }
test-ufw-docker-service() { test-service-command() {
ufw-docker service allow httpd ufw-docker service allow httpd
} }
test-ufw-docker-service-assert() { test-service-command-assert() {
ufw-docker--service allow httpd ufw-docker--service allow httpd
} }
test-ufw-docker-raw-command() { test-raw-command() {
ufw-docker raw-command status ufw-docker raw-command status
} }
test-ufw-docker-raw-command-assert() { test-raw-command-assert() {
ufw-docker--raw-command status ufw-docker--raw-command status
} }
test-ufw-docker-add-service-rule() { test-add-service-rule-command() {
ufw-docker add-service-rule httpd 80/tcp ufw-docker add-service-rule httpd 80/tcp
} }
test-ufw-docker-add-service-rule-assert() { test-add-service-rule-command-assert() {
ufw-docker--add-service-rule httpd 80/tcp ufw-docker--add-service-rule httpd 80/tcp
} }
test-ASSERT-FAIL-ufw-docker-delete-must-have-parameters() { test-ASSERT-FAIL-delete-must-have-parameters() {
ufw-docker delete ufw-docker delete
} }
test-ASSERT-FAIL-ufw-docker-list-must-have-parameters() { test-ASSERT-FAIL-list-must-have-parameters() {
ufw-docker list ufw-docker list
} }
test-ASSERT-FAIL-ufw-docker-allow-must-have-parameters() { test-ASSERT-FAIL-allow-must-have-parameters() {
ufw-docker allow ufw-docker allow
} }
test-ASSERT-FAIL-ufw-docker-delete-httpd-but-it-doesnt-exist() { test-ASSERT-FAIL-delete-httpd-but-it-doesnt-exist() {
@mockfalse ufw-docker--instance-name httpd @mockfalse ufw-docker--instance-name httpd
ufw-docker delete httpd ufw-docker delete httpd
} }
test-ASSERT-FAIL-ufw-docker-list-httpd-but-it-doesnt-exist() { test-ASSERT-FAIL-list-httpd-but-it-doesnt-exist() {
@mockfalse ufw-docker--instance-name httpd @mockfalse ufw-docker--instance-name httpd
ufw-docker list httpd ufw-docker list httpd
} }
test-ASSERT-FAIL-ufw-docker-allow-httpd-but-it-doesnt-exist() { test-ASSERT-FAIL-allow-httpd-but-it-doesnt-exist() {
@mockfalse ufw-docker--instance-name httpd @mockfalse ufw-docker--instance-name httpd
ufw-docker allow httpd ufw-docker allow httpd
} }
test-ufw-docker-list-httpd() { test-list-command-for-instance() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker list httpd ufw-docker list httpd
} }
test-ufw-docker-list-httpd-assert() { test-list-command-for-instance-assert() {
ufw-docker--list httpd-container-name "" tcp "" ufw-docker--list httpd-container-name "" tcp ""
} }
test-ufw-docker-allow-httpd() { test-allow-command-for-instance() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker allow httpd ufw-docker allow httpd
} }
test-ufw-docker-allow-httpd-assert() { test-allow-command-for-instance-assert() {
ufw-docker--allow httpd-container-name "" tcp "" ufw-docker--allow httpd-container-name "" tcp ""
} }
test-ufw-docker-allow-httpd-80() { test-allow-command-for-instance-with-port() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker allow httpd 80 ufw-docker allow httpd 80
} }
test-ufw-docker-allow-httpd-80-assert() { test-allow-command-for-instance-with-port-assert() {
ufw-docker--allow httpd-container-name 80 tcp "" ufw-docker--allow httpd-container-name 80 tcp ""
} }
test-ufw-docker-allow-httpd-80tcp() { test-allow-command-for-instance-with-port-and-tcp-protocol() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker allow httpd 80/tcp ufw-docker allow httpd 80/tcp
} }
test-ufw-docker-allow-httpd-80tcp-assert() { test-allow-command-for-instance-with-port-and-tcp-protocol-assert() {
ufw-docker--allow httpd-container-name 80 tcp "" ufw-docker--allow httpd-container-name 80 tcp ""
} }
test-ufw-docker-allow-httpd-80udp() { test-allow-command-for-instance-with-port-and-udp-protocol() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker allow httpd 80/udp ufw-docker allow httpd 80/udp
} }
test-ufw-docker-allow-httpd-80udp-assert() { test-allow-command-for-instance-with-port-and-udp-protocol-assert() {
ufw-docker--allow httpd-container-name 80 udp "" ufw-docker--allow httpd-container-name 80 udp ""
} }
test-ASSERT-FAIL-ufw-docker-allow-httpd-INVALID-port() { test-ASSERT-FAIL-allow-httpd-INVALID-port() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
@mock die 'invalid port syntax: "invalid".' === exit 1 @mock die 'invalid port syntax: "invalid".' === exit 1
@ -259,20 +259,20 @@ test-ASSERT-FAIL-ufw-docker-allow-httpd-INVALID-port() {
} }
test-ufw-docker-delete-allow-httpd() { test-delete-allow-command-for-instance() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker delete allow httpd ufw-docker delete allow httpd
} }
test-ufw-docker-delete-allow-httpd-assert() { test-delete-allow-command-for-instance-assert() {
ufw-docker--delete httpd-container-name "" tcp "" ufw-docker--delete httpd-container-name "" tcp ""
} }
test-ASSERT-FAIL-ufw-docker-delete-only-supports-allowed-rules() { test-ASSERT-FAIL-delete-only-supports-allowed-rules() {
@mock ufw-docker--instance-name httpd === @stdout httpd-container-name @mock ufw-docker--instance-name httpd === @stdout httpd-container-name
ufw-docker delete non-allow ufw-docker delete non-allow
} }
test-ASSERT-FAIL-ufw-docker-delete-only-supports-allowed-rules-assert() { test-ASSERT-FAIL-delete-only-supports-allowed-rules-assert() {
die "\"delete\" command only support removing allowed rules" die "\"delete\" command only support removing allowed rules"
} }
@ -310,7 +310,7 @@ function setup-IPv6-ufw-docker--allow--multinetwork() {
} }
test-ufw-docker--allow-instance-not-found() { test-allow-internal-fails-for-non-existent-instance() {
setup-ufw-docker--allow setup-ufw-docker--allow
@mockfalse docker inspect invalid-instance @mockfalse docker inspect invalid-instance
@ -318,74 +318,74 @@ test-ufw-docker--allow-instance-not-found() {
ufw-docker--allow invalid-instance 80 tcp ufw-docker--allow invalid-instance 80 tcp
} }
test-ufw-docker--allow-instance-not-found-assert() { test-allow-internal-fails-for-non-existent-instance-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--allow-instance-but-the-port-not-match() { test-allow-internal-fails-when-port-does-not-match() {
setup-ufw-docker--allow setup-ufw-docker--allow
ufw-docker--allow instance-name 80 tcp ufw-docker--allow instance-name 80 tcp
} }
test-ufw-docker--allow-instance-but-the-port-not-match-assert() { test-allow-internal-fails-when-port-does-not-match-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--allow-instance-but-the-proto-not-match() { test-allow-internal-fails-when-protocol-does-not-match() {
setup-ufw-docker--allow setup-ufw-docker--allow
ufw-docker--allow instance-name 5353 tcp ufw-docker--allow instance-name 5353 tcp
} }
test-ufw-docker--allow-instance-but-the-proto-not-match-assert() { test-allow-internal-fails-when-protocol-does-not-match-assert() {
@do-nothing @do-nothing
@fail @fail
} }
test-ufw-docker--allow-instance-and-match-the-port() { test-allow-internal-succeeds-when-port-matches() {
setup-ufw-docker--allow setup-ufw-docker--allow
ufw-docker--allow instance-name 5000 tcp ufw-docker--allow instance-name 5000 tcp
} }
test-ufw-docker--allow-instance-and-match-the-port-assert() { test-allow-internal-succeeds-when-port-matches-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
} }
test-ufw-docker--allow-instance-all-published-port() { test-allow-internal-succeeds-for-all-published-ports() {
setup-ufw-docker--allow setup-ufw-docker--allow
ufw-docker--allow instance-name "" "" ufw-docker--allow instance-name "" ""
} }
test-ufw-docker--allow-instance-all-published-port-assert() { test-allow-internal-succeeds-for-all-published-ports-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default
ufw-docker--add-rule instance-name 172.18.0.3 5353 udp default ufw-docker--add-rule instance-name 172.18.0.3 5353 udp default
} }
test-ufw-docker--allow-instance-all-published-tcp-port() { test-allow-internal-succeeds-for-all-published-tcp-ports() {
setup-ufw-docker--allow setup-ufw-docker--allow
ufw-docker--allow instance-name "" tcp ufw-docker--allow instance-name "" tcp
} }
test-ufw-docker--allow-instance-all-published-tcp-port-assert() { test-allow-internal-succeeds-for-all-published-tcp-ports-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default
ufw-docker--add-rule instance-name 172.18.0.3 5353 udp default # FIXME ufw-docker--add-rule instance-name 172.18.0.3 5353 udp default # FIXME
} }
test-ufw-docker--allow-instance-all-published-port-multinetwork() { test-allow-internal-succeeds-for-all-published-ports-on-multinetwork() {
setup-ufw-docker--allow--multinetwork setup-ufw-docker--allow--multinetwork
ufw-docker--allow instance-name "" "" ufw-docker--allow instance-name "" ""
} }
test-ufw-docker--allow-instance-all-published-port-multinetwork-assert() { test-allow-internal-succeeds-for-all-published-ports-on-multinetwork-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet
ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default
@ -394,35 +394,35 @@ test-ufw-docker--allow-instance-all-published-port-multinetwork-assert() {
ufw-docker--add-rule instance-name 172.19.0.7 5353 udp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 5353 udp awesomenet
} }
test-ufw-docker--allow-instance-all-published-port-multinetwork-select-network() { test-allow-internal-succeeds-for-all-published-ports-on-selected-multinetwork() {
setup-ufw-docker--allow--multinetwork setup-ufw-docker--allow--multinetwork
ufw-docker--allow instance-name "" "" awesomenet ufw-docker--allow instance-name "" "" awesomenet
} }
test-ufw-docker--allow-instance-all-published-port-multinetwork-select-network-assert() { test-allow-internal-succeeds-for-all-published-ports-on-selected-multinetwork-assert() {
ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet
ufw-docker--add-rule instance-name 172.19.0.7 8080 tcp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 8080 tcp awesomenet
ufw-docker--add-rule instance-name 172.19.0.7 5353 udp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 5353 udp awesomenet
} }
test-IPv6-ufw-docker--allow-instance-and-match-the-port() { test-ipv6-allow-internal-succeeds-when-port-matches() {
setup-IPv6-ufw-docker--allow setup-IPv6-ufw-docker--allow
ufw-docker--allow instance-name 5000 tcp ufw-docker--allow instance-name 5000 tcp
} }
test-IPv6-ufw-docker--allow-instance-and-match-the-port-assert() { test-ipv6-allow-internal-succeeds-when-port-matches-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default
} }
test-IPv6-ufw-docker--allow-instance-all-published-port() { test-ipv6-allow-internal-succeeds-for-all-published-ports() {
setup-IPv6-ufw-docker--allow setup-IPv6-ufw-docker--allow
ufw-docker--allow instance-name "" "" ufw-docker--allow instance-name "" ""
} }
test-IPv6-ufw-docker--allow-instance-all-published-port-assert() { test-ipv6-allow-internal-succeeds-for-all-published-ports-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default
ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default
@ -432,12 +432,12 @@ test-IPv6-ufw-docker--allow-instance-all-published-port-assert() {
} }
test-IPv6-ufw-docker--allow-instance-all-published-tcp-port() { test-ipv6-allow-internal-succeeds-for-all-published-tcp-ports() {
setup-IPv6-ufw-docker--allow setup-IPv6-ufw-docker--allow
ufw-docker--allow instance-name "" tcp ufw-docker--allow instance-name "" tcp
} }
test-IPv6-ufw-docker--allow-instance-all-published-tcp-port-assert() { test-ipv6-allow-internal-succeeds-for-all-published-tcp-ports-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default
ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default ufw-docker--add-rule instance-name 172.18.0.3 8080 tcp default
@ -447,12 +447,12 @@ test-IPv6-ufw-docker--allow-instance-all-published-tcp-port-assert() {
} }
test-IPv6-ufw-docker--allow-instance-all-published-port-multinetwork() { test-ipv6-allow-internal-succeeds-for-all-published-ports-on-multinetwork() {
setup-IPv6-ufw-docker--allow--multinetwork setup-IPv6-ufw-docker--allow--multinetwork
ufw-docker--allow instance-name "" "" ufw-docker--allow instance-name "" ""
} }
test-IPv6-ufw-docker--allow-instance-all-published-port-multinetwork-assert() { test-ipv6-allow-internal-succeeds-for-all-published-ports-on-multinetwork-assert() {
ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default ufw-docker--add-rule instance-name 172.18.0.3 5000 tcp default
ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default ufw-docker--add-rule instance-name/v6 fd00:cf::42 5000 tcp default
ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet
@ -467,12 +467,12 @@ test-IPv6-ufw-docker--allow-instance-all-published-port-multinetwork-assert() {
ufw-docker--add-rule instance-name/v6 fd00:cf::207 5353 udp awesomenet ufw-docker--add-rule instance-name/v6 fd00:cf::207 5353 udp awesomenet
} }
test-IPv6-ufw-docker--allow-instance-all-published-port-multinetwork-select-network() { test-ipv6-allow-internal-succeeds-for-all-published-ports-on-selected-multinetwork() {
setup-IPv6-ufw-docker--allow--multinetwork setup-IPv6-ufw-docker--allow--multinetwork
ufw-docker--allow instance-name "" "" awesomenet ufw-docker--allow instance-name "" "" awesomenet
} }
test-IPv6-ufw-docker--allow-instance-all-published-port-multinetwork-select-network-assert() { test-ipv6-allow-internal-succeeds-for-all-published-ports-on-selected-multinetwork-assert() {
ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 5000 tcp awesomenet
ufw-docker--add-rule instance-name/v6 fd00:cf::207 5000 tcp awesomenet ufw-docker--add-rule instance-name/v6 fd00:cf::207 5000 tcp awesomenet
ufw-docker--add-rule instance-name 172.19.0.7 8080 tcp awesomenet ufw-docker--add-rule instance-name 172.19.0.7 8080 tcp awesomenet
@ -482,30 +482,30 @@ test-IPv6-ufw-docker--allow-instance-all-published-port-multinetwork-select-netw
} }
test-ufw-docker--add-rule-a-non-existing-rule() { test-add-rule-for-non-existing-rule() {
@mockfalse ufw-docker--list webapp 5000 tcp "" @mockfalse ufw-docker--list webapp 5000 tcp ""
@ignore echo @ignore echo
load-ufw-docker-function ufw-docker--add-rule load-ufw-docker-function ufw-docker--add-rule
ufw-docker--add-rule webapp 172.18.0.4 5000 tcp ufw-docker--add-rule webapp 172.18.0.4 5000 tcp
} }
test-ufw-docker--add-rule-a-non-existing-rule-assert() { test-add-rule-for-non-existing-rule-assert() {
ufw route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp" ufw route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp"
} }
test-ufw-docker--add-rule-a-non-existing-rule-with-network() { test-add-rule-for-non-existing-rule-with-network() {
@mockfalse ufw-docker--list webapp 5000 tcp default @mockfalse ufw-docker--list webapp 5000 tcp default
@ignore echo @ignore echo
load-ufw-docker-function ufw-docker--add-rule load-ufw-docker-function ufw-docker--add-rule
ufw-docker--add-rule webapp 172.18.0.4 5000 tcp default ufw-docker--add-rule webapp 172.18.0.4 5000 tcp default
} }
test-ufw-docker--add-rule-a-non-existing-rule-with-network-assert() { test-add-rule-for-non-existing-rule-with-network-assert() {
ufw route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp default" ufw route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp default"
} }
test-ufw-docker--add-rule-modify-an-existing-rule() { test-add-rule-modifies-existing-rule() {
@mocktrue ufw-docker--list webapp 5000 tcp default @mocktrue ufw-docker--list webapp 5000 tcp default
@mock ufw --dry-run route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp default" === @echo @mock ufw --dry-run route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp default" === @echo
@mockfalse grep "^Skipping" @mockfalse grep "^Skipping"
@ -514,14 +514,14 @@ test-ufw-docker--add-rule-modify-an-existing-rule() {
load-ufw-docker-function ufw-docker--add-rule load-ufw-docker-function ufw-docker--add-rule
ufw-docker--add-rule webapp 172.18.0.4 5000 tcp default ufw-docker--add-rule webapp 172.18.0.4 5000 tcp default
} }
test-ufw-docker--add-rule-modify-an-existing-rule-assert() { test-add-rule-modifies-existing-rule-assert() {
ufw-docker--delete webapp 5000 tcp default ufw-docker--delete webapp 5000 tcp default
ufw route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp default" ufw route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp default"
} }
test-IPv6-ufw-docker--add-rule-modify-an-existing-rule() { test-ipv6-add-rule-modifies-existing-rule() {
@mocktrue ufw-docker--list webapp/v6 5000 tcp default @mocktrue ufw-docker--list webapp/v6 5000 tcp default
@mock ufw --dry-run route allow proto tcp from any to fd00:cf::42 port 5000 comment "allow webapp/v6 5000/tcp default" === @echo @mock ufw --dry-run route allow proto tcp from any to fd00:cf::42 port 5000 comment "allow webapp/v6 5000/tcp default" === @echo
@mockfalse grep "^Skipping" @mockfalse grep "^Skipping"
@ -530,14 +530,14 @@ test-IPv6-ufw-docker--add-rule-modify-an-existing-rule() {
load-ufw-docker-function ufw-docker--add-rule load-ufw-docker-function ufw-docker--add-rule
ufw-docker--add-rule webapp/v6 fd00:cf::42 5000 tcp default ufw-docker--add-rule webapp/v6 fd00:cf::42 5000 tcp default
} }
test-IPv6-ufw-docker--add-rule-modify-an-existing-rule-assert() { test-ipv6-add-rule-modifies-existing-rule-assert() {
ufw-docker--delete webapp/v6 5000 tcp default ufw-docker--delete webapp/v6 5000 tcp default
ufw route allow proto tcp from any to fd00:cf::42 port 5000 comment "allow webapp/v6 5000/tcp default" ufw route allow proto tcp from any to fd00:cf::42 port 5000 comment "allow webapp/v6 5000/tcp default"
} }
test-ufw-docker--add-rule-skip-an-existing-rule() { test-add-rule-skips-existing-rule() {
@mocktrue ufw-docker--list webapp 5000 tcp "" @mocktrue ufw-docker--list webapp 5000 tcp ""
@mocktrue ufw --dry-run route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp" @mocktrue ufw --dry-run route allow proto tcp from any to 172.18.0.4 port 5000 comment "allow webapp 5000/tcp"
@mocktrue grep "^Skipping" @mocktrue grep "^Skipping"
@ -546,12 +546,12 @@ test-ufw-docker--add-rule-skip-an-existing-rule() {
load-ufw-docker-function ufw-docker--add-rule load-ufw-docker-function ufw-docker--add-rule
ufw-docker--add-rule webapp 172.18.0.4 5000 tcp "" ufw-docker--add-rule webapp 172.18.0.4 5000 tcp ""
} }
test-ufw-docker--add-rule-skip-an-existing-rule-assert() { test-add-rule-skips-existing-rule-assert() {
@do-nothing @do-nothing
} }
test-ufw-docker--add-rule-modify-an-existing-rule-without-port() { test-add-rule-modifies-existing-rule-without-port() {
@mocktrue ufw-docker--list webapp "" tcp "" @mocktrue ufw-docker--list webapp "" tcp ""
@mock ufw --dry-run route allow proto tcp from any to 172.18.0.4 comment "allow webapp" === @echo @mock ufw --dry-run route allow proto tcp from any to 172.18.0.4 comment "allow webapp" === @echo
@mockfalse grep "^Skipping" @mockfalse grep "^Skipping"
@ -561,14 +561,14 @@ test-ufw-docker--add-rule-modify-an-existing-rule-without-port() {
ufw-docker--add-rule webapp 172.18.0.4 "" tcp "" ufw-docker--add-rule webapp 172.18.0.4 "" tcp ""
} }
test-ufw-docker--add-rule-modify-an-existing-rule-without-port-assert() { test-add-rule-modifies-existing-rule-without-port-assert() {
ufw-docker--delete webapp "" tcp "" ufw-docker--delete webapp "" tcp ""
ufw route allow proto tcp from any to 172.18.0.4 comment "allow webapp" ufw route allow proto tcp from any to 172.18.0.4 comment "allow webapp"
} }
test-ufw-docker--instance-name-found-a-name() { test-instance-name-resolves-from-name() {
@mock docker inspect --format="{{.Name}}" foo @mock docker inspect --format="{{.Name}}" foo
@mock sed -e 's,^/,,' @mock sed -e 's,^/,,'
@mockfalse grep "^$GREP_REGEXP_NAME\$" @mockfalse grep "^$GREP_REGEXP_NAME\$"
@ -578,13 +578,13 @@ test-ufw-docker--instance-name-found-a-name() {
load-ufw-docker-function ufw-docker--instance-name load-ufw-docker-function ufw-docker--instance-name
ufw-docker--instance-name foo ufw-docker--instance-name foo
} }
test-ufw-docker--instance-name-found-a-name-assert() { test-instance-name-resolves-from-name-assert() {
docker inspect --format="{{.Name}}" foo docker inspect --format="{{.Name}}" foo
@dryrun echo -n foo @dryrun echo -n foo
} }
test-ufw-docker--instance-name-found-an-id() { test-instance-name-resolves-from-id() {
@mock docker inspect --format="{{.Name}}" fooid @mock docker inspect --format="{{.Name}}" fooid
@mock sed -e 's,^/,,' @mock sed -e 's,^/,,'
@mockfalse grep "^$GREP_REGEXP_NAME\$" @mockfalse grep "^$GREP_REGEXP_NAME\$"
@ -593,7 +593,7 @@ test-ufw-docker--instance-name-found-an-id() {
load-ufw-docker-function ufw-docker--instance-name load-ufw-docker-function ufw-docker--instance-name
ufw-docker--instance-name fooid ufw-docker--instance-name fooid
} }
test-ufw-docker--instance-name-found-an-id-assert() { test-instance-name-resolves-from-id-assert() {
docker inspect --format="{{.Name}}" fooid docker inspect --format="{{.Name}}" fooid
@dryrun echo -n fooid @dryrun echo -n fooid
} }
@ -622,7 +622,7 @@ function mock-ufw-status-numbered-foo() {
} }
test-ufw-docker--status() { test-status-internal() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow [-_.[:alnum:]]\+\(/v6\)\?\( [[:digit:]]\+/\(tcp\|udp\)\( [-_.[:alnum:]]\+\)\?\)\?$' @allow-real grep '# allow [-_.[:alnum:]]\+\(/v6\)\?\( [[:digit:]]\+/\(tcp\|udp\)\( [-_.[:alnum:]]\+\)\?\)\?$'
@ -630,18 +630,18 @@ test-ufw-docker--status() {
load-ufw-docker-function ufw-docker--status load-ufw-docker-function ufw-docker--status
ufw-docker--status ufw-docker--status
} }
test-ufw-docker--status-assert() { test-status-internal-assert() {
test-ufw-docker--list-all-assert test-list-internal-all-rules-assert
} }
test-ufw-docker--list-all() { test-list-internal-all-rules() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow [-_.[:alnum:]]\+\(/v6\)\?\( [[:digit:]]\+/\(tcp\|udp\)\( [-_.[:alnum:]]\+\)\?\)\?$' @allow-real grep '# allow [-_.[:alnum:]]\+\(/v6\)\?\( [[:digit:]]\+/\(tcp\|udp\)\( [-_.[:alnum:]]\+\)\?\)\?$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list ufw-docker--list
} }
test-ufw-docker--list-all-assert() { test-list-internal-all-rules-assert() {
@stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge" @stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge"
@stdout "[ 4] 172.20.0.3 80/tcp ALLOW FWD Anywhere # allow bar 80/tcp bar-external" @stdout "[ 4] 172.20.0.3 80/tcp ALLOW FWD Anywhere # allow bar 80/tcp bar-external"
@stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal" @stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal"
@ -655,14 +655,14 @@ test-ufw-docker--list-all-assert() {
@stdout "[15] fd00:a:b:deaf::3 53/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 53/tcp" @stdout "[15] fd00:a:b:deaf::3 53/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 53/tcp"
} }
test-ufw-docker--list-name() { test-list-internal-rules-by-name() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow foo\(/v6\)\?\( [[:digit:]]\+/\(tcp\|udp\)\( [-_.[:alnum:]]\+\)\?\)\?$' @allow-real grep '# allow foo\(/v6\)\?\( [[:digit:]]\+/\(tcp\|udp\)\( [-_.[:alnum:]]\+\)\?\)\?$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list foo ufw-docker--list foo
} }
test-ufw-docker--list-name-assert() { test-list-internal-rules-by-name-assert() {
@stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge" @stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge"
@stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal" @stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal"
@stdout "[ 6] 172.17.0.3 53/tcp ALLOW FWD Anywhere # allow foo 53/tcp" @stdout "[ 6] 172.17.0.3 53/tcp ALLOW FWD Anywhere # allow foo 53/tcp"
@ -671,94 +671,94 @@ test-ufw-docker--list-name-assert() {
@stdout "[15] fd00:a:b:deaf::3 53/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 53/tcp" @stdout "[15] fd00:a:b:deaf::3 53/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 53/tcp"
} }
test-ufw-docker--list-name-udp() { test-list-internal-rules-by-name-and-udp-protocol() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow foo\(/v6\)\? [[:digit:]]\+/udp\( [-_.[:alnum:]]\+\)\?$' @allow-real grep '# allow foo\(/v6\)\? [[:digit:]]\+/udp\( [-_.[:alnum:]]\+\)\?$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list foo "" udp ufw-docker--list foo "" udp
} }
test-ufw-docker--list-name-udp-assert() { test-list-internal-rules-by-name-and-udp-protocol-assert() {
@stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal" @stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal"
@stdout "[14] fd00:a:b:deaf::3 53/udp ALLOW FWD Anywhere (v6) # allow foo/v6 53/udp foo-internal" @stdout "[14] fd00:a:b:deaf::3 53/udp ALLOW FWD Anywhere (v6) # allow foo/v6 53/udp foo-internal"
} }
test-ufw-docker--list-name-80-_-bridge() { test-list-internal-rules-by-name-port-and-bridge-network() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow foo\(/v6\)\? 80/tcp bridge$' @allow-real grep '# allow foo\(/v6\)\? 80/tcp bridge$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list foo 80 "" bridge ufw-docker--list foo 80 "" bridge
} }
test-ufw-docker--list-name-80-_-bridge-assert() { test-list-internal-rules-by-name-port-and-bridge-network-assert() {
@stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge" @stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge"
@stdout "[12] fd00:a:b:deaf::3 80/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 80/tcp bridge" @stdout "[12] fd00:a:b:deaf::3 80/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 80/tcp bridge"
} }
test-ufw-docker--list-name-53-udp() { test-list-internal-rules-by-name-port-and-udp-protocol() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow foo\(/v6\)\? 53/udp\( [-_.[:alnum:]]\+\)\?$' @allow-real grep '# allow foo\(/v6\)\? 53/udp\( [-_.[:alnum:]]\+\)\?$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list foo 53 udp ufw-docker--list foo 53 udp
} }
test-ufw-docker--list-name-53-udp-assert() { test-list-internal-rules-by-name-port-and-udp-protocol-assert() {
@stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal" @stdout "[ 5] 172.17.0.3 53/udp ALLOW FWD Anywhere # allow foo 53/udp foo-internal"
@stdout "[14] fd00:a:b:deaf::3 53/udp ALLOW FWD Anywhere (v6) # allow foo/v6 53/udp foo-internal" @stdout "[14] fd00:a:b:deaf::3 53/udp ALLOW FWD Anywhere (v6) # allow foo/v6 53/udp foo-internal"
} }
test-ufw-docker--list-grep-with-incorrect-network() { test-list-internal-fails-with-incorrect-network() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow foo\(/v6\)\? 53/udp incorrect-network$' @allow-real grep '# allow foo\(/v6\)\? 53/udp incorrect-network$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list foo 53 udp incorrect-network ufw-docker--list foo 53 udp incorrect-network
} }
test-ufw-docker--list-grep-with-incorrect-network-assert() { test-list-internal-fails-with-incorrect-network-assert() {
@fail @fail
} }
test-ufw-docker--list-foo-80-_-_() { test-list-internal-rules-by-name-and-port() {
mock-ufw-status-numbered-foo mock-ufw-status-numbered-foo
@allow-real grep '# allow foo\(/v6\)\? 80/tcp\( [-_.[:alnum:]]\+\)\?$' @allow-real grep '# allow foo\(/v6\)\? 80/tcp\( [-_.[:alnum:]]\+\)\?$'
load-ufw-docker-function ufw-docker--list load-ufw-docker-function ufw-docker--list
ufw-docker--list foo 80 ufw-docker--list foo 80
} }
test-ufw-docker--list-foo-80-_-_-assert() { test-list-internal-rules-by-name-and-port-assert() {
@stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge" @stdout "[ 3] 172.17.0.3 80/tcp ALLOW FWD Anywhere # allow foo 80/tcp bridge"
@stdout "[12] fd00:a:b:deaf::3 80/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 80/tcp bridge" @stdout "[12] fd00:a:b:deaf::3 80/tcp ALLOW FWD Anywhere (v6) # allow foo/v6 80/tcp bridge"
} }
test-ufw-docker--list-number() { test-list-number-internal() {
@mocktrue ufw-docker--list foo 53 udp @mocktrue ufw-docker--list foo 53 udp
load-ufw-docker-function ufw-docker--list-number load-ufw-docker-function ufw-docker--list-number
ufw-docker--list-number foo 53 udp ufw-docker--list-number foo 53 udp
} }
test-ufw-docker--list-number-assert() { test-list-number-internal-assert() {
sed -e 's/^\[[[:blank:]]*\([[:digit:]]\+\)\].*/\1/' sed -e 's/^\[[[:blank:]]*\([[:digit:]]\+\)\].*/\1/'
} }
test-ufw-docker--delete-empty-result() { test-delete-internal-does-nothing-for-empty-result() {
@mock ufw-docker--list-number webapp 80 tcp === @stdout "" @mock ufw-docker--list-number webapp 80 tcp === @stdout ""
@mockpipe sort -rn @mockpipe sort -rn
load-ufw-docker-function ufw-docker--delete load-ufw-docker-function ufw-docker--delete
ufw-docker--delete webapp 80 tcp ufw-docker--delete webapp 80 tcp
} }
test-ufw-docker--delete-empty-result-assert() { test-delete-internal-does-nothing-for-empty-result-assert() {
@do-nothing @do-nothing
} }
test-ufw-docker--delete-all() { test-delete-internal-all-rules() {
@mock ufw-docker--list-number webapp 80 tcp === @stdout 5 8 9 @mock ufw-docker--list-number webapp 80 tcp === @stdout 5 8 9
@mockpipe sort -rn @mockpipe sort -rn
@ignore echo @ignore echo
@ -766,13 +766,13 @@ test-ufw-docker--delete-all() {
load-ufw-docker-function ufw-docker--delete load-ufw-docker-function ufw-docker--delete
ufw-docker--delete webapp 80 tcp ufw-docker--delete webapp 80 tcp
} }
test-ufw-docker--delete-all-assert() { test-delete-internal-all-rules-assert() {
ufw delete 5 ufw delete 5
ufw delete 8 ufw delete 8
ufw delete 9 ufw delete 9
} }
test-ufw-docker--check-install_ipv4() { test-check-install-ipv4() {
@mock mktemp === @stdout /tmp/after_rules_tmp @mock mktemp === @stdout /tmp/after_rules_tmp
@mock sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules @mock sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules
@mock tee "/tmp/after_rules_tmp" @mock tee "/tmp/after_rules_tmp"
@ -782,7 +782,7 @@ test-ufw-docker--check-install_ipv4() {
load-ufw-docker-function ufw-docker--check-install load-ufw-docker-function ufw-docker--check-install
ufw-docker--check-install ufw-docker--check-install
} }
test-ufw-docker--check-install_ipv4-assert() { test-check-install-ipv4-assert() {
rm-on-exit /tmp/after_rules_tmp rm-on-exit /tmp/after_rules_tmp
sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules
@assert-capture tee -a /tmp/after_rules_tmp <<\EOF @assert-capture tee -a /tmp/after_rules_tmp <<\EOF
@ -817,7 +817,7 @@ EOF
diff -u --color=auto /etc/ufw/after.rules /tmp/after_rules_tmp diff -u --color=auto /etc/ufw/after.rules /tmp/after_rules_tmp
} }
test-ufw-docker--check-install_ipv4-subnets() { test-check-install-ipv4-with-subnets() {
@mock ufw-docker--list-docker-subnets IPv4 192.168.56.128/28 172.16.0.0/12 === @stdout "172.16.0.0/12" "192.168.56.128/28" @mock ufw-docker--list-docker-subnets IPv4 192.168.56.128/28 172.16.0.0/12 === @stdout "172.16.0.0/12" "192.168.56.128/28"
@mock mktemp === @stdout /tmp/after_rules_tmp @mock mktemp === @stdout /tmp/after_rules_tmp
@mock sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules @mock sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules
@ -828,7 +828,7 @@ test-ufw-docker--check-install_ipv4-subnets() {
load-ufw-docker-function ufw-docker--check-install load-ufw-docker-function ufw-docker--check-install
ufw-docker--check-install --docker-subnets 192.168.56.128/28 172.16.0.0/12 ufw-docker--check-install --docker-subnets 192.168.56.128/28 172.16.0.0/12
} }
test-ufw-docker--check-install_ipv4-subnets-assert() { test-check-install-ipv4-with-subnets-assert() {
rm-on-exit /tmp/after_rules_tmp rm-on-exit /tmp/after_rules_tmp
sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules sed "/^# BEGIN UFW AND DOCKER/,/^# END UFW AND DOCKER/d" /etc/ufw/after.rules
@assert-capture tee -a /tmp/after_rules_tmp <<\EOF @assert-capture tee -a /tmp/after_rules_tmp <<\EOF