#!/bin/bash
##############################################################################
# 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.
##############################################################################
# Date: 09/11/2007
# Author: Victor Galaktionov e-mail: victor.galaktionov@cern.ch
# Description of the test: Rename  LFC files  for VO
# 
# Input Parameters:
#       - VO name
#       - LFC host name
# Requisites:
#	- LFC server
#       - 1 configured VO
# 
#############################################################################################
# meta: preconfig=../../LFC-config
# meta: proxy=true

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

PROXY_NEEDED

GUID=""

date
echo "Test LFC CLI rename file. lfc-rename <oldfilename> <newfilename>"
echo "VO=$VO"
echo "FILE=$FILE"
echo "SE=$SE_HOST"
echo "LCG_GFAL_INFOSYS=$LCG_GFAL_INFOSYS"


main_dir="$LFCDIR/renamefile"

echo "Scenario: Directory exists"
echo "1. Create main directory: $main_dir"
lfc-mkdir -p $main_dir

echo "SCENARIO: Directory and file 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 "2. Rename ordinary file"

echo "2.1. Create main directory: $main_dir"
lfc-mkdir -p $main_dir
fname="test_file"
LFN="$main_dir/$fname"
echo "SE=$SE_HOST, LFN=$LFN, file=$FILE"

echo "2.2. Create guid and lfn:$LFN"

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

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

echo "Rename created LFN"
Fname="newFileName"
newFname="$main_dir/$Fname"
echo "File list before:"
lfc-ls $main_dir
echo "File list after:"

lfc-rename $LFN  $newFname
lfc-ls $main_dir > $LFC_TEST_TMP
cat $LFC_TEST_TMP

grep $Fname $LFC_TEST_TMP  > /dev/null
if [ $? == 1 ]; then 
   lfc_delGuid $GUID
   lfc_clear $main_dir
   TEST_FAILED "Non correct lfc-rename result"
fi
echo "OK"

echo "3. Rename 'read only' parent directory"
echo "MAN: This requires write permission in the parent directories."

echo "3.1. Change access to '400' of parent directory anf file"
lfc-chmod 400 $main_dir
lfc-chmod 400 $newFname
echo "3.2. Try rename"
lfc-rename $newFname "$newFname-qwerty" 2> $LFC_TEST_ERR
lfc-ls -l $main_dir
echo "Result renaming:"
cat $LFC_TEST_ERR
lfc-chmod 777 $main_dir     # Restore access 

grep "Permission denied" $LFC_TEST_ERR > /dev/null

if [ $? == 1 ]; then
    lfc-chmod 777 $newFname
    lfc-chmod 777 $newFname-qwerty
    lfc_delGuid $GUID
    lfc_clear $main_dir
    TEST_FAILED "Non correct lfc-rm result"
fi
echo "OK"

echo "3. Rename by using LFC_HOME"

export LFC_HOME=$main_dir
echo "List before rename:"
lfc-ls $main_dir

lfc-rename $Fname $fname
lfc-ls $main_dir > $LFC_TEST_TMP
echo "List after rename:"
cat $LFC_TEST_TMP
grep $fname $LFC_TEST_TMP  > /dev/null

if [ $? == 1 ]; then 
   lfc_delGuid $GUID
   lfc_clear $main_dir
   TEST_FAILED "Non correct lfc-rename result"
fi
echo "OK"

echo "4. SCENARIO: Rename nonexisting file"

lfc-rename "$main_dir/nonexist" "$main_dir/new"   2> $LFC_TEST_ERR
echo "Result nonexisting file rename:"
cat $LFC_TEST_ERR
grep "No such file or directory" $LFC_TEST_ERR > /dev/null

if [ $? == 1 ]; then 
   cat $LFC_TEST_ERR
   lfc_delGuid $GUID
   lfc_clear $main_dir
   TEST_FAILED "Noncorrect diagnose, exit"
fi
echo "OK"

echo
echo "Cleaning tasks"

lfc_delGuid $GUID
lfc_clear $main_dir
lfc-ls $main_dir
rm -rf $LFC_TEST_TMP
rm -rf $LFC_TEST_ERR

TEST_PASSED

