Example #1
0
 def test_should_instantiate__no_filter(self):
     template = TemplateUnit({
         'template-resource': 'resource',
     })
     self.assertTrue(
         template.should_instantiate(Resource({'attr': 'value'})))
     self.assertTrue(
         template.should_instantiate(Resource({'attr': 'other value'})))
     self.assertTrue(template.should_instantiate(Resource()))
Example #2
0
 def test_instantiate_one(self):
     template = TemplateUnit({
         'template-resource': 'resource',
         'id': 'check-device-{dev_name}',
         'summary': 'Test {name} ({sys_path})',
         'plugin': 'shell',
     })
     job = template.instantiate_one(Resource({
         'dev_name': 'sda1',
         'name': 'some device',
         'sys_path': '/sys/something',
     }))
     self.assertIsInstance(job, JobDefinition)
     self.assertEqual(job.partial_id, 'check-device-sda1')
     self.assertEqual(job.summary, 'Test some device (/sys/something)')
     self.assertEqual(job.plugin, 'shell')
Example #3
0
 def test_resource_namespace__bare(self):
     """
     Ensure that ``resource_namespace`` is correctly parsed from a
     not-qualified resource identifier
     """
     self.assertEqual(TemplateUnit({
         'template-resource': 'resource'
     }).resource_namespace, None)
Example #4
0
 def test_resource_partial_id__explicit(self):
     """
     Ensure that ``resource_partial_id`` is correctly parsed from a fully
     qualified resource identifier.
     """
     self.assertEqual(TemplateUnit({
         'template-resource': 'explicit::resource'
     }).resource_partial_id, 'resource')
Example #5
0
 def test_resource_partial_id__bare(self):
     """
     Ensure that ``resource_partial_id`` is looked up from the
     ``template-resource`` field
     """
     self.assertEqual(TemplateUnit({
         'template-resource': 'resource'
     }).resource_partial_id, 'resource')
Example #6
0
 def test_template_filter__typical(self):
     """
     Ensure that ``template_filter`` is looked up from the
     ``template-filter`` field.
     """
     self.assertEqual(TemplateUnit({
         'template-filter': 'resource.attr == "value"'
     }).template_filter, 'resource.attr == "value"')
Example #7
0
 def test_resource_id__explicit(self):
     """
     Ensure that ``resource_id`` is the fully-qualified resource identifier
     when ``template-resource`` is also fully-qualified.
     """
     self.assertEqual(TemplateUnit({
         'template-resource': 'explicit::resource'
     }).resource_id, 'explicit::resource')
Example #8
0
 def test_resource_namespace__explicit(self):
     """
     Ensure that ``resource_namespace``, is correctly pared from a
     fully-qualified resource identifier
     """
     self.assertEqual(TemplateUnit({
         'template-resource': 'explicit::resource'
     }).resource_namespace, 'explicit')
Example #9
0
 def test_resource_id__bare(self):
     """
     Ensure that ``resource_id`` is just the partial resource identifier
     when both a fully-qualified resource identifier and the provider
     namespace are absent.
     """
     self.assertEqual(TemplateUnit({
         'template-resource': 'resource'
     }).resource_id, 'resource')
Example #10
0
 def test_instantiate_missing_parameter(self):
     """
     Ensure that a MissingParam exeception is raised when attempting to
     instantiate a template unit that contains a paremeter not present in
     the associated resource.
     """
     template = TemplateUnit({
         'template-resource': 'resource',
         'id': 'check-device-{missing}',
         'plugin': 'shell',
     })
     job = template.instantiate_one(Resource({
         'dev_name': 'sda1',
         'name': 'some device',
         'sys_path': '/sys/something',
     }))
     self.assertIsInstance(job, JobDefinition)
     with self.assertRaises(MissingParam):
         self.assertEqual(job.partial_id, 'check-device-sda1')
Example #11
0
 def test_get_filter_program__bare(self):
     # Programs are properly represented
     prog = TemplateUnit({
         'template-filter': 'resource.attr == "value"'
     }).get_filter_program()
     # The program wraps the right expressions
     self.assertEqual(prog.expression_list,
                      [ResourceExpression('resource.attr == "value"')])
     # The program references the right resources
     self.assertEqual(prog.required_resources, set(['resource']))
Example #12
0
 def test_resource_id__template_and_provider_ns(self):
     """
     Ensure that ``resource_id`` is the fully-qualified resource identifier
     when ``template-resource`` refers to a partial identifier but the
     provider has a namespace we can use
     """
     provider = mock.Mock(spec=IProvider1)
     provider.namespace = 'namespace'
     self.assertEqual(TemplateUnit({
         'template-resource': 'rc'
     }, provider=provider).resource_id, 'namespace::rc')
Example #13
0
 def test_resource_id__template_imports(self):
     """
     Ensure that ``resource_id`` is the fully-qualified resource identifier
     when ``template-resource`` refers to a ``template-imports`` imported
     name
     """
     self.assertEqual(TemplateUnit({
         'template-imports': (
             'from com.example import resource/name as rc'),
         'template-resource': 'rc'
     }).resource_id, 'com.example::resource/name')
Example #14
0
 def test_resource_namespace__implicit(self):
     """
     Ensure that ``resource_namespace``, if not parsed from a
     fully-qualified resource identifier, defaults to the provider
     namespace.
     """
     provider = mock.Mock(spec=IProvider1)
     self.assertEqual(
         TemplateUnit({
             'template-resource': 'resource'
         }, provider=provider).resource_namespace, provider.namespace)
Example #15
0
 def test_template_filter__multi_line(self):
     """
     Ensure that ``template_filter`` can have multiple lines
     (corresponding to multiple conditions that must be met)
     """
     self.assertEqual(
         TemplateUnit({
             'template-filter': ('resource.attr == "value"\n'
                                 'resource.other == "some other value"\n')
         }).template_filter, ('resource.attr == "value"\n'
                              'resource.other == "some other value"\n'))
Example #16
0
 def test_get_filter_program__inherited(self):
     provider = mock.Mock(spec=IProvider1)
     provider.namespace = 'inherited'
     # Programs are properly represented
     prog = TemplateUnit({
         'template-resource': 'resource',
         'template-filter': 'resource.attr == "value"'
     }, provider=provider).get_filter_program()
     # The program wraps the right expressions
     self.assertEqual(
         prog.expression_list,
         [ResourceExpression('resource.attr == "value"')])
     # The program references the right resources
     self.assertEqual(prog.required_resources, set(['inherited::resource']))
Example #17
0
 def test_instantiate_all(self):
     template = TemplateUnit({
         'template-resource': 'resource',
         'template-filter': 'resource.attr == "value"',
         'id': 'check-device-{dev_name}',
         'summary': 'Test {name} ({sys_path})',
         'plugin': 'shell',
     })
     unit_list = template.instantiate_all([
         Resource({
             'attr': 'value',
             'dev_name': 'sda1',
             'name': 'some device',
             'sys_path': '/sys/something',
         }),
         Resource({
             'attr': 'bad value',
             'dev_name': 'sda2',
             'name': 'some other device',
             'sys_path': '/sys/something-else',
         })
     ])
     self.assertEqual(len(unit_list), 1)
     self.assertEqual(unit_list[0].partial_id, 'check-device-sda1')
Example #18
0
    def test_resource_id__template_imports_and_provider_ns(self):
        """
        Ensure that ``resource_id`` is the fully-qualified resource identifier
        when ``template-resource`` refers to a ``template-imports`` imported
        name, even if provider namespace could have been otherwise used

        We're essentially testing priority of imports over the implicit namespa
        """
        provider = mock.Mock(spec=IProvider1)
        provider.namespace = 'namespace'
        self.assertEqual(TemplateUnit({
            'template-imports': (
                'from com.example import resource/name as rc'),
            'template-resource': 'rc'
        }, provider=provider).resource_id, 'com.example::resource/name')
Example #19
0
 def test_observe_result__missing_resource_key(self, mock_logger):
     job = make_job("R", plugin="resource")
     template = TemplateUnit({
         'template-resource': job.id,
         'id': 'foo-{missing}',
         'plugin': 'shell'
     })
     result = mock.Mock(spec=IJobResult, outcome=IJobResult.OUTCOME_PASS)
     result.get_io_log.return_value = [(0, 'stdout', b'attr: value1\n'),
                                       (0, 'stdout', b'\n'),
                                       (0, 'stdout', b'attr: value2\n')]
     session_state = SessionState([template, job])
     self.ctrl.observe_result(session_state, job, result)
     # Ensure that a warning was logged
     mock_logger.warning.assert_called_with(
         "Ignoring %s with missing template parameter %s", "foo-{missing}",
         "missing")
Example #20
0
 def test_resource_namespace__empty(self):
     """
     Ensure that ``resource_namespace`` defaults to None
     """
     self.assertEqual(TemplateUnit({}).resource_namespace, None)
Example #21
0
 def test_resource_partial_id__empty(self):
     """
     Ensure that ``resource_partial_id`` defaults to None
     """
     self.assertEqual(TemplateUnit({}).resource_partial_id, None)
Example #22
0
 def test_get_target_unit_cls(self):
     t1 = TemplateUnit({})
     self.assertIs(t1.get_target_unit_cls(), JobDefinition)
     t2 = TemplateUnit({'template-unit': 'job'})
     self.assertIs(t2.get_target_unit_cls(), JobDefinition)
     t3 = TemplateUnit({'template-unit': 'unit'})
     self.assertIs(t3.get_target_unit_cls(), Unit)
     t4 = TemplateUnit({'template-unit': 'template'})
     self.assertIs(t4.get_target_unit_cls(), TemplateUnit)
Example #23
0
 def test_get_filter_program__nothing(self):
     # Without a template-program field there is no filter program
     self.assertEqual(TemplateUnit({}).get_filter_program(), None)
Example #24
0
 def test_template_filter__empty(self):
     """
     Ensure that ``template_filter`` defaults to None
     """
     self.assertEqual(TemplateUnit({}).template_filter, None)
Example #25
0
 def test_template_resource__explicit(self):
     self.assertEqual(
         TemplateUnit({
             'template-resource': 'explicit::resource'
         }).template_resource, 'explicit::resource')
Example #26
0
 def test_template_resource__bare(self):
     self.assertEqual(
         TemplateUnit({
             'template-resource': 'resource'
         }).template_resource, 'resource')
Example #27
0
 def test_template_resource__empty(self):
     self.assertEqual(TemplateUnit({}).template_resource, None)