1#!/bin/bash 2# 3# To use: 4# run 'bash check_redirects.sh' 5# 6# requires curl 7 8CURL=curl 9CURL_OPTS="-s -D -" 10URL=http://www.unicode.org 11DTD2VERSION=./dtdToVersion.sh 12ERR=`tput smso`error`tput rmso` 13TMPF=${0}.$$.tmp 14 15echo "# Checking redirects on ${URL}" 16${CURL} -s "${URL}" >/dev/null || ( echo "Error: You don't seem to have a working ${CURL} command" '($CURL)' ", or ${URL} is down.. Goodbyer." ; exit 1 ) 17echo "# ${CURL} ${URL} - OK." 18 19FAIL=0 20 21#HTTP/1.1 302 Found 22#Date: Tue, 11 Jun 2013 15:55:54 GMT 23#Server: Apache 24#Location: http://www.unicode.org/cldr/charts/22/index.html 25#Content-Length: 232 26#Content-Type: text/html; charset=iso-8859-1 27 28DTDLOC=common/dtd/ldml.dtd 29VLATEST=`${CURL} -s "${URL}/repos/cldr/tags/latest/${DTDLOC}" | sh ${DTD2VERSION}` 30VDEV=`${CURL} -s "${URL}/repos/cldr/trunk/${DTDLOC}" | sh ${DTD2VERSION}` 31 32echo "CLDR latest=${VLATEST} trunk=${VDEV}" 33 34 35verify_redirect() 36{ 37 EXPECTSTATUS="$1" 38 FROMURL="$2" 39 TOURL="$3" 40 echo "# TEST: ${FROMURL} -> ${TOURL} [ ${EXPECTSTATUS} ]" 41 ${CURL} ${CURL_OPTS} "${FROMURL}" > ${TMPF} || ( echo "Error fetching ${FROMURL}!" ; FAIL=1 ) 42 43 STATUS=`head -1 "${TMPF}" | cut -d' ' -f2` 44 LOCATION=`grep '^Location: ' "${TMPF}" | head -1 | cut -d' ' -f2- | tr -d '\r'` 45 echo "# GOT: ${FROMURL} -> ${LOCATION} [ ${STATUS} ]" 46 47 if [[ "$STATUS" -ne "${EXPECTSTATUS}" ]]; 48 then 49 echo "${ERR} - expected status ${EXPECTSTATUS} not ${STATUS}" 50 FAIL=1 51 elif [[ "${LOCATION}" = "${TOURL}" ]]; 52 then 53 echo "# OK." 54 else 55 echo "${ERR}: got: ${LOCATION}" 56 echo "# expected: ${TOURL}" 57 FAIL=1 58 fi 59} 60 61verify_content() 62{ 63 EXPECTSTATUS="$1" 64 FROMURL="$2" 65 TOTXT="$3" 66 echo "# TEST: ${FROMURL} == ${TOTXT} [ ${EXPECTSTATUS} ]" 67 ${CURL} ${CURL_OPTS} "${FROMURL}" > ${TMPF} || ( echo "Error fetching ${FROMURL}!" ; FAIL=1 ) 68 69 STATUS=`head -1 "${TMPF}" | cut -d' ' -f2` 70 LOCATION=`grep '^Location: ' "${TMPF}" | head -1 | cut -d' ' -f2- | tr -d '\r'` 71 echo "# GOT: ${FROMURL} -> ${LOCATION} [ ${STATUS} ]" 72 73 if [[ $STATUS -ne ${EXPECTSTATUS} ]]; 74 then 75 echo "${ERR} - expected status ${EXPECTSTATUS} not ${STATUS}" 76 FAIL=1 77 elif [[ "${LOCATION}" != "" ]]; 78 then 79 echo "${ERR}: got: ${LOCATION}" 80 FAIL=1 81 elif grep -q -- "${TOTXT}" "${TMPF}"; 82 then 83 echo "# OK - got ${TOTXT}" 84 else 85 ln "${TMPF}" /tmp/failx 86 echo "Error - did not get ${TOTXT}"; 87 FAIL=1 88 fi 89} 90 91#### now, check 92 93# google docs - can't test 94 95# data (zip) 96SOMEFILE=shoesize.zip 97verify_redirect 302 "${URL}/Public/cldr/latest" "${URL}/Public/cldr/${VLATEST}" 98verify_redirect 302 "${URL}/Public/cldr/latest/${SOMEFILE}" "${URL}/Public/cldr/${VLATEST}/${SOMEFILE}" 99 100# Charts 101verify_redirect 302 "${URL}/cldr/charts/dev" "${URL}/cldr/charts/dev/" 102verify_content 200 "${URL}/cldr/charts/${VDEV}/" "Version ${VDEV}" 103 104verify_redirect 302 "${URL}/cldr/charts/latest" "${URL}/cldr/charts/latest/" 105verify_redirect 302 "${URL}/cldr/charts/${VLATEST}" "${URL}/cldr/charts/${VLATEST}/" 106verify_content 200 "${URL}/cldr/charts/${VLATEST}/" "Version ${VLATEST}" 107 108verify_content 200 "${URL}/cldr/charts/latest/summary/bs_Cyrl.html" "CLDR Version ${VLATEST}" 109verify_content 200 "${URL}/cldr/charts/dev/summary/bs_Cyrl.html" "CLDR Version ${VDEV}" 110 111# add 'latest' if missing 112verify_redirect 302 "${URL}/cldr/charts/summary/bs_Cyrl.html" "${URL}/cldr/charts/latest/summary/bs_Cyrl.html" 113 114# static check 115verify_redirect 302 "${URL}/cldr/charts/22" "${URL}/cldr/charts/22/" 116verify_redirect 302 "${URL}/cldr/charts/22.1" "${URL}/cldr/charts/22.1/" 117 118# catch all 119verify_redirect 302 "${URL}/cldr/charts" "http://cldr.unicode.org/index/charts" 120 121# reports 122verify_redirect 302 "${URL}/cldr/changes/dev" "http://unicode.org/cldr/trac/report/63" 123verify_redirect 302 "${URL}/cldr/changes/latest" "http://unicode.org/cldr/trac/report/62" 124 125# svn (Raw) 126verify_redirect 302 "${URL}/cldr/dev" "http://unicode.org/repos/cldr/trunk" 127verify_redirect 302 "${URL}/cldr/latest" "http://unicode.org/repos/cldr/tags/latest" 128verify_redirect 302 "${URL}/cldr/data" "http://unicode.org/repos/cldr/trunk" 129 130#### clean up 131rm -f "${TMPF}" 132if [[ ${FAIL} = 1 ]]; 133then 134 echo "## FAIL" 135 exit 1 136else 137 echo "## All OK!" 138 exit 0 139fi 140 141 142# Emacs Local Variables: # 143# Emacs compile-command: "bash check_redirects.sh" # 144# Emacs End: # 145