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())
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())
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)
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())
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())
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)