# has_digest enforces the last output line is "Digest: sha256:..." # the input is the output from a docker push cli command function has_digest() { filtered=$(echo "$1" |sed -rn '/[dD]igest\: sha(256|384|512)/ p') [ "$filtered" != "" ] # See http://wiki.alpinelinux.org/wiki/Regex#BREs before making changes to regex digest=$(expr "$filtered" : ".*\(sha[0-9]\{3,3\}:[a-z0-9]*\)") } # tempImage creates a new image using the provided name # requires bats function tempImage() { dir=$(mktemp -d) run dd if=/dev/urandom of="$dir/f" bs=1024 count=512 cat < "$dir/Dockerfile" FROM scratch COPY f /f CMD [] DockerFileContent cp_t $dir "/tmpbuild/" exec_t "cd /tmpbuild/; docker build --no-cache -t $1 .; rm -rf /tmpbuild/" } # skip basic auth tests with Docker 1.6, where they don't pass due to # certificate issues, requires bats function basic_auth_version_check() { run sh -c 'docker version | fgrep -q "Client version: 1.6."' if [ "$status" -eq 0 ]; then skip "Basic auth tests don't support 1.6.x" fi } email="a@nowhere.com" # docker_t_login calls login with email depending on version function docker_t_login() { # Only pass email field pre 1.11, no deprecation warning parse_version "$GOLEM_DIND_VERSION" v=$version parse_version "1.11.0" if [ "$v" -lt "$version" ]; then run docker_t login -e $email $@ else run docker_t login $@ fi } # login issues a login to docker to the provided server # uses user, password, and email variables set outside of function # requies bats function login() { rm -f /root/.docker/config.json docker_t_login -u $user -p $password $1 if [ "$status" -ne 0 ]; then echo $output fi [ "$status" -eq 0 ] # Handle different deprecation warnings parse_version "$GOLEM_DIND_VERSION" v=$version parse_version "1.11.0" if [ "$v" -lt "$version" ]; then # First line is WARNING about credential save or email deprecation (maybe both) [ "${lines[2]}" = "Login Succeeded" -o "${lines[1]}" = "Login Succeeded" ] else [ "${lines[0]}" = "Login Succeeded" ] fi } function login_oauth() { login $@ tmpFile=$(mktemp) get_file_t /root/.docker/config.json $tmpFile run awk -v RS="" "/\"$1\": \\{[[:space:]]+\"auth\": \"[[:alnum:]]+\",[[:space:]]+\"identitytoken\"/ {exit 3}" $tmpFile [ "$status" -eq 3 ] } function parse_version() { version=$(echo "$1" | cut -d '-' -f1) # Strip anything after '-' major=$(echo "$version" | cut -d . -f1) minor=$(echo "$version" | cut -d . -f2) rev=$(echo "$version" | cut -d . -f3) version=$((major * 1000 * 1000 + minor * 1000 + rev)) } function version_check() { name=$1 checkv=$2 minv=$3 parse_version "$checkv" v=$version parse_version "$minv" if [ "$v" -lt "$version" ]; then skip "$name version \"$checkv\" does not meet required version \"$minv\"" fi } function get_file_t() { docker cp dockerdaemon:$1 $2 } function cp_t() { docker cp $1 dockerdaemon:$2 } function exec_t() { docker exec dockerdaemon sh -c "$@" } function docker_t() { docker exec dockerdaemon docker $@ } # build creates a new docker image id from another image function build() { docker exec -i dockerdaemon docker build --no-cache -t $1 - <