################################################################################ # @brief: Makefile for building the VPP testbench example. # @author: Matthew Giassa. # @copyright: (C) Cisco 2021. ################################################################################ #------------------------------------------------------------------------------# # Constants and settings. #------------------------------------------------------------------------------# SHELL=/bin/bash .DEFAULT_GOAL: all # Image names. # TODO: semver2 format if we want to publish these to a registry. DOCKER_CLIENT_IMG := vpp-testbench-client DOCKER_CLIENT_REL := local DOCKER_CLIENT_IMG_FULL := $(DOCKER_CLIENT_IMG):$(DOCKER_CLIENT_REL) DOCKER_SERVER_IMG := vpp-testbench-server DOCKER_SERVER_REL := local DOCKER_SERVER_IMG_FULL := $(DOCKER_SERVER_IMG):$(DOCKER_SERVER_REL) # Docker build-time settings (and run-time settings as well). DOCKER_HEALTH_PROBE_PORT := $(shell bash -c ". vpp_testbench_helpers.sh; host_only_get_docker_health_probe_port") #------------------------------------------------------------------------------# # Functions. #------------------------------------------------------------------------------# #------------------------------------------------------------------------------# # Cleanup running containers, Docker networks, etc.; from previous runs. define cleanup_everything # Terminate the containers. bash -c "\ . vpp_testbench_helpers.sh; \ host_only_kill_testbench_client_container $(DOCKER_CLIENT_IMG_FULL); \ host_only_kill_testbench_server_container $(DOCKER_SERVER_IMG_FULL); \ " # Cleanup Docker bridge network. bash -c "\ . vpp_testbench_helpers.sh; \ host_only_destroy_docker_networks; \ " endef #------------------------------------------------------------------------------# # Launch our containers and connect them to a private Docker network for # testing. define launch_testbench # Create Docker bridge network. bash -c "\ . vpp_testbench_helpers.sh; \ host_only_create_docker_networks; \ " # Launch the containers. bash -c "\ . vpp_testbench_helpers.sh; \ host_only_run_testbench_client_container $(DOCKER_CLIENT_IMG_FULL); \ host_only_run_testbench_server_container $(DOCKER_SERVER_IMG_FULL); \ " # Entrypoint scripts will bring up the various links. # Use "docker ps" to check status of containers, see if their health # probes are working as expected (i.e. "health"), etc. endef #------------------------------------------------------------------------------# # Goals. #------------------------------------------------------------------------------# #------------------------------------------------------------------------------# # Default goal. .PHONY: all all: docker @echo Done. #------------------------------------------------------------------------------# # Build all docker images. .PHONY: docker docker: Dockerfile.vpp_testbench Dockerfile.vpp_testbench.dockerignore \ entrypoint_client.sh entrypoint_server.sh \ vpp_testbench_helpers.sh # Client image. DOCKER_BUILDKIT=1 docker build \ --file Dockerfile.vpp_testbench \ --build-arg HEALTHCHECK_PORT=$(DOCKER_HEALTH_PROBE_PORT) \ --tag $(DOCKER_CLIENT_IMG_FULL) \ --target client_img \ . # Server image. DOCKER_BUILDKIT=1 docker build \ --file Dockerfile.vpp_testbench \ --build-arg HEALTHCHECK_PORT=$(DOCKER_HEALTH_PROBE_PORT) \ --tag $(DOCKER_SERVER_IMG_FULL) \ --target server_img \ . #------------------------------------------------------------------------------# # Execute end-to-end test via containers. .PHONY: test test: # Cleanup anything from previous runs. $(call cleanup_everything) # Launch our testbench. $(call launch_testbench) # Final cleanup. $(call cleanup_everything) #------------------------------------------------------------------------------# # For manually cleaning up a test that fails partway through its execution. .PHONY: clean clean: $(call cleanup_everything) #------------------------------------------------------------------------------# # For manually launching our testbench for interactive testing. .PHONY: start start: $(call launch_testbench) #------------------------------------------------------------------------------# # For manually stopping (and cleaning up) our testbench. .PHONY: stop stop: $(call cleanup_everything) #------------------------------------------------------------------------------# # Create an interactive shell session connected to the client container (for # manual testing). Typically preceded by "make start", and concluded with # "make stop" after exiting the shell. .PHONY: shell_client shell_client: bash -c "\ . vpp_testbench_helpers.sh; \ host_only_shell_client_container; \ " #------------------------------------------------------------------------------# # Create an interactive shell session connected to the server container (for # manual testing). Typically preceded by "make start", and concluded with # "make stop" after exiting the shell. .PHONY: shell_server shell_server: bash -c "\ . vpp_testbench_helpers.sh; \ host_only_shell_server_container; \ "