#!/bin/bash
set -e
echo "mode: set" >>profile.cov

deps=""

# listDeps lists packages referenced by package in $1, 
# excluding golang standard library and packages in 
# direcotry vendor
function listDeps(){
	pkg=$1
	deps=$pkg
	ds=$(echo $(go list -f '{{.Imports}}' $pkg) | sed 's/[][]//g')
	for d in $ds
	do
		if echo $d | grep -q "github.com/goharbor/harbor" && echo $d | grep -qv "vendor"
		then
			deps="$deps,$d"
		fi
	done
}

packages=$(go list ./... | grep -v -E 'vendor|tests|testing')

for package in $packages
do
	listDeps $package

#    echo "DEBUG: testing package $package"
	go test -race -cover -coverprofile=profile.tmp -coverpkg "$deps" $package
	if [ -f profile.tmp ]	
	then
		cat profile.tmp | tail -n +2 >> profile.cov
		rm profile.tmp
	fi	
done
