blob: 889d93107d9ae1d89c981c7508982619311e5dc7 [file] [log] [blame]
#!/bin/bash
#
# Copyright 2016 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
start_test ipro and smaxage setup
# We can't use fetch_until because each time through we want to check that
# either s-maxage is set or it's optimized but not both. So, writing something
# similar to fetch_until.
function check_ipro_s_maxage() {
local url="$1"
local expect_optimization="$2" # true or false
local unoptimized_content_length="$3" # integer
local expected_unoptimized_cache_control="$4" # exact match
local expected_optimized_cache_control="$5" # grep pattern
local start_s=$(date +%s)
local timeout_s=20
if ! $expect_optimization; then
timeout_s=3 # Don't wait a long time if we don't expect to succeed.
fi
local stop_s=$(($start_s+$timeout_s))
local seen_unoptimized=false
local response_body_file="$WGET_DIR/check_ipro_s_maxage.$$"
echo "Fetching $url until it's optimized..."
echo "(response body will be in $response_body_file)"
echo
while true; do
OUT=$($CURL -sS -D- -o "$response_body_file" "$url" \
| sed "s/$(printf "\r")//")
local cache_control_line=$(echo "$OUT" | grep "^Cache-Control:")
if [ $(echo "$cache_control_line" | wc -l) -gt 1 ]; then
echo "Got more than one cache control header."
echo "FAILed input: $OUT"
fail
fi
local received_body_length=$(cat "$response_body_file" | wc -c)
if [ "$received_body_length" -gt "$unoptimized_content_length" ]; then
echo "Received response of $received_body_length bytes; unoptimized"
echo "content should be $unoptimized_content_length"
echo "Response body is in $response_body_file"
echo "FAILed input: $OUT"
fail
elif [ "$received_body_length" = "$unoptimized_content_length" ]; then
# Unoptimized response.
# This block may run multiple times and should be silent on success.
if [ "$cache_control_line" != "$expected_unoptimized_cache_control" ]; then
echo "Got bad cache control, [$cache_control_line], expecting"
echo "[$expected_unoptimized_cache_control]"
echo "FAILed input: $OUT"
fail
fi
if echo "$OUT" | grep -q "^Content-Length: "; then
check_from -q "$OUT" grep -q "^Content-Length: $unoptimized_content_length$"
else
check_from -q "$OUT" grep -q "^Transfer-Encoding: chunked$"
fi
else
# Optimized response.
if ! $expect_optimization; then
echo "Got unexpected optimization"
echo "FAILed input: $OUT"
fail
fi
check_from "$OUT" grep "$expected_optimized_cache_control"
check_from "$OUT" grep \
"^X-Original-Content-Length: $unoptimized_content_length$"
# Now we've verified that the optimized version has the right headers.
# We may not have seen the unoptimized version, if we were running with a
# warm cache, but if we did see it, it had the right headers as well.
break
fi
if [ $(date +%s) -gt $stop_s ]; then
if $expect_optimization; then
echo "Timed out: never got to being optimized"
echo "FAILed input: $OUT"
fail
else
echo "No optimization after $timeout_s seconds: good!"
break
fi
fi
echo -n "."
done
}
start_test ipro resources tagged with s-maxage, CC: max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200/example.css" true 41 \
'Cache-Control: max-age=200, s-maxage=10' \
'^Cache-Control: max-age=[0-9]*$'
start_test ipro resources tagged with s-maxage, no CC header
EXPECTED_CACHE_CONTROL='Cache-Control: s-maxage=10'
check_ipro_s_maxage "$TEST_ROOT/ipro/nocc/example.css" true 41 \
"$EXPECTED_CACHE_CONTROL" \
'^Cache-Control: max-age=[0-9]*$'
start_test ipro resources tagged with s-maxage, CC: private, max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200p/example.css" false 41 \
'Cache-Control: private, max-age=200' \
'never-optimized'
start_test ipro resources tagged with s-maxage, CC: no-cache, max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200nc/example.css" false 41 \
'Cache-Control: no-cache, max-age=200' \
'never-optimized'
start_test ipro resources tagged with s-maxage, CC: no-store, max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200ns/example.css" false 41 \
'Cache-Control: no-store, max-age=200' \
'never-optimized'
start_test ipro resources tagged with s-maxage, CC: no-transform, max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200nt/example.css" false 41 \
'Cache-Control: no-transform, max-age=200' \
'never-optimized'
start_test ipro resources tagged with s-maxage, CC: s-maxage=5, max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma5/example.css" true 41 \
'Cache-Control: s-maxage=5, max-age=200' \
'^Cache-Control: max-age=[0-9]*$'
start_test ipro resources tagged with s-maxage, CC: s-maxage=50, max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma50/example.css" true 41 \
'Cache-Control: s-maxage=10, max-age=200' \
'^Cache-Control: max-age=[0-9]*$'
start_test ipro resources tagged with s-maxage, CC: s-maxage=50,max-age=200
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma50nsp/example.css" true 41 \
'Cache-Control: s-maxage=10, max-age=200' \
'^Cache-Control: max-age=[0-9]*$'
start_test ipro resources tagged with s-maxage, CC: max-age=9
check_ipro_s_maxage "$TEST_ROOT/ipro/cc9/example.css" true 41 \
'Cache-Control: max-age=9' \
'^Cache-Control: max-age=[0-9]$'
start_test ipro resources tagged with s-maxage, CC: max-age=200, max-age=9
check_ipro_s_maxage "$TEST_ROOT/ipro/cc9/example.css" true 41 \
'Cache-Control: max-age=9' \
'^Cache-Control: max-age=[0-9]$'
start_test ipro resources tagged with s-maxage, multiple existing s-maxage
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma50sma5/example.css" true 41 \
'Cache-Control: max-age=200, s-maxage=10, s-maxage=5' \
'^Cache-Control: max-age=[0-9]*$'
start_test ipro resources tagged with s-maxage, multiple existing max-age
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma50cc9/example.css" true 41 \
'Cache-Control: max-age=200, s-maxage=10, max-age=9' \
'^Cache-Control: max-age=[0-9]'
start_test ipro resources tagged with s-maxage, no spaces
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma50cc9nsp/example.css" true 41 \
'Cache-Control: max-age=200, s-maxage=10, max-age=9' \
'^Cache-Control: max-age=[0-9]'
start_test ipro resources tagged with s-maxage, multiple high s-maxage
check_ipro_s_maxage "$TEST_ROOT/ipro/cc200sma50sma51/example.css" true 41 \
'Cache-Control: max-age=200, s-maxage=10, s-maxage=10' \
'^Cache-Control: max-age=[0-9]'