#!/bin/sh

#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you 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.

echo "Testing..."

# Setup
../http/httpd-conf tmp 8090 htdocs
./server-conf tmp
./scheme-conf tmp
cat >>tmp/conf/httpd.conf <<EOF
SCAContribution `pwd`/
SCAComposite domain-test.composite
EOF

../http/httpd-start tmp
sleep 2

# Test HTTP GET
curl http://localhost:8090/index.html 2>/dev/null >tmp/index.html
diff tmp/index.html htdocs/index.html
rc=$?

# Test ATOMPub
if [ "$rc" = "0" ]; then
    curl http://localhost:8090/test/ >tmp/feed.xml 2>/dev/null
    diff tmp/feed.xml htdocs/feed.xml
    rc=$?
fi
if [ "$rc" = "0" ]; then
    curl http://localhost:8090/test/111 >tmp/entry.xml 2>/dev/null
    diff tmp/entry.xml htdocs/entry.xml
    rc=$?
fi
if [ "$rc" = "0" ]; then
    curl http://localhost:8090/test/ -X POST -H "Content-type: application/atom+xml" --data @htdocs/entry.xml 2>/dev/null
    rc=$?
fi
if [ "$rc" = "0" ]; then
    curl http://localhost:8090/test/111 -X PUT -H "Content-type: application/atom+xml" --data @htdocs/entry.xml 2>/dev/null
    rc=$?
fi
if [ "$rc" = "0" ]; then
    curl http://localhost:8090/test/111 -X DELETE 2>/dev/null
    rc=$?
fi

# Test JSON-RPC
if [ "$rc" = "0" ]; then
    curl http://localhost:8090/test/ -X POST -H "Content-type: application/json-rpc" --data @htdocs/json-request.txt >tmp/json-result.txt 2>/dev/null
    diff tmp/json-result.txt htdocs/json-result.txt
    rc=$?
fi

# Cleanup
../http/httpd-stop tmp
sleep 2
if [ "$rc" = "0" ]; then
    echo "OK"
fi
return $rc
