blob: ff67d966c36e3f2e49905c53201b2e3cc36f54a7 [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.
# Test our handling of headers when a FLUSH event occurs, using PHP.
# Tests that require PHP can be disabled by setting DISABLE_PHP_TESTS to
# non-empty, to cater to admins who don't want PHP installed.
if [ -z "${DISABLE_PHP_TESTS:-}" ]; then
# Fetch the first file so we can check if PHP is enabled.
start_test PHP is enabled.
FILE=php_withoutflush.php
URL=$TEST_ROOT/$FILE
FETCHED=$WGET_DIR/$FILE
# wget returns non-zero on 4XX and 5XX, both of which can occur with a
# mis-configured PHP setup. We need to mask that because of set -e.
$WGET_DUMP $URL > $FETCHED || true
if ! grep -q '^HTTP/1.1 200' $FETCHED || grep -q '<?php' $FETCHED; then
echo "*** PHP is not installed/working. If you'd like to enable this"
echo "*** test please run: sudo apt-get install php5-common php5"
echo
echo "If php is already installed, run it with:"
echo " php-cgi -b 127.0.0.1:9000"
echo
echo "To disable php tests, set DISABLE_PHP_TESTS to non-empty"
exit 1
fi
# Now we know PHP is working, proceed with the actual testing.
start_test Headers are not destroyed by a flush event.
check [ $(grep -c '^X-\(Mod-Pagespeed\|Page-Speed\):' $FETCHED) = 1 ]
check [ $(grep -c '^X-My-PHP-Header: without_flush' $FETCHED) = 1 ]
# mod_pagespeed doesn't clear the content length header if there aren't any
# flushes, but ngx_pagespeed does. It's possible that ngx_pagespeed should
# also avoid clearing the content length, but it doesn't and I don't think
# it's important, so don't check for content-length.
# check [ $(grep -c '^Content-Length: [0-9]' $FETCHED) = 1 ]
FILE=php_withflush.php
URL=$TEST_ROOT/$FILE
FETCHED=$WGET_DIR/$FILE
$WGET_DUMP $URL > $FETCHED
check [ $(grep -c '^X-\(Mod-Pagespeed\|Page-Speed\):' $FETCHED) = 1 ]
check [ $(grep -c '^X-My-PHP-Header: with_flush' $FETCHED) = 1 ]
# 2.2 prefork returns no content length while 2.2 worker returns a real
# content length. IDK why but skip this test because of that.
# check [ $(grep -c '^Content-Length: [0-9]' $FETCHED) = 1 ]
fi