示例#1
0
文件: 035_auth.py 项目: gbour/wave
    def test_007(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        subprocess.Popen("echo \"bar\"|../bin/mkpasswd -c {0} foo".format(tmp),
                         shell=True, stdout=subprocess.PIPE).wait()
        yield app.set_auth(required= True, filename= tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}", connect=False, username="******", password="******")
        ret = c.connect(version=4)
        # auth rejected
        if not isinstance(ret, EventConnack) or ret.ret_code == 0:
            debug(ret)
            defer.returnValue(False)

        # updating password
        subprocess.Popen("echo \"baz\"|../bin/mkpasswd {0} foo".format(tmp),
                         shell=True, stdout=subprocess.PIPE).wait()
        # file is monitored each 2 secs in debug context
        time.sleep(3)

        ret = c.connect(version=4)
        # auth accepted
        if not isinstance(ret, EventConnack) or ret.ret_code != 0:
            debug(ret)
            defer.returnValue(False)

        defer.returnValue(True)
示例#2
0
    def test_112(self):
        ## PINGREG
        c = MqttClient("conformity:{seq}", raw_connect=True)
        evt = c.connect(version=4)

        # flags shoud be 0
        c.forge(NC.CMD_PINGREQ, 4, [], send=True)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        ## SUBSCRIBE
        c = MqttClient("conformity2:{seq}", raw_connect=True)
        evt = c.connect(version=4)

        # flags shoud be 2
        c.forge(
            NC.CMD_SUBSCRIBE,
            3,
            [
                ('uint16', 42),  # identifier
                ('string', '/foo/bar'),  # topic filter
                ('byte', 0)  # qos
            ],
            send=True)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        return True
示例#3
0
文件: 020_v311.py 项目: gbour/wave
    def test_112(self):
        ## PINGREG
        c = MqttClient("conformity:{seq}", raw_connect=True)
        evt = c.connect(version=4)

        # flags shoud be 0
        c.forge(NC.CMD_PINGREQ, 4, [], send=True)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        ## SUBSCRIBE
        c = MqttClient("conformity2:{seq}", raw_connect=True)
        evt = c.connect(version=4)

        # flags shoud be 2
        c.forge(NC.CMD_SUBSCRIBE, 3, [
            ('uint16', 42),         # identifier
            ('string', '/foo/bar'), # topic filter
            ('byte'  , 0)           # qos
        ], send=True)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        return True
示例#4
0
    def test_003(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client = MqttClient("rabbit:{seq}", keepalive=2)
        will = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)

        time.sleep(1)
        client.send_pingreq()
        evt = monitor.recv()
        if monitor.recv() != None:
            debug(evt)
            return False

        time.sleep(4)
        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
示例#5
0
    def test_012(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=2)

        client = MqttClient("rabbit:{seq}")  # no keepalive
        will = {
            'topic': '/node/disconnect',
            'message': client.clientid(),
            'retain': True
        }
        client.connect(version=4, will=will)
        client.socket_close()

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message'] or \
                evt.msg.qos != 0:
            debug(evt)
            return False

        if not evt.msg.retain:
            debug("evt remain flag set")
            return False

        monitor.disconnect()
        return True
示例#6
0
    def test_003(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client  = MqttClient("rabbit:{seq}", keepalive=2)
        will    = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)

        time.sleep(1)
        client.send_pingreq()
        evt = monitor.recv()
        if monitor.recv() != None:
            debug(evt)
            return False

        time.sleep(4)
        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
示例#7
0
    def test_007(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        subprocess.Popen("echo \"bar\"|../bin/mkpasswd -c {0} foo".format(tmp),
                         shell=True,
                         stdout=subprocess.PIPE).wait()
        yield app.set_auth(required=True, filename=tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}",
                       connect=False,
                       username="******",
                       password="******")
        ret = c.connect(version=4)
        # auth rejected
        if not isinstance(ret, EventConnack) or ret.ret_code == 0:
            debug(ret)
            defer.returnValue(False)

        # updating password
        subprocess.Popen("echo \"baz\"|../bin/mkpasswd {0} foo".format(tmp),
                         shell=True,
                         stdout=subprocess.PIPE).wait()
        # file is monitored each 2 secs in debug context
        time.sleep(3)

        ret = c.connect(version=4)
        # auth accepted
        if not isinstance(ret, EventConnack) or ret.ret_code != 0:
            debug(ret)
            defer.returnValue(False)

        defer.returnValue(True)
示例#8
0
    def test_008(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        debug("pwd file: {0}".format(tmp))
        proc = subprocess.Popen(
            "echo \"bar\"|../bin/mkpasswd -c {0} foo".format(tmp),
            shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE)
        (out, err) = proc.communicate()
        debug("out: {0}".format(out))
        debug("err: {0}".format(err))
        with open(tmp, 'r') as f:
            debug(f.read())

        yield app.set_auth(required=True, filename=tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}",
                       connect=False,
                       username="******",
                       password="******")
        ret = c.connect(version=4)
        # auth rejected
        if not isinstance(ret, EventConnack) or ret.ret_code != 0:
            debug(ret)
            defer.returnValue(False)
        c.disconnect()

        # deleting password
        proc = subprocess.Popen(
            "../bin/mkpasswd -D {0} foo && touch {0}".format(tmp),
            shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE)
        (out, err) = proc.communicate()
        debug("out: {0}".format(out))
        debug("err: {0}".format(err))
        with open(tmp, 'r') as f:
            debug(f.read())

        # file is monitored each 2 secs in debug context
        #time.sleep(5)
        yield auth.switch(tmp)

        ret = c.connect(version=4)
        # auth accepted
        if not isinstance(ret, EventConnack) or ret.ret_code != 4:
            debug(ret)
            defer.returnValue(False)

        defer.returnValue(True)
示例#9
0
文件: 003_ssl.py 项目: helloyan/wave
    def test_005(self):
        c = MqttClient(
            "reg:{seq}",
            ssl=True,
            ssl_opts={
                'ssl_version':
                SSL_VERSION,
                'cert_reqs':
                ssl.CERT_REQUIRED,
                'ca_certs':
                os.path.join(os.path.dirname(__file__), "../../",
                             "etc/wave_cert.pem"),
                #'ciphers': 'HIGH:!DHE:!ECDHE'
                'ciphers':
                'AES256-SHA'
            })

        evt = c.connect()
        debug("Using SSL: version={0}, cipher={1}".format(
            version(c._c.sock), c._c.sock.cipher()))
        if not isinstance(evt, EventConnack):
            return False

        c.disconnect()
        return True
示例#10
0
    def test_010(self):
        cli = MqttClient("ws:{seq}", port=8884, websocket=True, ssl=True, ssl_opts={'ssl_version': SSL_VERSION})
        evt = cli.connect(version=4)
        if not isinstance(evt, EventConnack):
            debug(evt)
            return False

        cli.disconnect()
        return True
示例#11
0
文件: 035_auth.py 项目: gbour/wave
    def test_002(self):
        yield app.set_auth(required=True)

        c = MqttClient("auth:{seq}", connect=False)
        ret = c.connect(version=4)
        if isinstance(ret, EventConnack) and ret.ret_code == 4:
            defer.returnValue(True)

        debug(ret)
        defer.returnValue(False)
示例#12
0
文件: 003_ssl.py 项目: gbour/wave
    def test_001(self):
        c = MqttClient("reg:{seq}", ssl=True, ssl_opts={'ssl_version': SSL_VERSION})
        evt = c.connect()
        debug("Using SSL: version={0}, cipher={1}".format(version(c._c.sock), c._c.sock.cipher()))

        if not isinstance(evt, EventConnack):
            return False

        c.disconnect()
        return True
示例#13
0
    def test_001(self):
        c = MqttClient("v311:{seq}")
        evt = c.connect(version=4)

        if not isinstance(evt, EventConnack) or \
                evt.ret_code:
            debug(evt)
            return False

        return True
示例#14
0
    def test_002(self):
        yield app.set_auth(required=True)

        c = MqttClient("auth:{seq}", connect=False)
        ret = c.connect(version=4)
        if isinstance(ret, EventConnack) and ret.ret_code == 4:
            defer.returnValue(True)

        debug(ret)
        defer.returnValue(False)
示例#15
0
文件: 020_v311.py 项目: gbour/wave
    def test_001(self):
        c = MqttClient("v311:{seq}")
        evt = c.connect(version=4)

        if not isinstance(evt, EventConnack) or \
                evt.ret_code:
            debug(evt)
            return False

        return True
示例#16
0
    def test_002(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client = MqttClient("rabbit:{seq}")
        will = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)
        # close socket without disconnection
        client.socket_close()

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
示例#17
0
    def test_002(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client  = MqttClient("rabbit:{seq}")
        will    = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)
        # close socket without disconnection
        client.socket_close()

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
示例#18
0
文件: 035_auth.py 项目: gbour/wave
    def test_003(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        yield app.set_auth(required=True, filename=tmp); yield auth.switch(tmp)

        c = MqttClient("auth:{seq}", connect=False)
        ret = c.connect(version=4)
        if isinstance(ret, EventConnack) and ret.ret_code == 4:
            defer.returnValue(True)

        debug(ret)
        defer.returnValue(False)
示例#19
0
文件: 035_auth.py 项目: gbour/wave
    def test_008(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        debug("pwd file: {0}".format(tmp))
        proc = subprocess.Popen("echo \"bar\"|../bin/mkpasswd -c {0} foo".format(tmp),
                         shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        (out,err) = proc.communicate()
        debug("out: {0}".format(out)); debug("err: {0}".format(err))
        with open(tmp, 'r') as f:
            debug(f.read())

        yield app.set_auth(required= True, filename= tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}", connect=False, username="******", password="******")
        ret = c.connect(version=4)
        # auth rejected
        if not isinstance(ret, EventConnack) or ret.ret_code != 0:
            debug(ret)
            defer.returnValue(False)
        c.disconnect()


        # deleting password
        proc = subprocess.Popen("../bin/mkpasswd -D {0} foo && touch {0}".format(tmp),
                         shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        (out,err) = proc.communicate()
        debug("out: {0}".format(out)); debug("err: {0}".format(err))
        with open(tmp, 'r') as f:
            debug(f.read())

        # file is monitored each 2 secs in debug context
        #time.sleep(5)
        yield auth.switch(tmp)

        ret = c.connect(version=4)
        # auth accepted
        if not isinstance(ret, EventConnack) or ret.ret_code != 4:
            debug(ret)
            defer.returnValue(False)

        defer.returnValue(True)
示例#20
0
文件: 001_basics.py 项目: gbour/wave
    def test_001(self):
        c = MqttClient("reg:{seq}")
        evt = c.connect()

        # [MQTT-3.1.4-4]: CONNACK retcode MUST be 0
        # [MQTT-3.2.2-3]: CONNACK session_present IS 0
        if not isinstance(evt, EventConnack) or \
                evt.ret_code != 0 or \
                evt.session_present != 0:
            return False

        return True
示例#21
0
    def test_003(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        yield app.set_auth(required=True, filename=tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}", connect=False)
        ret = c.connect(version=4)
        if isinstance(ret, EventConnack) and ret.ret_code == 4:
            defer.returnValue(True)

        debug(ret)
        defer.returnValue(False)
示例#22
0
文件: 003_ssl.py 项目: gbour/wave
    def test_002(self):
        c = MqttClient("reg:{seq}", ssl=True, ssl_opts={
            'ssl_version': SSL_VERSION,
            'cert_reqs': ssl.CERT_REQUIRED
        })

        evt = c.connect()
        if not isinstance(evt, EventConnack):
            return True

        c.disconnect()
        return False
示例#23
0
    def test_001(self):
        c = MqttClient("reg:{seq}")
        evt = c.connect()

        # [MQTT-3.1.4-4]: CONNACK retcode MUST be 0
        # [MQTT-3.2.2-3]: CONNACK session_present IS 0
        if not isinstance(evt, EventConnack) or \
                evt.ret_code != 0 or \
                evt.session_present != 0:
            return False

        return True
示例#24
0
    def test_001(self):
        from nyamuk import nyamuk_ws
        subproto= nyamuk_ws.SUBPROTOCOLS[4]; nyamuk_ws.SUBPROTOCOLS[4] = 'foobar'

        cli = MqttClient("ws:{seq}", port=1884, websocket=True)
        status = cli.connect(version=4)
        nyamuk_ws.SUBPROTOCOLS[4] = subproto

        if status != NC.ERR_SUCCESS:
            debug(status)
            return True

        return False
示例#25
0
文件: 020_v311.py 项目: gbour/wave
    def test_115(self):
        c = MqttClient("conformity:{seq}", raw_connect=True)
        evt = c.connect(version=4)

        c.forge(NC.CMD_UNSUBSCRIBE, 2, [
            ('uint16', 0),         # identifier
            ('string', '/foo/bar'), # topic filter
        ], send=True)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        return True
示例#26
0
文件: 003_ssl.py 项目: gbour/wave
    def test_003(self):
        c = MqttClient("reg:{seq}", ssl=True, ssl_opts={
            'ssl_version': SSL_VERSION,
            'cert_reqs': ssl.CERT_REQUIRED,
            'ca_certs': os.path.join(os.path.dirname(__file__), "../../", "etc/wave_cert.pem")
        })

        evt = c.connect()
        if not isinstance(evt, EventConnack):
            return False

        c.disconnect()
        return True
示例#27
0
    def test_010(self):
        cli = MqttClient("ws:{seq}",
                         port=8884,
                         websocket=True,
                         ssl=True,
                         ssl_opts={'ssl_version': SSL_VERSION})
        evt = cli.connect(version=4)
        if not isinstance(evt, EventConnack):
            debug(evt)
            return False

        cli.disconnect()
        return True
示例#28
0
文件: 003_ssl.py 项目: helloyan/wave
    def test_001(self):
        c = MqttClient("reg:{seq}",
                       ssl=True,
                       ssl_opts={'ssl_version': SSL_VERSION})
        evt = c.connect()
        debug("Using SSL: version={0}, cipher={1}".format(
            version(c._c.sock), c._c.sock.cipher()))

        if not isinstance(evt, EventConnack):
            return False

        c.disconnect()
        return True
示例#29
0
    def test_001(self):
        from nyamuk import nyamuk_ws
        subproto = nyamuk_ws.SUBPROTOCOLS[4]
        nyamuk_ws.SUBPROTOCOLS[4] = 'foobar'

        cli = MqttClient("ws:{seq}", port=1884, websocket=True)
        status = cli.connect(version=4)
        nyamuk_ws.SUBPROTOCOLS[4] = subproto

        if status != NC.ERR_SUCCESS:
            debug(status)
            return True

        return False
示例#30
0
文件: 003_ssl.py 项目: helloyan/wave
    def test_002(self):
        c = MqttClient("reg:{seq}",
                       ssl=True,
                       ssl_opts={
                           'ssl_version': SSL_VERSION,
                           'cert_reqs': ssl.CERT_REQUIRED
                       })

        evt = c.connect()
        if not isinstance(evt, EventConnack):
            return True

        c.disconnect()
        return False
示例#31
0
    def test_004(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client = MqttClient("rabbit:{seq}")  # no keepalive
        will = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)

        # protocol errlr flags shoud be 0
        client.forge(NC.CMD_PINGREQ, 4, [], send=True)
        if client.conn_is_alive():
            debug("connection still alive")
            return False

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
示例#32
0
    def test_004(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=0)

        client  = MqttClient("rabbit:{seq}") # no keepalive
        will    = {'topic': '/node/disconnect', 'message': client.clientid()}
        client.connect(version=4, will=will)

        # protocol errlr flags shoud be 0
        client.forge(NC.CMD_PINGREQ, 4, [], send=True)
        if client.conn_is_alive():
            debug("connection still alive")
            return False

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message']:
            debug(evt)
            return False

        monitor.disconnect()
        return True
示例#33
0
    def test_012(self):
        monitor = MqttClient("monitor:{seq}", connect=4)
        # NOTE: '/' prefix skips $ messages
        # TODO: remove it when '$' filter will be impl.
        monitor.subscribe("/#", qos=2)

        client  = MqttClient("rabbit:{seq}") # no keepalive
        will    = {'topic': '/node/disconnect', 'message': client.clientid(), 'retain': True}
        client.connect(version=4, will=will)
        client.socket_close()

        evt = monitor.recv()
        if not isinstance(evt, EventPublish) or evt.msg.topic != will['topic'] or \
                evt.msg.payload != will['message'] or \
                evt.msg.qos != 0:
            debug(evt)
            return False

        if not evt.msg.retain:
            debug("evt remain flag set")
            return False

        monitor.disconnect()
        return True
示例#34
0
文件: 035_auth.py 项目: gbour/wave
    def test_005(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        subprocess.Popen("echo \"bar\"|../bin/mkpasswd -c {0} foo".format(tmp),
                         shell=True, stdout=subprocess.PIPE).wait()
        yield app.set_auth(required= True, filename= tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}", connect=False, username="******", password="******")
        ret = c.connect(version=4)
        # auth rejected
        if isinstance(ret, EventConnack) and ret.ret_code == 4:
            defer.returnValue(True)

        debug(ret)
        defer.returnValue(False)
示例#35
0
文件: 003_ssl.py 项目: gbour/wave
    def test_005(self):
        c = MqttClient("reg:{seq}", ssl=True, ssl_opts={
            'ssl_version': SSL_VERSION,
            'cert_reqs': ssl.CERT_REQUIRED,
            'ca_certs': os.path.join(os.path.dirname(__file__), "../../", "etc/wave_cert.pem"),
            #'ciphers': 'HIGH:!DHE:!ECDHE'
            'ciphers': 'AES256-SHA'
        })

        evt = c.connect()
        debug("Using SSL: version={0}, cipher={1}".format(version(c._c.sock), c._c.sock.cipher()))
        if not isinstance(evt, EventConnack):
            return False

        c.disconnect()
        return True
示例#36
0
    def test_115(self):
        c = MqttClient("conformity:{seq}", raw_connect=True)
        evt = c.connect(version=4)

        c.forge(
            NC.CMD_UNSUBSCRIBE,
            2,
            [
                ('uint16', 0),  # identifier
                ('string', '/foo/bar'),  # topic filter
            ],
            send=True)
        if c.conn_is_alive():
            debug("connection still alive")
            return False

        return True
示例#37
0
    def test_005(self):
        tmp = tempfile.mktemp(prefix='wave-testsuite-')
        subprocess.Popen("echo \"bar\"|../bin/mkpasswd -c {0} foo".format(tmp),
                         shell=True,
                         stdout=subprocess.PIPE).wait()
        yield app.set_auth(required=True, filename=tmp)
        yield auth.switch(tmp)

        c = MqttClient("auth:{seq}",
                       connect=False,
                       username="******",
                       password="******")
        ret = c.connect(version=4)
        # auth rejected
        if isinstance(ret, EventConnack) and ret.ret_code == 4:
            defer.returnValue(True)

        debug(ret)
        defer.returnValue(False)
示例#38
0
文件: 003_ssl.py 项目: helloyan/wave
    def test_003(self):
        c = MqttClient("reg:{seq}",
                       ssl=True,
                       ssl_opts={
                           'ssl_version':
                           SSL_VERSION,
                           'cert_reqs':
                           ssl.CERT_REQUIRED,
                           'ca_certs':
                           os.path.join(os.path.dirname(__file__), "../../",
                                        "etc/wave_cert.pem")
                       })

        evt = c.connect()
        if not isinstance(evt, EventConnack):
            return False

        c.disconnect()
        return True
示例#39
0
文件: 020_v311.py 项目: gbour/wave
    def test_101(self):
        c = MqttClient("conformity:{seq}")
        evt = c.connect(version=4)

        if not isinstance(evt, EventConnack) or \
                evt.ret_code:
            debug(e)
            return False

        # 2d connect pkt
        pkt = MqttPkt()
        pkt.connect_build(c._c, keepalive=60, clean_session=1, version=4)
        c._c.packet_queue(pkt)
        c._c.packet_write()
        c._c.loop()

        try:
            c.publish("foo","bar")
            c._c.sock.getpeername()
        except socket.error as e:
            return True

        debug("connection still alive")
        return False
示例#40
0
    def test_101(self):
        c = MqttClient("conformity:{seq}")
        evt = c.connect(version=4)

        if not isinstance(evt, EventConnack) or \
                evt.ret_code:
            debug(e)
            return False

        # 2d connect pkt
        pkt = MqttPkt()
        pkt.connect_build(c._c, keepalive=60, clean_session=1, version=4)
        c._c.packet_queue(pkt)
        c._c.packet_write()
        c._c.loop()

        try:
            c.publish("foo", "bar")
            c._c.sock.getpeername()
        except socket.error as e:
            return True

        debug("connection still alive")
        return False
示例#41
0
    def test_001(self):
        pub = MqttClient("publisher:{seq}")
        evt = pub.connect()
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False

        ctrl = MqttClient("control-sample:{seq}")
        evt = ctrl.connect()
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False

        evt = ctrl.subscribe("/test/qos/0", qos=0)
        if not isinstance(evt, EventSuback):
            debug(evt); return False


        ###
        dummyid = "dummy:{0}".format(random.randint(0,9999))
        dummy = MqttClient(dummyid)
        evt = dummy.connect(clean_session=1)
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False

        evt = dummy.subscribe("/test/qos/0", qos=0)
        if not isinstance(evt, EventSuback):
            debug(evt); return False
        #print evt.mid


        # 1. sent qos0, 1, 2 messages; check reception
        if not self.pubsub((pub, ctrl, dummy), clbs={
                    'checkrecv': lambda evt, msg: isinstance(evt, EventPublish) and evt.msg.payload == msg
                }):
            return False

        # 2. disconnecting (properly) dummmy; then reconnects
        dummy.disconnect(); del(dummy)
        # be sure dummy client disconnection in fully complete on broker side before going further
        time.sleep(1)

        ## publish message
        msg = gen_msg(10)
        pub.publish("/test/qos/0", payload=msg)


        ## reconnects, without explicitly subscribing topic
        dummy = MqttClient(dummyid)
        evt = dummy.connect(clean_session=1)
        if not isinstance(evt, EventConnack) or evt.ret_code != 0:
            debug(evt); return False


        ## checking message is not received by dummy
        evt = ctrl.recv()
        if not isinstance(evt, EventPublish) or evt.msg.payload != msg:
            debug(evt); return False

        evt = dummy.recv()
        if evt != None:
            debug(evt); return False

        ## dummy resubscribe, check we receive messages
        evt = dummy.subscribe("/test/qos/0", qos=0)
        if not isinstance(evt, EventSuback):
            debug(evt); return False

        ## send test message
        if not self.pubsub((pub, ctrl, dummy), clbs={
                    'checkrecv': lambda evt, msg: evt is not None and evt.msg.payload == msg
                }):
            debug('pubsub failed')
            return False


        # cleanup
        pub.disconnect()
        ctrl.disconnect()
        dummy.disconnect()

        return True