#!/bin/bash
# meta: proxy=True
# meta: preconfig=../../DPM-config
##############################################################################
# Copyright (c) Members of the EGEE Collaboration. 2004.
# See http://www.eu-egee.org/partners/ for details on the copyright
# holders.
#
# 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.
##############################################################################
#
# AUTHORS: Dimitar Shiyachki <Dimitar.Shiyachki@cern.ch>
#
##############################################################################

SCRIPTDIR="$(dirname "$(readlink -f ${BASH_SOURCE})")"
source "${SCRIPTDIR}/../../Macros"

PROXY_NEEDED

TEST_DIR=d`date +%s%N`
TEST_SUBDIR1=s1`date +%s%N`
DUMMY_USERNAME=u`date +%s%N`
DUMMY_GROUPNAME=g`date +%s%N`
TEMP_FILE=/tmp/_dpm_test_temp`date +%s%N`

cleanup ()
{
   DPM_HOST_EXEC "export DPNS_HOST=localhost; export PATH=$PATH:/opt/lcg/bin; dpns-chmod 777 \
             $DPNS_HOME/$TEST_DIR/bash_copy_1"

   DPM_HOST_EXEC "export DPNS_HOST=localhost; export PATH=$PATH:/opt/lcg/bin; dpns-chmod 777 \
             $DPNS_HOME/$TEST_DIR"

   DPM_HOST_EXEC "export DPNS_HOST=localhost; export PATH=$PATH:/opt/lcg/bin; dpns-chmod 777 \
             $DPNS_HOME/$TEST_DIR/$TEST_SUBDIR1"

   lcg-del -v -b -D srmv2 --nolfc srm://$DPM_HOST:$SRMV2_PORT/srm/managerv2\?SFN=/$DPNS_HOME/$TEST_DIR/bash_copy_1

   dpns-rm -r $TEST_DIR
   rm -f $TEMP_FILE
}

echo "Creating directory $TEST_DIR/$TEST_SUBDIR1"
dpns-mkdir -p $TEST_DIR/$TEST_SUBDIR1

echo "Copying a file in $TEST_DIR/$TEST_SUBDIR1"
lcg-cp -v -b -D srmv2 file:/bin/bash srm://$DPM_HOST:$SRMV2_PORT/srm/managerv2\?SFN=/$DPNS_HOME/$TEST_DIR/bash_copy_1

echo
echo -n "Looking up owning user id: "
OWNER_UID=$(dpns-ls -l $DPNS_HOME/$TEST_DIR | grep bash_copy_1 | \
               sed -e 's/[rwxd-]*\s*[0-9]*\s*\([0-9]*\)\s*.*/\1/')
echo $OWNER_UID

echo
echo -n "Getting the subject corresponding to the user id: "
OWNER_USERNAME=$(dpns-listusrmap --uid $OWNER_UID | sed -e 's/\s*[0-9]*\s*//')
echo $OWNER_USERNAME

echo
echo -n "Looking up owning group id: "
OWNER_GID=$(dpns-ls -l $DPNS_HOME/$TEST_DIR | grep bash_copy_1 | \
               sed -e 's/[rwxd-]*\s*[0-9]*\s*[0-9]*\s*\([0-9]*\).*/\1/')
echo $OWNER_GID

echo
echo -n "Getting the FQAN corresponding to the group id: "
OWNER_GROUPNAME=$(dpns-listgrpmap --gid $OWNER_GID | sed -e 's/\s*[0-9]*\s*//')
echo $OWNER_GROUPNAME

OWNER_RIGHTS=$(dpns-ls -l $DPNS_HOME/$TEST_DIR | grep " bash_copy_1" | cut -b 2-4)
GROUP_RIGHTS=$(dpns-ls -l $DPNS_HOME/$TEST_DIR | grep " bash_copy_1" | cut -b 5-7)
OTHER_RIGHTS=$(dpns-ls -l $DPNS_HOME/$TEST_DIR | grep " bash_copy_1" | cut -b 8-10)

echo "Setting custom ACE for $OWNER_USERNAME"
dpns-setacl -m u:$OWNER_UID:rw-,m:rwx $DPNS_HOME/$TEST_DIR/bash_copy_1
dpns-setacl -m g:$OWNER_GID:-wx,m:-w- $DPNS_HOME/$TEST_DIR/bash_copy_1

echo; echo "Checking filename, owner user, owner group output of dpns-getacl"
dpns-getacl $DPNS_HOME/$TEST_DIR/bash_copy_1 >$TEMP_FILE
ret=$?
echo; echo "Current ACL is:"
cat $TEMP_FILE
if [ $ret -ne 0 ]; then 
   cleanup
   TEST_FAILED "dpns-getacl back_copy_1 exited with error. Test has failed"
fi

if ! grep -q "^# file: $DPNS_HOME/$TEST_DIR/bash_copy_1" $TEMP_FILE; then
   cleanup
   TEST_FAILED "Filename output error. Test has failed"
fi

if ! grep -q "^# owner: $OWNER_USERNAME" $TEMP_FILE; then
   cleanup
   TEST_FAILED "Owner output error. Test has failed"
fi

if ! grep -q "^# group: $OWNER_GROUPNAME" $TEMP_FILE; then
   cleanup
   TEST_FAILED "Group output error. Test has failed"
fi

if ! grep -q "^user::$OWNER_RIGHTS" $TEMP_FILE; then
   cleanup
   TEST_FAILED "Owner rights output error. Test has failed"
fi

if ! grep -q "^group::$GROUP_RIGHTS" $TEMP_FILE; then
   cleanup
   TEST_FAILED "Group rights output error. Test has failed"
fi

if ! grep -q "^other::$OTHER_RIGHTS" $TEMP_FILE; then
   cleanup
   TEST_FAILED "Other rights output error. Test has failed"
fi

if [ $(grep "^default:" $TEMP_FILE | wc -l) -ne 0 ]; then
   cleanup
   TEST_FAILED "Default ACL printer for a file object. Test has failed."
fi

if ! grep "^user:$OWNER_USERNAME:rw-" $TEMP_FILE | \
        grep -q "#effective:-w-"; then
   cleanup
   TEST_FAILED "Custom user ACE output error. Test has failed."
fi

if ! grep "^group:$OWNER_GROUPNAME:-wx" $TEMP_FILE | \
        grep -q "#effective:-w-"; then
   cleanup
   TEST_FAILED "Custom group ACE output error. Test has failed."
fi

cleanup
echo
echo "OVERALL RESULT:"
TEST_PASSED

