diff --git a/Makefile b/Makefile index acf4e18..ed20a67 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ +BUILD := gomtree +CWD := $(shell pwd) SOURCE_FILES := $(shell find . -type f -name "*.go") default: validation build .PHONY: validation -validation: test lint vet +validation: test lint vet .cli.test .PHONY: test test: .test @@ -24,12 +26,20 @@ vet: .vet .vet: $(SOURCE_FILES) go vet ./... && touch $@ -.PHONY: build -build: gomtree +.PHONY: cli.test +cli.test: .cli.test -gomtree: $(SOURCE_FILES) - go build ./cmd/gomtree +.cli.test: $(BUILD) $(wildcard ./test/cli/*.sh) + @ for test in ./test/cli/*.sh ; do \ + bash $$test $(CWD) ; \ + done && touch $@ + +.PHONY: build +build: $(BUILD) + +$(BUILD): $(SOURCE_FILES) + go build ./cmd/$(BUILD) clean: - rm -rf gomtree + rm -rf $(BUILD) .test .vet .lint .cli.test diff --git a/test/cli/0001.sh b/test/cli/0001.sh new file mode 100644 index 0000000..5119c1b --- /dev/null +++ b/test/cli/0001.sh @@ -0,0 +1,44 @@ +#!/bin/bash +set -e + +name=$(basename $0) +root=$1 +gomtree=$(readlink -f ${root}/gomtree) +t=$(mktemp -d /tmp/go-mtree.XXXXXX) + +echo "[${name}] Running in ${t}" +# This test is for basic running check of manifest, and check against tar and file system +# + +pushd ${root} + +git archive --format=tar HEAD^{tree} . > ${t}/${name}.tar + +prev_umask=$(umask) +umask 0 # this is so the tar command can set the mode's properly +mkdir -p ${t}/extract +tar -C ${t}/extract/ -xf ${t}/${name}.tar +umask ${prev_umask} + +# create manifest from tar +${gomtree} -K sha256digest -c -T ${t}/${name}.tar > ${t}/${name}.mtree + +# check tar-manifest against the tar +${gomtree} -f ${t}/${name}.mtree -T ${t}/${name}.tar + +# check tar-manifest against the filesystem +# git archive makes the uid/gid as 0, so don't check them for this test +${gomtree} -k size,sha256digest,mode,type -f ${t}/${name}.mtree -p ${t}/extract/ + +# create a manifest from filesystem +${gomtree} -K sha256digest -c -p ${t}/extract/ > ${t}/${name}.mtree + +# check filesystem-manifest against the filesystem +${gomtree} -f ${t}/${name}.mtree -p ${t}/extract/ + +# check filesystem-manifest against the tar +# git archive makes the uid/gid as 0, so don't check them for this test +${gomtree} -k size,sha256digest,mode,type -f ${t}/${name}.mtree -T ${t}/${name}.tar + +popd +rm -rf ${t}