From 5a705a999b750ac1d599e95a7a9eaf892f48e549 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sat, 27 May 2017 11:47:37 +0100 Subject: [PATCH 1/7] tools: Add strace to the Alpine base While not used anywhere, adding it to the based makes it easy to add temporarily add it to init (or elsewhere) for debugging. Signed-off-by: Rolf Neugebauer --- tools/alpine/packages | 1 + tools/alpine/versions | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/alpine/packages b/tools/alpine/packages index 8f835d116..a354bc93d 100644 --- a/tools/alpine/packages +++ b/tools/alpine/packages @@ -57,6 +57,7 @@ qemu-system-x86_64 sed sfdisk squashfs-tools +strace syslinux tar tini diff --git a/tools/alpine/versions b/tools/alpine/versions index eea74d9a1..69f673337 100644 --- a/tools/alpine/versions +++ b/tools/alpine/versions @@ -2,7 +2,7 @@ alpine-baselayout-3.0.4-r0 alpine-keys-2.1-r1 alsa-lib-1.1.3-r0 -apk-tools-2.7.1-r0 +apk-tools-2.7.1-r1 argp-standalone-1.3-r2 automake-1.15-r0 bash-4.3.48-r1 @@ -163,6 +163,7 @@ sfdisk-2.28.2-r2 snappy-1.1.4-r1 spice-server-0.13.3-r1 squashfs-tools-4.3-r3 +strace-4.16-r1 syslinux-6.04_pre1-r1 tar-1.29-r1 tini-0.14.0-r0 From 4aa4129acff6dd680b88177a56d2f649748f8a1e Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Fri, 26 May 2017 17:40:49 +0100 Subject: [PATCH 2/7] tests: Reorder package tests Use the index in the alphabet (a=1...) to group the tests a little bit. The actual order does not matter. Signed-off-by: Rolf Neugebauer --- test/cases/040_packages/{001_mkimage => 013_mkimage}/mkimage.yml | 0 test/cases/040_packages/{001_mkimage => 013_mkimage}/run.yml | 0 test/cases/040_packages/{001_mkimage => 013_mkimage}/test.sh | 0 .../cases/040_packages/{000_sysctl => 019_sysctl}/test-sysctl.yml | 0 test/cases/040_packages/{000_sysctl => 019_sysctl}/test.sh | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename test/cases/040_packages/{001_mkimage => 013_mkimage}/mkimage.yml (100%) rename test/cases/040_packages/{001_mkimage => 013_mkimage}/run.yml (100%) rename test/cases/040_packages/{001_mkimage => 013_mkimage}/test.sh (100%) rename test/cases/040_packages/{000_sysctl => 019_sysctl}/test-sysctl.yml (100%) rename test/cases/040_packages/{000_sysctl => 019_sysctl}/test.sh (100%) diff --git a/test/cases/040_packages/001_mkimage/mkimage.yml b/test/cases/040_packages/013_mkimage/mkimage.yml similarity index 100% rename from test/cases/040_packages/001_mkimage/mkimage.yml rename to test/cases/040_packages/013_mkimage/mkimage.yml diff --git a/test/cases/040_packages/001_mkimage/run.yml b/test/cases/040_packages/013_mkimage/run.yml similarity index 100% rename from test/cases/040_packages/001_mkimage/run.yml rename to test/cases/040_packages/013_mkimage/run.yml diff --git a/test/cases/040_packages/001_mkimage/test.sh b/test/cases/040_packages/013_mkimage/test.sh similarity index 100% rename from test/cases/040_packages/001_mkimage/test.sh rename to test/cases/040_packages/013_mkimage/test.sh diff --git a/test/cases/040_packages/000_sysctl/test-sysctl.yml b/test/cases/040_packages/019_sysctl/test-sysctl.yml similarity index 100% rename from test/cases/040_packages/000_sysctl/test-sysctl.yml rename to test/cases/040_packages/019_sysctl/test-sysctl.yml diff --git a/test/cases/040_packages/000_sysctl/test.sh b/test/cases/040_packages/019_sysctl/test.sh similarity index 100% rename from test/cases/040_packages/000_sysctl/test.sh rename to test/cases/040_packages/019_sysctl/test.sh From 15a05d62607e97ba5e88bed74e88eccd9cae2cf5 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sat, 27 May 2017 14:53:22 +0100 Subject: [PATCH 3/7] tests: Simplify sysctl test Don't rely on systctl test package. Instead, add the check shell script to the image and execute it with a standard Alpine image. While at it, make the test more verbose. Signed-off-by: Rolf Neugebauer --- test/cases/040_packages/019_sysctl/check.sh | 11 +++++++++++ .../cases/040_packages/019_sysctl/test-sysctl.yml | 15 ++++++++++++++- test/cases/040_packages/019_sysctl/test.sh | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100755 test/cases/040_packages/019_sysctl/check.sh diff --git a/test/cases/040_packages/019_sysctl/check.sh b/test/cases/040_packages/019_sysctl/check.sh new file mode 100755 index 000000000..ded653360 --- /dev/null +++ b/test/cases/040_packages/019_sysctl/check.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +function failed { + printf "sysctl test suite FAILED\n" >&1 + exit 1 +} + +# this is a non default value, so will fail if sysctl failed +[ "$(sysctl -n fs.inotify.max_user_watches)" -eq 524288 ] || failed + +printf "sysctl test suite PASSED\n" >&1 diff --git a/test/cases/040_packages/019_sysctl/test-sysctl.yml b/test/cases/040_packages/019_sysctl/test-sysctl.yml index 3dea8667d..73ec5759f 100644 --- a/test/cases/040_packages/019_sysctl/test-sysctl.yml +++ b/test/cases/040_packages/019_sysctl/test-sysctl.yml @@ -9,9 +9,22 @@ onboot: - name: sysctl image: "linuxkit/sysctl:b16a483897dd5f71be7e0c04cd090b05f52682e1" - name: test - image: "linuxkit/test-sysctl:c4df4c4d692904d6245dcdef1f4a79389bd3d894" + image: "alpine:3.6" + net: host + pid: host + ipc: host + readonly: true + binds: + - /check.sh:/check.sh + command: ["sh", "./check.sh"] - name: poweroff image: "linuxkit/poweroff:a8f1e4ad8d459f1fdaad9e4b007512cb3b504ae8" + command: ["/bin/sh", "/poweroff.sh", "10"] +files: + - path: check.sh + source: ./check.sh trust: org: - linuxkit + image: + - alpine:3.6 diff --git a/test/cases/040_packages/019_sysctl/test.sh b/test/cases/040_packages/019_sysctl/test.sh index 24ecb6093..eb048c8f2 100644 --- a/test/cases/040_packages/019_sysctl/test.sh +++ b/test/cases/040_packages/019_sysctl/test.sh @@ -4,6 +4,7 @@ # REPEAT: set -e +set -v # Source libraries. Uncomment if needed/defined #. "${RT_LIB}" @@ -17,6 +18,7 @@ trap clean_up EXIT # Test code goes here moby build -output kernel+initrd test-sysctl RESULT="$(linuxkit run qemu -kernel test-sysctl)" +echo "${RESULT}" echo "${RESULT}" | grep -q "suite PASSED" exit 0 From 9efac10874cd061a7332199598e255d4a031e3c6 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sat, 27 May 2017 14:57:40 +0100 Subject: [PATCH 4/7] tests: Remove systctl test package It is not longer needed. Signed-off-by: Rolf Neugebauer --- test/pkg/sysctl/Dockerfile | 4 ---- test/pkg/sysctl/Makefile | 29 ----------------------------- test/pkg/sysctl/check.sh | 11 ----------- 3 files changed, 44 deletions(-) delete mode 100644 test/pkg/sysctl/Dockerfile delete mode 100644 test/pkg/sysctl/Makefile delete mode 100755 test/pkg/sysctl/check.sh diff --git a/test/pkg/sysctl/Dockerfile b/test/pkg/sysctl/Dockerfile deleted file mode 100644 index 99cf97e6d..000000000 --- a/test/pkg/sysctl/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM alpine:edge -ADD . ./ -ENTRYPOINT ["/bin/sh", "/check.sh"] -LABEL org.mobyproject.config='{"net": "host","pid": "host", "ipc": "host", "readonly": true}' diff --git a/test/pkg/sysctl/Makefile b/test/pkg/sysctl/Makefile deleted file mode 100644 index be9319aa9..000000000 --- a/test/pkg/sysctl/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -.PHONY: tag push - -BASE=alpine:3.5 -IMAGE=test-sysctl - -default: push - -hash: Dockerfile check.sh - DOCKER_CONTENT_TRUST=1 docker pull $(BASE) - tar cf - $^ | docker build --no-cache -t $(IMAGE):build - - docker run --rm --entrypoint=/bin/sh $(IMAGE):build -c "cat $^ /lib/apk/db/installed | sha1sum" | sed 's/ .*//' > hash - -push: hash - DOCKER_CONTENT_TRUST=1 docker pull linuxkit/$(IMAGE):$(shell cat hash) || \ - (docker tag $(IMAGE):build linuxkit/$(IMAGE):$(shell cat hash) && \ - DOCKER_CONTENT_TRUST=1 docker push linuxkit/$(IMAGE):$(shell cat hash)) - docker rmi $(IMAGE):build - rm -f hash - -tag: hash - docker pull linuxkit/$(IMAGE):$(shell cat hash) || \ - docker tag $(IMAGE):build linuxkit/$(IMAGE):$(shell cat hash) - docker rmi $(IMAGE):build - rm -f hash - -clean: - rm -f hash - -.DELETE_ON_ERROR: diff --git a/test/pkg/sysctl/check.sh b/test/pkg/sysctl/check.sh deleted file mode 100755 index 28704978f..000000000 --- a/test/pkg/sysctl/check.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -function failed { - printf "sysctl test suite FAILED\n" >&1 - exit 1 -} - -# this is a non default value, so will fail if sysctl failed -[ "$(sysctl -n fs.inotify.max_user_watches)" -eq 524288 ] || failed - -printf "Sysctl test suite PASSED\n" >&1 From 885e6a7f0af7f69fe2a496ad9ab776c352e7ea51 Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sun, 28 May 2017 11:44:29 +0100 Subject: [PATCH 5/7] tests: Add a test for the binfmt package Signed-off-by: Rolf Neugebauer --- test/cases/040_packages/002_binfmt/check.sh | 12 ++++++++ .../040_packages/002_binfmt/test-binfmt.yml | 28 +++++++++++++++++++ test/cases/040_packages/002_binfmt/test.sh | 24 ++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100755 test/cases/040_packages/002_binfmt/check.sh create mode 100644 test/cases/040_packages/002_binfmt/test-binfmt.yml create mode 100644 test/cases/040_packages/002_binfmt/test.sh diff --git a/test/cases/040_packages/002_binfmt/check.sh b/test/cases/040_packages/002_binfmt/check.sh new file mode 100755 index 000000000..2268a05a1 --- /dev/null +++ b/test/cases/040_packages/002_binfmt/check.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +function failed { + printf "binfmt test suite FAILED\n" >&1 + exit 1 +} + +[ -e /binfmt_misc/qemu-aarch64 ] || failed +[ -e /binfmt_misc/qemu-arm ] || failed +[ -e /binfmt_misc/qemu-ppc64le ] || failed + +printf "binfmt test suite PASSED\n" >&1 diff --git a/test/cases/040_packages/002_binfmt/test-binfmt.yml b/test/cases/040_packages/002_binfmt/test-binfmt.yml new file mode 100644 index 000000000..45ca86f4e --- /dev/null +++ b/test/cases/040_packages/002_binfmt/test-binfmt.yml @@ -0,0 +1,28 @@ +kernel: + image: "linuxkit/kernel:4.9.x" + cmdline: "console=ttyS0 page_poison=1" +init: + - linuxkit/init:4fc8aa82ab34d62d510575c8fbe0c58b7ba9c480 + - linuxkit/runc:3a4e6cbf15470f62501b019b55e1caac5ee7689f + - linuxkit/containerd:b1766e4c4c09f63ac4925a6e4612852a93f7e73b +onboot: + - name: binfmt + image: "linuxkit/binfmt:eb3977596d5fc9e847eee1d34cb3beb3f574cac9" + - name: test + image: "alpine:3.6" + readonly: true + binds: + - /check.sh:/check.sh + - /proc/sys/fs/binfmt_misc:/binfmt_misc + command: ["sh", "./check.sh"] + - name: poweroff + image: "linuxkit/poweroff:a8f1e4ad8d459f1fdaad9e4b007512cb3b504ae8" + command: ["/bin/sh", "/poweroff.sh", "10"] +files: + - path: check.sh + source: ./check.sh +trust: + org: + - linuxkit + image: + - alpine:3.6 diff --git a/test/cases/040_packages/002_binfmt/test.sh b/test/cases/040_packages/002_binfmt/test.sh new file mode 100644 index 000000000..3d75a4ef7 --- /dev/null +++ b/test/cases/040_packages/002_binfmt/test.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# SUMMARY: Check that the binfmt package works +# LABELS: +# REPEAT: + +set -e +set -v + +# Source libraries. Uncomment if needed/defined +#. "${RT_LIB}" +. "${RT_PROJECT_ROOT}/_lib/lib.sh" + +clean_up() { + find . -iname "test-binfmt*" -not -iname "*.yml" -exec rm -rf {} \; +} +trap clean_up EXIT + +# Test code goes here +moby build -output kernel+initrd test-binfmt +RESULT="$(linuxkit run qemu -kernel test-binfmt)" +echo "${RESULT}" +echo "${RESULT}" | grep -q "suite PASSED" + +exit 0 From f434615f916a5ad9df4c6939f4f1ce02d32d136c Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sun, 28 May 2017 12:18:54 +0100 Subject: [PATCH 6/7] tests: Add a test for the dhcpcd package This test check that the link is up, that we got a IP address and the output of the dhcpcd daemon. Signed-off-by: Rolf Neugebauer --- test/cases/040_packages/004_dhcpcd/check.sh | 14 +++++++++ .../040_packages/004_dhcpcd/test-dhcpcd.yml | 29 +++++++++++++++++++ test/cases/040_packages/004_dhcpcd/test.sh | 24 +++++++++++++++ 3 files changed, 67 insertions(+) create mode 100755 test/cases/040_packages/004_dhcpcd/check.sh create mode 100644 test/cases/040_packages/004_dhcpcd/test-dhcpcd.yml create mode 100644 test/cases/040_packages/004_dhcpcd/test.sh diff --git a/test/cases/040_packages/004_dhcpcd/check.sh b/test/cases/040_packages/004_dhcpcd/check.sh new file mode 100755 index 000000000..9d480cc8d --- /dev/null +++ b/test/cases/040_packages/004_dhcpcd/check.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +function failed { + printf "dhcpcd test suite FAILED\n" >&1 + exit 1 +} + +LINK=$(iplink | grep eth0 | grep UP) +ADDR=$(echo `ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'`) + +[ -z "${LINK}" ] && failed +[ -z "${ADDR}" ] && failed + +printf "dhcpcd test suite PASSED\n" >&1 diff --git a/test/cases/040_packages/004_dhcpcd/test-dhcpcd.yml b/test/cases/040_packages/004_dhcpcd/test-dhcpcd.yml new file mode 100644 index 000000000..a780465b8 --- /dev/null +++ b/test/cases/040_packages/004_dhcpcd/test-dhcpcd.yml @@ -0,0 +1,29 @@ +kernel: + image: "linuxkit/kernel:4.9.x" + cmdline: "console=ttyS0 page_poison=1" +init: + - linuxkit/init:4fc8aa82ab34d62d510575c8fbe0c58b7ba9c480 + - linuxkit/runc:3a4e6cbf15470f62501b019b55e1caac5ee7689f + - linuxkit/containerd:b1766e4c4c09f63ac4925a6e4612852a93f7e73b +onboot: + - name: dhcpcd + image: "linuxkit/dhcpcd:7d2f17a0e5d1ef9a75a527821a9ab0d753b22e7e" + command: ["/sbin/dhcpcd", "--nobackground", "-f", "/dhcpcd.conf", "-1"] + - name: test + image: "alpine:3.6" + readonly: true + net: host + binds: + - /check.sh:/check.sh + command: ["sh", "./check.sh"] + - name: poweroff + image: "linuxkit/poweroff:a8f1e4ad8d459f1fdaad9e4b007512cb3b504ae8" + command: ["/bin/sh", "/poweroff.sh", "10"] +files: + - path: check.sh + source: ./check.sh +trust: + org: + - linuxkit + image: + - alpine:3.6 diff --git a/test/cases/040_packages/004_dhcpcd/test.sh b/test/cases/040_packages/004_dhcpcd/test.sh new file mode 100644 index 000000000..06c884208 --- /dev/null +++ b/test/cases/040_packages/004_dhcpcd/test.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# SUMMARY: Check that the dhcpcd package works +# LABELS: +# REPEAT: + +set -e +set -v + +# Source libraries. Uncomment if needed/defined +#. "${RT_LIB}" +. "${RT_PROJECT_ROOT}/_lib/lib.sh" + +clean_up() { + find . -iname "test-dhcpcd*" -not -iname "*.yml" -exec rm -rf {} \; +} +trap clean_up EXIT + +# Test code goes here +moby build -output kernel+initrd test-dhcpcd +RESULT="$(linuxkit run qemu -kernel test-dhcpcd)" +echo "${RESULT}" +echo "${RESULT}" | grep -q "suite PASSED" + +exit 0 From 96e45aeee519da885cb57d789f309e11952f301b Mon Sep 17 00:00:00 2001 From: Rolf Neugebauer Date: Sun, 28 May 2017 12:47:43 +0100 Subject: [PATCH 7/7] tests: Add a test for the ca-certificates package Signed-off-by: Rolf Neugebauer --- .../040_packages/003_ca-certificates/check.sh | 12 +++++++++ .../test-ca-certificates.yml | 27 +++++++++++++++++++ .../040_packages/003_ca-certificates/test.sh | 24 +++++++++++++++++ 3 files changed, 63 insertions(+) create mode 100755 test/cases/040_packages/003_ca-certificates/check.sh create mode 100644 test/cases/040_packages/003_ca-certificates/test-ca-certificates.yml create mode 100644 test/cases/040_packages/003_ca-certificates/test.sh diff --git a/test/cases/040_packages/003_ca-certificates/check.sh b/test/cases/040_packages/003_ca-certificates/check.sh new file mode 100755 index 000000000..8be579c63 --- /dev/null +++ b/test/cases/040_packages/003_ca-certificates/check.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +function failed { + printf "ca-certificates test suite FAILED\n" >&1 + exit 1 +} + +[ -d /host-etc/ssl/ ] || failed +[ -d /host-etc/ssl/certs ] || failed +[ -f /host-etc/ssl/certs/ca-certificates.crt ] || failed + +printf "ca-certificates test suite PASSED\n" >&1 diff --git a/test/cases/040_packages/003_ca-certificates/test-ca-certificates.yml b/test/cases/040_packages/003_ca-certificates/test-ca-certificates.yml new file mode 100644 index 000000000..ddab1a8a7 --- /dev/null +++ b/test/cases/040_packages/003_ca-certificates/test-ca-certificates.yml @@ -0,0 +1,27 @@ +kernel: + image: "linuxkit/kernel:4.9.x" + cmdline: "console=ttyS0 page_poison=1" +init: + - linuxkit/init:4fc8aa82ab34d62d510575c8fbe0c58b7ba9c480 + - linuxkit/runc:3a4e6cbf15470f62501b019b55e1caac5ee7689f + - linuxkit/containerd:b1766e4c4c09f63ac4925a6e4612852a93f7e73b + - linuxkit/ca-certificates:75cf419fb58770884c3464eb687ec8dfc704169d +onboot: + - name: test + image: "alpine:3.6" + readonly: true + binds: + - /check.sh:/check.sh + - /etc:/host-etc + command: ["sh", "./check.sh"] + - name: poweroff + image: "linuxkit/poweroff:a8f1e4ad8d459f1fdaad9e4b007512cb3b504ae8" + command: ["/bin/sh", "/poweroff.sh", "10"] +files: + - path: check.sh + source: ./check.sh +trust: + org: + - linuxkit + image: + - alpine:3.6 diff --git a/test/cases/040_packages/003_ca-certificates/test.sh b/test/cases/040_packages/003_ca-certificates/test.sh new file mode 100644 index 000000000..6ca44b026 --- /dev/null +++ b/test/cases/040_packages/003_ca-certificates/test.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# SUMMARY: Check that the ca-certificates package works +# LABELS: +# REPEAT: + +set -e +set -v + +# Source libraries. Uncomment if needed/defined +#. "${RT_LIB}" +. "${RT_PROJECT_ROOT}/_lib/lib.sh" + +clean_up() { + find . -iname "test-ca-certificates*" -not -iname "*.yml" -exec rm -rf {} \; +} +trap clean_up EXIT + +# Test code goes here +moby build -output kernel+initrd test-ca-certificates +RESULT="$(linuxkit run qemu -kernel test-ca-certificates)" +echo "${RESULT}" +echo "${RESULT}" | grep -q "suite PASSED" + +exit 0