xref: /aosp_15_r20/external/cldr/tools/scripts/web/check_redirects.sh (revision 912701f9769bb47905792267661f0baf2b85bed5)
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