Skip to content

Commit c1eaea0

Browse files
authored
Improve sensor watcher integration test reliability (#6357)
2 parents fcf41e4 + 2ea0433 commit c1eaea0

File tree

1 file changed

+44
-9
lines changed

1 file changed

+44
-9
lines changed

st2reactor/tests/integration/test_sensor_watcher.py

Lines changed: 44 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,16 @@ def setUpClass(cls):
3434
def setUp(self):
3535
super().setUp()
3636
# pre-condition: Make sure there is no test pollution
37+
# Delete any leftover queues from previous failed test runs
38+
self.rabbit_client = self._get_client()
39+
self._delete_sensor_watcher_amqp_queues(
40+
queue_name="st2.sensor.watch.covfefe", rabbit_client=self.rabbit_client
41+
)
42+
43+
# Verify queues are deleted
3744
sw_queues = self._get_sensor_watcher_amqp_queues(
38-
queue_name="st2.sensor.watch.covfefe"
45+
queue_name="st2.sensor.watch.covfefe", rabbit_client=self.rabbit_client
3946
)
40-
# TODO: Maybe just delete any leftover queues from previous failed test runs.
4147
self.assertTrue(len(sw_queues) == 0)
4248

4349
def test_sensor_watch_queue_gets_deleted_on_stop(self):
@@ -55,30 +61,59 @@ def delete_handler(sensor_db):
5561
)
5662
sensor_watcher.start()
5763
sw_queues = self._get_sensor_watcher_amqp_queues(
58-
queue_name="st2.sensor.watch.covfefe"
64+
queue_name="st2.sensor.watch.covfefe", rabbit_client=self.rabbit_client
5965
)
6066

6167
start = monotonic()
6268
done = False
6369
while not done:
6470
concurrency.sleep(0.01)
6571
sw_queues = self._get_sensor_watcher_amqp_queues(
66-
queue_name="st2.sensor.watch.covfefe"
72+
queue_name="st2.sensor.watch.covfefe", rabbit_client=self.rabbit_client
6773
)
6874
done = len(sw_queues) > 0 or ((monotonic() - start) < 5)
6975

7076
sensor_watcher.stop()
7177
sw_queues = self._get_sensor_watcher_amqp_queues(
72-
queue_name="st2.sensor.watch.covfefe"
78+
queue_name="st2.sensor.watch.covfefe", rabbit_client=self.rabbit_client
7379
)
7480
self.assertTrue(len(sw_queues) == 0)
7581

76-
@staticmethod
77-
def _list_amqp_queues():
82+
def _get_client(self):
7883
rabbit_client = Client("localhost:15672", "guest", "guest")
84+
return rabbit_client
85+
86+
def _list_amqp_queues(self, rabbit_client):
87+
"""
88+
:param rabbit_client: Client
89+
"""
7990
queues = [q["name"] for q in rabbit_client.get_queues()]
8091
return queues
8192

82-
def _get_sensor_watcher_amqp_queues(self, queue_name):
83-
all_queues = self._list_amqp_queues()
93+
def _get_sensor_watcher_amqp_queues(self, queue_name, rabbit_client):
94+
"""
95+
:param rabbit_client: Client
96+
"""
97+
all_queues = self._list_amqp_queues(rabbit_client)
8498
return set([q_name for q_name in all_queues if queue_name in q_name])
99+
100+
def _delete_sensor_watcher_amqp_queues(self, queue_name, rabbit_client):
101+
"""
102+
Delete all queues containing the specified queue_name pattern.
103+
104+
:param string queue_name: Pattern to match in queue names
105+
:param rabbit_client: Client
106+
:returns: None
107+
"""
108+
# Get all queues matching the pattern
109+
queues_to_delete = self._get_sensor_watcher_amqp_queues(
110+
queue_name=queue_name, rabbit_client=rabbit_client
111+
)
112+
113+
if not queues_to_delete:
114+
return
115+
116+
# Create a rabbit client and delete each queue
117+
for queue in queues_to_delete:
118+
# Use default vhost "/"
119+
rabbit_client.delete_queue("/", queue)

0 commit comments

Comments
 (0)