#!/usr/bin/env python
# test has been developed by Robert Harakaly and changed for SAM by Victor Galaktionov
# get information about a LFC file or directory in the name server (lfc_statgx) 
# meta: proxy=true
# meta: preconfig=../../LFC-config

import os, lfc, sys
from testClass import _test, _ntest, _testRunner, SAM_Run, LFC_VO

class test_root_dir(_test):
    def info(self):
        return "Test root dir: "

    def test(self):
        statg=lfc.lfc_filestatg()
        ret=lfc.lfc_statg("/","", statg)
        return (statg,ret)

    def ret(self):
       return None

    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
	return retRetVal == testRetVal

class test_existing_guid(_test):
    def info(self):
	return "Test existing guid: "
    def prepare(self):
        self.guid = self.get_guid()
        self.name = LFC_VO + "/python_filestatg_guid_test"
	if not lfc.lfc_stat(self.name,None):             # new
                self.clean()                             # new
                           
        ret = lfc.lfc_creatg(self.name,self.guid,0664)
    def clean(self):
        lfc.lfc_unlink(self.name)
    def test(self):
        statg=lfc.lfc_filestatg()
        ret=lfc.lfc_statg("",self.guid, statg)
        return (statg,ret)
    def ret(self):
        retval=lfc.lfc_filestatg()
        retval.fileid=24553L
        retval.filemode=33204
        retval.nlink=1
        retval.uid=137
        retval.gid=101
        retval.filesize=0L
        retval.atime=1184059742
        retval.mtime=1171381061
        retval.ctime=1171381061
        retval.fileclass=0
        retval.status='-'
        retval.guid=self.guid
        retval.csumtype=" "
        retval.csumvalue=" "
        return retval
    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
            retval = retval & ( test.nlink == ret.nlink )
	    retval = retval & ( test.filesize == ret.filesize )
            retval = retval & ( test.fileclass == ret.fileclass )
            retval = retval & ( test.status == ret.status )
            retval = retval & ( test.guid == ret.guid )
#	    retval = retval & ( test.csumtype == ret.csumtype )
#	    retval = retval & ( test.csumvalue == ret.csumvalue )
        else:
            retval = False
        return retval


class test_nonexisting_guid(_test):
    def __init__(self):
        self.retVal = -1
    def info(self):
	return "Test nonexisting guid: "
    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
            retval = True       # retval & ( test.nlink == ret.nlink )
        else:
            retval = False
        return retval


class test_nonexistent_file(_test):
    def __init__(self):
        self.retVal = -1
    def info(self):
        return "Check for nonexistent file: "
    def test(self):
        stat=lfc.lfc_filestat()
#        statPtr=lfc.lfc_filestatPtr(stat)
#        ret=lfc.lfc_stat("/nonexisting",statPtr)
        ret=lfc.lfc_stat("/nonexisting",stat)
        return stat,ret
    def ret(self):
        retval=lfc.lfc_filestatg()
        retval.fileid=0L
        retval.filemode=0
        retval.nlink=-1
        retval.uid=0
        retval.gid=0
        retval.filesize=0L
        retval.atime=0
        retval.mtime=0
        retval.ctime=0
        retval.fileclass=0
        retval.status=' '
        retval.guid=""
        retval.csumtype=""
        retval.csumvalue=""
        return retval
    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
            retval = True              # retval & ( test.nlink == ret.nlink )
        else:
            retval = False
        return retval



class lfc_statg_test(_testRunner):
    def __init__(self):
        self.name = "lfc_statg_test"
        self.tests=[test_root_dir,test_existing_guid,test_nonexistent_file]



#************* Interface for SAM and Python tests ***************
SAM_Run(lfc_statg_test)

