Added OMCI message parsing tests

Change-Id: Ic864446241c3507dcfb389c7e774d0aa79de3b55
diff --git a/maple_experiments/chat.py b/maple_experiments/chat.py
new file mode 100755
index 0000000..358b728
--- /dev/null
+++ b/maple_experiments/chat.py
@@ -0,0 +1,160 @@
+#!/usr/bin/env python
+
+import sys
+from time import sleep
+
+from scapy.packet import Packet
+from twisted.spread import pb
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, returnValue, DeferredQueue
+from twisted.python import util
+
+from common.frameio.frameio import hexify
+from common.utils.asleep import asleep
+from voltha.extensions.omci.omci import *
+
+
+class OmciProxy(pb.Root):
+
+    def __init__(self):
+        reactor.listenTCP(24497, pb.PBServerFactory(self))
+        self.remote = None
+        self.response_queue = DeferredQueue()
+
+    @inlineCallbacks
+    def connect(self):
+        factory = pb.PBClientFactory()
+        reactor.connectTCP("10.111.101.206", 24498, factory)
+        self.remote = yield factory.getRootObject()
+        print 'connected'
+        yield self.remote.callRemote("setRemote", port=24496)
+
+    def remote_echo(self, pkt_type, pon, onu, port, crc, size, data):
+        print "Packet Type:", pkt_type
+        print "PON:", pon
+        print "ONU ID:", onu
+        print "Port:", port
+        print "CRC OK:", crc
+        print "Packet Size:", size
+        print "received:", hexify(data)
+        self.response_queue.put(data)
+
+    @inlineCallbacks
+    def send_omci(self, msg):
+        if isinstance(msg, Packet):
+            msg = str(msg)
+        try:
+            print ' sending:', msg
+            yield self.remote.callRemote("send_omci", 0, 0, 1, msg)
+            print 'msg sent'
+
+        except Exception, e:
+            print >> sys.stderr, 'Blew up:', str(e)
+
+    def receive(self):
+        return self.response_queue.get()
+
+
+@inlineCallbacks
+def chat():
+    proxy = OmciProxy()
+    yield proxy.connect()
+
+    tx_id = [0]
+    def get_tx_id():
+        tx_id[0] += 1
+        return tx_id[0]
+
+    if 0:
+        # MIB RESET
+        frame = OmciFrame(
+            transaction_id=get_tx_id(),
+            message_type=OmciMibReset.message_id,
+            omci_message=OmciMibReset(
+                entity_class=OntData.class_id
+            )
+        )
+        yield proxy.send_omci(hexify(str(frame)))
+
+        # MIB RESET RESPONSE
+        response = yield proxy.receive()
+        resp = OmciFrame(response)
+        resp.show()
+
+    if 0:
+        # GET ALL ALARMS
+        frame = OmciFrame(
+            transaction_id=get_tx_id(),
+            message_type=OmciGetAllAlarms.message_id,
+            omci_message=OmciGetAllAlarms(
+                entity_class=OntData.class_id,
+                entity_id=0
+            )
+        )
+        yield proxy.send_omci(hexify(str(frame)))
+
+        # MIB UPLOAD RESPONSE
+        response = yield proxy.receive()
+        resp = OmciFrame(response)
+        resp.show()
+
+    if 0:
+        # MIB UPLOAD
+        frame = OmciFrame(
+            transaction_id=get_tx_id(),
+            message_type=OmciMibUpload.message_id,
+            omci_message=OmciMibUpload(
+                entity_class=OntData.class_id
+            )
+        )
+        yield proxy.send_omci(hexify(str(frame)))
+
+        # MIB UPLOAD RESPONSE
+        response = yield proxy.receive()
+        resp = OmciFrame(response)
+        resp.show()
+
+        n_commands = resp.omci_message.number_of_commands
+        for seq_num in range(n_commands):
+            print 'seq_num', seq_num
+            frame = OmciFrame(
+                transaction_id=get_tx_id(),
+                message_type=OmciMibUploadNext.message_id,
+                omci_message=OmciMibUploadNext(
+                    entity_class=OntData.class_id,
+                    command_sequence_number=seq_num
+                )
+            )
+            yield proxy.send_omci(hexify(str(frame)))
+
+            response = yield proxy.receive()
+            print hexify(response)
+            # resp = OmciFrame(response)
+            # resp.show()
+
+
+    if 1:
+        # GET CIRCUIT PACK
+        frame = OmciFrame(
+            transaction_id=get_tx_id(),
+            message_type=OmciGet.message_id,
+            omci_message=OmciGet(
+                entity_class=CircuitPack.class_id,
+                entity_id=0x101,
+                attributes_mask=CircuitPack.mask_for('vendor_id')
+            )
+        )
+        yield proxy.send_omci(hexify(str(frame)))
+
+        # MIB UPLOAD RESPONSE
+        response = yield proxy.receive()
+        resp = OmciFrame(response)
+        resp.show()
+
+    yield asleep(1)
+    reactor.stop()
+
+
+if __name__ == '__main__':
+    reactor.callLater(0, chat)
+    reactor.run()