A unit test for validating repository tags.
lf/include.mk
-------------
o Handle a bootstrap case for git submodule checkout.
o Invoke git command using macro $(GIT) else not found by path.
o git submodule update --init --recursive will checkout repo:onf-make
test/bats/check_repo_tags.bats
------------------------------
o A BATS unit test to validate contents of gerrit and github repository tags.
o Replace inlined hardcoded list of repository names.
o Instead read them from data file conf/repos/voltha.
o Added conditional booleans enable_fatal= and enable_skip=1
for easy removal of test filtering while using interactively.
test/bats/conf/repos/deprecated
-------------------------------
o Move a few repositories into a new deprecated list so their usage is clear.
[HOWTO: test]
% git clone ssh://gerrit.opencord.org/ci-management
% make -C ci-management/tests/bat test-bats
check_repo_tags.bats
3 tests, 0 failures
Change-Id: I5fc8e37b36f02f77d5b54594a7092a9456562939
Signed-off-by: Joey Armstrong <jarmstrong@linuxfoundation.org>
diff --git a/lf/include.mk b/lf/include.mk
index ebaacde..0fda66a 100644
--- a/lf/include.mk
+++ b/lf/include.mk
@@ -73,6 +73,7 @@
## repo:onf-make submodule, this target/dependency will initialize
## and checkout all submodules the current repository depends on.
## -----------------------------------------------------------------------
+GIT ?= $(shell which git)
.PHONY: git-submodules
git-submodules : $(onf-mk-lib)/include.mk
@@ -80,7 +81,7 @@
$(call banner-enter,(Checkout git submodules))
- git submodule update --init --recursive
+ $(GIT) submodule update --init --recursive
$(call banner-leave,(Checkout git submodules))
diff --git a/test/bats/README.md b/test/bats/README.md
new file mode 100644
index 0000000..56b47e1
--- /dev/null
+++ b/test/bats/README.md
@@ -0,0 +1,30 @@
+BATS unit testing
+=================
+
+check_repo_tags.bats
+--------------------
+
+- SRC: [jjb/pipeline/voltha/software-upgrades.groovy](https://gerrit.opencord.org/plugins/gitiles/ci-management/+/refs/heads/master/jjb/pipeline/voltha/software-upgrades.groovy#80)
+- TST: [test/bats/check_repo_tags.bats](https://gerrit.opencord.org/plugins/gitiles/ci-management/+/refs/heads/master/test/bats/check_repo_tags.bats)
+- LIB: [test/bats/utils/check_repo_tags.sh](https://gerrit.opencord.org/plugins/gitiles/ci-management/+/refs/heads/master/test/bats/utils/check_repo_tags.sh#31)
+
+Unit test check_repo_tags.bats will exercise (git ls-remote) logic inlined within the software-upgrades.groovy script. The test will gather a list of tagnames from the gerrit and github repositories then compare the lists for differences.
+
+
+Interactive Testing
+-------------------
+
+check_repo_tags.bats contains two variables that can be uncommented to enable debugging.
+
+- Uncomment to allow tagname differences to induce testing failures.
+
+ - declare -g -i enable_fatal=1
+
+- Test exclusions (skip) are supported but behavior is heavy handed.
+ Skip will cause a test suite to prematurely exit on first failure
+ VS iterate over all test conditions then ignore overall status.
+
+ - declare -g -i enable_skip=1
+ - For initial triage this test has been setup to call continue
+ rather than skip. Ignore individual test conditions that are
+ a known failure point.
diff --git a/test/bats/check_repo_tags.bats b/test/bats/check_repo_tags.bats
index d36ead1..64dd88a 100755
--- a/test/bats/check_repo_tags.bats
+++ b/test/bats/check_repo_tags.bats
@@ -28,13 +28,15 @@
setup() {
source './utils/check_repo_tags.sh'
- declare -g components=()
- components+=('voltha-docs')
- components+=('voltha-onos')
- components+=('voltha-openolt-adapter')
- components+=('voltha-openonu-adapter-go')
- components+=('voltha-lib-go')
- components+=('voltha-protos')
+ ## Slurp a list of repositories to query
+ readarray -t buffer < 'conf/repos/voltha'
+ declare -g -a components=("${buffer[0]}")
+
+ # Uncomment for raw test results
+ # declare -g -i enable_fatal=1
+
+ # Uncomment to skip remaining checks within a test.
+ # declare -g -i enable_skip=1
}
## -----------------------------------------------------------------------
@@ -49,29 +51,47 @@
## Known problems
## --------------
case "$component" in
+ device-management-interface)
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="1.15.0")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
+ ;;
voltha-docs)
- # skip 'declare -a gerrit=([0]="2.12.35")'
- continue
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="2.12.35")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-lib-go)
- # skip 'declare -a gerrit=([0]="7.5.3")'
- continue
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="7.5.3")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-onos)
- # skip 'declare -a gerrit=([0]="2.11.0")'
- continue
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="2.11.0")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
- voltha-openolt-adapter)
- # skip 'declare -a gerrit=([0]="4.4.10")'
- continue
+ voltha-openolt-adapter)
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="4.4.10")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-openonu-adapter-go)
- # skip 'declare -a gerrit=([0]="2.12.0~beta")'
- continue
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="2.12.0~beta")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-protos)
- # skip 'declare -a gerrit=([0]="5.4.11")'
- continue
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="5.4.11")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
esac
@@ -108,29 +128,35 @@
## Known problems
## --------------
case "$component" in
- voltha-docs)
- # skip "$component not mirrored on github"
- continue
+ device-management-interface)
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="1.16.0")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-onos)
- # skip "declare -a gerrit=([0]="2.12.0~beta")"
- continue
+ if [[ -v enable_skip ]]; then
+ skip "declare -a gerrit=([0]="2.12.0~beta")"
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-lib-go)
- # skip "declare -a gerrit=([0]="7.6.0")"
- continue
+ if [[ -v enable_skip ]]; then
+ skip "declare -a gerrit=([0]="7.6.0")"
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-openolt-adapter)
- # skip "declare -a gerrit=([0]="4.4.11")"
- continue
- ;;
- voltha-openonu-adapter-go)
- # skip 'github repo lacks tag 2.12.0 (voltha-openonu-adapter-go)'
- continue
+ if [[ -v enable_skip ]]; then
+ skip "declare -a gerrit=([0]="4.4.11")"
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
voltha-protos)
- # skip "declare -a gerrit=([0]="5.5.0")"
- continue
+ if [[ -v enable_skip ]]; then
+ skip 'declare -a gerrit=([0]="5.5.0")'
+ fi
+ [[ ! -v enable_fatal ]] && { continue; }
;;
esac
diff --git a/test/bats/conf/repos/README.md b/test/bats/conf/repos/README.md
new file mode 100644
index 0000000..d28f5d9
--- /dev/null
+++ b/test/bats/conf/repos/README.md
@@ -0,0 +1,11 @@
+Repository components
+=====================
+
+These data files contain a list of repository names for scripting.
+
+TODO
+----
+ o Consider creating a common test data repository for content.
+ o Consider creating a library function able to gather repository names.
+ - On github traversal of orgs by name may work but is performance an issue ?
+
diff --git a/test/bats/conf/repos/deprecated b/test/bats/conf/repos/deprecated
new file mode 100644
index 0000000..0dc1a06
--- /dev/null
+++ b/test/bats/conf/repos/deprecated
@@ -0,0 +1,6 @@
+voltha-ponsimonu-adapter
+voltha-ponsimolt-adapter
+voltha-omci
+voltha-api-server
+voltha-adtran-adapter
+voltha-openonu-adapter
diff --git a/test/bats/conf/repos/onos b/test/bats/conf/repos/onos
new file mode 100644
index 0000000..f58ac60
--- /dev/null
+++ b/test/bats/conf/repos/onos
@@ -0,0 +1,14 @@
+aaa
+bng
+dhcpl2relay
+igmpproxy
+kafka
+kafka-onos
+maclearner
+mcast
+ofagent-go
+olt
+olttopology
+ppoeagent
+sadis
+segmentrouting
diff --git a/test/bats/conf/repos/voltha b/test/bats/conf/repos/voltha
new file mode 100644
index 0000000..55579be
--- /dev/null
+++ b/test/bats/conf/repos/voltha
@@ -0,0 +1,22 @@
+device-management-interface
+ofagent-go
+omci-lib-go
+openolt
+voltha-eponolt-adapter
+voltha-test-manifest
+voltha-docs
+voltha-docker-tools
+voltha-epononu-adapter
+voltha-go-controller
+voltha-protos
+voltha-go
+voltha-helm-charts
+voltha-system-tests
+voltha-onos
+voltha-openonu-adapter-go
+voltha-lib-go
+voltha-go-controller
+voltha-northbound-bbf-adapter
+bbsim
+bbsim-sadis-server
+voltctl