# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"). You may # not use this file except in compliance with the License. A copy of the # License is located at # # http://aws.amazon.com/apache2.0/ # # or in the "license" file accompanying this file. This file is distributed # on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either # express or implied. See the License for the specific language governing # permissions and limitations under the License. # Set this to pass additional commandline flags to the go compiler, e.g. "make test EXTRAGOARGS=-v" EXTRAGOARGS?= NUMBER_OF_VMS?= SOURCES := $(shell find ../config ../eventbridge ../firecracker-control ../internal ../proto . -name '*.go') GOMOD := $(shell go env GOMOD) GOSUM := $(GOMOD:.mod=.sum) DOCKER_IMAGE_TAG?=latest GO_CACHE_VOLUME_NAME?=gocache FIRECRACKER_CONTAINERD_TEST_IMAGE?=localhost/firecracker-containerd-test FICD_DM_POOL?=fc-test-thinpool REVISION=$(shell git rev-parse HEAD) INTEG_TEST_SUFFIX := _Isolated INTEG_TESTNAMES=$(shell docker run --rm \ --network=none \ --volume $(CURDIR)/..:/src \ --volume $(GO_CACHE_VOLUME_NAME):/go \ --entrypoint=/bin/bash \ --workdir=/src/runtime \ $(FIRECRACKER_CONTAINERD_TEST_IMAGE):$(DOCKER_IMAGE_TAG) \ -c "go test -list . | sed '$$d' | grep $(INTEG_TEST_SUFFIX)") all: runtime runtime: containerd-shim-aws-firecracker containerd-shim-aws-firecracker: $(SOURCES) $(GOMOD) $(GOSUM) go build -o containerd-shim-aws-firecracker $(EXTRAGOARGS) -ldflags "-X main.revision=$(REVISION)" install: containerd-shim-aws-firecracker install -D -o root -g root -m755 -t $(INSTALLROOT)/bin containerd-shim-aws-firecracker test: go test ./... $(EXTRAGOARGS) integ-test: $(MAKE) $(addprefix integ-test-,$(INTEG_TESTNAMES)) integ-test-%: logs $(CURDIR)/../tools/thinpool.sh reset "$(FICD_DM_POOL)" docker run --rm -it \ --privileged \ --ipc=host \ --network=none \ --volume /dev:/dev \ --volume /run/udev/control:/run/udev/control \ --volume $(CURDIR)/logs:/var/log/firecracker-containerd-test \ --volume $(CURDIR)/..:/src \ --volume $(GO_CACHE_VOLUME_NAME):/go \ --env ENABLE_ISOLATED_TESTS=1 \ --env FICD_DM_VOLUME_GROUP=$(FICD_DM_VOLUME_GROUP) \ --env FICD_DM_POOL=$(FICD_DM_POOL) \ --env GOPROXY=direct \ --env GOSUMDB=off \ --env NUMBER_OF_VMS=$(NUMBER_OF_VMS) \ --workdir="/src/runtime" \ --init \ $(FIRECRACKER_CONTAINERD_TEST_IMAGE):$(DOCKER_IMAGE_TAG) \ "go test $(EXTRAGOARGS) -run '^$(subst integ-test-,,$@)$$'" benchmark-%: logs $(CURDIR)/../tools/thinpool.sh reset "$(FICD_DM_POOL)" docker run --rm -it \ --privileged \ --ipc=host \ --network=none \ --volume /dev:/dev \ --volume /run/udev/control:/run/udev/control \ --volume $(CURDIR)/logs:/var/log/firecracker-containerd-test \ --volume $(CURDIR)/..:/src \ --volume $(GO_CACHE_VOLUME_NAME):/go \ --env ENABLE_ISOLATED_TESTS=1 \ --env FICD_DM_VOLUME_GROUP=$(FICD_DM_VOLUME_GROUP) \ --env FICD_DM_POOL=$(FICD_DM_POOL) \ --env GOPROXY=direct \ --env GOSUMDB=off \ --env NUMBER_OF_VMS=$(NUMBER_OF_VMS) \ --workdir="/src/runtime" \ --init \ $(FIRECRACKER_CONTAINERD_TEST_IMAGE):$(DOCKER_IMAGE_TAG) \ "go test $(EXTRAGOARGS) -run '$(subst benchmark-,,$@)'" logs: mkdir logs PERF_TESTNAME?=TestCNIPlugin_Performance PERF_VMCOUNT?=25 PERF_RUNTIME_SECONDS?=600 PERF_VM_MEMSIZE_MB?=1024 PERF_TARGET_BANDWIDTH?=1G FICD_DM_VOLUME_GROUP?= FICD_DM_POOL?= tc-redirect-tap-perf: $(MAKE) PERF_PLUGIN_NAME=tc-redirect-tap perf-test test-bridged-tap-perf: $(MAKE) PERF_PLUGIN_NAME=test-bridged-tap perf-test perf-test: $(if $(PERF_PLUGIN_NAME),true,$(error PERF_PLUGIN_NAME must be set for perf-test target)) mkdir -p $(CURDIR)/logs docker run --rm -it \ --privileged \ --ipc=host \ --network=none \ --volume /dev:/dev \ --volume /run/udev/control:/run/udev/control \ --volume $(CURDIR)/logs:/var/log/firecracker-containerd-test \ --volume $(CURDIR)/..:/src \ --volume $(GO_CACHE_VOLUME_NAME):/go \ --env ENABLE_ISOLATED_TESTS=1 \ --env PERF_PLUGIN_NAME=$(PERF_PLUGIN_NAME) \ --env PERF_VMCOUNT=$(PERF_VMCOUNT) \ --env PERF_RUNTIME_SECONDS=$(PERF_RUNTIME_SECONDS) \ --env PERF_VM_MEMSIZE_MB=$(PERF_VM_MEMSIZE_MB) \ --env PERF_TARGET_BANDWIDTH=$(PERF_TARGET_BANDWIDTH) \ --env FICD_DM_VOLUME_GROUP=$(FICD_DM_VOLUME_GROUP) \ --env FICD_DM_POOL=$(FICD_DM_POOL) \ --env GOPROXY=direct \ --env GOSUMDB=off \ --workdir="/src/runtime" \ --init \ $(FIRECRACKER_CONTAINERD_TEST_IMAGE):$(DOCKER_IMAGE_TAG) \ "go test -timeout 0 -v -count=1 -run \"^$(PERF_TESTNAME)$$\"" .PHONY: critest critest: $(CURDIR)/../tools/thinpool.sh reset "$(FICD_DM_POOL)" docker run --rm -it \ --privileged \ --ipc=host \ --volume /dev:/dev \ --volume /run/udev/control:/run/udev/control \ --volume $(CURDIR)/..:/src \ --volume $(CURDIR)/../examples/etc/containerd/firecracker-runtime.json:/etc/containerd/firecracker-runtime.json \ --volume $(CURDIR)/../tools/demo/fc-br0.interface:/etc/network/interfaces.d/fc-br0 \ --volume $(CURDIR)/logs:/var/log/firecracker-containerd-test \ --volume $(CURDIR)/../tools/critest:/src/runtime/critest \ --volume $(GO_CACHE_VOLUME_NAME):/go \ --env FICD_DM_VOLUME_GROUP=$(FICD_DM_VOLUME_GROUP) \ --env FICD_DM_POOL=$(FICD_DM_POOL) \ --env GOPROXY=direct \ --env GOSUMDB=off \ --env ACK_GINKGO_DEPRECATIONS=1.16.5 \ --workdir="/src/runtime" \ $(FIRECRACKER_CONTAINERD_TEST_IMAGE):$(DOCKER_IMAGE_TAG) \ "sleep 1 && critest -ginkgo.noColor -runtime-endpoint unix:///run/firecracker-containerd/containerd.sock | \ ./critest/critest_diff.sh" clean: - rm -f containerd-shim-aws-firecracker distclean: clean - rm -rf logs .PHONY: all runtime clean distclean install test integ-test