@@ -622,6 +622,101 @@ Y_UNIT_TEST_SUITE(TActorTest) {
622
622
UNIT_ASSERT_VALUES_EQUAL (event->Get ()->Index , 12u );
623
623
}
624
624
}
625
+
626
+ Y_UNIT_TEST (TestWaitFuture) {
627
+ enum EEv {
628
+ EvTrigger = EventSpaceBegin (TEvents::ES_PRIVATE)
629
+ };
630
+
631
+ struct TEvTrigger : public TEventLocal <TEvTrigger, EvTrigger> {
632
+ TEvTrigger () = default ;
633
+ };
634
+
635
+ class TTriggerActor : public TActorBootstrapped <TTriggerActor> {
636
+ public:
637
+ TTriggerActor (NThreading::TPromise<void > promise)
638
+ : Promise(std::move(promise))
639
+ {}
640
+
641
+ void Bootstrap () {
642
+ Schedule (TDuration::Seconds (1 ), new TEvTrigger);
643
+ Become (&TThis::StateWork);
644
+ }
645
+
646
+ private:
647
+ STFUNC (StateWork) {
648
+ switch (ev->GetTypeRewrite ()) {
649
+ hFunc (TEvTrigger, Handle );
650
+ }
651
+ }
652
+
653
+ void Handle (TEvTrigger::TPtr&) {
654
+ Promise.SetValue ();
655
+ PassAway ();
656
+ }
657
+
658
+ private:
659
+ NThreading::TPromise<void > Promise;
660
+ };
661
+
662
+ TTestActorRuntime runtime;
663
+ runtime.Initialize (MakeEgg ());
664
+
665
+ NThreading::TPromise<void > promise = NThreading::NewPromise<void >();
666
+ NThreading::TFuture<void > future = promise.GetFuture ();
667
+
668
+ auto actor = runtime.Register (new TTriggerActor (std::move (promise)));
669
+ runtime.EnableScheduleForActor (actor);
670
+
671
+ runtime.WaitFuture (std::move (future));
672
+ }
673
+
674
+ Y_UNIT_TEST (TestWaitFor) {
675
+ enum EEv {
676
+ EvTrigger = EventSpaceBegin (TEvents::ES_PRIVATE)
677
+ };
678
+
679
+ struct TEvTrigger : public TEventLocal <TEvTrigger, EvTrigger> {
680
+ TEvTrigger () = default ;
681
+ };
682
+
683
+ class TTriggerActor : public TActorBootstrapped <TTriggerActor> {
684
+ public:
685
+ TTriggerActor (int * ptr)
686
+ : Ptr (ptr)
687
+ {}
688
+
689
+ void Bootstrap () {
690
+ Schedule (TDuration::Seconds (1 ), new TEvTrigger);
691
+ Become (&TThis::StateWork);
692
+ }
693
+
694
+ private:
695
+ STFUNC (StateWork) {
696
+ switch (ev->GetTypeRewrite ()) {
697
+ hFunc (TEvTrigger, Handle );
698
+ }
699
+ }
700
+
701
+ void Handle (TEvTrigger::TPtr&) {
702
+ *Ptr = 42 ;
703
+ PassAway ();
704
+ }
705
+
706
+ private:
707
+ int * Ptr ;
708
+ };
709
+
710
+ TTestActorRuntime runtime;
711
+ runtime.Initialize (MakeEgg ());
712
+
713
+ int value = 0 ;
714
+ auto actor = runtime.Register (new TTriggerActor (&value));
715
+ runtime.EnableScheduleForActor (actor);
716
+
717
+ runtime.WaitFor (" value = 42" , [&]{ return value == 42 ; });
718
+ UNIT_ASSERT_VALUES_EQUAL (value, 42 );
719
+ }
625
720
};
626
721
627
722
}
0 commit comments