
# tests for DAS server.  Currently, the results change from day to day
# depending on the contents from the database.  So it only compares
# the results with the contents of the expected directory if the 
# output file actually exists.  This way, one can do something like:
#
#   make test sandbox=  # test with hgwdev
#   mv output expected
#   make test sandbox=-myname  # test with hgwdev-myname
#
# to compare results.
#
# requires the xmlproc_val command from the xmlproc package.
#
#
# to test timing, try sometime like:
#  (hgsql -e 'flush tables'; time  wget -nv --save-headers -O output/typesTest.das 'http://hgwdev-markd.cse.ucsc.edu/cgi-bin/das/hg18/types?segment=22')>&log
#
# to debug:
#  set env HGDB_CONF hg.conf
#  set env PATH_INFO dm1/features # or what ever
#  r segment=chr2L:827700,845800 >& out

sandbox=-${USER}
dasUrl = http://hgwdev${sandbox}.cse.ucsc.edu/cgi-bin/das
testDb = hg18
testUrl = ${dasUrl}/${testDb}
testSeg = 22:16635715,16637714

test:	dsnTest \
	entryPtsTest \
	dnaTest \
	typesTest \
	featuresTest \
	featuresTypeTest \
	featuresTypeExactTest \
	featuresType2Test \
	bedGraphTest \
	featuresRegress1Test

dsnTest:
	@${MAKE} doTest id=$@ request='${dasUrl}/dsn'
entryPtsTest:
	@${MAKE} doTest id=$@ request='${testUrl}/entry_points'
dnaTest:
	@${MAKE} doTest id=$@ request='${testUrl}/dna?segment=${testSeg}'
typesTest:
	@${MAKE} doTest id=$@ request='${testUrl}/types?segment=${testSeg}'
featuresTest:
	@${MAKE} doTest id=$@ request='${testUrl}/features?segment=${testSeg}'
featuresTypeTest:
	@${MAKE} doTest id=$@ request='${testUrl}/features?segment=${testSeg}&type=transMapAlnMRna'

# "phastConsElements28way" use to incorrectly match "phastConsElements28wayPlacMammal"
# as well due use deprecated regular expressions
featuresTypeExactTest:
	@${MAKE} doTest id=$@ request='${testUrl}/features?segment=${testSeg}&type=phastConsElements28way'

# two types
featuresType2Test:
	@${MAKE} doTest id=$@ request='${testUrl}/features?segment=${testSeg}&type=transMapAlnMRna&type=transMapAlnRefSeq'

# score in bedGraph
bedGraphTest:
	@${MAKE} doTest id=$@ request='${testUrl}/features?segment=7:115404471,117281897&type=encodeSangerChipH3K36me3'

# regression: didn't have closing tag
featuresRegress1Test:
	@${MAKE} doTest id=$@ request='${dasUrl}/dm1/features?segment=chr2L:827700,845800'

# recursive target, call with: id, request
# saves response headers and body, then splits them, dropping date for easy diffing
doTest:
	@mkdir -p output
	wget -nv --save-headers -O output/${id}.das '${request}'
	@awk '/^Date:/{next} {print $$0} /^
$$/{exit}' output/${id}.das > output/${id}.hdrs
	@awk 'on{print $$0} /^
$$/{on=1}' output/${id}.das > output/${id}.xml
	./dasXmlValidate output/${id}.xml
	@if [ -e expected/${id}.hdrs ] ; then diff expected/${id}.hdrs output/${id}.hdrs ; else echo "NOTE: no expected/${id}.hdrs" ; fi
	@if [ -e expected/${id}.xml ] ; then diff expected/${id}.xml output/${id}.xml ; else echo "NOTE: no expected/${id}.xml" ; fi

clean:
	rm -rf output
