aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h')
-rw-r--r--src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h77
1 files changed, 42 insertions, 35 deletions
diff --git a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
index 94f9a8e6ca..d42811d913 100644
--- a/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
+++ b/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h
@@ -20,50 +20,57 @@
#include "src/core/ext/filters/client_channel/lb_policy_factory.h"
#include "src/core/ext/filters/client_channel/uri_parser.h"
#include "src/core/lib/channel/channel_args.h"
+#include "src/core/lib/gprpp/ref_counted.h"
#define GRPC_ARG_FAKE_RESOLVER_RESPONSE_GENERATOR \
"grpc.fake_resolver.response_generator"
-void grpc_resolver_fake_init();
+namespace grpc_core {
-// Instances of \a grpc_fake_resolver_response_generator are passed to the
-// fake resolver in a channel argument (see \a
-// grpc_fake_resolver_response_generator_arg) in order to inject and trigger
-// custom resolutions. See also \a
-// grpc_fake_resolver_response_generator_set_response.
-typedef struct grpc_fake_resolver_response_generator
- grpc_fake_resolver_response_generator;
-grpc_fake_resolver_response_generator*
-grpc_fake_resolver_response_generator_create();
+class FakeResolver;
-// Set next response of the fake resolver associated with the \a
-// response_generator instance and trigger a new resolution.
-void grpc_fake_resolver_response_generator_set_response(
- grpc_fake_resolver_response_generator* generator,
- grpc_channel_args* response);
+/// A mechanism for generating responses for the fake resolver.
+/// An instance of this class is passed to the fake resolver via a channel
+/// argument (see \a MakeChannelArg()) and used to inject and trigger custom
+/// resolutions.
+// TODO(roth): I would ideally like this to be InternallyRefCounted
+// instead of RefCounted, but external refs are currently needed to
+// encode this in channel args. Once channel_args are converted to C++,
+// see if we can find a way to fix this.
+class FakeResolverResponseGenerator
+ : public RefCounted<FakeResolverResponseGenerator> {
+ public:
+ FakeResolverResponseGenerator() {}
-// Set results_upon_error of the fake resolver associated with the \a
-// response_generator instance. When fake_resolver_channel_saw_error_locked() is
-// called, results_upon_error will be returned as long as it's non-NULL,
-// otherwise the last value set by
-// grpc_fake_resolver_response_generator_set_response() will be returned.
-void grpc_fake_resolver_response_generator_set_response_upon_error(
- grpc_fake_resolver_response_generator* generator,
- grpc_channel_args* response);
+ // Instructs the fake resolver associated with the response generator
+ // instance to trigger a new resolution with the specified response.
+ void SetResponse(grpc_channel_args* next_response);
-// Return a \a grpc_arg for a \a grpc_fake_resolver_response_generator instance.
-grpc_arg grpc_fake_resolver_response_generator_arg(
- grpc_fake_resolver_response_generator* generator);
-// Return the \a grpc_fake_resolver_response_generator instance in \a args or
-// NULL.
-grpc_fake_resolver_response_generator*
-grpc_fake_resolver_get_response_generator(const grpc_channel_args* args);
+ // Sets the re-resolution response, which is returned by the fake resolver
+ // when re-resolution is requested (via \a RequestReresolutionLocked()).
+ // The new re-resolution response replaces any previous re-resolution
+ // response that may have been set by a previous call.
+ // If the re-resolution response is set to NULL, then the fake
+ // resolver will return the last value set via \a SetResponse().
+ void SetReresolutionResponse(grpc_channel_args* response);
-grpc_fake_resolver_response_generator*
-grpc_fake_resolver_response_generator_ref(
- grpc_fake_resolver_response_generator* generator);
-void grpc_fake_resolver_response_generator_unref(
- grpc_fake_resolver_response_generator* generator);
+ // Returns a channel arg containing \a generator.
+ static grpc_arg MakeChannelArg(FakeResolverResponseGenerator* generator);
+
+ // Returns the response generator in \a args, or null if not found.
+ static FakeResolverResponseGenerator* GetFromArgs(
+ const grpc_channel_args* args);
+
+ private:
+ friend class FakeResolver;
+
+ static void SetResponseLocked(void* arg, grpc_error* error);
+ static void SetReresolutionResponseLocked(void* arg, grpc_error* error);
+
+ FakeResolver* resolver_ = nullptr; // Do not own.
+};
+
+} // namespace grpc_core
#endif /* GRPC_CORE_EXT_FILTERS_CLIENT_CHANNEL_RESOLVER_FAKE_FAKE_RESOLVER_H \
*/