From 281e3d16a5e571e4dcb8d93f1db2b2bb37c85b7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=BCrgen=20Eckel?= Date: Thu, 16 May 2024 12:25:53 +0200 Subject: [PATCH] added isConnectionOpen to the interface and analysis this during execution MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jürgen Eckel --- monitor/mqtt_monitor.go | 2 +- util/mocks/mqtt.go | 24 ++++++++++++++++-------- util/mqtt.go | 1 + 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/monitor/mqtt_monitor.go b/monitor/mqtt_monitor.go index 478a337..4132d95 100644 --- a/monitor/mqtt_monitor.go +++ b/monitor/mqtt_monitor.go @@ -221,7 +221,7 @@ func (mms *MqttMonitor) MonitorActiveParticipants() { log.Println("[app] [Monitor] subscribed to tele/# channels") for !mms.IsTerminated() { - if !mqttClient.IsConnected() { + if !mqttClient.IsConnected() || !mqttClient.IsConnectionOpen() { log.Println("[app] [Monitor] retry establishing a connection") break // Exit inner loop on disconnect } diff --git a/util/mocks/mqtt.go b/util/mocks/mqtt.go index 0d6bdfd..be8e368 100644 --- a/util/mocks/mqtt.go +++ b/util/mocks/mqtt.go @@ -9,14 +9,15 @@ import ( // MockMQTTClient is the mock mqtt client type MockMQTTClient struct { - ConnectFunc func() mqtt.Token - DisconnectFunc func(quiesce uint) - PublishFunc func(topic string, qos byte, retained bool, payload interface{}) mqtt.Token - SubscribeFunc func(topic string, qos byte, callback mqtt.MessageHandler) mqtt.Token - UnsubscribeFunc func(topics ...string) mqtt.Token - IsConnectedFunc func() bool - connected bool - connectedMutex sync.Mutex + ConnectFunc func() mqtt.Token + DisconnectFunc func(quiesce uint) + PublishFunc func(topic string, qos byte, retained bool, payload interface{}) mqtt.Token + SubscribeFunc func(topic string, qos byte, callback mqtt.MessageHandler) mqtt.Token + UnsubscribeFunc func(topics ...string) mqtt.Token + IsConnectedFunc func() bool + IsConnectionOpenFunc func() bool + connected bool + connectedMutex sync.Mutex } // GetConnectFunc fetches the mock client's `Connect` func @@ -129,3 +130,10 @@ func (m *MockMQTTClient) IsConnected() bool { m.connectedMutex.Unlock() return connected } + +func (m *MockMQTTClient) IsConnectionOpen() bool { + m.connectedMutex.Lock() + connected := m.connected + m.connectedMutex.Unlock() + return connected +} diff --git a/util/mqtt.go b/util/mqtt.go index a288235..49f7305 100644 --- a/util/mqtt.go +++ b/util/mqtt.go @@ -23,6 +23,7 @@ type MQTTClientI interface { Subscribe(topic string, qos byte, callback mqtt.MessageHandler) mqtt.Token Unsubscribe(topics ...string) mqtt.Token IsConnected() bool + IsConnectionOpen() bool } var (