#!/bin/bash
#############################################################################################
# Date: 09/11/2007                                                                          #
# Author: Victor Galaktionov e-mail: victor.galaktionov@cern.ch                             #
# Description of the test: Change access mode of  LFC files for VO                          #
#                                                                                           #
# Input Parameters:                                                                         #
#       - VO name                                                                           #
#       - LFC host name                                                                     #
# Requisites:                                                                               #
#	- LFC server                                                                              #
#       - 1 configured VO                                                                   #
#                                                                                           #
#############################################################################################
#                                                                                           #
# lcg_util is needed                                                                        #
#                                                                                           #
#############################################################################################
# meta: proxy=true
# meta: preconfig=../../LFC-config

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

PROXY_NEEDED

echo $LFC_HOST
access=( --- --x -w- -wx r-- r-x rw- rwx )
GUID=""

function delGuid () {
    echo "Delete $GUID"
    lcg-del -a $GUID
}

function checkMode () {
    file=$4
    mode=$1$2$3
    QAC="-${access[$1]}${access[$2]}${access[$3]}"
    #echo "checkMode(): file=$file"
    echo -n "   $QAC"    # " $mode"
                
    lfc-chmod $mode $file
                    
    lfc-ls -l $file > $LFC_TEST_TMP
    #cat $LFC_TEST_TMP
    grep -e $QAC $LFC_TEST_TMP > /dev/null
    if [ $? == 1 ]; then
        echo "Set mode: $mode"
        echo "Get mode:"
        cat $LFC_TEST_TMP
        lfc-chmod 777 $file
        delGuid
        lfc_clear $main_dir
        TEST_FAILED
    fi
}
                                                                                                    
main_dir="$LFCDIR/test-chfile"

rm -rf $LFC_TEST_TMP
rm -rf $LFC_TEST_ERR

date
echo "Test LFC CLI chmod for files"
echo "VO=$VO"
echo "SE=$SE_HOST"
echo "File=$FILE"
echo "LCG_GFAL_INFOSYS=$LCG_GFAL_INFOSYS" 

echo "SCENARIO: Directory doesn't exist"

echo "Strong check if directory nonexists"
echo "List of nonexist directory"
lfc-ls -l $main_dir
lfc_clear $main_dir
echo "OK"

echo
echo "1. Change access mode for nonexist directory/file"

lfc-chmod 777 $main_dir 2> $LFC_TEST_TMP
grep "No such file or directory" $LFC_TEST_TMP > /dev/null
if [ $? == 1 ]; then 
   lfc_clear $main_dir
   cat $LFC_TEST_TMP
   TEST_FAILED  "Noncorrect diagn, exit"
fi
echo "OK"

echo
echo "SCENARIO: check mode for existing  file"
echo "SHORT=$SHORT, MODE=$MODE"

echo "Create main directory: $main_dir"
lfc-mkdir -p $main_dir

LFN="$main_dir/test_file"
echo "SE=$SE_HOST, LFN=$LFN"

echo "Create guid and lfn:$LFN"

fguid=`lcg-cr -v -l $LFN -d $SE_HOST --vo $VO file:$FILE`
GUID=$fguid
echo $fguid > $LFC_TEST_TMP

grep "guid:" $LFC_TEST_TMP
if [ $? == 1 ]; then 
   cat $LFC_TEST_TMP
   lfc_clear $main_dir
   TEST_FAILED "Noncorrect create GUID, exit"
fi
echo "OK"

SHORT=0
if [ $SHORT == 1 ]; then
    echo "Short mode 000, 777"
    checkMode 0 0 0 $LFN
    checkMode 7 7 7 $LFN
else
    echo "Long mode: all mode 000-nnn, n<$MODE"
    UMAX=$MODE
    
    owner=0
    while [ $owner -lt $UMAX ]; do              # cycle for owner access
        group=0
        echo
        while [ $group -lt $UMAX ]; do          # cycle for group access
            user=0
            echo
            while [ $user -lt $UMAX ]; do       # cycle for all users
                checkMode $owner $group $user $LFN
                let user=$user+1
            done
            let group=$group+1
        done
        let owner=$owner+1
    done
fi

echo
echo "Cleaning tasks"

echo "Check $main_dir:"
lfc-ls $main_dir
echo "Delete GUID and lfn"
lfc-chmod 777 $LFN
delGuid
echo "Again check $main_dir:"
lfc-ls $main_dir

echo "Clear $main_dir"
lfc_clear $main_dir

echo "Check $main_dir:"
lfc-ls $main_dir

lfc_clear $main_dir
rm -rf $LFC_TEST_TMP
rm -rf $LFC_TEST_ERR

TEST_PASSED

