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)
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
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
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
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
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)
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)
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
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
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)
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
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
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
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)
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)
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
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)
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
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
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
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
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
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
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
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
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)
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
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
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)
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
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
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