diff --git a/.travis.yml b/.travis.yml index cd6410b..25ba43e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,4 @@ before_install: install: true script: - - go vet -x ./... - - golint -set_exit_status ./... - - go test -v ./... + - make validation diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ed20a67 --- /dev/null +++ b/Makefile @@ -0,0 +1,45 @@ + +BUILD := gomtree +CWD := $(shell pwd) +SOURCE_FILES := $(shell find . -type f -name "*.go") + +default: validation build + +.PHONY: validation +validation: test lint vet .cli.test + +.PHONY: test +test: .test + +.test: $(SOURCE_FILES) + go test -v ./... && touch $@ + +.PHONY: lint +lint: .lint + +.lint: $(SOURCE_FILES) + golint -set_exit_status ./... && touch $@ + +.PHONY: vet +vet: .vet + +.vet: $(SOURCE_FILES) + go vet ./... && touch $@ + +.PHONY: cli.test +cli.test: .cli.test + +.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 $(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}