Merge pull request #1957 from tophj-ibm/check-for-mounts-tests
running tests in a container
This commit is contained in:
commit
7e1d8aafee
@ -15,7 +15,6 @@ addons:
|
|||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
- btrfs-tools
|
- btrfs-tools
|
||||||
- libseccomp-dev
|
|
||||||
- libapparmor-dev
|
- libapparmor-dev
|
||||||
- libnl-3-dev
|
- libnl-3-dev
|
||||||
- libnet-dev
|
- libnet-dev
|
||||||
@ -33,16 +32,17 @@ env:
|
|||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- uname -r
|
- uname -r
|
||||||
|
- sudo apt-get -q update
|
||||||
|
- sudo apt-get install -y libseccomp-dev/trusty-backports
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- wget https://github.com/google/protobuf/releases/download/v3.5.0/protoc-3.5.0-linux-x86_64.zip -O /tmp/protoc-3.5.0-linux-x86_64.zip
|
- sudo PATH=$PATH GOPATH=$GOPATH script/setup/install-protobuf
|
||||||
- sudo unzip -o -d /usr/local /tmp/protoc-3.5.0-linux-x86_64.zip
|
|
||||||
- sudo chmod +x /usr/local/bin/protoc
|
- sudo chmod +x /usr/local/bin/protoc
|
||||||
- sudo chmod og+rx /usr/local/include/google /usr/local/include/google/protobuf /usr/local/include/google/protobuf/compiler
|
- sudo chmod og+rx /usr/local/include/google /usr/local/include/google/protobuf /usr/local/include/google/protobuf/compiler
|
||||||
- sudo chmod -R og+r /usr/local/include/google/protobuf/
|
- sudo chmod -R og+r /usr/local/include/google/protobuf/
|
||||||
- protoc --version
|
- protoc --version
|
||||||
- go get -u github.com/vbatts/git-validation
|
- go get -u github.com/vbatts/git-validation
|
||||||
- sudo wget https://github.com/crosbymichael/runc/releases/download/ctd-9/runc -O /bin/runc; sudo chmod +x /bin/runc
|
- sudo PATH=$PATH GOPATH=$GOPATH script/setup/install-runc
|
||||||
- wget https://github.com/xemul/criu/archive/v3.0.tar.gz -O /tmp/criu.tar.gz
|
- wget https://github.com/xemul/criu/archive/v3.0.tar.gz -O /tmp/criu.tar.gz
|
||||||
- tar -C /tmp/ -zxf /tmp/criu.tar.gz
|
- tar -C /tmp/ -zxf /tmp/criu.tar.gz
|
||||||
- cd /tmp/criu-3.0 && sudo make install-criu
|
- cd /tmp/criu-3.0 && sudo make install-criu
|
||||||
|
31
contrib/Dockerfile.test
Normal file
31
contrib/Dockerfile.test
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# This dockerfile is used to test containerd within a container
|
||||||
|
#
|
||||||
|
# usage:
|
||||||
|
# 1.) docker build -t containerd-test -f Dockerfile.test ../
|
||||||
|
# 2.) docker run -it --privileged -v /tmp:/tmp --tmpfs /var/lib/containerd-test containerd-test bash
|
||||||
|
# 3.) $ make binaries install test
|
||||||
|
#
|
||||||
|
|
||||||
|
# Install proto3
|
||||||
|
FROM golang:1.9.3 AS proto3
|
||||||
|
RUN apt-get update && apt-get install -y autoconf automake g++ libtool unzip
|
||||||
|
COPY script/setup/install-protobuf install-protobuf
|
||||||
|
RUN ./install-protobuf
|
||||||
|
|
||||||
|
# Install runc
|
||||||
|
FROM golang:1.9.3 AS runc
|
||||||
|
RUN apt-get update && apt-get install -y curl libapparmor-dev libseccomp-dev
|
||||||
|
COPY vendor.conf /go/src/github.com/containerd/containerd/vendor.conf
|
||||||
|
COPY script/setup/install-runc install-runc
|
||||||
|
RUN ./install-runc
|
||||||
|
|
||||||
|
FROM golang:1.9.3
|
||||||
|
RUN apt-get update && apt-get install -y btrfs-tools gcc git libapparmor-dev libseccomp-dev make xfsprogs
|
||||||
|
|
||||||
|
COPY --from=proto3 /usr/local/bin/protoc /usr/local/bin/protoc
|
||||||
|
COPY --from=proto3 /usr/local/include/google /usr/local/include/google
|
||||||
|
|
||||||
|
COPY --from=runc /usr/local/sbin/runc /usr/local/go/bin/runc
|
||||||
|
COPY . /go/src/github.com/containerd/containerd
|
||||||
|
|
||||||
|
WORKDIR /go/src/github.com/containerd/containerd
|
@ -26,10 +26,12 @@ func testSupportsDType(t *testing.T, expected bool, mkfs ...string) {
|
|||||||
}
|
}
|
||||||
if out, err := exec.Command(mkfs[0], append(mkfs[1:], deviceName)...).CombinedOutput(); err != nil {
|
if out, err := exec.Command(mkfs[0], append(mkfs[1:], deviceName)...).CombinedOutput(); err != nil {
|
||||||
// not fatal
|
// not fatal
|
||||||
|
cleanupDevice()
|
||||||
t.Skipf("could not mkfs (%v) %s: %v (out: %q)", mkfs, deviceName, err, string(out))
|
t.Skipf("could not mkfs (%v) %s: %v (out: %q)", mkfs, deviceName, err, string(out))
|
||||||
}
|
}
|
||||||
if out, err := exec.Command("mount", deviceName, mnt).CombinedOutput(); err != nil {
|
if out, err := exec.Command("mount", deviceName, mnt).CombinedOutput(); err != nil {
|
||||||
// not fatal
|
// not fatal
|
||||||
|
cleanupDevice()
|
||||||
t.Skipf("could not mount %s: %v (out: %q)", deviceName, err, string(out))
|
t.Skipf("could not mount %s: %v (out: %q)", deviceName, err, string(out))
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
|
40
script/setup/install-protobuf
Executable file
40
script/setup/install-protobuf
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Downloads and installs protobuf
|
||||||
|
#
|
||||||
|
set -eu -o pipefail
|
||||||
|
|
||||||
|
PROTOBUF_VERSION=3.5.1
|
||||||
|
GOARCH=$(go env GOARCH)
|
||||||
|
GOOS=$(go env GOOS)
|
||||||
|
PROTOBUF_DIR=$(mktemp -d)
|
||||||
|
|
||||||
|
case $GOARCH in
|
||||||
|
|
||||||
|
arm64)
|
||||||
|
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-linux-aarch64.zip"
|
||||||
|
unzip $PROTOBUF_DIR/protobuf -d /usr/local
|
||||||
|
;;
|
||||||
|
|
||||||
|
amd64|386)
|
||||||
|
if [ $GOOS == "windows" ]; then
|
||||||
|
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-win32.zip"
|
||||||
|
elif [ $GOOS == "linux" ]; then
|
||||||
|
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protoc-$PROTOBUF_VERSION-linux-x86_64.zip"
|
||||||
|
fi
|
||||||
|
unzip $PROTOBUF_DIR/protobuf -d /usr/local
|
||||||
|
;;
|
||||||
|
|
||||||
|
*)
|
||||||
|
wget -O $PROTOBUF_DIR/protobuf "https://github.com/google/protobuf/releases/download/v$PROTOBUF_VERSION/protobuf-cpp-$PROTOBUF_VERSION.zip"
|
||||||
|
unzip $PROTOBUF_DIR/protobuf -d /usr/src/protobuf
|
||||||
|
cd /usr/src/protobuf/protobuf-$PROTOBUF_VERSION
|
||||||
|
./autogen.sh
|
||||||
|
./configure --disable-shared
|
||||||
|
make
|
||||||
|
make check
|
||||||
|
make install
|
||||||
|
ldconfig
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
rm -rf $PROTOBUF_DIR
|
13
script/setup/install-runc
Executable file
13
script/setup/install-runc
Executable file
@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# Builds and installs runc to /usr/local/go/bin based off
|
||||||
|
# the commit defined in vendor.conf
|
||||||
|
#
|
||||||
|
set -eu -o pipefail
|
||||||
|
|
||||||
|
RUNC_COMMIT=$(grep opencontainers/runc ${GOPATH}/src/github.com/containerd/containerd/vendor.conf | cut -d " " -f 2)
|
||||||
|
|
||||||
|
go get -u github.com/opencontainers/runc
|
||||||
|
cd $GOPATH/src/github.com/opencontainers/runc
|
||||||
|
git checkout $RUNC_COMMIT
|
||||||
|
make BUILDTAGS="apparmor seccomp" runc install
|
@ -29,20 +29,23 @@ func boltSnapshotter(t *testing.T) func(context.Context, string) (snapshots.Snap
|
|||||||
|
|
||||||
return func(ctx context.Context, root string) (snapshots.Snapshotter, func() error, error) {
|
return func(ctx context.Context, root string) (snapshots.Snapshotter, func() error, error) {
|
||||||
|
|
||||||
deviceName, cleanupDevice, err := testutil.NewLoopback(100 << 20) // 100 MB
|
deviceName, cleanupDevice, err := testutil.NewLoopback(650 << 20) // 650 MB
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if out, err := exec.Command(mkbtrfs, deviceName).CombinedOutput(); err != nil {
|
if out, err := exec.Command(mkbtrfs, deviceName).CombinedOutput(); err != nil {
|
||||||
|
cleanupDevice()
|
||||||
return nil, nil, errors.Wrapf(err, "failed to make btrfs filesystem (out: %q)", out)
|
return nil, nil, errors.Wrapf(err, "failed to make btrfs filesystem (out: %q)", out)
|
||||||
}
|
}
|
||||||
if out, err := exec.Command("mount", deviceName, root).CombinedOutput(); err != nil {
|
if out, err := exec.Command("mount", deviceName, root).CombinedOutput(); err != nil {
|
||||||
|
cleanupDevice()
|
||||||
return nil, nil, errors.Wrapf(err, "failed to mount device %s (out: %q)", deviceName, out)
|
return nil, nil, errors.Wrapf(err, "failed to mount device %s (out: %q)", deviceName, out)
|
||||||
}
|
}
|
||||||
|
|
||||||
snapshotter, err := NewSnapshotter(root)
|
snapshotter, err := NewSnapshotter(root)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
cleanupDevice()
|
||||||
return nil, nil, errors.Wrap(err, "failed to create new snapshotter")
|
return nil, nil, errors.Wrap(err, "failed to create new snapshotter")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,6 +21,8 @@ func NewLoopback(size int64) (string, func() error, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := file.Truncate(size); err != nil {
|
if err := file.Truncate(size); err != nil {
|
||||||
|
file.Close()
|
||||||
|
os.Remove(file.Name())
|
||||||
return "", nil, errors.Wrap(err, "failed to resize temp file")
|
return "", nil, errors.Wrap(err, "failed to resize temp file")
|
||||||
}
|
}
|
||||||
file.Close()
|
file.Close()
|
||||||
@ -29,6 +31,7 @@ func NewLoopback(size int64) (string, func() error, error) {
|
|||||||
losetup := exec.Command("losetup", "--find", "--show", file.Name())
|
losetup := exec.Command("losetup", "--find", "--show", file.Name())
|
||||||
p, err := losetup.Output()
|
p, err := losetup.Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
os.Remove(file.Name())
|
||||||
return "", nil, errors.Wrap(err, "loopback setup failed")
|
return "", nil, errors.Wrap(err, "loopback setup failed")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user