コード例 #1
0
ファイル: test_job.py プロジェクト: jeffmarcom/checkbox
 def test_via_does_not_change_checksum(self):
     parent = JobDefinition({'name': 'parent', 'plugin': 'local'})
     child = parent.create_child_job_from_record(
         RFC822Record({'name': 'test', 'plugin': 'shell'}, None))
     helper = JobDefinition({'name': 'test', 'plugin': 'shell'})
     self.assertEqual(child.via, parent.get_checksum())
     self.assertEqual(child.get_checksum(), helper.get_checksum())
コード例 #2
0
ファイル: test_job.py プロジェクト: jds2001/ocp-checkbox
 def test_checksum_smoke(self):
     job1 = JobDefinition({"name": "name", "plugin": "plugin"})
     identical_to_job1 = JobDefinition({"name": "name", "plugin": "plugin"})
     # Two distinct but identical jobs have the same checksum
     self.assertEqual(job1.get_checksum(), identical_to_job1.get_checksum())
     job2 = JobDefinition({"name": "other name", "plugin": "plugin"})
     # Two jobs with different definitions have different checksum
     self.assertNotEqual(job1.get_checksum(), job2.get_checksum())
     # The checksum is stable and does not change over time
     self.assertEqual(job1.get_checksum(), "ad137ba3654827cb07a254a55c5e2a8daa4de6af604e84ccdbe9b7f221014362")
コード例 #3
0
ファイル: test_job.py プロジェクト: nkaul/ocp-checkbox
 def test_via_does_not_change_checksum(self):
     parent = JobDefinition({'name': 'parent', 'plugin': 'local'})
     child = parent.create_child_job_from_record(
         RFC822Record({
             'name': 'test',
             'plugin': 'shell'
         }, None))
     helper = JobDefinition({'name': 'test', 'plugin': 'shell'})
     self.assertEqual(child.via, parent.get_checksum())
     self.assertEqual(child.get_checksum(), helper.get_checksum())
コード例 #4
0
ファイル: test_job.py プロジェクト: nkaul/ocp-checkbox
 def test_checksum_smoke(self):
     job1 = JobDefinition({'name': 'name', 'plugin': 'plugin'})
     identical_to_job1 = JobDefinition({'name': 'name', 'plugin': 'plugin'})
     # Two distinct but identical jobs have the same checksum
     self.assertEqual(job1.get_checksum(), identical_to_job1.get_checksum())
     job2 = JobDefinition({'name': 'other name', 'plugin': 'plugin'})
     # Two jobs with different definitions have different checksum
     self.assertNotEqual(job1.get_checksum(), job2.get_checksum())
     # The checksum is stable and does not change over time
     self.assertEqual(
         job1.get_checksum(),
         "ad137ba3654827cb07a254a55c5e2a8daa4de6af604e84ccdbe9b7f221014362")
コード例 #5
0
ファイル: test_suspend.py プロジェクト: jds2001/ocp-checkbox
class GeneratedJobSuspendTests(TestCase):
    """
    Tests that check how SessionSuspendHelper behaves when faced with
    generated jobs. This tests sets up the following job hierarchy:

        __category__
           \-> generator
                \-> generated

    The "__category__" job is a typical "catter" job that cats an existing
    job from somewhere else in the filesystem. This type of generated job
    is used often for category assignment.

    The "generator" job is a typical non-catter job that actually creates
    new jobs in some way. In this test it generates a job called "generated".
    """

    def setUp(self):
        # Crete a "__category__" job
        self.category_job = JobDefinition({
            "plugin": "local",
            "name": "__category__"
        })
        # Create a "generator" job
        self.generator_job = JobDefinition({
            "plugin": "local",
            "name": "generator"
        })
        # Keep a variable for the (future) generated job
        self.generated_job = None
        # Create a result for the "__category__" job.
        # It must define a verbatim copy of the "generator" job
        self.category_result = MemoryJobResult({
            "io_log": [
                (0.0, "stdout", b'plugin:local\n'),
                (0.1, "stdout", b'name:generator\n'),
            ]
        })
        # Create a result for the "generator" job.
        # It will define the "generated" job
        self.generator_result = MemoryJobResult({
            "io_log": [(0.0, 'stdout', b'name:generated')]
        })
        # Create a session that knows about the two jobs that exist
        # directly as files (__category__ and generator)
        self.session_state = SessionState([
            self.category_job, self.generator_job])
        # Select both of them for execution.
        self.session_state.update_desired_job_list([
            self.category_job, self.generator_job])
        # "execute" the "__category__" job by showing the session the result
        self.session_state.update_job_result(
            self.category_job, self.category_result)
        # Ensure that the generator job gained the "via" attribute
        # This is how we know the code above has no typos or anything.
        self.assertEqual(
            self.generator_job.via, self.category_job.get_checksum())
        # "execute" the "generator" job by showing the session the result.
        # Connect the 'on_job_added' signal to a helper function that
        # extracts the "generated" job

        def job_added(self, job):
            self.generated_job = job
        # Use partial to supply 'self' from the class into the function above
        self.session_state.on_job_added.connect(partial(job_added, self))
        # Show the result of the "generator" job to the session,
        # this will define the "generated" job, fire the signal
        # and call our callback
        self.session_state.update_job_result(
            self.generator_job, self.generator_result)
        # Ensure that we got the generated_job variable assigned
        # (by the event/signal handled above)
        self.assertIsNot(self.generated_job, None)
        # Now the stage is set for testing. Let's create the suspend helper
        # and use the data we've defined so far to create JSON-friendly
        # description of the session state.
        self.helper = SessionSuspendHelper()
        self.data = self.helper._repr_SessionState(self.session_state)

    def test_state_tracked_for_all_jobs(self):
        """
        verify that 'state' keeps track of all three jobs
        """
        self.assertIn(self.category_job.name, self.data['jobs'])
        self.assertIn(self.generator_job.name, self.data['jobs'])
        self.assertIn(self.generated_job.name, self.data['jobs'])

    def test_category_job_result_is_saved(self):
        """
        verify that the 'category' job result was saved
        """
        # This result is essential to re-create the association
        # with the 'generator' job. In theory we could get it from
        # the 'via' attribute but that is only true for category assignment
        # where the child job already exists and is defined on the
        # filesystem. This would not work in the case of truly generated jobs
        # so for consistency it is done the same way.
        self.assertEqual(
            self.data['results']['__category__'], [{
                'comments': None,
                'execution_duration': None,
                'outcome': None,
                'return_code': None,
                'io_log': [
                    [0.0, 'stdout', 'cGx1Z2luOmxvY2FsCg=='],
                    [0.1, 'stdout', 'bmFtZTpnZW5lcmF0b3IK']
                ]
            }]
        )

    def test_generator_job_result_is_saved(self):
        """
        verify that the 'generator' job result was saved
        """
        self.assertEqual(
            self.data['results']['generator'], [{
                'comments': None,
                'execution_duration': None,
                'outcome': None,
                'return_code': None,
                'io_log': [
                    [0.0, 'stdout', 'bmFtZTpnZW5lcmF0ZWQ='],
                ]
            }]
        )

    def test_generated_job_result_is_saved(self):
        """
        verify that the 'generated' job result was saved
        """
        # This is the implicit "empty" result that all jobs have
        self.assertEqual(
            self.data['results']['generated'], [{
                'comments': None,
                'execution_duration': None,
                'outcome': None,
                'return_code': None,
                'io_log': []
            }]
        )

    def test_sanity_check(self):
        """
        verify that the whole suspend data looks right
        """
        # This test is pretty much a "eyeball" inspection test
        # where we can see everything at a glance and not have to
        # deduce how each part looks like from the tests above.
        #
        # All the data below is verbatim copy of the generated  suspend data
        # that was created when this test was written. The only modification
        # was wrapping of the checksums in ( ) to make them wrap correctly
        # so that the file can stay PEP-8 clean
        self.maxDiff = None
        self.assertEqual(self.data, {
            'jobs': {
                '__category__': (
                    '5267192a5eac9288d144242d800b981eeca476c17e0'
                    'dd32a09c4b3ea0a14f955'),
                'generator': (
                    '7e67e23b7e7a6a5803721a9f282c0e88c7f40bae470'
                    '950f880e419bb9c7665d8'),
                'generated': (
                    'bfee8c57b6adc9f0f281b59fe818de2ed98b6affb78'
                    '9cf4fbf282d89453190d3'),
            },
            'results': {
                '__category__': [{
                    'comments': None,
                    'execution_duration': None,
                    'io_log': [
                        [0.0, 'stdout', 'cGx1Z2luOmxvY2FsCg=='],
                        [0.1, 'stdout', 'bmFtZTpnZW5lcmF0b3IK']],
                    'outcome': None,
                    'return_code': None,
                }],
                'generator': [{
                    'comments': None,
                    'execution_duration': None,
                    'io_log': [
                        [0.0, 'stdout', 'bmFtZTpnZW5lcmF0ZWQ=']],
                    'outcome': None,
                    'return_code': None,
                }],
                'generated': [{
                    'comments': None,
                    'execution_duration': None,
                    'io_log': [],
                    'outcome': None,
                    'return_code': None,
                }]
            },
            'desired_job_list': ['__category__', 'generator'],
            'metadata': {
                'flags': [],
                'running_job_name': None,
                'title': None
            },
        })
コード例 #6
0
ファイル: test_job.py プロジェクト: jds2001/ocp-checkbox
 def test_via_does_not_change_checksum(self):
     parent = JobDefinition({"name": "parent", "plugin": "local"})
     child = parent.create_child_job_from_record(RFC822Record({"name": "test", "plugin": "shell"}, None))
     helper = JobDefinition({"name": "test", "plugin": "shell"})
     self.assertEqual(child.via, parent.get_checksum())
     self.assertEqual(child.get_checksum(), helper.get_checksum())