#!/bin/sh -e

## Copyright (c) 2011, Georgia Tech Research Corporation
## All rights reserved.
##
## Author(s): Neil T. Dantam   <ntd@gatech.edu>
## Georgia Tech Humanoid Robotics Lab
## Under Direction of Prof. Mike Stilman <mstilman@cc.gatech.edu>
##
##
## This file is provided under the following "BSD-style" License:
##
##
##   Redistribution and use in source and binary forms, with or
##   without modification, are permitted provided that the following
##   conditions are met:
##
##   * Redistributions of source code must retain the above copyright
##     notice, this list of conditions and the following disclaimer.
##
##   * Redistributions in binary form must reproduce the above
##     copyright notice, this list of conditions and the following
##     disclaimer in the documentation and/or other materials provided
##     with the distribution.
##
##   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
##   CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
##   INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
##   MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
##   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
##   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
##   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
##   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
##   USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
##   AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
##   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
##   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
##   POSSIBILITY OF SUCH DAMAGE.

if [ -f ./build/ach ]; then
    ach=./build/ach
elif [ -f ./bin/ach ]; then
    ach=./bin/ach
elif [ -f ./ach ]; then
    ach=./ach
else
    "Can't find ach"
    exit 9
fi

chan=ach-test-channel
file=`$ach -F $chan`

# ensure channel does not exist
$ach -U $chan 2>/dev/null || true

# channel does not exist
if  $ach -U $chan 2>/dev/null; then
    echo "Fail: success condition to remove nonexistant channel"
    exit 10;
fi

if [ -f "$file" ]; then
    echo "Fail: removed channel exists"
    exit 11
fi

# create channel
if $ach -C $chan; then :; else
    echo "Fail: couldn't create channel"
    exit 12;
fi
if [ `uname -s` = Linux ] && [ ! -f "$file" ] ; then
    echo "Fail: channel not created"
    exit 13;
fi

# dump channel
if $ach -D $chan  > /dev/null 2>/dev/null ; then :; else
    echo "Fail: couldn't dump channel"
    exit 14
fi

# unlink channel
if $ach -U $chan; then :; else
    echo "Fail: couldn't remove channel"
    exit 15
fi
if [ -f "$file" ]; then
    echo "Fail: channel not removed"
    exit 16;
fi

# create channel with args
if $ach -C $chan -o 666 -m 10 -n 256; then :; else
    echo "Fail: couldn't create channel with args"
    exit 17;
fi
if [ `uname -s` = Linux ] && [ ! -f "$file" ]; then
    echo "Fail: channel not created"
    exit 18;
fi

# create channel with args
if $ach -1 -C $chan -o 666 -m 10 -n 256; then :; else
    echo "Fail: couldn't -1 arg created channel"
    exit 19;
fi
if [ `uname -s` = Linux ] && [ ! -f "$file" ]; then
    echo "Fail: channel not created"
    exit 20;
fi

# unlink channel
if $ach -U $chan; then :; else
    echo "Fail: couldn't remove channel"
    exit 21
fi
if [ -f "$file" ]; then
    echo "Fail: channel not removed"
    exit 22;
fi

true
