#!/usr/bin/env python
# The test has been  developed by Robert Harakaly and changed for SAM by Victor Galaktionov
# set filesize for a regular file; set also last modification time to the current time (lfc_setfsize) 
# meta: proxy=true
# meta: preconfig=../../LFC-config

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

class test_setfsize_ok(_test):
    def info(self):
        return "Set file size on existing file name"
    def prepare(self):
        guid = self.get_guid()
        self.name = LFC_VO + "/python_setfsize_test"
        ret = lfc.lfc_creatg(self.name,guid,0664)
    def clean(self):
        lfc.lfc_unlink(self.name)
    def test(self):
        self.size=123456789L
        ret=lfc.lfc_setfsize(self.name,None,self.size)
        stat=lfc.lfc_filestat()
        lfc.lfc_stat(self.name, stat)
        return (stat,ret)
    def ret(self):
        retval=lfc.lfc_filestat()
        retval.filesize=self.size
        return retval
    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
            retval = retval & ( test.filesize == ret.filesize )
        else:
            retval = False
        return retval


class test_setfsize_fileid_ok(_test):
    def info(self):
	return "Set filesize on existing fileid: "
    def prepare(self):
        guid = self.get_guid()
        self.name = LFC_VO + "/python_setfsize_test"
        ret = lfc.lfc_creatg(self.name,guid,0664)
        stat=lfc.lfc_filestat()
        self.fileid=lfc.lfc_fileid()
        ret=lfc.lfc_statx(self.name,self.fileid, stat)
    def clean(self):
        lfc.lfc_unlink(self.name)
    def test(self):
        self.size=987654321L
        ret=lfc.lfc_setfsize("",self.fileid,self.size)
        stat=lfc.lfc_filestat()
        lfc.lfc_stat(self.name, stat)
        return (stat,ret)
    def ret(self):
        retval=lfc.lfc_filestat()
        retval.filesize=self.size
        return retval
    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
	    retval = retval & ( test.filesize == ret.filesize )
        else:
            retval = False
        return retval

class test_setfsize_preference_fileid_ok(_test):
    def info(self):
        return "Set filesize on preference on fileid (provided incorrect name): "
    def prepare(self):
        guid = self.get_guid()
        self.name = LFC_VO + "/python_setfsize_test"
        ret = lfc.lfc_creatg(self.name,guid,0664)
        stat=lfc.lfc_filestat()
        self.fileid=lfc.lfc_fileid()
        ret=lfc.lfc_statx(self.name,self.fileid, stat)
    def clean(self):
        lfc.lfc_unlink(self.name)
    def test(self):
        self.size=987654321L
        ret=lfc.lfc_setfsize("/jhgsdjfsg",self.fileid,self.size)
        stat=lfc.lfc_filestat()
        lfc.lfc_stat(self.name, stat)
        return (stat,ret)
    def ret(self):
        retval=lfc.lfc_filestat()
        retval.filesize=self.size
        return retval
    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
            retval = retval & ( test.filesize == ret.filesize )
        else:
            retval = False
        return retval


class test_nonexisting_name(_test):
    def __init__(self):
        self.retVal = -1
    def info(self):
	return "Set filesize on nonexisting file name: "
    def test(self):
        self.size=987654321L
        self.name="/jhgsdjfsg"
        ret=lfc.lfc_setfsize(self.name,None,self.size)
        stat=lfc.lfc_filestat()
        lfc.lfc_stat(self.name, stat)
        return (stat,ret)
    def ret(self):
        retval=lfc.lfc_filestat()
        retval.filesize=0L
        return retval

    def compare(self, testVal, retVal):
        (ret, retRetVal) = retVal
        (test, testRetVal) = testVal
        retval = True
        if (retRetVal == testRetVal):
            retval = retval & ( test.filesize == ret.filesize )
        else:
            retval = False
        return retval


class lfc_setfsize_test(_testRunner):
    def __init__(self):
        self.name = "lfc_setfsize_test"
        self.tests=[test_setfsize_ok,test_setfsize_fileid_ok,test_setfsize_preference_fileid_ok,test_nonexisting_name]


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

