@@ -171,3 +171,55 @@ def test_mqtt_to_grafana_two_dashboards(machinery, create_influxdb, reset_influx
171171 titles = grafana .get_dashboard_titles ()
172172 assert settings .grafana_dashboards [0 ] in titles
173173 assert settings .grafana_dashboards [1 ] in titles
174+
175+
176+ @pytest_twisted .inlineCallbacks
177+ @pytest .mark .grafana
178+ def test_mqtt_to_grafana_bulk (machinery , create_influxdb , reset_influxdb , reset_grafana ):
179+ """
180+ Publish multiple readings in JSON format to MQTT broker and proof
181+ that a corresponding datasource and a dashboard was created in Grafana.
182+ """
183+
184+ # Submit multiple measurements, without timestamp.
185+ data = [
186+ {
187+ 'temperature' : 21.42 ,
188+ 'humidity' : 41.55 ,
189+ },
190+ {
191+ 'temperature' : 42.84 ,
192+ 'humidity' : 83.1 ,
193+ 'voltage' : 4.2 ,
194+ },
195+ {
196+ 'weight' : 10.10 ,
197+ },
198+ ]
199+ yield mqtt_json_sensor (settings .mqtt_topic_json , data )
200+
201+ # Wait for some time to process the message.
202+ yield sleep (PROCESS_DELAY_MQTT )
203+ yield sleep (PROCESS_DELAY_MQTT )
204+ yield sleep (PROCESS_DELAY_MQTT )
205+
206+ # Proof that Grafana is well provisioned.
207+ logger .info ('Grafana: Checking datasource' )
208+ datasource_names = []
209+ for datasource in grafana .client .datasources .get ():
210+ datasource_names .append (datasource ['name' ])
211+ assert settings .influx_database in datasource_names
212+
213+ logger .info ('Grafana: Checking dashboard' )
214+ dashboard_name = settings .grafana_dashboards [0 ]
215+ dashboard = grafana .get_dashboard_by_name (dashboard_name )
216+ targets = dashboard ['rows' ][0 ]['panels' ][0 ]['targets' ]
217+
218+ # Validate table name.
219+ assert targets [0 ]['measurement' ] == settings .influx_measurement_sensors
220+
221+ # Validate field names.
222+ fields = set ()
223+ for target in targets :
224+ fields .add (target ["fields" ][0 ]["name" ])
225+ assert fields == set (["temperature" , "humidity" , "weight" , "voltage" ])
0 commit comments