Beispiel #1
0
    def testSubfieldUniverseGetFindings(self):
        context = findings_lib.FileContext(_GOOD_PATH + '/file.yaml')
        folder = subfield_lib.SubfieldFolder(_GOOD_PATH)
        folder.AddFinding(
            findings_lib.InconsistentFileLocationError('', context))
        namespace = folder.local_namespace
        namespace.AddFinding(
            findings_lib.DuplicateSubfieldDefinitionError(
                namespace,
                subfield_lib.Subfield(
                    'two', subfield_lib.SubfieldCategory.POINT_TYPE), context))
        subfield_one = subfield_lib.Subfield(
            'one', subfield_lib.SubfieldCategory.POINT_TYPE, 'thing')
        subfield_one.AddFinding(
            findings_lib.MissingSubfieldDescriptionWarning('one', context))
        namespace.InsertSubfield(subfield_one)

        subfields_universe = subfield_lib.SubfieldUniverse([folder])

        findings = subfields_universe.GetFindings()
        self.assertLen(findings, 3)
        self.assertTrue(
            subfields_universe.HasFindingTypes([
                findings_lib.InconsistentFileLocationError,
                findings_lib.DuplicateSubfieldDefinitionError,
                findings_lib.MissingSubfieldDescriptionWarning
            ]))
        self.assertFalse(subfields_universe.IsValid())
Beispiel #2
0
    def testInsertFieldValidatesMultipleDescriptors(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', DESCRIPTOR),
            'second': subfield_lib.Subfield('second', DESCRIPTOR),
            'third': subfield_lib.Subfield('third', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_second_third')

        ns.InsertField(field)
        self.assertEmpty(ns.GetFindings())
Beispiel #3
0
    def testInsertRespectsRequiredSubfields(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', DESCRIPTOR),
            'second': subfield_lib.Subfield('second', DESCRIPTOR),
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_second')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
  def testInsertFieldInLocalNamespace(self):
    sf_dict = {'field': subfield_lib.Subfield('field', DESCRIPTOR)}
    sf_glob_dict = {'name': subfield_lib.Subfield('name', POINT_TYPE)}
    global_ns = field_lib.FieldNamespace('', subfields=sf_glob_dict)
    ns = field_lib.FieldNamespace(
        'local', subfields=sf_dict, parent_namespace=global_ns)
    field = field_lib.Field('field_name')

    ns.InsertField(field)
    self.assertEmpty(ns.GetFindings())
    self.assertEqual(ns.fields, {frozenset({'field', 'name'}): field})
 def testAddDuplicateSubfieldFails(self):
   sff = subfield_lib.SubfieldFolder(_GOOD_PATH)
   ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
   sf = subfield_lib.Subfield('good', subfield_lib.SubfieldCategory.DESCRIPTOR,
                              'hi', ctx)
   sf2 = subfield_lib.Subfield(
       'good', subfield_lib.SubfieldCategory.POINT_TYPE, 'hi2', ctx)
   sff.AddSubfield(sf)
   self.assertEmpty(sff.local_namespace.GetFindings())
   sff.AddSubfield(sf2)
   self.assertIsInstance(sff.local_namespace.GetFindings()[0],
                         findings_lib.DuplicateSubfieldDefinitionError)
Beispiel #6
0
    def testAggregationDescriptorFailsWithoutAggregation(self):
        """Check that aggregation descriptors fail without associated aggregation."""
        sf_dict = {
            'first': subfield_lib.Subfield('first', AGGREGATION_DESCRIPTOR),
            'second': subfield_lib.Subfield('second', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_second')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
Beispiel #7
0
    def testInsertRejectsBadOrder(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', DESCRIPTOR),
            'second': subfield_lib.Subfield('second', COMPONENT),
            'third': subfield_lib.Subfield('third', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('second_first_third')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
Beispiel #8
0
    def testInsertRespectsPointTypeCount(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', MEASUREMENT),
            'second': subfield_lib.Subfield('second', POINT_TYPE),
            'third': subfield_lib.Subfield('third', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_second_third')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
Beispiel #9
0
    def testInsertRespectsMeasurementDescriptorCount(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', MEASUREMENT_DESCRIPTOR),
            'second': subfield_lib.Subfield('second', MEASUREMENT_DESCRIPTOR),
            'third': subfield_lib.Subfield('third', MEASUREMENT),
            'fourth': subfield_lib.Subfield('fourth', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_second_third_fourth')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
Beispiel #10
0
    def testInsertFieldInGlobalNamespaceMatchSubfields(self):
        sf_dict = {
            'field': subfield_lib.Subfield('field', DESCRIPTOR),
            'name': subfield_lib.Subfield('name', POINT_TYPE)
        }

        ns = field_lib.FieldNamespace('', subfields=sf_dict)

        field = field_lib.Field('field_name')

        ns.InsertField(field)
        self.assertEmpty(ns.GetFindings())
        self.assertEqual(ns.fields[frozenset({'field', 'name'})], field)
Beispiel #11
0
    def testInsertRespectsAggregationCount(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', AGGREGATION_DESCRIPTOR),
            'second': subfield_lib.Subfield('second', AGGREGATION_DESCRIPTOR),
            'third': subfield_lib.Subfield('third', AGGREGATION),
            'fourth': subfield_lib.Subfield('fourth', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_second_third_fourth')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
  def testInsertFieldValidatesSubfieldsInMultipleNamespaces(self):
    sf_dict = {
        'first': subfield_lib.Subfield('first', DESCRIPTOR),
        'third': subfield_lib.Subfield('third', POINT_TYPE)
    }
    sf_glob_dict = {'second': subfield_lib.Subfield('second', DESCRIPTOR)}
    global_ns = field_lib.FieldNamespace('', subfields=sf_glob_dict)
    ns = field_lib.FieldNamespace(
        'local', subfields=sf_dict, parent_namespace=global_ns)
    field = field_lib.Field('first_second_third')

    ns.InsertField(field)
    self.assertEmpty(ns.GetFindings())
  def testSubfieldUniverseGetSubfieldsMap(self):
    # Create field folders
    folder = subfield_lib.SubfieldFolder(_GOOD_PATH)
    namespace = folder.local_namespace
    namespace.InsertSubfield(subfield_lib.Subfield(
        'one', subfield_lib.SubfieldCategory.POINT_TYPE))
    namespace.InsertSubfield(subfield_lib.Subfield(
        'two', subfield_lib.SubfieldCategory.POINT_TYPE))
    subfields_universe = subfield_lib.SubfieldUniverse([folder])

    subfields_map = subfields_universe.GetSubfieldsMap('mynamespace')

    self.assertIn('one', subfields_map)
    self.assertIn('two', subfields_map)
Beispiel #14
0
 def testCreateSubfieldNoDescription(self):
     ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
     sf = subfield_lib.Subfield('good',
                                subfield_lib.SubfieldCategory.DESCRIPTOR,
                                '', ctx)
     self.assertIsInstance(sf.GetFindings()[0],
                           findings_lib.MissingSubfieldDescriptionWarning)
 def testAddValidSubfield(self):
   sff = subfield_lib.SubfieldFolder(_GOOD_PATH)
   ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
   sff.AddSubfield(
       subfield_lib.Subfield('good', subfield_lib.SubfieldCategory.DESCRIPTOR,
                             'hi', ctx))
   self.assertIn('good', sff.local_namespace.subfields)
Beispiel #16
0
 def testCreateSubfieldIllegalName(self):
     ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
     sf = subfield_lib.Subfield('goo-1d',
                                subfield_lib.SubfieldCategory.DESCRIPTOR,
                                'hi', ctx)
     self.assertIsInstance(sf.GetFindings()[0],
                           findings_lib.InvalidSubfieldNameError)
  def testInsertFieldInLocalNamespaceMatchesGlobalSubs(self):
    sf_dict = {'field': subfield_lib.Subfield('field', DESCRIPTOR)}
    sf_glob_dict = {'name': subfield_lib.Subfield('name', POINT_TYPE)}
    global_ns = field_lib.FieldNamespace('', subfields=sf_glob_dict)
    ns = field_lib.FieldNamespace(
        'local', subfields=sf_dict, parent_namespace=global_ns)

    field = field_lib.Field('field_name')
    bad_field = field_lib.Field('field_name_unmatched')

    ns.InsertField(field)
    self.assertEmpty(ns.GetFindings())
    ns.InsertField(bad_field)
    self.assertEqual(ns.fields, {frozenset({'field', 'name'}): field})
    self.assertLen(ns.GetFindings(), 1)
    self.assertIsInstance(ns.GetFindings()[0],
                          findings_lib.MissingSubfieldError)
 def testAddInvalidSubfieldFails(self):
   sff = subfield_lib.SubfieldFolder(_GOOD_PATH)
   ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
   sff.AddSubfield(
       subfield_lib.Subfield('1-bad', subfield_lib.SubfieldCategory.DESCRIPTOR,
                             'hi', ctx))
   self.assertIsInstance(sff.GetFindings()[0],
                         findings_lib.IllegalCharacterError)
  def testInsertDuplicateFieldInLocalNamespace(self):
    sf_dict = {'field': subfield_lib.Subfield('field', DESCRIPTOR)}
    sf_glob_dict = {'name': subfield_lib.Subfield('name', POINT_TYPE)}
    global_ns = field_lib.FieldNamespace('', subfields=sf_glob_dict)
    ns = field_lib.FieldNamespace(
        'local', subfields=sf_dict, parent_namespace=global_ns)

    field = field_lib.Field('field_name')
    field_clone = field_lib.Field('field_name')

    ns.InsertField(field)
    self.assertEmpty(ns.GetFindings())
    ns.InsertField(field_clone)
    self.assertEqual(ns.fields, {frozenset({'field', 'name'}): field})
    self.assertEqual(id(ns.fields[frozenset({'field', 'name'})]), id(field))
    self.assertLen(ns.GetFindings(), 1)
    self.assertIsInstance(ns.GetFindings()[0],
                          findings_lib.DuplicateFieldDefinitionError)
Beispiel #20
0
 def testAddSubfieldWithUpperFails(self):
     sff = subfield_lib.SubfieldFolder(_GOOD_PATH)
     ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
     sf = subfield_lib.Subfield('gOod',
                                subfield_lib.SubfieldCategory.DESCRIPTOR,
                                'hi', ctx)
     sff.AddSubfield(sf)
     self.assertIsInstance(sff.GetFindings()[0],
                           findings_lib.InvalidSubfieldNameError)
Beispiel #21
0
    def testInsertFieldInGlobalNamespaceMissingSubfields(self):
        sf_dict = {'field': subfield_lib.Subfield('field', POINT_TYPE)}
        ns = field_lib.FieldNamespace('', subfields=sf_dict)

        field = field_lib.Field('field_name')

        ns.InsertField(field)
        self.assertEqual(ns.fields, {})
        self.assertLen(ns.GetFindings(), 1)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.UnrecognizedSubfieldError)
Beispiel #22
0
    def testInsertRejectsSetXWithNoMeasurement(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', COMPONENT),
            'sensor': subfield_lib.Subfield('sensor', POINT_TYPE),
            'setpoint': subfield_lib.Subfield('setpoint', POINT_TYPE),
            'accumulator': subfield_lib.Subfield('accumulator', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('first_sensor')
        field2 = field_lib.Field('first_setpoint')
        field3 = field_lib.Field('first_accumulator')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)
        ns.InsertField(field2)
        self.assertIsInstance(ns.GetFindings()[1],
                              findings_lib.InvalidFieldConstructionError)
        ns.InsertField(field3)
        self.assertIsInstance(ns.GetFindings()[1],
                              findings_lib.InvalidFieldConstructionError)
Beispiel #23
0
    def testInsertFieldValidatesCorrectConstruction(self):
        sf_dict = {
            'first': subfield_lib.Subfield('first', AGGREGATION_DESCRIPTOR),
            'second': subfield_lib.Subfield('second', AGGREGATION),
            'third': subfield_lib.Subfield('third', DESCRIPTOR),
            'fourth': subfield_lib.Subfield('fourth', COMPONENT),
            'fifth': subfield_lib.Subfield('fifth', MEASUREMENT_DESCRIPTOR),
            'sixth': subfield_lib.Subfield('sixth', MEASUREMENT),
            'seventh': subfield_lib.Subfield('seventh', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field(
            'first_second_third_fourth_fifth_sixth_seventh')

        ns.InsertField(field)
        self.assertEmpty(ns.GetFindings())
Beispiel #24
0
 def testCreateSubfield(self):
     ctx = findings_lib.FileContext('{0}/file.yaml'.format(_GOOD_PATH))
     sf = subfield_lib.Subfield('good',
                                subfield_lib.SubfieldCategory.DESCRIPTOR,
                                'hi', ctx)
     self.assertEmpty(sf.GetFindings())
Beispiel #25
0
    def testInsertRespectsDescriptorLimit(self):
        sf_dict = {
            'a': subfield_lib.Subfield('a', DESCRIPTOR),
            'b': subfield_lib.Subfield('b', DESCRIPTOR),
            'c': subfield_lib.Subfield('c', DESCRIPTOR),
            'd': subfield_lib.Subfield('d', DESCRIPTOR),
            'e': subfield_lib.Subfield('e', DESCRIPTOR),
            'f': subfield_lib.Subfield('f', DESCRIPTOR),
            'g': subfield_lib.Subfield('g', DESCRIPTOR),
            'h': subfield_lib.Subfield('h', DESCRIPTOR),
            'i': subfield_lib.Subfield('i', DESCRIPTOR),
            'j': subfield_lib.Subfield('j', DESCRIPTOR),
            'k': subfield_lib.Subfield('k', DESCRIPTOR),
            'l': subfield_lib.Subfield('l', POINT_TYPE)
        }
        ns = field_lib.FieldNamespace('local', subfields=sf_dict)
        field = field_lib.Field('a_b_c_d_e_f_g_h_i_j_k_l')

        ns.InsertField(field)
        self.assertIsInstance(ns.GetFindings()[0],
                              findings_lib.InvalidFieldConstructionError)