class TestCase(unittest.TestCase):

    def setUp(self):
        self.file = "tests/testFileLog-out.txt"
        self.root = Log()
        self.logger = Log(self.root, "test")

    def tearDown(self):
        if os.path.exists(self.file):
            os.remove(self.file)

    def testAddFile(self):
        self.logger.addDestination(self.file)
        self.logger.log(Log.INFO, "in file")

        self.root.log(Log.INFO, "in bit bucket")

        fd = open(self.file)
        try:
            lines = fd.readlines()
            self.assertEquals(len(filter(lambda l: l.find("in file")>=0,lines)), 1)
            self.assertEquals(len(filter(lambda l: l.find("bucket")>=0,lines)), 0)
        finally:
            fd.close()
        
    def testPassAll(self):
        self.logger.addDestination(self.file)
        self.logger.log(Log.DEBUG, "in file")
        self.logger.setThreshold(Log.DEBUG)
        self.logger.log(Log.DEBUG, "debugging")

        fd = open(self.file)
        try:
            lines = fd.readlines()
            self.assertEquals(len(filter(lambda l: l.find("in file")>=0,lines)), 0)
            self.assertEquals(len(filter(lambda l: l.find("debugging")>=0,lines)), 1)
        finally:
            fd.close()
        
    def testVerbose(self):
        self.logger.addDestination(self.file, True)
        self.logger.log(Log.DEBUG, "in file")
        self.logger.setThreshold(Log.DEBUG)
        self.logger.log(Log.DEBUG, "debugging")

        fd = open(self.file)
        try:
            lines = fd.readlines()
            self.assertEquals(len(filter(lambda l: l.find("in file")>=0,lines)), 0)
            self.assertEquals(len(filter(lambda l: l.find("debugging")>=0,lines)), 1)
            self.assertEquals(len(filter(lambda l: l.find("LEVEL")>=0,lines)), 1)
        finally:
            fd.close()
 def testGoodSubclass(self):
     logger = Log(Log.getDefaultLog(), "tester")
     logger.setThreshold(Log.FATAL+10)
     recorder = GoodRecorder(self, logger)
     recorder.record("goober.paf")
 def testBadSubclass(self):
     logger = Log(Log.getDefaultLog(), "tester")
     logger.setThreshold(Log.FATAL+10)
     recorder = BadRecorder(logger)
     self.assertRaises(RuntimeError, recorder.record, "file")
Пример #4
0
# see <http://www.lsstcorp.org/LegalNotices/>.
#
"""
Tests of the ProvenanceRecorder
"""
from __future__ import print_function
import os
import unittest

import lsst.utils.tests
from lsst.pex.logging import Log
from lsst.ctrl.provenance import ProvenanceRecorder
from lsst.ctrl.provenance import ProvenanceSetup

logger = Log(Log.getDefaultLog(), "tester")
logger.setThreshold(Log.FATAL + 10)
repos = os.path.join(os.environ['CTRL_PROVENANCE_DIR'], "tests", "policy")
prodPolicyFile = os.path.join(repos, "production.paf")


class GoodRecorder(ProvenanceRecorder):
    def __init__(self, testcase, logger=None):
        ProvenanceRecorder.__init__(self, logger, True)
        self.tester = testcase

    def record(self, filename):
        self.tester.assert_(len(filename) > 0, "empty filename found")
        self._logger.log(Log.INFO, "recording " + filename)
        self.tester.recorded += 1

Пример #5
0
 def testGoodSubclass(self):
     logger = Log(Log.getDefaultLog(), "tester")
     logger.setThreshold(Log.FATAL + 10)
     recorder = GoodRecorder(self, logger)
     recorder.record("goober.paf")
Пример #6
0
 def testBadSubclass(self):
     logger = Log(Log.getDefaultLog(), "tester")
     logger.setThreshold(Log.FATAL + 10)
     recorder = BadRecorder(logger)
     self.assertRaises(RuntimeError, recorder.record, "file")
Пример #7
0
class DataTriggeredSchedulerTestCase(unittest.TestCase):

    def setUp(self):
        self.bb = Blackboard(bbdir)
        self.sched = None
        self.logger = Log(rootlogger, "sched")
        
    def tearDown(self):
        self.logger.setThreshold(Log.INHERIT_THRESHOLD)
        if os.path.exists(bbdir):
            os.system("rm -rf %s" % bbdir)
        self.sched = None

    def testCtor(self):
        policy = Policy.createPolicy(os.path.join(exampledir,
                                                  "ccdassembly-joboffice.paf"))
        spolicy = policy.getPolicy("schedule")
        sched = DataTriggeredScheduler(self.bb, spolicy, self.logger)

        self.assert_(sched.nametmpl is None)
        self.assertEquals(sched.defaultName, "Job")
        self.assertEquals(sched.nameNumber, 1)
        self.assertEquals(len(sched.triggers), 1)
        self.assertEquals(len(sched.inputdata), 1)

    def testCreateName(self):
        policy = Policy.createPolicy(os.path.join(exampledir,
                                                  "ccdassembly-joboffice.paf"))
        spolicy = policy.getPolicy("schedule")
        sched = DataTriggeredScheduler(self.bb, spolicy, self.logger)
        
        ds = Dataset("PostISR", ampid=3)
        self.assertEquals(sched.createName(ds), "Job-1")

    def testCreateName2(self):
        policy = Policy.createPolicy(os.path.join(exampledir,
                                                  "ccdassembly-joboffice.paf"))
        spolicy = policy.getPolicy("schedule")
        spolicy.set("job.name.template", "%(type)s-v%(ampid)s")
        sched = DataTriggeredScheduler(self.bb, spolicy, self.logger)
        
        ds = Dataset("PostISR", ampid=3)
        self.assertEquals(sched.createName(ds), "PostISR-v3")


    def testProcessDataset(self):
        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 0)

        policy = Policy.createPolicy(os.path.join(exampledir,
                                                  "ccdassembly-joboffice.paf"))
        spolicy = policy.getPolicy("schedule")
        self.sched = DataTriggeredScheduler(self.bb, spolicy, self.logger)

        # pdb.set_trace()
        ds = Dataset("PostISR", visitid=88, ccdid=22, snapid=0, ampid=15)
        self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 1)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 1)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.getName(), "Job-1")
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 15)
            self.assertEquals(self.sched.nameNumber, 2)
    
        ds = Dataset("PostISR", visitid=95, ccdid=22, snapid=0, ampid=15)
        self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 2)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(1)
            self.assertEquals(job.getName(), "Job-2")
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 15)
            inputs = job.getInputDatasets()
            self.assertEquals(len(inputs), 16)
            self.assertEquals(inputs[0].type, "PostISR")
            self.assertEquals(self.sched.nameNumber, 3)

        ds = Dataset("PostISR", visitid=88, ccdid=22, snapid=0, ampid=14)
        self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 3)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 14)

        # pdb.set_trace()
        for i in xrange(14):
            ds = Dataset("PostISR", visitid=88, ccdid=22, snapid=0, ampid=i)
            self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 17)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 0)
            self.assert_(job.isReady())

    def testMakeAvail(self):
        self.testProcessDataset()

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 17)
            self.assertEquals(self.bb.queues.jobsAvailable.length(), 0)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.getName(), "Job-1")
            self.assert_(job.isReady())
            job = self.bb.queues.jobsPossible.get(1)
            self.assertEquals(job.getName(), "Job-2")
            self.assert_(not job.isReady())

        self.sched.makeJobsAvailable()

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 17)
            self.assertEquals(self.bb.queues.jobsAvailable.length(), 1)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 1)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.getName(), "Job-2")
            self.assert_(not job.isReady())
            job = self.bb.queues.jobsAvailable.get(0)
            self.assertEquals(job.getName(), "Job-1")
Пример #8
0
class DataTriggeredSchedulerTestCase2(unittest.TestCase):
    """
    test for a specific (unticketed) coding bug in _determineJobIdentity().
    """

    def setUp(self):
        self.bb = Blackboard(bbdir)
        self.sched = None
        self.logger = Log(rootlogger, "sched")
        
    def tearDown(self):
        self.logger.setThreshold(Log.INHERIT_THRESHOLD)
        if os.path.exists(bbdir):
            os.system("rm -rf %s" % bbdir)
        self.sched = None

    def testProcessDataset(self):
        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 0)

        policy = Policy.createPolicy(os.path.join(exampledir,
                                                  "ccdassembly-joboffice.paf"))
        spolicy = policy.getPolicy("schedule")

        # manipulate the policy
        idp = Policy.createPolicy(PolicyString(idpolicy))
        spolicy.set("job.identity", idp)
        
        self.sched = DataTriggeredScheduler(self.bb, spolicy, self.logger)

        # pdb.set_trace()
        ds = Dataset("PostISR", visitid=88, ccdid=22, snapid=0, ampid=15)
        self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 1)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 1)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.getName(), "Job-1")
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 15)
            self.assertEquals(self.sched.nameNumber, 2)
    
        ds = Dataset("PostISR", visitid=95, ccdid=22, snapid=0, ampid=15)
        self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 2)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(1)
            self.assertEquals(job.getName(), "Job-2")
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 15)
            inputs = job.getInputDatasets()
            self.assertEquals(len(inputs), 16)
            self.assertEquals(inputs[0].type, "PostISR")
            self.assertEquals(self.sched.nameNumber, 3)

        ds = Dataset("PostISR", visitid=88, ccdid=22, snapid=0, ampid=14)
        self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 3)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 14)

        # pdb.set_trace()
        for i in xrange(14):
            ds = Dataset("PostISR", visitid=88, ccdid=22, snapid=0, ampid=i)
            self.sched.processDataset(ds)

        with self.bb.queues:
            self.assertEquals(self.bb.queues.dataAvailable.length(), 17)
            self.assertEquals(self.bb.queues.jobsPossible.length(), 2)
            job = self.bb.queues.jobsPossible.get(0)
            self.assertEquals(job.triggerHandler.getNeededDatasetCount(), 0)
            self.assert_(job.isReady())
Пример #9
0
class TestCase(unittest.TestCase):
    def setUp(self):
        self.file = "tests/testFileLog-out.txt"
        self.root = Log()
        self.logger = Log(self.root, "test")

    def tearDown(self):
        del self.root
        del self.logger
        if os.path.exists(self.file):
            os.remove(self.file)

    def testAddFile(self):
        self.logger.addDestination(self.file)
        self.logger.log(Log.INFO, "in file")

        self.root.log(Log.INFO, "in bit bucket")

        fd = open(self.file)
        try:
            lines = fd.readlines()
            self.assertEqual(len([l for l in lines if l.find("in file") >= 0]),
                             1)
            self.assertEqual(len([l for l in lines if l.find("bucket") >= 0]),
                             0)
        finally:
            fd.close()

    def testPassAll(self):
        self.logger.addDestination(self.file)
        self.logger.log(Log.DEBUG, "in file")
        self.logger.setThreshold(Log.DEBUG)
        self.logger.log(Log.DEBUG, "debugging")

        fd = open(self.file)
        try:
            lines = fd.readlines()
            self.assertEqual(len([l for l in lines if l.find("in file") >= 0]),
                             0)
            self.assertEqual(
                len([l for l in lines if l.find("debugging") >= 0]), 1)
        finally:
            fd.close()

    def testVerbose(self):
        self.logger.addDestination(self.file, True)
        self.logger.log(Log.DEBUG, "in file")
        self.logger.setThreshold(Log.DEBUG)
        self.logger.log(Log.DEBUG, "debugging")

        fd = open(self.file)
        try:
            lines = fd.readlines()
            self.assertEqual(len([l for l in lines if l.find("in file") >= 0]),
                             0)
            self.assertEqual(
                len([l for l in lines if l.find("debugging") >= 0]), 1)
            self.assertEqual(len([l for l in lines if l.find("LEVEL") >= 0]),
                             1)
        finally:
            fd.close()
"""
Tests of the ProvenanceRecorder
"""
import pdb                              # we may want to say pdb.set_trace()
import os
import sys
import unittest
import time

from lsst.pex.logging import Log
from lsst.ctrl.provenance import ProvenanceRecorder
from lsst.ctrl.provenance import ProvenanceSetup

logger = Log(Log.getDefaultLog(), "tester")
logger.setThreshold(Log.FATAL+10)
repos = os.path.join(os.environ['CTRL_PROVENANCE_DIR'], "tests", "policy")
prodPolicyFile = os.path.join(repos, "production.paf")

class GoodRecorder(ProvenanceRecorder):
    def __init__(self, testcase, logger=None):
        ProvenanceRecorder.__init__(self, logger, True)
        self.tester = testcase

    def record(self, filename):
        self.tester.assert_(len(filename) > 0, "empty filename found")
        self._logger.log(Log.INFO, "recording "+filename)
        self.tester.recorded += 1

class ProvenanceSetupTestCase(unittest.TestCase):