Esempio n. 1
0
 def __init__(self, taskName='test_task'):
     self.taskDirectory = 'data/test_tasks/'
     self.taskName = taskName + '.xml'
     taskPath = self.taskDirectory + self.taskName
     self.taskBuilder = TaskBuilder(taskPath)
     self.taskBuilder.createTemplate()
     self.taskBuilder.addDefaultExecutor()
     self.taskBuilder.save()
     self.componentSinkName = 'Component.in_data'
     self.generatorOutput = 'out_data'
     self.componentName = 'Component'
     self.componentOutput = 'out_data'
     self.runner = DisCODeRunner()
Esempio n. 2
0
 def setUp(self):
     self.defaultFileName = 'data/test_tasks/test_task.xml'
     self.defaultTaskDirectory = 'data/test_tasks/'
     self.builder = TaskBuilder()
Esempio n. 3
0
class ComponentTester:
    def __init__(self, taskName='test_task'):
        self.taskDirectory = 'data/test_tasks/'
        self.taskName = taskName + '.xml'
        taskPath = self.taskDirectory + self.taskName
        self.taskBuilder = TaskBuilder(taskPath)
        self.taskBuilder.createTemplate()
        self.taskBuilder.addDefaultExecutor()
        self.taskBuilder.save()
        self.componentSinkName = 'Component.in_data'
        self.generatorOutput = 'out_data'
        self.componentName = 'Component'
        self.componentOutput = 'out_data'
        self.runner = DisCODeRunner()

    def setComponent(self, componentName, componentType):
        self.taskBuilder.addComponent(componentName, componentType)
        self.taskBuilder.save()

    def addGenerator(self, generatorType, generatorName = 'Generator'):
        self.taskBuilder.addComponent(generatorName, generatorType)
        self.taskBuilder.save()

    def addSink(self, sinkType, sinkInput = 'in_data'):
        self.taskBuilder.addComponent('Sink', sinkType)
        self.taskBuilder.save()

    def addDataStream(self, sourceName, sourcePort, sinkName, sinkPort):
        self.taskBuilder.addDataStream(sourceName + '.' + sourcePort, sinkName + '.' + sinkPort)
        self.taskBuilder.save()

    def start(self, taskName=''):
        if taskName is '':
            self.runner.taskName = self.taskDirectory + self.taskName
        else:
            self.runner.taskName = taskName
        self.runner.start()

    def getOutput(self):
        return self.runner.readOutput()

    def stop(self):
        self.runner.kill()

    def addTerminationStatement(self, terminationStatement):
        self.runner.terminationStatements.append(terminationStatement)

    def resetTerminationStatements(self):
        self.runner.terminationStatements = []

    def setDebugMode(self, debugMode):
        self.runner.debugMode = debugMode
Esempio n. 4
0
class TaskBuilderTest(unittest.TestCase):
    def setUp(self):
        self.defaultFileName = 'data/test_tasks/test_task.xml'
        self.defaultTaskDirectory = 'data/test_tasks/'
        self.builder = TaskBuilder()

    def test_should_create_file_with_specific_name(self):
        file_name = 'data/test_tasks/sample_test_task.xml'
        sample_string = 'sample string'
        if isfile(self.defaultFileName):
            call(['rm', 'data/test_tasks/sample_test_task.xml'])
        self.builder.fileName = file_name

        self.builder.writeToFile(sample_string)

        with open(file_name) as file:
            contents = file.read()
        assert_that(contents, sample_string)

    def test_should_create_directory_for_tasks(self):
        if isdir(self.defaultTaskDirectory):
            rmtree(self.defaultTaskDirectory)
            # call(['rm -r', self.defaultTaskDirectory])

        builder = TaskBuilder()

        assert_that(isdir(self.defaultTaskDirectory), is_(True))

    def test_should_save_task_to_default_file(self):
        taskBody = 'Task body'
        self.builder.taskBody = taskBody

        self.builder.save()

        with open(self.defaultFileName) as file:
            contents = file.read()
        assert_that(contents, equal_to(taskBody))

    def test_should_have_task_tag_on_top_level(self):
        self.builder.createTemplate()

        contents = self.builder.getTaskBody()
        assert_that(contents, starts_with('<Task>'))
        assert_that(contents, ends_with('</Task>\n'))

    def test_should_have_subtasks_and_datastreams_elements(self):
        self.builder.createTemplate()

        contents = xml.dom.minidom.parseString(self.builder.getTaskBody())
        subtasksElements = contents.getElementsByTagName('Subtasks')
        datasetsElements = contents.getElementsByTagName('DataStreams')
        assert_that(subtasksElements.length, equal_to(1))
        assert_that(datasetsElements.length, equal_to(1))

    def test_should_have_main_subtask_element(self):
        self.builder.createTemplate()

        contents = self.builder.getTaskBody()
        assert_that(contents, contains_string('<Subtask name="Main"/>'))

    def test_should_create_executor(self):
        self.builder.createTemplate()
        executorName = 'Custom executor'
        executorPeriod = 2
        self.builder.addExecutor(executorName, executorPeriod)

        contents = self.builder.getTaskBody()
        assert_that(contents,
                    contains_string('<Executor name="' + executorName + '" period="' + str(executorPeriod) + '"/>'))

    def test_should_set_default_executor_period(self):
        self.builder.createTemplate()
        executorName = 'Custom executor'
        self.builder.addExecutor(executorName)

        contents = self.builder.getTaskBody()
        assert_that(contents,
                    contains_string('<Executor name="' + executorName + '" period="1"/>'))

    def test_should_create_default_executor(self):
        self.builder.createTemplate()
        self.builder.addDefaultExecutor()

        contents = self.builder.getTaskBody()
        assert_that(contents, contains_string('<Executor name="Processing" period="1"/>'))

    def test_should_add_component_to_default_executor(self):
        self.builder.createTemplate()
        self.builder.addDefaultExecutor()
        name = 'Sequence'
        componentType = 'CvBasic:Sequence'
        priority = 1
        bump = 0
        self.builder.addComponent(name, componentType, priority, bump)

        contents = self.builder.getTaskBody()
        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        components = dom.getElementsByTagName('Component')
        assert_that(components.length, equal_to(1))
        component = components.item(0)
        assert_that(component.getAttribute('name'), equal_to(name))
        assert_that(component.getAttribute('type'), equal_to(componentType))
        assert_that(component.getAttribute('priority'), equal_to(str(priority)))
        assert_that(component.getAttribute('bump'), equal_to(str(bump)))
        assert_that(contents,
                    contains_string('<Component'
                                    ' bump="' + str(bump) + '"'
                                    ' name="' + name + '"'
                                    ' priority="' + str(priority) + '"'
                                    ' type="' + componentType + '"'
                                                       '/>'))

    def test_should_add_component_with_default_attribute_values(self):
        self.builder.createTemplate()
        self.builder.addDefaultExecutor()
        name = 'Sequence'
        componentType = 'CvBasic:Sequence'
        self.builder.addComponent(name, componentType)

        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        component = dom.getElementsByTagName('Component').item(0)
        assert_that(component.getAttribute('name'), equal_to(name))
        assert_that(component.getAttribute('type'), equal_to(componentType))
        assert_that(component.getAttribute('priority'), equal_to('1'))
        assert_that(component.getAttribute('bump'), equal_to('0'))

    def test_should_add_component_to_specific_executor(self):
        self.builder.createTemplate()
        self.builder.addDefaultExecutor()
        executorName = 'Second'
        self.builder.addExecutor(executorName, 1)
        componentName = 'Sequence'
        componentType = 'CvBasic:Sequence'
        self.builder.addComponentToExecutor(executorName, componentName, componentType)

        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        executors = dom.getElementsByTagName('Executor')
        executor = None
        for e in executors:
            if e.getAttribute('name') == executorName:
                executor = e
        if executor is not None:
            assert_that(executor.childNodes.length, equal_to(3))
            component = executor.childNodes.item(1)
            assert_that(component.getAttribute('name'), equal_to(componentName))
            assert_that(component.getAttribute('type'), equal_to(componentType))
            assert_that(component.getAttribute('priority'), equal_to('1'))
            assert_that(component.getAttribute('bump'), equal_to('0'))
        else:
            assert_that(True, equal_to(False))

    def test_should_add_params_to_component(self):
        self.builder.createTemplate()
        self.builder.addDefaultExecutor()
        self.builder.addComponent('First', 'CvBasic:Sequence')
        self.builder.addComponent('Second', 'CvBasic:SIFT')

        secondParamValue = '.*\.jpg'
        firstParamValue = '/some/directory'
        secondParamName = 'sequence.pattern'
        firstParamName = 'sequence.directory'
        self.builder.addParamToComponent('Second', firstParamName, firstParamValue)
        self.builder.addParamToComponent('Second', secondParamName, secondParamValue)

        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        component = dom.getElementsByTagName('Component').item(1)
        assert_that(component.childNodes.length, equal_to(5))
        firstParam = component.childNodes.item(1)
        assert_that(firstParam.getAttribute('name'), equal_to(firstParamName))
        assert_that(firstParam.firstChild.data, equal_to(firstParamValue))
        secondParam = component.childNodes.item(3)
        assert_that(secondParam.getAttribute('name'), equal_to(secondParamName))
        assert_that(secondParam.firstChild.data, equal_to(secondParamValue))

    def test_should_add_data_stream(self):
        self.builder.createTemplate()

        sourceName = 'First.out_put'
        sinkName = 'Second.in_put'
        self.builder.addDataStream(sourceName, sinkName)

        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        datastreams = dom.getElementsByTagName('Source')
        assert_that(datastreams.length, equal_to(1))
        datastream = datastreams.item(0)
        assert_that(datastream.getAttribute('name'), equal_to(sourceName))
        sink = datastream.childNodes.item(1)
        assert_that(sink.nodeName, equal_to('sink'))
        assert_that(sink.firstChild.data, equal_to(sinkName))

    def test_should_update_data_stream_source(self):
        self.builder.createTemplate()
        sourceName = 'First.out_put'
        sinkName = 'Second.in_put'
        self.builder.addDataStream(sourceName, sinkName)

        newSourceName = 'out_data'
        self.builder.updateSource('First', newSourceName)

        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        datastreams = dom.getElementsByTagName('Source')
        assert_that(datastreams.length, equal_to(1))
        datastream = datastreams.item(0)
        assert_that(datastream.getAttribute('name'), equal_to('First.' + newSourceName))
        sink = datastream.childNodes.item(1)
        assert_that(sink.nodeName, equal_to('sink'))
        assert_that(sink.firstChild.data, equal_to(sinkName))

    def test_should_return_true_if_datastream_source_already_exist(self):
        self.builder.createTemplate()
        sourceName = 'First.out_put'
        sinkName = 'Second.in_put'
        self.builder.addDataStream(sourceName, sinkName)

        assert_that(self.builder.hasSource(sourceName), is_(True))

    def test_should_return_false_if_datastream_source_doesnt_exist(self):
        self.builder.createTemplate()

        assert_that(self.builder.hasSource('Any.source'), is_(False))

        sourceName = 'First.out_put'
        sinkName = 'Second.in_put'
        self.builder.addDataStream(sourceName, sinkName)

        assert_that(self.builder.hasSource('Another.out_put'), is_(False))

    def test_should_update_data_stream_sink(self):
        self.builder.createTemplate()
        sourceName = 'First.out_put'
        sinkName = 'Second.in_put'
        self.builder.addDataStream(sourceName, sinkName)

        newComponentName = 'Third'
        newSinkName = 'in_data'
        self.builder.updateSink('Second', newComponentName, newSinkName)

        dom = xml.dom.minidom.parseString(self.builder.getTaskBody())
        datastreams = dom.getElementsByTagName('Source')
        assert_that(datastreams.length, equal_to(1))
        datastream = datastreams.item(0)
        assert_that(datastream.getAttribute('name'), equal_to('First.out_put'))
        sink = datastream.childNodes.item(1)
        assert_that(sink.nodeName, equal_to('sink'))
        assert_that(sink.firstChild.data, equal_to(newComponentName + '.' + newSinkName))