123456789101112131415161718192021222324252627282930313233343536373839404142434445464748 |
- #include <library/cpp/testing/unittest/registar.h>
- #include "scheduler_actor.h"
- #include "misc/test_sync.h"
- using namespace NBus;
- using namespace NBus::NPrivate;
- using namespace NActor;
- Y_UNIT_TEST_SUITE(TSchedulerActorTests) {
- struct TMyActor: public TAtomicRefCount<TMyActor>, public TActor<TMyActor>, public TScheduleActor<TMyActor> {
- TTestSync TestSync;
- TMyActor(TExecutor* executor, TScheduler* scheduler)
- : TActor<TMyActor>(executor)
- , TScheduleActor<TMyActor>(scheduler)
- , Iteration(0)
- {
- }
- unsigned Iteration;
- void Act(TDefaultTag) {
- if (!Alarm.FetchTask()) {
- Y_ABORT("must not have no spurious wakeups in test");
- }
- TestSync.WaitForAndIncrement(Iteration++);
- if (Iteration <= 5) {
- ScheduleAt(TInstant::Now() + TDuration::MilliSeconds(Iteration));
- }
- }
- };
- Y_UNIT_TEST(Simple) {
- TExecutor executor(1);
- TScheduler scheduler;
- TIntrusivePtr<TMyActor> actor(new TMyActor(&executor, &scheduler));
- actor->ScheduleAt(TInstant::Now() + TDuration::MilliSeconds(1));
- actor->TestSync.WaitForAndIncrement(6);
- // TODO: stop in destructor
- scheduler.Stop();
- }
- }
|