Browse Source

Spruce up MQTT test

Christopher Mullins 6 years ago
parent
commit
cc14b70fa7
2 changed files with 12 additions and 14 deletions
  1. 4 3
      test/remote/lib/mqtt_client.rb
  2. 8 11
      test/remote/spec/mqtt_spec.rb

+ 4 - 3
test/remote/lib/mqtt_client.rb

@@ -42,9 +42,9 @@ class MqttClient
   end
 
   def on_id_message(path, id_params, timeout, &block)
-    topic = "#{@topic_prefix}#{path}/#{id_topic_suffix(id_params)}"
+    sub_topic = "#{@topic_prefix}#{path}/#{id_topic_suffix(id_params)}"
 
-    on_message(topic, timeout) do |topic, message|
+    on_message(sub_topic, timeout) do |topic, message|
       topic_parts = topic.split('/')
 
       yield(
@@ -63,7 +63,8 @@ class MqttClient
       begin
         Timeout.timeout(timeout) do
           @client.get(topic) do |topic, message|
-            raise BreakListenLoopError if yield(topic, message)
+            ret_val = yield(topic, message)
+            raise BreakListenLoopError if ret_val
           end
         end
       rescue Timeout::Error => e

+ 8 - 11
test/remote/spec/mqtt_spec.rb

@@ -18,14 +18,6 @@ RSpec.describe 'State' do
       mqtt_state_topic_pattern: "#{@topic_prefix}state/:device_id/:device_type/:group_id",
       mqtt_update_topic_pattern: @updates_topic
     )
-
-    @mqtt_client = MqttClient.new(
-      *%w(SERVER USERNAME PASSWORD).map { |x| ENV.fetch("ESPMH_MQTT_#{x}") } << @topic_prefix
-    )
-  end
-
-  after(:all) do
-    @mqtt_client.disconnect
   end
 
   before(:each) do
@@ -34,6 +26,10 @@ RSpec.describe 'State' do
       type: 'rgb_cct',
       group_id: 1
     }
+
+    @mqtt_client = MqttClient.new(
+      *%w(SERVER USERNAME PASSWORD).map { |x| ENV.fetch("ESPMH_MQTT_#{x}") } << @topic_prefix
+    )
   end
 
   context 'birth and LWT' do
@@ -121,7 +117,8 @@ RSpec.describe 'State' do
       @client.put(
         '/settings', 
         mqtt_update_topic_pattern: '',
-        mqtt_state_rate_limit: 500
+        mqtt_state_rate_limit: 500,
+        packet_repeats: 1
       )
 
       @mqtt_client.wait_for_listeners
@@ -131,7 +128,7 @@ RSpec.describe 'State' do
 
       last_seen = 0
       update_timestamp_gaps = []
-      num_updates = 20
+      num_updates = 50
 
       @mqtt_client.on_state(@id_params) do |id, message|
         next_time = Time.now
@@ -154,7 +151,7 @@ RSpec.describe 'State' do
       avg = update_timestamp_gaps.sum / update_timestamp_gaps.length
 
       expect(update_timestamp_gaps.length).to be >= 3
-      expect(avg).to be >= 0.5
+      expect((avg - 0.5).abs).to be < 0.02
     end
   end
 end