Skip to content

Commit a922bc4

Browse files
authored
Merge pull request #333 from kzys/tiny-integ-test-image
Create a small Docker image for running integration tests
2 parents 52dc331 + 8f58ad2 commit a922bc4

File tree

6 files changed

+98
-8
lines changed

6 files changed

+98
-8
lines changed

Makefile

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ image: $(RUNC_BIN) agent
116116

117117
test-images: test-images-stamp
118118

119-
test-images-stamp: | image firecracker-containerd-integ-test-image firecracker-containerd-test-image
119+
test-images-stamp: | image firecracker-containerd-integ-test-image firecracker-containerd-test-image firecracker-containerd-integ-test-image-tiny
120120
touch $@
121121

122122
firecracker-containerd-test-image:
@@ -134,6 +134,17 @@ firecracker-containerd-integ-test-image: $(RUNC_BIN) $(FIRECRACKER_BIN) $(JAILER
134134
--build-arg FIRECRACKER_TARGET=$(FIRECRACKER_TARGET) \
135135
--tag localhost/firecracker-containerd-integ-test:${DOCKER_IMAGE_TAG} .
136136

137+
firecracker-containerd-integ-test-image-tiny: all
138+
mkdir -p $(CURDIR)/build/opt/cni/bin
139+
make install-cni-bin CNI_BIN_ROOT=$(CURDIR)/build/opt/cni/bin
140+
make -C internal test-bridged-tap
141+
cp internal/test-bridged-tap $(CURDIR)/build/opt/cni/bin
142+
DOCKER_BUILDKIT=1 docker build \
143+
--progress=plain \
144+
--file tools/docker/Dockerfile.integ-test \
145+
--build-arg FIRECRACKER_TARGET=$(FIRECRACKER_TARGET) \
146+
--tag localhost/firecracker-containerd-integ-test-tiny:${DOCKER_IMAGE_TAG} .
147+
137148
.PHONY: all $(SUBDIRS) clean proto deps lint install image test-images firecracker-container-test-image firecracker-containerd-integ-test-image test test-in-docker $(TEST_SUBDIRS) integ-test $(INTEG_TEST_SUBDIRS)
138149

139150
##########################
@@ -165,8 +176,9 @@ $(FCNET_CONFIG):
165176
mkdir -p $(dir $(FCNET_CONFIG))
166177
cp tools/demo/fcnet.conflist $(FCNET_CONFIG)
167178

168-
.PHONY: demo-network
169-
demo-network: $(PTP_BIN) $(HOSTLOCAL_BIN) $(FIREWALL_BIN) $(TC_REDIRECT_TAP_BIN) $(FCNET_CONFIG)
179+
.PHONY: demo-network install-cni-bin
180+
install-cni-bin: $(PTP_BIN) $(HOSTLOCAL_BIN) $(FIREWALL_BIN) $(TC_REDIRECT_TAP_BIN)
181+
demo-network: install-cni-bin $(FCNET_CONFIG)
170182

171183
##########################
172184
# Firecracker submodule

examples/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,12 @@ integ-test:
3939
--volume /run/udev/control:/run/udev/control \
4040
--volume $(CURDIR)/etc/containerd/firecracker-runtime.json:/etc/containerd/firecracker-runtime.json \
4141
--volume $(CURDIR)/logs:/var/log/firecracker-containerd-test \
42+
--volume $(CURDIR)/..:/firecracker-containerd \
4243
--env FICD_SNAPSHOTTER=$(TEST_SS) \
4344
--env FICD_DM_POOL=$(TEST_POOL) \
4445
--env EXTRAGOARGS="${EXTRAGOARGS}" \
4546
--workdir="/firecracker-containerd/examples" \
46-
localhost/firecracker-containerd-integ-test:${DOCKER_IMAGE_TAG} \
47+
localhost/firecracker-containerd-integ-test-tiny:${DOCKER_IMAGE_TAG} \
4748
"make examples && make testtap && sleep 3 && ./taskworkflow -ip $(TEST_IP)$(TEST_SUBNET) -gw $(TEST_GATEWAY) -ss $(TEST_SS)"
4849

4950
TEST_GATEWAY?=172.16.0.1

runtime/Makefile

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,15 @@ integ-test:
5151
--volume /dev:/dev \
5252
--volume /run/udev/control:/run/udev/control \
5353
--volume $(CURDIR)/logs:/var/log/firecracker-containerd-test \
54+
--volume $(CURDIR)/..:/firecracker-containerd \
5455
--env ENABLE_ISOLATED_TESTS=1 \
5556
--env FICD_SNAPSHOTTER=$(FICD_SNAPSHOTTER) \
5657
--env FICD_DM_POOL=$(FICD_DM_POOL) \
58+
--env GOPROXY=direct \
59+
--env GOSUMDB=off \
5760
--workdir="/firecracker-containerd/runtime" \
5861
--init \
59-
localhost/firecracker-containerd-integ-test:$(DOCKER_IMAGE_TAG) \
62+
localhost/firecracker-containerd-integ-test-tiny:$(DOCKER_IMAGE_TAG) \
6063
"go test $(EXTRAGOARGS) -run \"^$(TESTNAME)$$\"" || exit 1; \
6164
)
6265

runtime/drive_handler_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import (
3333
)
3434

3535
func TestStubDriveHandler(t *testing.T) {
36-
tempPath, err := ioutil.TempDir("./", "TestStubDriveHandler")
36+
tempPath, err := ioutil.TempDir("", "TestStubDriveHandler")
3737
require.NoError(t, err)
3838
defer func() {
3939
os.RemoveAll(tempPath)

runtime/runc_jailer_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import (
3333
func TestBuildJailedRootHandler_Isolated(t *testing.T) {
3434
internal.RequiresIsolation(t)
3535
runcConfigPath = "./firecracker-runc-config.json.example"
36-
dir, err := ioutil.TempDir("./", "TestBuildJailedRootHandler")
36+
dir, err := ioutil.TempDir("", "TestBuildJailedRootHandler")
3737
require.NoError(t, err, "failed to create temporary directory")
3838

3939
defer os.RemoveAll(dir)
@@ -98,7 +98,7 @@ func TestMkdirAllWithPermissions_Isolated(t *testing.T) {
9898
// requires isolation so we can change uid/gid of files
9999
internal.RequiresIsolation(t)
100100

101-
tmpdir, err := ioutil.TempDir("./", "TestMkdirAllWithPermissions")
101+
tmpdir, err := ioutil.TempDir("", "TestMkdirAllWithPermissions")
102102
require.NoError(t, err, "failed to create temporary directory")
103103

104104
existingPath := filepath.Join(tmpdir, "exists")

tools/docker/Dockerfile.integ-test

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# Test image that starts up containerd and the naive snapshotter. The default CMD will drop to a bash shell. Overrides
2+
# to CMD will be provided appended to /bin/bash -c
3+
FROM golang:1.13-stretch
4+
ENV PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin:/usr/local/go/bin" \
5+
FICD_LOG_DIR="/var/log/firecracker-containerd-test"\
6+
DEBIAN_FRONTEND="noninteractive"
7+
ENV FICD_SNAPSHOTTER="naive" \
8+
FICD_SNAPSHOTTER_OUTFILE="${FICD_LOG_DIR}/snapshotter.out" \
9+
FICD_CONTAINERD_OUTFILE="${FICD_LOG_DIR}/containerd.out"
10+
ARG FIRECRACKER_TARGET=x86_64-unknown-linux-musl
11+
12+
RUN apt-get update && apt-get install --yes --no-install-recommends \
13+
build-essential \
14+
ca-certificates \
15+
curl \
16+
git \
17+
iptables \
18+
iperf3 \
19+
libdevmapper-dev \
20+
libseccomp-dev \
21+
rng-tools # used for rngtest
22+
23+
RUN mkdir -p \
24+
/var/lib/firecracker-containerd/runtime \
25+
/var/run/firecracker-containerd \
26+
/opt/cni/bin \
27+
/firecracker-containerd \
28+
/var/lib/firecracker-containerd/naive \
29+
${FICD_LOG_DIR}
30+
31+
RUN curl --silent --show-error --retry 3 --max-time 30 --output default-vmlinux.bin \
32+
"https://s3.amazonaws.com/spec.ccfc.min/img/hello/kernel/hello-vmlinux.bin" \
33+
&& echo "882fa465c43ab7d92e31bd4167da3ad6a82cb9230f9b0016176df597c6014cef default-vmlinux.bin" | sha256sum -c - \
34+
&& chmod 0444 default-vmlinux.bin \
35+
&& mv default-vmlinux.bin /var/lib/firecracker-containerd/runtime/default-vmlinux.bin
36+
37+
# Download Go dependencies
38+
COPY go.mod go.sum /firecracker-containerd
39+
RUN cd /firecracker-containerd && go mod download
40+
41+
# Copy submodules
42+
COPY _submodules/firecracker/target/$FIRECRACKER_TARGET/release/firecracker \
43+
_submodules/firecracker/target/$FIRECRACKER_TARGET/release/jailer \
44+
_submodules/runc/runc \
45+
/usr/local/bin
46+
47+
# Copy our binaries
48+
COPY runtime/containerd-shim-aws-firecracker \
49+
snapshotter/cmd/naive/naive_snapshotter \
50+
/usr/local/bin
51+
52+
# Copy our binaries but rename them
53+
COPY firecracker-control/cmd/containerd/firecracker-containerd /usr/local/bin/containerd
54+
COPY firecracker-control/cmd/containerd/firecracker-ctr /usr/local/bin/ctr
55+
56+
COPY runtime/firecracker-runc-config.json.example /etc/containerd/firecracker-runc-config.json
57+
COPY tools/image-builder/rootfs.img /var/lib/firecracker-containerd/runtime/default-rootfs.img
58+
RUN chmod 0444 /var/lib/firecracker-containerd/runtime/default-rootfs.img
59+
60+
# CNI
61+
COPY build/opt/cni/bin/* /opt/cni/bin
62+
COPY tools/demo/fcnet.conflist /etc/cni/conf.d/fcnet.conflist
63+
64+
# pull the images the tests need into the content store so we don't need internet
65+
# access during the tests themselves
66+
COPY tools/docker/config.toml /etc/containerd/config.toml
67+
RUN containerd 2>/dev/null & \
68+
ctr content fetch docker.io/library/alpine:3.10.1 >/dev/null && \
69+
ctr content fetch docker.io/mlabbe/iperf3:3.6-r0 >/dev/null
70+
71+
COPY tools/docker/entrypoint.sh /entrypoint
72+
73+
ENTRYPOINT ["/entrypoint"]
74+
CMD ["exec /bin/bash"]

0 commit comments

Comments
 (0)