@@ -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
863866class 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
882888class 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