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())
Exemple #4
0
    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)
Exemple #7
0
    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)
Exemple #8
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())
Exemple #9
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)
Exemple #10
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)
Exemple #11
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)
Exemple #12
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)
Exemple #13
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)
Exemple #14
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)
Exemple #15
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)
Exemple #16
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)
Exemple #17
0
    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)
Exemple #19
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)
Exemple #20
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)