mirror of https://github.com/grpc/grpc.git
Make a suite of wakeup schedulers for tests (#27459)
* Make a suite of wakeup schedulers for tests * add missing file * Automated change: Fix sanity tests Co-authored-by: ctiller <ctiller@users.noreply.github.com>pull/27481/head
parent
d1cecad651
commit
65644a7bb6
9 changed files with 92 additions and 34 deletions
@ -0,0 +1,64 @@ |
||||
// Copyright 2021 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef GRPC_TEST_CORE_PROMISE_TEST_WAKEUP_SCHEDULERS_H |
||||
#define GRPC_TEST_CORE_PROMISE_TEST_WAKEUP_SCHEDULERS_H |
||||
|
||||
#include <gmock/gmock.h> |
||||
|
||||
namespace grpc_core { |
||||
|
||||
// A wakeup scheduler that simply crashes.
|
||||
// Useful for very limited tests.
|
||||
struct NoWakeupScheduler { |
||||
template <typename ActivityType> |
||||
void ScheduleWakeup(ActivityType*) { |
||||
abort(); |
||||
} |
||||
}; |
||||
|
||||
// A wakeup scheduler that simply runs the callback immediately.
|
||||
// Useful for unit testing, probably not so much for real systems due to lock
|
||||
// ordering problems.
|
||||
struct InlineWakeupScheduler { |
||||
template <typename ActivityType> |
||||
void ScheduleWakeup(ActivityType* activity) { |
||||
activity->RunScheduledWakeup(); |
||||
} |
||||
}; |
||||
|
||||
// Mock for something that can schedule callbacks.
|
||||
class MockCallbackScheduler { |
||||
public: |
||||
MOCK_METHOD(void, Schedule, (std::function<void()>)); |
||||
}; |
||||
|
||||
// WakeupScheduler that schedules wakeups against a MockCallbackScheduler.
|
||||
// Usage:
|
||||
// TEST(..., ...) {
|
||||
// MockCallbackScheduler scheduler;
|
||||
// auto activity = MakeActivity(...,
|
||||
// UseMockCallbackScheduler(&scheduler),
|
||||
// ...);
|
||||
struct UseMockCallbackScheduler { |
||||
MockCallbackScheduler* scheduler; |
||||
template <typename ActivityType> |
||||
void ScheduleWakeup(ActivityType* activity) { |
||||
scheduler->Schedule([activity] { activity->RunScheduledWakeup(); }); |
||||
} |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif |
Loading…
Reference in new issue