Skip to content

Commit f350ff0

Browse files
committed
Make tests less flaky on Sable
1 parent b274cad commit f350ff0

File tree

1 file changed

+40
-36
lines changed

1 file changed

+40
-36
lines changed

irctest/server_tests/chathistory.py

Lines changed: 40 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,10 @@ def _wait_before_chathistory(self):
4444
"""
4545
raise NotImplementedError("_BaseChathistoryTests._wait_before_chathistory")
4646

47-
def validate_chathistory_batch(self, msgs, target):
47+
def validate_chathistory_batch(self, user, target):
48+
# may need to try again for Sable, as it has a pretty high latency here
49+
while not (msgs := self.getMessages(user)):
50+
pass
4851
(start, *inner_msgs, end) = msgs
4952

5053
self.assertMessageMatch(
@@ -239,7 +242,7 @@ def testChathistory(self, subcommand):
239242
echo_messages.extend(
240243
msg.to_history_message() for msg in self.getMessages(1)
241244
)
242-
time.sleep(0.002)
245+
time.sleep(0.02)
243246

244247
self.validate_echo_messages(NUM_MESSAGES, echo_messages)
245248

@@ -486,15 +489,15 @@ def validate_chathistory(self, subcommand, echo_messages, user, chname):
486489
def _validate_chathistory_LATEST(self, echo_messages, user, chname):
487490
INCLUSIVE_LIMIT = len(echo_messages) * 2
488491
self.sendLine(user, "CHATHISTORY LATEST %s * %d" % (chname, INCLUSIVE_LIMIT))
489-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
492+
result = self.validate_chathistory_batch(user, chname)
490493
self.assertEqual(echo_messages, result)
491494

492495
self.sendLine(user, "CHATHISTORY LATEST %s * %d" % (chname, 5))
493-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
496+
result = self.validate_chathistory_batch(user, chname)
494497
self.assertEqual(echo_messages[-5:], result)
495498

496499
self.sendLine(user, "CHATHISTORY LATEST %s * %d" % (chname, 1))
497-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
500+
result = self.validate_chathistory_batch(user, chname)
498501
self.assertEqual(echo_messages[-1:], result)
499502

500503
if self._supports_msgid():
@@ -503,7 +506,7 @@ def _validate_chathistory_LATEST(self, echo_messages, user, chname):
503506
"CHATHISTORY LATEST %s msgid=%s %d"
504507
% (chname, echo_messages[4].msgid, INCLUSIVE_LIMIT),
505508
)
506-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
509+
result = self.validate_chathistory_batch(user, chname)
507510
self.assertEqual(echo_messages[5:], result)
508511

509512
if self._supports_timestamp():
@@ -512,7 +515,7 @@ def _validate_chathistory_LATEST(self, echo_messages, user, chname):
512515
"CHATHISTORY LATEST %s timestamp=%s %d"
513516
% (chname, echo_messages[4].time, INCLUSIVE_LIMIT),
514517
)
515-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
518+
result = self.validate_chathistory_batch(user, chname)
516519
self.assertEqual(echo_messages[5:], result)
517520

518521
def _validate_chathistory_BEFORE(self, echo_messages, user, chname):
@@ -523,7 +526,7 @@ def _validate_chathistory_BEFORE(self, echo_messages, user, chname):
523526
"CHATHISTORY BEFORE %s msgid=%s %d"
524527
% (chname, echo_messages[6].msgid, INCLUSIVE_LIMIT),
525528
)
526-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
529+
result = self.validate_chathistory_batch(user, chname)
527530
self.assertEqual(echo_messages[:6], result)
528531

529532
if self._supports_timestamp():
@@ -532,15 +535,15 @@ def _validate_chathistory_BEFORE(self, echo_messages, user, chname):
532535
"CHATHISTORY BEFORE %s timestamp=%s %d"
533536
% (chname, echo_messages[6].time, INCLUSIVE_LIMIT),
534537
)
535-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
538+
result = self.validate_chathistory_batch(user, chname)
536539
self.assertEqual(echo_messages[:6], result)
537540

538541
self.sendLine(
539542
user,
540543
"CHATHISTORY BEFORE %s timestamp=%s %d"
541544
% (chname, echo_messages[6].time, 2),
542545
)
543-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
546+
result = self.validate_chathistory_batch(user, chname)
544547
self.assertEqual(echo_messages[4:6], result)
545548

546549
def _validate_chathistory_AFTER(self, echo_messages, user, chname):
@@ -551,7 +554,7 @@ def _validate_chathistory_AFTER(self, echo_messages, user, chname):
551554
"CHATHISTORY AFTER %s msgid=%s %d"
552555
% (chname, echo_messages[3].msgid, INCLUSIVE_LIMIT),
553556
)
554-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
557+
result = self.validate_chathistory_batch(user, chname)
555558
self.assertEqual(echo_messages[4:], result)
556559

557560
if self._supports_timestamp():
@@ -560,15 +563,15 @@ def _validate_chathistory_AFTER(self, echo_messages, user, chname):
560563
"CHATHISTORY AFTER %s timestamp=%s %d"
561564
% (chname, echo_messages[3].time, INCLUSIVE_LIMIT),
562565
)
563-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
566+
result = self.validate_chathistory_batch(user, chname)
564567
self.assertEqual(echo_messages[4:], result)
565568

566569
self.sendLine(
567570
user,
568571
"CHATHISTORY AFTER %s timestamp=%s %d"
569572
% (chname, echo_messages[3].time, 3),
570573
)
571-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
574+
result = self.validate_chathistory_batch(user, chname)
572575
self.assertEqual(echo_messages[4:7], result)
573576

574577
def _validate_chathistory_BETWEEN(self, echo_messages, user, chname):
@@ -585,7 +588,7 @@ def _validate_chathistory_BETWEEN(self, echo_messages, user, chname):
585588
INCLUSIVE_LIMIT,
586589
),
587590
)
588-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
591+
result = self.validate_chathistory_batch(user, chname)
589592
self.assertEqual(echo_messages[1:-1], result)
590593

591594
self.sendLine(
@@ -598,7 +601,7 @@ def _validate_chathistory_BETWEEN(self, echo_messages, user, chname):
598601
INCLUSIVE_LIMIT,
599602
),
600603
)
601-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
604+
result = self.validate_chathistory_batch(user, chname)
602605
self.assertEqual(echo_messages[1:-1], result)
603606

604607
# BETWEEN forwards and backwards with a limit, should get
@@ -608,15 +611,15 @@ def _validate_chathistory_BETWEEN(self, echo_messages, user, chname):
608611
"CHATHISTORY BETWEEN %s msgid=%s msgid=%s %d"
609612
% (chname, echo_messages[0].msgid, echo_messages[-1].msgid, 3),
610613
)
611-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
614+
result = self.validate_chathistory_batch(user, chname)
612615
self.assertEqual(echo_messages[1:4], result)
613616

614617
self.sendLine(
615618
user,
616619
"CHATHISTORY BETWEEN %s msgid=%s msgid=%s %d"
617620
% (chname, echo_messages[-1].msgid, echo_messages[0].msgid, 3),
618621
)
619-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
622+
result = self.validate_chathistory_batch(user, chname)
620623
self.assertEqual(echo_messages[-4:-1], result)
621624

622625
if self._supports_timestamp():
@@ -631,7 +634,7 @@ def _validate_chathistory_BETWEEN(self, echo_messages, user, chname):
631634
INCLUSIVE_LIMIT,
632635
),
633636
)
634-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
637+
result = self.validate_chathistory_batch(user, chname)
635638
self.assertEqual(echo_messages[1:-1], result)
636639
self.sendLine(
637640
user,
@@ -643,21 +646,21 @@ def _validate_chathistory_BETWEEN(self, echo_messages, user, chname):
643646
INCLUSIVE_LIMIT,
644647
),
645648
)
646-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
649+
result = self.validate_chathistory_batch(user, chname)
647650
self.assertEqual(echo_messages[1:-1], result)
648651
self.sendLine(
649652
user,
650653
"CHATHISTORY BETWEEN %s timestamp=%s timestamp=%s %d"
651654
% (chname, echo_messages[0].time, echo_messages[-1].time, 3),
652655
)
653-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
656+
result = self.validate_chathistory_batch(user, chname)
654657
self.assertEqual(echo_messages[1:4], result)
655658
self.sendLine(
656659
user,
657660
"CHATHISTORY BETWEEN %s timestamp=%s timestamp=%s %d"
658661
% (chname, echo_messages[-1].time, echo_messages[0].time, 3),
659662
)
660-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
663+
result = self.validate_chathistory_batch(user, chname)
661664
self.assertEqual(echo_messages[-4:-1], result)
662665

663666
def _validate_chathistory_AROUND(self, echo_messages, user, chname):
@@ -667,15 +670,15 @@ def _validate_chathistory_AROUND(self, echo_messages, user, chname):
667670
"CHATHISTORY AROUND %s msgid=%s %d"
668671
% (chname, echo_messages[7].msgid, 1),
669672
)
670-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
673+
result = self.validate_chathistory_batch(user, chname)
671674
self.assertEqual([echo_messages[7]], result)
672675

673676
self.sendLine(
674677
user,
675678
"CHATHISTORY AROUND %s msgid=%s %d"
676679
% (chname, echo_messages[7].msgid, 3),
677680
)
678-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
681+
result = self.validate_chathistory_batch(user, chname)
679682
self.assertEqual(echo_messages[6:9], result)
680683

681684
if self._supports_timestamp():
@@ -684,7 +687,7 @@ def _validate_chathistory_AROUND(self, echo_messages, user, chname):
684687
"CHATHISTORY AROUND %s timestamp=%s %d"
685688
% (chname, echo_messages[7].time, 3),
686689
)
687-
result = self.validate_chathistory_batch(self.getMessages(user), chname)
690+
result = self.validate_chathistory_batch(user, chname)
688691
self.assertIn(echo_messages[7], result)
689692

690693
@pytest.mark.arbitrary_client_tags
@@ -861,7 +864,10 @@ def _wait_before_chathistory(self):
861864
@cases.mark_specifications("Sable")
862865
@cases.mark_services
863866
class SablePostgresqlHistoryTestCase(_BaseChathistoryTests):
864-
faketime = "+1y x15" # for every wall clock second, 15 seconds pass for the server
867+
# for every wall clock second, 10 seconds pass for the server.
868+
# At x15, sable_history does not always have time to persist messages (wtf?)
869+
# at x30, links between nodes timeout.
870+
faketime = "+1y x10"
865871

866872
@staticmethod
867873
def config() -> cases.TestCaseControllerConfig:
@@ -871,18 +877,15 @@ def config() -> cases.TestCaseControllerConfig:
871877
)
872878

873879
def _wait_before_chathistory(self):
874-
"""waits 6 seconds which appears to be a 1.5 min to Sable; which goes over
880+
"""waits 15 seconds which appears to be a 1.5 min to Sable; which goes over
875881
the 1 min timeout for in-memory history"""
876882
assert self.controller.faketime_enabled, "faketime is not installed"
877-
time.sleep(7)
883+
time.sleep(15)
878884

879885

880886
@cases.mark_specifications("Sable")
881887
@cases.mark_services
882888
class SableExpiringHistoryTestCase(cases.BaseServerTestCase):
883-
# for every wall clock second, 10 seconds pass for the server.
884-
# At x15, sable_history does not always have time to persist messages (wtf?)
885-
# at x30, links between nodes timeout.
886889
faketime = "+1y x10"
887890

888891
def _wait_before_chathistory(self):
@@ -918,13 +921,14 @@ def testChathistoryExpired(self):
918921

919922
self.sendLine(1, f"CHATHISTORY LATEST {chname} * 10")
920923

921-
# Sable processes CHATHISTORY asynchronously, which can be pretty slow as it
922-
# sends cross-server requests. This means we can't just rely on a PING-PONG
923-
# or the usual time.sleep(self.controller.sync_sleep_time) to make sure
924-
# the ircd replied to us
925-
time.sleep(self.controller.sync_sleep_time * 10)
924+
while not (messages := self.getMessages(1)):
925+
# Sable processes CHATHISTORY asynchronously, which can be pretty slow as it
926+
# sends cross-server requests. This means we can't just rely on a PING-PONG
927+
# or the usual time.sleep(self.controller.sync_sleep_time) to make sure
928+
# the ircd replied to us
929+
time.sleep(self.controller.sync_sleep_time)
926930

927-
(start, *middle, end) = self.getMessages(1)
931+
(start, *middle, end) = messages
928932
self.assertMessageMatch(
929933
start, command="BATCH", params=[StrRe(r"\+.*"), "chathistory", chname]
930934
)

0 commit comments

Comments
 (0)