blob: 4433edbe4d7f51b98c04aa1fc1e7e823c07a7ce5 [file] [log] [blame]
################################################################################
# @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; \
"