0f2f66270dcd4603785850ee72d7d883ff68185b braney Sun Sep 20 07:03:14 2026 -0700 asForDbTester: a GenArk accession must not be looked for in MySQL asForDb() may need a database connection to fetch a track's autoSql. The name it is handed is usually an assembly, but on a quickLifted track it is the SOURCE assembly, and for a GenArk that arrives as a bare accession with no MySQL database of that name anywhere. Without #38272's isGenArk test the CGI does not return an empty field list, it dies, and the reader gets an error page instead of a details page -- only for the combination of a quickLift and a GenArk source, which is why it went unnoticed. The last case is the discriminating one: a name that is neither a GenArk accession nor a real database still aborts, which shows the GenArk case is let through deliberately rather than by connection failures having stopped mattering. The abort message carries a MySQL error number and the server's own wording, so what is pinned is whether the abort was about reaching a database of that name, not the text. Two things this test got wrong before it got them right, both recorded in its header. It has to run against a config that sets genarkHubPrefix, because isGenArk answers through that prefix and says no when it is unset, so with a developer's own hg.conf the GenArk case failed for a reason unrelated to the fix. And the accession is read from the genark table at run time, since naming an assembly makes the test go red the day that assembly is dropped. Also fixes the registry row for bedItemRgbTester, which moved to hg/cgilib and whose row still named the old path -- caught by the registry's own check, which is the first time it has failed for a real reason. refs #38272, refs #38391 diff --git src/hg/lib/tests/makefile src/hg/lib/tests/makefile index 52fea0e97e0..d5299d1aa3d 100644 --- src/hg/lib/tests/makefile +++ src/hg/lib/tests/makefile @@ -1,166 +1,174 @@ kentSrc = ../../.. include ../../../inc/common.mk L += ${MYSQLLIBS} -lm MYLIBDIR = ../../../lib/${MACHTYPE} MYLIBS = ${MYLIBDIR}/jkhgap.a ${MYLIBDIR}/jkweb.a BIN_DIR = bin/${MACHTYPE} all: ${BIN_DIR}/genePredTester \ ${BIN_DIR}/trashDirTester \ ${BIN_DIR}/mallocTopPadTester \ ${BIN_DIR}/pslReaderTester \ ${BIN_DIR}/quickLiftTester \ ${BIN_DIR}/sessionDataTester \ ${BIN_DIR}/trashDirTester \ # ${BIN_DIR}/annoGratorTester \ ${BIN_DIR}/binTest \ ${BIN_DIR}/customTrackTester \ ${BIN_DIR}/hgvsTester \ ${BIN_DIR}/sqlCheck ${BIN_DIR}/%: %.c ${MYLIBS} @${MKDIR} ${BIN_DIR} ${CC} ${CC_PROG_OPTS} -o $@ $*.c ${MYLIBS} $L #test: binTest spDbTest hdbTest genePredTest pslReaderTest annoGratorTest customTrackTest hgvsTest test: binTest quickLiftTest sessionDataTest trashDirTest mallocTopPadTest \ hVarSubstHtmlTest dataVersionPathTest genarkLiftOverTest \ - snapshotTypeTest sessionDirTest geoMirrorSelfTest spDbTest hdbTest genePredTest pslReaderTest customTrackTest hgvsTest + snapshotTypeTest sessionDirTest geoMirrorSelfTest asForDbTest spDbTest hdbTest genePredTest pslReaderTest customTrackTest hgvsTest rm -r output echo tested all mkdirs: @${MKDIR} output ${BIN_DIR} loaders: ln -sf ${CGI_BIN}/loader . spDbTest: ${BIN_DIR}/spDbTest mkdirs ${BIN_DIR}/spDbTest sp121210 Q9FFH7 > output/spDbTest ${BIN_DIR}/spDbTest sp121210 P29312 >> output/spDbTest diff expected/spDbTest output/spDbTest hdbTest: ${BIN_DIR}/hdbTest mkdirs ${BIN_DIR}/hdbTest > output/hdbTest diff expected/hdbTest output/hdbTest genePredTest: ${BIN_DIR}/genePredTester mkdirs ${MAKE} -f genePredTests.mk test pslReaderTest: ${BIN_DIR}/pslReaderTester mkdirs ${MAKE} -f pslReaderTests.mk test #annoGratorTest: ${BIN_DIR}/annoGratorTester mkdirs # ${MAKE} -f annoGratorTests.mk test customTrackTest: ${BIN_DIR}/customTrackTester loaders mkdirs ${MAKE} -f customTrackTests.mk test BIN_DIR=${BIN_DIR} OUT_DIR=output hgvsTest: ${BIN_DIR}/hgvsTester mkdirs ${MAKE} -f hgvsTests.mk test binTest: mkdirs ${BIN_DIR}/binTest @./binTest.sh quickLiftTest: ${BIN_DIR}/quickLiftTester mkdirs ${BIN_DIR}/quickLiftTester > output/quickLiftTest diff expected/quickLiftTest output/quickLiftTest sessionDataTest: ${BIN_DIR}/sessionDataTester mkdirs ${BIN_DIR}/sessionDataTester output/sessionData > output/sessionDataTest diff expected/sessionDataTest output/sessionDataTest # Three runs, because hgConfig caches the config it read, so one process can only answer for # one spelling of sessionDataDir. The fixture is made here rather than in C: a directory, a # symlink to it, and three confs naming the same place three ways. Each conf includes the # developer's own so the database settings come along, and is mode 600 because hgConfig # refuses a group-readable file whose name begins with a dot -- these do not, but the habit is # worth keeping. trashDirTest: ${BIN_DIR}/trashDirTester mkdirs rm -rf output/sd ${MKDIR} output/sd/real/hgt ln -s real output/sd/link echo "include ${HOME}/.hg.conf" > output/sd/link.conf echo "sessionDataDir=`pwd`/output/sd/link" >> output/sd/link.conf echo "include ${HOME}/.hg.conf" > output/sd/real.conf echo "sessionDataDir=`pwd`/output/sd/real" >> output/sd/real.conf echo "include ${HOME}/.hg.conf" > output/sd/rel.conf echo "sessionDataDir=output/sd/link" >> output/sd/rel.conf HGDB_CONF=output/sd/link.conf ${BIN_DIR}/trashDirTester \ "the symlink, absolute" `pwd`/output/sd/link `pwd`/output/sd/real \ > output/trashDirTest HGDB_CONF=output/sd/real.conf ${BIN_DIR}/trashDirTester \ "the resolved directory, absolute" `pwd`/output/sd/link `pwd`/output/sd/real \ >> output/trashDirTest HGDB_CONF=output/sd/rel.conf ${BIN_DIR}/trashDirTester \ "the symlink, relative" `pwd`/output/sd/link `pwd`/output/sd/real \ >> output/trashDirTest diff expected/trashDirTest output/trashDirTest # Twice: once with the setting and once without, because the answer is the DIFFERENCE between # them. A single run could pass on a library whose own default happened to be large. mallocTopPadTest: ${BIN_DIR}/mallocTopPadTester mkdirs echo "include ${HOME}/.hg.conf" > output/topPadOff.conf echo "include ${HOME}/.hg.conf" > output/topPadOn.conf echo "mallocTopPad=33554432" >> output/topPadOn.conf HGDB_CONF=output/topPadOff.conf ${BIN_DIR}/mallocTopPadTester > output/mallocTopPadTest HGDB_CONF=output/topPadOn.conf ${BIN_DIR}/mallocTopPadTester >> output/mallocTopPadTest diff expected/mallocTopPadTest output/mallocTopPadTest hVarSubstHtmlTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/hVarSubstHtmlTester hVarSubstHtmlTester.c ${MYLIBS} $L ${BIN_DIR}/hVarSubstHtmlTester > output/hVarSubstHtmlTest diff expected/hVarSubstHtmlTest output/hVarSubstHtmlTest dataVersionPathTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/dataVersionPathTester dataVersionPathTester.c ${MYLIBS} $L ${BIN_DIR}/dataVersionPathTester > output/dataVersionPathTest diff expected/dataVersionPathTest output/dataVersionPathTest genarkLiftOverTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/genarkLiftOverTester genarkLiftOverTester.c ${MYLIBS} $L ${BIN_DIR}/genarkLiftOverTester > output/genarkLiftOverTest diff expected/genarkLiftOverTest output/genarkLiftOverTest snapshotTypeTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/snapshotTypeTester snapshotTypeTester.c ${MYLIBS} $L ${BIN_DIR}/snapshotTypeTester > output/snapshotTypeTest diff expected/snapshotTypeTest output/snapshotTypeTest sessionDirTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/sessionDirTester sessionDirTester.c ${MYLIBS} $L ${BIN_DIR}/sessionDirTester > output/sessionDirTest diff expected/sessionDirTest output/sessionDirTest # browser.node is set in the conf rather than assumed, since a developer's own hg.conf need # not have one. geoMirrorSelfTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/geoMirrorSelfTester geoMirrorSelfTester.c ${MYLIBS} $L echo "include ${HOME}/.hg.conf" > output/geoNode.conf echo "browser.node=1" >> output/geoNode.conf HGDB_CONF=output/geoNode.conf ${BIN_DIR}/geoMirrorSelfTester > output/geoMirrorSelfTest diff expected/geoMirrorSelfTest output/geoMirrorSelfTest # NOT in the test target above, and waiting on one grant. This is the one test here that # WRITES to a central database, so it is pointed at hgcentralregress, # which exists for tests and which nothing else reads. makeHgCentralRegress.sh creates it and # is safe to run every time. login.cookieSalt is set because the sync signature is made with # it; the value is a test value and means nothing outside this run. hubSpaceKeysTest: mkdirs ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/hubSpaceKeysTester hubSpaceKeysTester.c ${MYLIBS} $L ./makeHgCentralRegress.sh > /dev/null echo "include ${HOME}/.hg.conf" > output/regress.conf echo "central.db=hgcentralregress" >> output/regress.conf echo "login.cookieSalt=testSaltForRegressRuns" >> output/regress.conf HGDB_CONF=output/regress.conf ${BIN_DIR}/hubSpaceKeysTester > output/hubSpaceKeysTest diff expected/hubSpaceKeysTest output/hubSpaceKeysTest # It runs as soon as central.user has UPDATE and DELETE on hgcentralregress; see # makeHgCentralRegress.sh for the grant. Add it to the test target on that day. +# The conf a CGI reads, not the developer's own: isGenArk() needs genarkHubPrefix, which is +# set in the shared one. +asForDbTest: mkdirs + ${CC} ${CC_PROG_OPTS} -o ${BIN_DIR}/asForDbTester asForDbTester.c ${MYLIBS} $L + echo "include /usr/local/apache/cgi-bin/hg.conf" > output/genark.conf + HGDB_CONF=output/genark.conf ${BIN_DIR}/asForDbTester > output/asForDbTest 2>&1 + diff expected/asForDbTest output/asForDbTest + sqlCheck: ${BIN_DIR}/sqlCheck mkdirs ${MAKE} -f sqlCheck.mk test BIN_DIR=${BIN_DIR} OUT_DIR=output clean: rm -rf *.o bin output *.tmp loader udcCache