def testInsertFieldInLocalNamespaceCanUpLevel(self): global_ns = field_lib.FieldNamespace('') ns = field_lib.FieldNamespace('local', parent_namespace=global_ns) field = field_lib.Field('field_name') ns.InsertField(field) self.assertEmpty(ns.GetFindings()) self.assertEqual(global_ns.fields, {frozenset({'field', 'name'}): field})
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 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 testInsertFieldInGlobalNamespaceNoSubfields(self): ns = field_lib.FieldNamespace('') field = field_lib.Field('field_name') ns.InsertField(field) self.assertEmpty(ns.GetFindings()) self.assertEqual(ns.fields[frozenset({'field', 'name'})], field)
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 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 testInsertFieldRejectsReversals(self): ns = field_lib.FieldNamespace('') field = field_lib.Field('field_name') field_rev = field_lib.Field('name_field') ns.InsertField(field) self.assertEmpty(ns.GetFindings()) ns.InsertField(field_rev) self.assertIsInstance(ns.GetFindings()[0], findings_lib.DuplicateFieldDefinitionError)
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 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 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 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 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 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 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 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 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 testInsertFieldValidatesCorrectConstruction(self): sf_dict = { 'first': subfield_lib.Subfield('first', AGGREGATION), 'second': subfield_lib.Subfield('second', DESCRIPTOR), 'third': subfield_lib.Subfield('third', COMPONENT), 'fourth': subfield_lib.Subfield('fourth', MEASUREMENT_DESCRIPTOR), 'fifth': subfield_lib.Subfield('fifth', MEASUREMENT), 'sixth': subfield_lib.Subfield('sixth', POINT_TYPE) } ns = field_lib.FieldNamespace('local', subfields=sf_dict) field = field_lib.Field('first_second_third_fourth_fifth_sixth') ns.InsertField(field) self.assertEmpty(ns.GetFindings())
def testInsertDuplicateFieldInGlobalNamespace(self): ns = field_lib.FieldNamespace('') 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 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 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)