class FlaskMQTTTestCase(unittest.TestCase): def setUp(self): self.app = Flask(__name__) def test_simple_connect(self): self.mqtt = Mqtt(self.app) self.mqtt.disconnect() def test_connect_with_username(self): self.app.config['MQTT_USERNAME'] = '******' self.app.config['MQTT_PASSWORD'] = '******' self.mqtt = Mqtt(self.app) self.mqtt.disconnect() def test_subscribe(self): self.mqtt = Mqtt(self.app) self.mqtt.subscribe('test') self.assertEqual('test', self.mqtt.topics[0]) self.assertEqual(1, len(self.mqtt.topics)) self.mqtt.subscribe('test') self.assertEqual(1, len(self.mqtt.topics)) self.mqtt.unsubscribe('test') self.assertEqual(0, len(self.mqtt.topics)) self.mqtt.unsubscribe('test') self.mqtt.subscribe('test1') self.mqtt.subscribe('test2') self.assertEqual(2, len(self.mqtt.topics)) self.mqtt.unsubscribe_all() self.assertEqual(0, len(self.mqtt.topics)) self.mqtt.disconnect() def test_publish(self): self.mqtt = Mqtt(self.app) @self.mqtt.on_message() def handle_message(client, userdata, message): print(message) @self.mqtt.on_topic('test') def handle_on_topic(*args, **kwargs): pass self.mqtt.subscribe('test') self.mqtt.publish('test', 'hello world') time.sleep(2)
class FlaskMQTTTestCase(unittest.TestCase): def setUp(self): self.app = Flask(__name__) def test_simple_connect(self): self.mqtt = Mqtt(self.app) self.mqtt._disconnect() def test_connect_with_username(self): self.app.config['MQTT_USERNAME'] = '******' self.app.config['MQTT_PASSWORD'] = '******' self.mqtt = Mqtt(self.app) self.mqtt._disconnect() def test_subscribe(self): self.mqtt = Mqtt(self.app) self.subscribe_handled = False self.unsubscribe_handled = False @self.mqtt.on_subscribe() def handle_subscribe(client, userdata, mid_, granted_qos): self.subscribe_handled = True @self.mqtt.on_unsubscribe() def handle_unsubscribe(client, userdata, mid_): self.unsubscribe_handled = True ret, mid = self.mqtt.subscribe('home/test') self.assertEqual(ret, MQTT_ERR_SUCCESS) wait() ret, mid = self.mqtt.unsubscribe('home/test') self.assertEqual(ret, MQTT_ERR_SUCCESS) wait() self.assertTrue(self.subscribe_handled) self.assertTrue(self.unsubscribe_handled) def test_topic_count(self): self.mqtt = Mqtt(self.app) ret, mid = self.mqtt.subscribe('test') self.assertEqual(1, len(self.mqtt.topics)) ret, mid = self.mqtt.subscribe('test') self.assertEqual(1, len(self.mqtt.topics)) self.mqtt.unsubscribe('test') self.assertEqual(0, len(self.mqtt.topics)) self.mqtt.unsubscribe('test') self.assertEqual(0, len(self.mqtt.topics)) ret, mid = self.mqtt.subscribe('test1') ret, mid = self.mqtt.subscribe('test2') self.assertEqual(2, len(self.mqtt.topics)) self.mqtt.unsubscribe_all() self.assertEqual(0, len(self.mqtt.topics)) self.mqtt._disconnect() def test_publish(self): self.mqtt = Mqtt(self.app) self.handled_message = False self.handled_topic = False self.handled_publish = False @self.mqtt.on_message() def handle_message(client, userdata, message): self.handled_message = True @self.mqtt.on_publish() def handle_publish(client, userdata, mid): self.handled_publish = True self.mqtt.subscribe('home/test') wait() self.mqtt.publish('home/test', 'hello world') wait() self.assertTrue(self.handled_message) # self.assertTrue(self.handled_topic) self.assertTrue(self.handled_publish) def test_on_topic(self): self.mqtt = Mqtt(self.app) self.handled_message = False self.handled_topic = False @self.mqtt.on_message() def handle_message(client, userdata, message): self.handled_message = True @self.mqtt.on_topic('home/test') def handle_on_topic(*args, **kwargs): self.handled_topic = True self.mqtt.subscribe('home/test') wait() self.mqtt.publish('home/test', 'hello world') wait() self.assertFalse(self.handled_message) self.assertTrue(self.handled_topic) def test_logging(self): self.mqtt = Mqtt(self.app) @self.mqtt.on_log() def handle_logging(client, userdata, level, buf): self.assertIsNotNone(client) self.assertIsNotNone(level) self.assertIsNotNone(buf) self.mqtt.publish('test', 'hello world')
class MqttClient: def __init__(self): self.mqtt = Mqtt() self.mqttclient_pub_topic_list = [] self.mqttclient_sub_topic_list = [] self.recv_msg_buffer = RingBuf(15) self.is_mqtt_client_connected = False def add_publish_topic(self, topic): # check for duplicate topics for item in self.mqttclient_pub_topic_list: if topic in item: return False # add topic to the list new_item = (topic, topic) self.mqttclient_pub_topic_list.append(new_item) return True def add_subscription_topic(self, topic): # check for duplicate topics for item in self.mqttclient_sub_topic_list: if topic in item: return False # add topic to the list new_item = (topic, topic) self.mqttclient_sub_topic_list.append(new_item) # Subscribe this topic self.mqtt.subscribe(topic) return True def rm_publish_topic(self, topic): # check for duplicate topics for item in self.mqttclient_pub_topic_list: if topic in item: # add topic to the list self.mqttclient_pub_topic_list.remove(item) return True return False def rm_subscription_topic(self, topic): # check for duplicate topics for item in self.mqttclient_sub_topic_list: if topic in item: # add topic to the list self.mqttclient_sub_topic_list.remove(item) # unsubscribe this topic self.mqtt.unsubscribe(topic) return True return False def get_status(self): return self.is_mqtt_client_connected def on_message_send(self, topic, message, qos): if topic != "" and message != "": [result, b] = self.mqtt.publish(topic, message, int(qos)) if result == MQTT_ERR_SUCCESS: return True return False def on_message_receive(self, topic, data): message = topic + " : " + data self.recv_msg_buffer.append(message) print("added") def update(self): if self.recv_msg_buffer.item_list: output = "" for item in self.recv_msg_buffer.item_list: output = output + item + "\n" return output return None