e8405f0a3004ccb304cd7b061b9b94d63d29197f
markd
  Sat Apr 19 19:12:00 2025 -0700
Exit non-zero if an error occurs creating the bigBed.  Enhance test to check exit code for error cases #35551

diff --git src/utils/bedToBigBed/tests/makefile src/utils/bedToBigBed/tests/makefile
index 50e1729a3a1..d4167478edf 100644
--- src/utils/bedToBigBed/tests/makefile
+++ src/utils/bedToBigBed/tests/makefile
@@ -1,63 +1,68 @@
 kentSrc = ../../..
 A = bedToBigBed
 include ../../../inc/common.mk
 
 test: testOddSorted testRgb testMultiInsAtEnd itemsRgb tabSep testBadChrom1 testBbSize1 testBbSize2 testDevStdin testStdin testCompress testNotSorted
 
+# use ! cmd 2> output/$@.err || (${shouldHaveFailed})
+shouldHaveFailed = echo "Error: command should have failed" >&2 && false
+
+fakeGenomeTwoBit = output/fakeGenome.2bit
+
 testBadChrom1:  outputDir
-	-${BINDIR}/${A} input/colored.genbank.bed input/human.chrom.sizes.txt output/noFile.chromAlias.bb   -tab -type=bed12+13 -as=input/bigGenePred.as 2> output/testBadChrom1.err
+	! ${BINDIR}/${A} input/colored.genbank.bed input/human.chrom.sizes.txt output/noFile.chromAlias.bb -tab -type=bed12+13 -as=input/bigGenePred.as 2> output/testBadChrom1.err || (${shouldHaveFailed})
 	diff expected/testBadChrom1.err output/testBadChrom1.err
 
 output/human.chromAlias.bb: outputDir
 	${BINDIR}/${A} input/human.chromAlias.bed input/human.chrom.sizes.txt output/human.chromAlias.bb   -tab -type=bed3+4 -as=input/chromAliasIndex.as -extraIndex=genbank,ensembl,ncbi,ucsc
 
 testBbSize1: outputDir output/human.chromAlias.bb
 	${BINDIR}/${A} input/colored.genbank.bed output/human.chromAlias.bb output/colored.genbank.bb -sizesIsChromAliasBb -tab -type=bed12+13 -as=input/bigGenePred.as 
 	bigBedToBed output/colored.genbank.bb output/colored.genbank.bed
 	diff input/colored.genbank.bed output/colored.genbank.bed
 
 testBbSize2: outputDir output/human.chromAlias.bb
-	-${BINDIR}/${A} input/mixed.bed output/human.chromAlias.bb output/noFile.chromAlias.bb -sizesIsChromAliasBb -tab -type=bed12+13 -as=input/bigGenePred.as 2> output/mixed.err
+	! ${BINDIR}/${A} input/mixed.bed output/human.chromAlias.bb output/noFile.chromAlias.bb -sizesIsChromAliasBb -tab -type=bed12+13 -as=input/bigGenePred.as 2> output/mixed.err || (${shouldHaveFailed})
 	diff expected/mixed.err output/mixed.err
 
 testRgb: outputDir
 	${BINDIR}/${A} -type=bed9 -as=input/itemRgb.as input/itemRgb.bed input/chrom.sizes output/itemRgb.bb 2> /dev/null
 	bigBedToBed output/itemRgb.bb output/test_itemRgb.bed
 	diff input/itemRgb.bed output/test_itemRgb.bed
 
 testCompress: outputDir
 	${BINDIR}/${A} -type=bed9 -as=input/itemRgb.as input/itemRgb.bed.gz input/chrom.sizes output/itemRgbGz.bb 2> /dev/null
 	bigBedToBed output/itemRgbGz.bb output/test_itemRgbGz.bed
 	diff input/itemRgb.bed output/test_itemRgbGz.bed
 
 testOddSorted: outputDir
-	-${BINDIR}/${A} -extraIndex=name -type=bed12+16 -tab -as=../../..//hg/lib/gencodeBGP.as input/oddSorted.bed input/hg38.chrom.sizes output/oddSorted.bb
+	${BINDIR}/${A} -extraIndex=name -type=bed12+16 -tab -as=../../..//hg/lib/gencodeBGP.as input/oddSorted.bed input/hg38.chrom.sizes output/oddSorted.bb
 	bigBedToBed output/oddSorted.bb output/oddSorted.bed
 	LC_ALL=C sort -k1,1 -k2,2n  input/oddSorted.bed > output/oddSorted.check.bed
 	diff output/oddSorted.check.bed output/oddSorted.bed
 	cut -f 4 input/oddSorted.bed > output/oddSorted.names
 	bigBedNamedItems output/oddSorted.bb output/oddSorted.names -nameFile stdout | LC_ALL=C sort -k1,1 -k2,2n >  output/searchNames.bed
 	diff output/oddSorted.bed output/searchNames.bed
 
 testSortNotSorted: outputDir
-	-${BINDIR}/${A} -tab -type=bed9+3 -sort input/notSorted.bed input/notSorted.chrom.sizes output/notSorted.bb 
+	${BINDIR}/${A} -tab -type=bed9+3 -sort input/notSorted.bed input/notSorted.chrom.sizes output/notSorted.bb 
 	bigBedToBed output/notSorted.bb output/notSorted.bed
 	diff expected/notSorted.bed output/notSorted.bed
 
 testNotSorted: outputDir
-	-${BINDIR}/${A} -type=bed12 input/notSorted.bed input/notSorted.chrom.sizes /dev/null 2> output/notSorted.err || true
+	! ${BINDIR}/${A} -type=bed12 input/notSorted.bed input/notSorted.chrom.sizes /dev/null 2> output/notSorted.err || (${shouldHaveFailed})
 	diff expected/notSorted.err output/notSorted.err
 
 testMultiInsAtEnd: outputDir
 	${BINDIR}/${A} input/multiInsAtEnd.bed input/chrom.sizes output/multiInsAtEnd.bb 2> /dev/null
 	bigBedToBed output/multiInsAtEnd.bb output/test_multiInsAtEnd.bed
 	diff -w input/multiInsAtEnd.bed output/test_multiInsAtEnd.bed
 
 itemsRgb: outputDir
 	${BINDIR}/${A} input/reservedBed12.bed input/chrom.sizes output/reservedBed12.bb 2> /dev/null
 	bigBedToBed output/reservedBed12.bb output/test_reservedBed12.bed
 	diff input/reservedBed12.bed output/test_reservedBed12.bed
 	${BINDIR}/${A} -type=bed12 input/reservedBed12.bed input/chrom.sizes output/reservedBed12.bb 2> /dev/null
 	bigBedToBed output/reservedBed12.bb output/test_reservedBed12.bed
 	diff input/reservedBed12.bed output/test_reservedBed12.bed
 	${BINDIR}/${A} -type=bed9+ -as=input/reservedBed12.as input/reservedBed12.bed input/chrom.sizes output/reservedBed12.bb 2> /dev/null
@@ -73,29 +78,34 @@
 	bigBedToBed output/itemRgbBed12.bb output/test_itemRgbBed12.bed
 	diff input/itemRgbBed12.bed output/test_itemRgbBed12.bed
 	${BINDIR}/${A} -type=bed12 -as=input/reservedBed12.as input/itemRgbBed12.bed input/chrom.sizes output/itemRgbBed12.bb 2> /dev/null
 	bigBedToBed output/itemRgbBed12.bb output/test_itemRgbBed12.bed
 	diff input/itemRgbBed12.bed output/test_itemRgbBed12.bed
 	${BINDIR}/${A} -type=bed12 -as=input/itemRgbBed12.as input/itemRgbBed12.bed input/chrom.sizes output/itemRgbBed12.bb 2> /dev/null
 	bigBedToBed output/itemRgbBed12.bb output/test_itemRgbBed12.bed
 	diff input/itemRgbBed12.bed output/test_itemRgbBed12.bed
 
 tabSep: outputDir
 	${BINDIR}/${A} -tab -type=bed4 -as=input/tabSep.as input/tabSep.bed input/chrom.sizes output/tabSep.bb 2> /dev/null
 	bigBedToBed output/tabSep.bb output/test_tabSep.bed
 	diff input/tabSep.bed output/test_tabSep.bed
 
 testDevStdin: outputDir
-	-cat input/itemRgb.bed | ${BINDIR}/${A} -type=bed9 -as=input/itemRgb.as /dev/stdin input/chrom.sizes output/$@.bb 2> output/$@.err
+	cat  input/itemRgb.bed | (! ${BINDIR}/${A} -type=bed9 -as=input/itemRgb.as /dev/stdin input/chrom.sizes output/$@.bb 2> output/$@.err) || (${shouldHaveFailed})
 	diff expected/$@.err output/$@.err
 
 testStdin: outputDir
-	-cat input/itemRgb.bed | ${BINDIR}/${A} -type=bed9 -as=input/itemRgb.as stdin input/chrom.sizes output/$@.bb 2> output/$@.err
+	cat input/itemRgb.bed | (! ${BINDIR}/${A} -type=bed9 -as=input/itemRgb.as stdin input/chrom.sizes output/$@.bb 2> output/$@.err) || (${shouldHaveFailed})
 	diff expected/$@.err output/$@.err
 
+test2bitMissingSeq: outputDir ${fakeGenomeTwoBit}
+	! ${BINDIR}/${A} -tab -type=bed4 -as=input/tabSep.as -sizesIs2Bit input/tabSep.bed ${fakeGenomeTwoBit} output/tabSep.bb 2> output/$@.err || (${shouldHaveFailed})
+	diff expected/$@.err output/$@.err
 
+${fakeGenomeTwoBit}: outputDir input/fakeGenome.fa
+	faToTwoBit input/fakeGenome.fa $@ 
 
 clean::
 	@rm -rf output
 
 outputDir:
 	@${MKDIR} -p output