Ejemplo n.º 1
0
    def round_trip_proto_spec_via_string(self, match):
        """
        Convert a MsgSpec object model to canonical string form,
        parse that to make a clone, and verify that the two are
        """
        canonical_spec = str(match.__repr__())
        # DEBUG
        print("### roundTrip: SPEC IN CANONICAL FORM:\n" + canonical_spec)
        print("### END SPEC IN CANONICAL FORM #######")
        # END
        str_ps_parser = StringProtoSpecParser(StringIO(canonical_spec))
        cloned_spec = str_ps_parser.parse()
        self.assertIsNone(cloned_spec.parent)
        self.assertIsNotNone(cloned_spec.reg)

        # DEBUG
        clone_repr = cloned_spec.__repr__()
        print("### CLONED SPEC IN CANONICAL FORM:\n" + clone_repr)
        print("### END CLONED SPEC ##############")
        # END

        # crude tests of __eq__ AKA ==
        self.assertFalse(match is None)
        self.assertTrue(match == match)

        # one way of saying it ------------------
        # XXX NEXT LINE FAILS
        self.assertTrue(match.__eq__(cloned_spec))

        self.assertTrue(cloned_spec.__eq__(match))
        # this is the same test -----------------
        self.assertTrue(match == cloned_spec)
        self.assertTrue(cloned_spec == match)
Ejemplo n.º 2
0
    def setUp(self):
        #       data = StringIO(ALERTZ_PROTO_SPEC)
        #       str_ps_parser = StringProtoSpecParser(data) # data must be file-like
        #       # object model from string serialization
        #       self.str_obj_model = str_ps_parser.parse()
        # self.proto_name = self.str_obj_model.name  # dotted name of protocol

        data = StringIO(ALERTZ_PROTO_SPEC)

        print("AAA")

        str_ps_parser = StringProtoSpecParser(data)  # data must be file-like

        print("BBB")

        # object model from string serialization
        self.str_obj_model = str_ps_parser.parse()

        print("CCC")

        self.proto_name = self.str_obj_model.name  # dotted name of protocol

        print("NNN")
Ejemplo n.º 3
0
    def test_parse_and_write_proto_spec(self):
        data = StringIO(ALERTZ_PROTO_SPEC)
        str_ps_parser = StringProtoSpecParser(data)  # data should be file-like
        # object model from string serialization
        str_obj_model = str_ps_parser.parse()
        self.assertIsNotNone(str_obj_model)
        self.assertTrue(isinstance(str_obj_model, M.ProtoSpec))
        self.assertEqual('org.xlattice.alertz', str_obj_model.name)
        self.assertEqual(0, len(str_obj_model.enums))
        self.assertEqual(16, len(str_obj_model.msgs))
        self.assertEqual(0, len(str_obj_model.seqs))

        msg_spec = str_obj_model.msgs[0]
        self.assertEqual(msg_spec.field_name(0), 'timestamp')
        self.assertEqual(msg_spec.field_type_name(0), 'fuint32')
        self.assertEqual(msg_spec.field_name(1), 'seq_nbr')
        self.assertEqual(msg_spec.field_type_name(1), 'vuint32')

        self.assertEqual(msg_spec.field_name(2), 'zone_name')
        self.assertEqual(msg_spec.field_type_name(2), 'lstring')
        self.assertEqual(msg_spec.field_name(3), 'expected_serial')
        self.assertEqual(msg_spec.field_type_name(3), 'vuint32')
        self.assertEqual(msg_spec.field_name(4), 'actual_serial')
        self.assertEqual(msg_spec.field_type_name(4), 'vuint32')
Ejemplo n.º 4
0
from alertz_proto_spec import ALERTZ_PROTO_SPEC

__all__ = ['__version__', '__version_date__',
           'ALERTZ_MAX_MSG', 'ALERTZ_PORT', 'BUFSIZE',
           'Namespace',
           'STR_OBJ_MODEL', 'PROTO_NAME',
           'ZONE_MISMATCH_MSG', 'CORRUPT_LIST_MSG', 'SHUTDOWN_MSG', ]

__version__ = '0.2.20'
__version_date__ = '2018-03-11'

BUFSIZE = 16 * 1024                   # must allow for all using protocols

# SYNTACTIC MACHINERY -----------------------------------------------
PROTO_TEXT = StringIO(ALERTZ_PROTO_SPEC)       # file-like
STR_PS_PARSER = StringProtoSpecParser(PROTO_TEXT)
# object model from string serialization
STR_OBJ_MODEL = STR_PS_PARSER.parse()
# the dotted name of the protocol
PROTO_NAME = STR_OBJ_MODEL.name

ZONE_MISMATCH_MSG = make_msg_class(STR_OBJ_MODEL, 'zoneMismatch')
CORRUPT_LIST_MSG = make_msg_class(STR_OBJ_MODEL, 'corruptList')
SHUTDOWN_MSG = make_msg_class(STR_OBJ_MODEL, 'shutdown')

# the maximum number of bytes in a message
ALERTZ_MAX_MSG = 512
ALERTZ_PORT = 55555

# -- NAME SPACE -----------------------------------------------------
# code.activestate.com/recipes/577887-a-simple-namespace-class offers