Пример #1
0
def bulk_submit_with_single_jdl(utils, title):

    fails=0

    names,ces=utils.get_target_ces()

    if len(names)==0:
        names=["Submit to LCG-CE","Submit to CREAM CE","Submit without restrictions"]
        ces=["2119/jobmanager","/cream-",""]


    for i in range(len(names)):

        utils.show_progress("%s - %s"%(title,names[i]))
        utils.info("%s - %s"%(title,names[i]))

        Job_utils.prepare_single_jdl_for_collection_job(utils,utils.get_jdl_file(),ces[i])

        result=Job_utils.submit_collection_job(utils,ces[i],True)

        if result[0] == 1 :
            utils.info(result[1])
            fails=fails+1
        else:
            utils.dbg("Clean job output directory")
            os.system("rm -rf %s"%(utils.get_job_output_dir()))

    
    return fails
Пример #2
0
def test5(utils, title):

    # Cancel node of a collection job
    utils.show_progress(title)
    utils.info(title)

    try:

        utils.set_long_jdl(utils.get_jdl_file())

        Job_utils.prepare_collection_job(utils, utils.get_jdl_file(), "/cream-")

        utils.dbg("Submit a collection job")

        JOBID = utils.run_command_continue_on_error(
            "glite-wms-job-submit %s --config %s --nomsg --output %s --collection %s/collection_jdls"
            % (utils.get_delegation_options(), utils.get_config_file(), utils.get_output_file(), utils.get_tmp_dir())
        )

        utils.info("Job submitted successfuly. Returned JOBID: %s" % (JOBID))

        utils.dbg("Wait 60 secs")
        time.sleep(60)

        # Get nodes' ids

        output = commands.getoutput("glite-wms-job-status %s" % (JOBID))

        IDS = []
        for line in output.splitlines():
            if line.split(":", 1)[0].strip() == "Status info for the Job":
                IDS.append(line.split(":", 1)[1].strip())
                utils.dbg("Next node's id is: %s" % (IDS[-1]))

        utils.info("Now try to cancel the first node")
        # IDS[0] is the collection ID
        utils.run_command_continue_on_error(
            "glite-wms-job-cancel --config %s --noint %s" % (utils.get_config_file(), IDS[1])
        )

        if not check_status(utils, IDS[1]):
            utils.info("TEST PASS")

    except (RunCommandError, GeneralError, TimeOutError), e:
        utils.log_error("%s" % (utils.get_current_test()))
        utils.log_error("Command: %s" % (e.expression))
        utils.log_error("Message: %s" % (e.message))
        utils.log_traceback("%s" % (utils.get_current_test()))
        utils.log_traceback(traceback.format_exc())
        return 1
Пример #3
0
def dag_submit(utils, title):

    # Dag jobs can be submitted only to LCG-CE
    utils.show_progress(title)
    utils.info(title)

    Job_utils.prepare_dag_job(utils,utils.get_jdl_file())

    result=Job_utils.submit_dag_job(utils)

    if result[0] == 1 :
        utils.info(result[1])
        return 1
    else:
        utils.dbg("Clean job output directory")
        os.system("rm -rf %s"%(utils.get_job_output_dir()))
    
    return 0
def test3(utils,title):

    names,ces=utils.get_target_ces()

    fails=0

    if len(names)==0:
        names.append("Default Test")
        ces.append("")

    for i in range(len(names)):

        utils.show_progress("%s - %s"%(title,names[i]))

        utils.info("%s - %s"%(title,names[i]))

        try:

            ###Create jdl with ShortDeadlineJob attribute enabled
            utils.set_isb_jdl(utils.get_jdl_file())
            utils.add_jdl_general_attribute("RetryCount",1)
            utils.add_jdl_general_attribute("ShortDeadlineJob","true")

            if len(ces[i])>0:
                 utils.set_requirements("%s && %s"%(ces[i],utils.DEFAULTREQ))
            else:
                 utils.set_requirements("%s"%utils.DEFAULTREQ)

            output=utils.run_command_continue_on_error("glite-wms-job-list-match %s -c %s %s"%(utils.get_delegation_options(),utils.get_config_file(),utils.get_jdl_file()))

            if output.find("No Computing Element matching your job requirements has been found!")!=-1:

                utils.error("No Computing Element matching your job requirements has been found!")
                raise GeneralError("","No Computing Element matching your job requirements has been found!")

            else:

                result=Job_utils.submit_normal_job(utils,"")

                if result[0] == 1 :
                    utils.error(result[1])
                    raise GeneralError("Job Submission",result[1])
                else:
                    utils.dbg("Clean job output directory")
                    os.system("rm -rf %s"%(utils.get_job_output_dir()))

            
        except (RunCommandError,GeneralError,TimeOutError) , e :
            utils.log_error("%s"%(utils.get_current_test()))
            utils.log_error("Command: %s"%(e.expression))
            utils.log_error("Message: %s"%(e.message))
            utils.log_traceback("%s"%(utils.get_current_test()))
            utils.log_traceback(traceback.format_exc())
            fails=fails+1
Пример #5
0
def test5(utils, ssh, title):

    utils.show_progress(title)
    utils.info(title)

    try:

        Job_utils.prepare_normal_job(utils, utils.get_jdl_file())

        utils.info("Submit a job to a CREAM CE")

        JOBID = Job_utils.submit_only_normal_job(utils)[1]

        prefix = JOBID.split("https://%s:9000/" % (utils.get_WMS()))[1][0:2]

        utils.info("Wait until job finishes")

        utils.wait_until_job_finishes(JOBID)

        utils.job_status(JOBID)

        if utils.get_job_status().find("Done") != -1:

            utils.info("Purge a done job")

            # WARNING EXECUTE COMMAND AS root INSTEAD OF glite USER
            utils.info(
                "Execute '/usr/sbin/glite-wms-purgeStorage.sh -p /var/SandboxDir/%s -s' on remote host" % (prefix)
            )

            output = SSH_utils.execute_remote_cmd(
                ssh, "/usr/sbin/glite-wms-purgeStorage.sh -p /var/SandboxDir/%s -s" % (prefix)
            )

            utils.info("Check glite-wms-purgeStorage.sh output")

            if output.find("%s: removed DONE job" % (JOBID)) != -1:
                utils.info("glite-wms-purgeStorage.sh successfully remove the DONE job %s" % (JOBID))
            else:
                utils.error("glite-wms-purgeStorage.sh didn't remove successfully the DONE job %s" % (JOBID))
                raise GeneralError(
                    "Check glite-wms-purgeStorage.sh",
                    "glite-wms-purgeStorage.sh didn't remove successfully the DONE job %s" % (JOBID),
                )

            utils.info("Check again job's status")

            utils.job_status(JOBID)

            if utils.get_job_status().find("Cleared") != -1:

                utils.info("Job's final status after purge is Cleared")

                utils.info("Check job's status reason")

                status = utils.get_job_status_reason(JOBID)

                if status.find("timed out, resource purge forced") != -1:
                    utils.info("Status reason is 'timed out, resource purge forced' as expected")
                else:
                    utils.error(
                        "Status reason is %s while the expected is 'timed out, resource purge forced'" % (status)
                    )
                    raise GeneralError(
                        "Check job's status reason",
                        "Status reason is %s while the expected is 'timed out, resource purge forced'" % (status),
                    )

            else:
                utils.error(
                    "Job's final status after purge is not Cleared , instead we get %s" % (utils.get_job_status())
                )
                raise GeneralError(
                    "Check job final status after purge",
                    "Job's final status after purge is not Cleared , instead we get %s" % (utils.get_job_status()),
                )

        else:
            utils.error("Job finishes with status: %s while expected 'Done'" % (utils.get_job_status()))
            raise GeneralError(
                "Check job final status",
                "Job finishes with status: %s while expected 'Done'" % (utils.get_job_status()),
            )

        utils.info("TEST OK")

    except (RunCommandError, GeneralError, TimeOutError), e:
        utils.log_error("%s" % (utils.get_current_test()))
        utils.log_error("Command: %s" % (e.expression))
        utils.log_error("Message: %s" % (e.message))
        utils.log_traceback("%s" % (utils.get_current_test()))
        utils.log_traceback(traceback.format_exc())
        return 1
Пример #6
0
def test1(utils, ssh, title):

    utils.show_progress(title)
    utils.info(title)

    try:

        Job_utils.prepare_normal_job(utils, utils.get_jdl_file(), "2119/jobmanager")

        utils.info("Submit a job to a LCG CE")

        JOBID = Job_utils.submit_only_normal_job(utils, "2119/jobmanager")[1]

        utils.info("Check the SBD and the others file used by the services")

        prefix = JOBID.split("https://%s:9000/" % (utils.get_WMS()))[1][0:2]

        dir2 = "/var/jobcontrol/condorio/%s" % (prefix)

        utils.info("Check files at %s" % (dir2))

        condorio = SSH_utils.execute_remote_cmd(ssh, "ls -l %s" % (dir2))

        for line in condorio.split("\n"):

            if line.find(JOBID.split("https://%s:9000/" % (utils.get_WMS()))[1]) != -1:
                target = "https_%s" % (line.lstrip().split("https_")[1])

        dir1 = "/var/SandboxDir/%s/%s" % (prefix, target)

        utils.info("Check files at %s" % (dir1))

        SSH_utils.execute_remote_cmd(ssh, "ls -l %s" % (dir1))

        dir3 = "/var/jobcontrol/submit/%s/" % (prefix)

        utils.info("Check files at %s" % (dir3))

        SSH_utils.execute_remote_cmd(ssh, "ls -l %s" % (dir3))

        utils.info("Wait until job finishes")

        utils.wait_until_job_finishes(JOBID)

        utils.job_status(JOBID)

        if utils.get_job_status().find("Done") != -1:

            utils.info("Check on WMS auxiliary files should be removed")

            utils.info("Check directory %s" % (dir3))

            output = SSH_utils.execute_remote_cmd(ssh, "ls -l %s" % (dir3))

            if output.find(target) != 1:
                utils.error("Auxiliary files are not removed from directory %s" % (dir3))
                raise GeneralError(
                    "Check for auxiliary files at %s" % (dir3),
                    "Auxiliary files are not removed from directory %s" % (dir3),
                )
            else:
                utils.info("Auxiliary files are removed as expected from directory %s" % (dir3))

            utils.info("Check directory %s" % (dir2))

            output = SSH_utils.execute_remote_cmd(ssh, "ls -l %s" % (dir2))

            if output.find(target) != 1:
                utils.error("Auxiliary files are not removed from directory %s" % (dir2))
                raise GeneralError(
                    "Check for auxiliary files at %s" % (dir2),
                    "Auxiliary files are not removed from directory %s" % (dir2),
                )
            else:
                utils.info("Auxiliary files are removed as expected from directory %s" % (dir2))

            utils.info("Retrieve job output")

            utils.run_command_continue_on_error(
                "glite-wms-job-output --nosubdir --noint --dir %s %s" % (utils.get_job_output_dir(), JOBID)
            )

            utils.info("Check that also the SBD has been removed on WMS")

            utils.info("Check directory /var/SandboxDir/%s/" % (prefix))
            output = SSH_utils.execute_remote_cmd(ssh, "ls -l /var/SandboxDir/%s/" % (prefix))

            if output.find(target) != 1:
                utils.error("SBD not removed from directory /var/SandboxDir/%s/" % (prefix))
                raise GeneralError(
                    "Check for SBD at /var/SandboxDir/%s/" % (prefix),
                    "Auxiliary files are not removed from directory %s" % (dir2),
                )
            else:
                utils.info("SBD has been removed as expected from directory /var/SandboxDir/%s/" % (prefix))

        else:
            utils.error("Job finishes with status: %s cannot retrieve output" % (utils.get_job_status()))
            raise GeneralError(
                "Check job final status",
                "Job finishes with status: %s cannot retrieve output" % (utils.get_job_status()),
            )

        utils.info("TEST OK")

    except (RunCommandError, GeneralError, TimeOutError), e:
        utils.log_error("%s" % (utils.get_current_test()))
        utils.log_error("Command: %s" % (e.expression))
        utils.log_error("Message: %s" % (e.message))
        utils.log_traceback("%s" % (utils.get_current_test()))
        utils.log_traceback(traceback.format_exc())
        return 1
Пример #7
0
def main():
    	
    utils = Test_utils.Test_utils(sys.argv[0],"Test a complete job cycle: from submission to get output")

    tests=["Set 1: Submit a normal job"]
    tests.append("Set 2: Submit a bulk of jobs")
    tests.append("Set 3: Submit a parametric job")
    tests.append("Set 4: Submit a DAG job")
    tests.append("Set 5: Submit a MPI job")
    tests.append("Set 6: Submit a perusal job")
    tests.append("Set 7: Submit a bulk of jobs using a single jdl with al the jdls of nodes")
    tests.append("Set 8: Testing forwarding parameters for parallel jobs")
    

    utils.prepare(sys.argv[1:],tests)

    utils.info("Test a complete job cycle: from submission to get output")

    signal.signal(signal.SIGINT,utils.exit_interrupt)

    fails=[]

    # This test is for direct submission to a given CE
    if utils.get_user_CE() !='' :
    
        utils.info ("Submit a normal job to %s"%(utils.get_user_CE()))

        Job_utils.prepare_normal_job(utils,utils.get_jdl_file(),utils.get_user_CE())
        
        result=Job_utils.submit_normal_job(utils,utils.get_user_CE())

        if result[0] == 1 :
            utils.warn(result[1])
            utils.log_error("Submit a normal job to %s"%(utils.get_user_CE()))
            utils.log_error(result[1])
            utils.exit_failure(result[1])

        utils.message("Clean job output directory")
        os.system("rm -rf %s"%(utils.get_job_output_dir()))
	
    else:
        
        all_tests=utils.is_all_enabled()

        if all_tests==1 or utils.check_test_enabled(1)==1 :
            if normal_submit(utils, tests[0]):
                fails.append(tests[0])
                
        if all_tests==1 or utils.check_test_enabled(2)==1 :
            if bulk_submit(utils, tests[1]):
               fails.append(tests[1])
        
        if all_tests==1 or utils.check_test_enabled(3)==1 :
            if parametric_submit(utils, tests[2]):
                fails.append(tests[2])
                
        if all_tests==1 or utils.check_test_enabled(4)==1 :
            if dag_submit(utils, tests[3]):
                fails.append(tests[3])
            
        if all_tests==1 or utils.check_test_enabled(5)==1 :
            if parallel_submit(utils, tests[4]):
                fails.append(tests[4])
                
        if all_tests==1 or utils.check_test_enabled(6)==1 :
            if perusal_submit(utils, tests[5]):
                fails.append(tests[5])

        if all_tests==1 or utils.check_test_enabled(7)==1 :
            if bulk_submit_with_single_jdl(utils, tests[6]):
                fails.append(tests[6])

        if all_tests==1 or utils.check_test_enabled(8)==1 :
            if forward_parameters_parallel_jobs(utils, tests[7]):
                fails.append(tests[7])



    if len(fails) > 0 :
      utils.exit_failure("%s test(s) fail(s): %s"%(len(fails), fails))
    else:
      utils.exit_success()
Пример #8
0
def forward_parameters_parallel_jobs(utils, title):

    fails=0

    names,ces=utils.get_target_ces()

    if len(names)==0:
        names=["Submit to CREAM CE"]
        ces=["/cream-"]


    for i in range(len(names)):

        try:

            utils.show_progress("%s  Case 1 - %s"%(title,names[i]))
            utils.info("\t%s Case 1 - %s"%(title,names[i]))

            Job_utils.prepare_mpi_job(utils,utils.get_jdl_file(),ces[i])

            utils.change_jdl_attribute("CpuNumber","2")
            utils.add_jdl_general_attribute("WholeNodes","true")
            utils.add_jdl_general_attribute("SMPGranularity","2")
            utils.add_jdl_general_attribute("Hostnumber","1")

            check=['CpuNumber = 2','WholeNodes = true','SMPGranularity = 2','Hostnumber = 1']

            errors=[]

            utils.info("Submit MPI job")

            JOBID=utils.run_command_continue_on_error ("glite-wms-job-submit %s --config %s --nomsg %s"%(utils.get_delegation_options(),utils.get_config_file(),utils.get_jdl_file()))

            utils.info("Job submitted successfuly. Returned JOBID: %s"%(JOBID))

            utils.info("Wait until job transefered to CE")

            utils.wait_until_job_transfered(JOBID)

            cream_jobid=utils.get_cream_jobid(JOBID)

            utils.info("Get the resulting cream jdl")

            cream_jdl=utils.get_cream_jdl(cream_jobid)

            utils.info("Check the cream jdl for the forwarding parameters")

            for attribute in check:
                if cream_jdl.find(attribute)==-1:
                    errors.append(attribute)


            if len(errors)>0:
                msg=' , '.join(errors)
                utils.error("Problem with the following parameters: %s"%(msg))
                fails=fails+1


            utils.show_progress("%s Case 2 - %s"%(title,names[i]))
            utils.info("\t%s Case 2 - %s"%(title,names[i]))

            Job_utils.prepare_mpi_job(utils,utils.get_jdl_file(),ces[i])

            utils.change_jdl_attribute("CpuNumber","1")
            utils.add_jdl_general_attribute("WholeNodes","true")
            utils.add_jdl_general_attribute("SMPGranularity","2")

            check=['CpuNumber = 1','WholeNodes = true','SMPGranularity = 2']

            errors=[]

            utils.info("Submit MPI job")

            JOBID=utils.run_command_continue_on_error ("glite-wms-job-submit %s --config %s --nomsg %s"%(utils.get_delegation_options(),utils.get_config_file(),utils.get_jdl_file()))

            utils.info("Job submitted successfuly. Returned JOBID: %s"%(JOBID))

            utils.info("Wait until job transefered to CREAM CE")

            utils.wait_until_job_transfered(JOBID)

            cream_jobid=utils.get_cream_jobid(JOBID)

            utils.info("Get the resulting cream jdl")

            cream_jdl=utils.get_cream_jdl(cream_jobid)

            utils.info("Check the cream jdl for the forwarding parameters")

            for attribute in check:
                if cream_jdl.find(attribute)==-1:
                    errors.append(attribute)


            if len(errors)>0:
                msg=' , '.join(errors)
                utils.error("Problem with the following parameters: %s"%(msg))
                fails=fails+1

            utils.show_progress("%s Case 3  - %s"%(title,names[i]))
            utils.info("\t%s Case 3 - %s"%(title,names[i]))

            Job_utils.prepare_mpi_job(utils,utils.get_jdl_file(),ces[i])

            utils.change_jdl_attribute("CpuNumber","3")
            utils.add_jdl_general_attribute("WholeNodes","false")
            utils.add_jdl_general_attribute("SMPGranularity","3")
            utils.add_jdl_general_attribute("Hostnumber","1")

            utils.info("Submit MPI job")

            message=utils.run_command_continue_on_error ("glite-wms-job-submit %s --config %s --nomsg %s"%(utils.get_delegation_options(),utils.get_config_file(),utils.get_jdl_file()),1)

            utils.info("Check the error message")

            if message.find("SMPGranularity and HostNumber are mutually exclusive when WholeNodes allocation is not requested: wrong combination of values")==-1:
               utils.error("Job failed reason: %s. Expected reason: SMPGranularity and HostNumber are mutually exclusive when WholeNodes allocation is not requested: wrong combination of values"%(message))
               fails=fails+1


            utils.show_progress("%s Case 4 - %s"%(title,names[i]))
            utils.info("\t%s Case 4 - %s"%(title,names[i]))

            Job_utils.prepare_mpi_job(utils,utils.get_jdl_file(),ces[i])

            utils.change_jdl_attribute("CpuNumber","3")
            utils.add_jdl_general_attribute("WholeNodes","false")
            utils.add_jdl_general_attribute("SMPGranularity","3")

            check=['CpuNumber = 3','WholeNodes = false','SMPGranularity = 3']

            errors=[]

            utils.info("Submit MPI job")

            JOBID=utils.run_command_continue_on_error ("glite-wms-job-submit %s --config %s --nomsg %s"%(utils.get_delegation_options(),utils.get_config_file(),utils.get_jdl_file()))

            utils.info("Job submitted successfuly. Returned JOBID: %s"%(JOBID))

            utils.info("Wait until job transefered to CREAM CE")

            utils.wait_until_job_transfered(JOBID)

            cream_jobid=utils.get_cream_jobid(JOBID)

            utils.info("Get the resulting cream jdl")

            cream_jdl=utils.get_cream_jdl(cream_jobid)

            utils.info("Check the cream jdl for the forwarding parameters")

            for attribute in check:
                if cream_jdl.find(attribute)==-1:
                    errors.append(attribute)


            if len(errors)>0:
                msg=' , '.join(errors)
                utils.error("Problem with the following parameters: %s"%(msg))
                fails=fails+1


            utils.show_progress("%s Case 5 - %s"%(title,names[i]))
            utils.info("\t%s Case 5 - %s"%(title,names[i]))

            Job_utils.prepare_mpi_job(utils,utils.get_jdl_file(),ces[i])
            utils.change_jdl_attribute("CpuNumber","8")
            utils.add_jdl_general_attribute("WholeNodes","true")
            utils.add_jdl_general_attribute("SMPGranularity","8")
            utils.add_jdl_general_attribute("Hostnumber","2")

            check=['CpuNumber = 8','WholeNodes = true','SMPGranularity = 8','Hostnumber = 2']

            errors=[]

            utils.info("Submit MPI job")

            JOBID=utils.run_command_continue_on_error ("glite-wms-job-submit %s --config %s --nomsg %s"%(utils.get_delegation_options(),utils.get_config_file(),utils.get_jdl_file()))

            utils.info("Job submitted successfuly. Returned JOBID: %s"%(JOBID))

            utils.info("Wait until job transefered to CREAM CE")

            utils.wait_until_job_transfered(JOBID)

            cream_jobid=utils.get_cream_jobid(JOBID)

            utils.info("Get the resulting cream jdl")

            cream_jdl=utils.get_cream_jdl(cream_jobid)

            utils.info("Check the cream jdl for the forwarding parameters")

            for attribute in check:
                if cream_jdl.find(attribute)==-1:
                    errors.append(attribute)


            if len(errors)>0:
                msg=' , '.join(errors)
                utils.error("Problem with the following parameters: %s"%(msg))
                fails=fails+1

        except (GeneralError,RunCommandError) , e :
            utils.log_error("%s"%(utils.get_current_test()))
            utils.log_error("Command: %s"%(e.expression))
            utils.log_error("Message: %s"%(e.message))
            utils.log_traceback("%s"%(utils.get_current_test()))
            utils.log_traceback(traceback.format_exc())
            fails=fails+1
Пример #9
0
def test1(utils, title):

    names,ces=utils.get_target_ces()

    fails=0

    if len(names)==0:
        names.append("Default Test , Submit to CREAM")
        ces.append("")

    for i in range(len(names)):

        utils.show_progress("%s - %s"%(title,names[i]))

        utils.info("%s - %s"%(title,names[i]))

        try:

            utils.info("Set MaxOuputSandboxSize=50M; to glite_wms.conf at WMS")

            ssh=SSH_utils.open_ssh(utils.get_WMS(),utils.WMS_USERNAME,utils.WMS_PASSWORD)

            SSH_utils.change_remote_file(utils,ssh,"/etc/glite-wms/glite_wms.conf", ['MaxOutputSandboxSize'],['*'],['50M'])

            utils.info("Restart workload manager glite-wms-wm")

            SSH_utils.execute_remote_cmd(ssh,"/etc/init.d/glite-wms-wm restart")

            utils.info("Submit the job to CE and wait to finish")

            set_huge_jdl(utils,utils.get_jdl_file())

            if len(ces[i])>0:
                 utils.set_requirements("%s && %s"%(ces[i],utils.DEFAULTREQ))
            else:
                 utils.set_requirements("%s"%utils.DEFAULTREQ)

            utils.run_command_continue_on_error("rm -rf %s/*"%(utils.get_job_output_dir()))

            res=Job_utils.submit_only_normal_job(utils,ces[i])

            JOBID=res[1]

            utils.info("Wait until job finished")

            utils.wait_until_job_finishes(JOBID)

            utils.info("Check logging info")

            result=utils.run_command_continue_on_error("glite-wms-job-logging-info -v 3 --event UserTag %s"%(JOBID))

            if result.find("OSB quota exceeded for") == -1:
                utils.error("Not found message 'OSB quota exceeded for' at UserTag")
                raise GeneralError("Check UserTag event","Not found message 'OSB quota exceeded for' at UserTag")
            else:
                utils.info("Find message 'OSB quota exceeded for' at UserTag event")

            if result.find("Truncated last 52428800 bytes for file") == -1:
                utils.error("Not found message 'Truncated last 52428800 bytes for file")
                raise GeneralError("Check UserTag event","Not found message 'Truncated last 52428800 bytes for file' at UserTag")
            else:
                utils.info("Find message 'Truncated last 52428800 bytes for file' at UserTag event")

            utils.info("Get job output")

            utils.job_status(JOBID)

            if utils.get_job_status().find("Done") != -1 :

                utils.remove(utils.get_tmp_file())

                utils.info("Retrieve the output")

                utils.run_command_continue_on_error ("glite-wms-job-output --nosubdir --noint --dir %s %s >> %s"%(utils.get_job_output_dir(),JOBID,utils.get_tmp_file()))

                if os.path.isfile("%s/huge.tail"%(utils.get_job_output_dir())) :
                    utils.info("Output file (huge.tail) is correctly retrieved")
                else:
                    utils.error("Output file (huge.tail) is not correctly retrieved")
                    raise GeneralError("Check output file","Output file (huge.tail) is not correctly retrieved")

                utils.info("Check the size of the output file")

                output=utils.run_command_continue_on_error("ls -l %s/"%(utils.get_job_output_dir()))

                if output.find("52428800")!=-1:
                   utils.info("huge.tail size is 52428800 bytes as expected")
                else:
                   utils.error("huge.tail size is not 52428800 bytes as expected. We get %s"%(ouput))
                   raise GeneralError("Check the size of the ouput file","huge.tail size is not 52428800 bytes as expected")

            else:
                utils.error("Job finishes with status: %s cannot retrieve output"%(utils.get_job_status()))
                raise GeneralError("Check final job status","Job finishes with status: %s cannot retrieve output"%(utils.get_job_status()))


            SSH_utils.execute_remote_cmd(ssh, "cp -f /etc/glite-wms/glite_wms.conf.bak /etc/glite-wms/glite_wms.conf")
            SSH_utils.execute_remote_cmd(ssh,"/etc/init.d/glite-wms-wm restart")
            SSH_utils.close_ssh(ssh)


        except (RunCommandError,GeneralError,TimeOutError) , e :
            utils.log_error("%s"%(utils.get_current_test()))
            utils.log_error("Command: %s"%(e.expression))
            utils.log_error("Message: %s"%(e.message))
            utils.log_traceback("%s"%(utils.get_current_test()))
            utils.log_traceback(traceback.format_exc())
            SSH_utils.execute_remote_cmd(ssh, "cp -f /etc/glite-wms/glite_wms.conf.bak /etc/glite-wms/glite_wms.conf")
            SSH_utils.execute_remote_cmd(ssh,"/etc/init.d/glite-wms-wm restart")
            SSH_utils.close_ssh(ssh)
            fails=fails+1