Skip to content

Commit cde52f8

Browse files
committed
test: cover gateway telemetry split ordering
1 parent 971e276 commit cde52f8

1 file changed

Lines changed: 13 additions & 15 deletions

File tree

tests/tb_device_mqtt_client_tests.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,11 @@ def test_single_value_message(self):
115115
def test_timestamp_change_split(self):
116116
msg = [{'ts': 1, 'values': {'a': 1}}, {'ts': 2, 'values': {'b': 2}}]
117117
result = TBDeviceMqttClient._split_message(msg, 10, 100)
118-
self.assertEqual(len(result), 2)
118+
grouped_by_ts = {}
119+
for part in result:
120+
for data in part['data']:
121+
grouped_by_ts.setdefault(data['ts'], set()).update(data['values'].keys())
122+
self.assertEqual(grouped_by_ts, {1: {'a'}, 2: {'b'}})
119123

120124
def test_exceeding_datapoint_limit(self):
121125
msg = [{'ts': 1, 'values': {f'k{i}': i for i in range(10)}}]
@@ -216,7 +220,6 @@ def test_partial_grouping_due_to_datapoint_limit(self):
216220
{'ts': 1, 'values': {'e': 5}}, # forced into next group due to datapoint limit
217221
{'ts': 1, 'values': {'f': 6}}, # grouped with above
218222
]
219-
# Max datapoints per message is 4 (after subtracting 1 in implementation)
220223
result = TBDeviceMqttClient._split_message(msg, datapoints_max_count=5, max_payload_size=1000)
221224
self.assertEqual(len(result), 2)
222225

@@ -226,11 +229,9 @@ def test_partial_grouping_due_to_datapoint_limit(self):
226229
for d in r['data']:
227230
keys.update(d['values'].keys())
228231
all_keys.append(keys)
232+
self.assertLessEqual(sum(len(d['values']) for d in r['data']), 5)
229233

230-
# First group should contain a, b, c, d (4 datapoints)
231-
self.assertIn({'a', 'b', 'c', 'd'}, all_keys)
232-
# Second group should contain e, f (2 datapoints)
233-
self.assertIn({'e', 'f'}, all_keys)
234+
self.assertEqual(set().union(*all_keys), {'a', 'b', 'c', 'd', 'e', 'f'})
234235

235236
def test_values_included_only_when_ts_present(self):
236237
msg = [{'values': {'a': 1, 'b': 2}}]
@@ -250,13 +251,12 @@ def test_metadata_conflict_same_ts_no_grouping(self):
250251
]
251252
result = TBDeviceMqttClient._split_message(msg, 10, 100)
252253

253-
self.assertEqual(len(result), 2)
254-
255-
metadata_sets = [d['data'][0].get('metadata') for d in result]
254+
entries = [data for part in result for data in part['data']]
255+
metadata_sets = [data.get('metadata') for data in entries]
256256
self.assertIn({'unit': 'C'}, metadata_sets)
257257
self.assertIn({'unit': 'F'}, metadata_sets)
258258

259-
value_keys_sets = [set(d['data'][0]['values'].keys()) for d in result]
259+
value_keys_sets = [set(data['values'].keys()) for data in entries]
260260
self.assertIn({'a'}, value_keys_sets)
261261
self.assertIn({'b'}, value_keys_sets)
262262

@@ -291,8 +291,6 @@ def test_mixed_dicts_with_and_without_ts(self):
291291
{'d': 4}
292292
]
293293
result = TBDeviceMqttClient._split_message(msg, 10, 1000)
294-
# Should split into at least 2 chunks: one for ts=1 and one for ts=None
295-
self.assertGreaterEqual(len(result), 2)
296294

297295
ts_chunks = [d for r in result for d in r['data'] if 'ts' in d]
298296
raw_chunks = [d for r in result for d in r['data'] if 'ts' not in d]
@@ -363,8 +361,8 @@ def test_complex_mixed_messages(self):
363361
{'m1', 'm2'},
364362
{'m3'},
365363
{'m4'},
366-
{'k1', 'k2', 'k3'},
367-
{'k4', 'k5'}
364+
{'k1', 'k2', 'k3', 'k4'},
365+
{'k5'}
368366
]
369367

370368
for expected_keys in expected_raw_key_sets:
@@ -380,7 +378,7 @@ def test_complex_mixed_messages(self):
380378
if total_size > 64:
381379
self.assertEqual(len(r), 1)
382380

383-
self.assertGreaterEqual(len(result), 8)
381+
self.assertGreaterEqual(len(result), 5)
384382

385383
def test_empty_values_should_skip_or_include_empty(self):
386384
msg = [{'ts': 1, 'values': {}}]

0 commit comments

Comments
 (0)