diff --git a/src/Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensions.cs b/src/Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensions.cs
index b668e5f..2049318 100644
--- a/src/Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensions.cs
+++ b/src/Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensions.cs
@@ -63,8 +63,8 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
return (retryPolicy, hedgingPolicy) switch
{
(null, null) => builder,
- (var policy, null) => ConfigureServiceMethod(builder, methodName, policy),
- (null, var policy) => ConfigureServiceMethod(builder, methodName, policy),
+ (var policy, null) => SetServiceMethodRetryPolicy(builder, methodName, policy),
+ (null, var policy) => SetServiceMethodHedgingPolicy(builder, methodName, policy),
(_, _) => throw new ArgumentException("A retry policy can't be combined with a hedging policy."),
};
}
@@ -79,7 +79,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
///
/// The to attach to all service method matching the pattern specified in .
/// The configured .
- public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder builder, MethodName methodName, RetryPolicy retryPolicy)
+ public static IHttpClientBuilder SetServiceMethodRetryPolicy(this IHttpClientBuilder builder, MethodName methodName, RetryPolicy retryPolicy)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
@@ -109,7 +109,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
///
/// The to attach to all service method matching the pattern specified in .
/// The configured .
- public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder builder, MethodName methodName, HedgingPolicy hedgingPolicy)
+ public static IHttpClientBuilder SetServiceMethodHedgingPolicy(this IHttpClientBuilder builder, MethodName methodName, HedgingPolicy hedgingPolicy)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
@@ -165,7 +165,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
///
/// The to attach to all service method matching the pattern specified in .
/// The configured .
- public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder builder, string methodName, RetryPolicy retryPolicy)
+ public static IHttpClientBuilder SetServiceMethodRetryPolicy(this IHttpClientBuilder builder, string methodName, RetryPolicy retryPolicy)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
@@ -173,7 +173,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
_ = retryPolicy ?? throw new ArgumentNullException(nameof(retryPolicy));
- return ConfigureServiceMethod(builder, ParseKey(methodName), retryPolicy);
+ return SetServiceMethodRetryPolicy(builder, ParseKey(methodName), retryPolicy);
}
///
@@ -189,7 +189,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
///
/// The to attach to all service method matching the pattern specified in .
/// The configured .
- public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder builder, string methodName, HedgingPolicy hedgingPolicy)
+ public static IHttpClientBuilder SetServiceMethodHedgingPolicy(this IHttpClientBuilder builder, string methodName, HedgingPolicy hedgingPolicy)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
@@ -197,7 +197,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
_ = hedgingPolicy ?? throw new ArgumentNullException(nameof(hedgingPolicy));
- return ConfigureServiceMethod(builder, ParseKey(methodName), hedgingPolicy);
+ return SetServiceMethodHedgingPolicy(builder, ParseKey(methodName), hedgingPolicy);
}
///
@@ -207,7 +207,7 @@ public static IHttpClientBuilder ConfigureServiceMethod(this IHttpClientBuilder
/// The instance of containing the configuration to attach to all methods.
/// The configured .
/// Thrown when the method is configured with both a and a .
- public static IHttpClientBuilder ConfigureDefaultServiceMethod(this IHttpClientBuilder builder, IConfigurationSection section)
+ public static IHttpClientBuilder ConfigureServiceMethodFallback(this IHttpClientBuilder builder, IConfigurationSection section)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
@@ -220,13 +220,13 @@ public static IHttpClientBuilder ConfigureDefaultServiceMethod(this IHttpClientB
/// The to configure.
/// The to attach to all service methods.
/// The configured .
- public static IHttpClientBuilder ConfigureDefaultServiceMethod(this IHttpClientBuilder builder, RetryPolicy retryPolicy)
+ public static IHttpClientBuilder SetFallbackRetryPolicy(this IHttpClientBuilder builder, RetryPolicy retryPolicy)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
_ = retryPolicy ?? throw new ArgumentNullException(nameof(retryPolicy));
- return ConfigureServiceMethod(builder, MethodName.Default, retryPolicy);
+ return SetServiceMethodRetryPolicy(builder, MethodName.Default, retryPolicy);
}
///
@@ -235,13 +235,13 @@ public static IHttpClientBuilder ConfigureDefaultServiceMethod(this IHttpClientB
/// The to configure.
/// The to attach to all service methods.
/// The configured .
- public static IHttpClientBuilder ConfigureDefaultServiceMethod(this IHttpClientBuilder builder, HedgingPolicy hedgingPolicy)
+ public static IHttpClientBuilder SetFallbackHedgingPolicy(this IHttpClientBuilder builder, HedgingPolicy hedgingPolicy)
{
_ = builder ?? throw new ArgumentNullException(nameof(builder));
_ = hedgingPolicy ?? throw new ArgumentNullException(nameof(hedgingPolicy));
- return ConfigureServiceMethod(builder, MethodName.Default, hedgingPolicy);
+ return SetServiceMethodHedgingPolicy(builder, MethodName.Default, hedgingPolicy);
}
private static T LoadPolicy(IConfigurationSection section, string sectionName)
diff --git a/tests/Tests.Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensionsTests.cs b/tests/Tests.Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensionsTests.cs
index 3787ab7..7f62a0e 100644
--- a/tests/Tests.Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensionsTests.cs
+++ b/tests/Tests.Grpc.ChannelConfiguration/GrpcServiceMethodConfigurationExtensionsTests.cs
@@ -29,13 +29,13 @@ public class ConfigureServiceMethods
{
[Test]
[CustomAutoData]
- public void ConfigureServiceMethods_does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethod(nameof(GrpcServiceMethodConfigurationExtensions.ConfigureServiceMethods)));
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethod(nameof(GrpcServiceMethodConfigurationExtensions.ConfigureServiceMethods)));
[Test]
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethods_does_nothing_if_no_configuration_is_added(string serviceName, string methodName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri)
+ public void Does_nothing_if_no_configuration_is_added(string serviceName, string methodName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri)
{
var method = CreateMethodNameString(serviceName, methodName);
@@ -62,7 +62,7 @@ public void ConfigureServiceMethods_does_nothing_if_no_configuration_is_added(st
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_can_set_fallback_retry_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
+ public void Can_set_fallback_retry_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -126,7 +126,7 @@ public void ConfigureServiceMethods_can_set_fallback_retry_configuration(Configu
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_can_set_fallback_hedging_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Can_set_fallback_hedging_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
@@ -187,7 +187,7 @@ public void ConfigureServiceMethods_can_set_fallback_hedging_configuration(Confi
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_throws_if_fallback_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Throws_if_fallback_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -222,7 +222,7 @@ public void ConfigureServiceMethods_throws_if_fallback_configuration_has_both_re
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_can_set_set_retry_policy_for_service(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode, string serviceName)
+ public void Can_set_set_retry_policy_for_service(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode, string serviceName)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -286,7 +286,7 @@ public void ConfigureServiceMethods_can_set_set_retry_policy_for_service(Configu
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_can_set_set_hedging_policy_for_service(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName)
+ public void Can_set_set_hedging_policy_for_service(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName)
{
hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
@@ -347,7 +347,7 @@ public void ConfigureServiceMethods_can_set_set_hedging_policy_for_service(Confi
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_throws_if_service_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName)
+ public void Throws_if_service_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -382,7 +382,7 @@ public void ConfigureServiceMethods_throws_if_service_configuration_has_both_ret
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_can_set_retry_policy_for_method(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode, string serviceName, string methodName)
+ public void Can_set_retry_policy_for_method(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode, string serviceName, string methodName)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -446,7 +446,7 @@ public void ConfigureServiceMethods_can_set_retry_policy_for_method(Configuratio
}
[Test, CustomAutoData]
- public void ConfigureServiceMethods_can_set_hedging_policy_for_method(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName, string methodName)
+ public void Can_set_hedging_policy_for_method(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName, string methodName)
{
hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
@@ -508,7 +508,7 @@ public void ConfigureServiceMethods_can_set_hedging_policy_for_method(Configurat
[Test, CustomAutoData]
- public void ConfigureServiceMethods_throws_if_service_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName, string methodName)
+ public void Throws_if_service_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode, string serviceName, string methodName)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -548,13 +548,13 @@ public class ConfigureServiceMethod
{
[Test]
[CustomAutoData]
- public void ConfigureServiceMethod_do_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.ConfigureServiceMethod)));
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.ConfigureServiceMethod)));
[Test]
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethod_can_configure_method_retry_policy_from_configuration(string methodName, string serviceName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
+ public void Can_configure_method_retry_policy_from_configuration(string methodName, string serviceName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
{
var method = new MethodName { Service = serviceName, Method = methodName };
@@ -622,7 +622,7 @@ public void ConfigureServiceMethod_can_configure_method_retry_policy_from_config
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethod_can_configure_method_hedging_policy_from_configuration(string methodName, string serviceName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Can_configure_method_hedging_policy_from_configuration(string methodName, string serviceName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
var method = new MethodName { Service = serviceName, Method = methodName };
@@ -687,7 +687,7 @@ public void ConfigureServiceMethod_can_configure_method_hedging_policy_from_conf
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethod_throws_if_service_configuration_has_both_retry_policy_and_hedging_policy(string methodName, string serviceName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Throws_if_service_configuration_has_both_retry_policy_and_hedging_policy(string methodName, string serviceName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
var method = new MethodName { Service = serviceName, Method = methodName };
@@ -720,108 +720,6 @@ public void ConfigureServiceMethod_throws_if_service_configuration_has_both_retr
Assert.That(() => builder.ConfigureServiceMethod(method, configuration.GetSection("GRPC")), Throws.ArgumentException);
}
- [Test]
- [CustomInlineAutoData(null!, null!)]
- [CustomInlineAutoData(null!)]
- [CustomInlineAutoData]
- public void ConfigureServiceMethod_can_configure_method_retry_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
- {
- var method = new MethodName { Service = serviceName, Method = methodName };
-
- retryPolicy.RetryableStatusCodes.Add(statusCode);
-
- var builder = services.AddGrpcClient(o => o.Address = uri);
-
- builder.ConfigureServiceMethod(method, retryPolicy);
-
- var options = services.BuildServiceProvider()
- .GetRequiredService>()
- .Get(builder.Name);
-
- Assume.That(options.ChannelOptionsActions, Has.Exactly(1).InstanceOf>());
-
- var configurationDelegate = options.ChannelOptionsActions[0];
-
- var channelOptions = new GrpcChannelOptions();
-
- configurationDelegate(channelOptions);
-
- Assert.Multiple(() =>
- {
- Assert.That(channelOptions.ServiceConfig, Is.Not.Null);
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs, Has.Exactly(1).InstanceOf());
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names, Has.Exactly(1).InstanceOf());
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Service, Is.EqualTo(serviceName));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Method, Is.EqualTo(methodName));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy, Is.Null);
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy, Is.Not.Null);
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.BackoffMultiplier, Is.EqualTo(retryPolicy.BackoffMultiplier));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.InitialBackoff, Is.EqualTo(retryPolicy.InitialBackoff));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.MaxAttempts, Is.EqualTo(retryPolicy.MaxAttempts));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.RetryableStatusCodes, Is.EquivalentTo(retryPolicy.RetryableStatusCodes));
- });
- }
-
- [Test]
- [CustomInlineAutoData(null!, null!)]
- [CustomInlineAutoData(null!)]
- [CustomInlineAutoData]
- public void ConfigureServiceMethod_can_configure_method_hedging_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
- {
- var method = new MethodName { Service = serviceName, Method = methodName };
-
- hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
-
- var builder = services.AddGrpcClient(o => o.Address = uri);
-
- builder.ConfigureServiceMethod(method, hedgingPolicy);
-
- var options = services.BuildServiceProvider()
- .GetRequiredService>()
- .Get(builder.Name);
-
- Assume.That(options.ChannelOptionsActions, Has.Exactly(1).InstanceOf>());
-
- var configurationDelegate = options.ChannelOptionsActions[0];
-
- var channelOptions = new GrpcChannelOptions();
-
- configurationDelegate(channelOptions);
-
- Assert.Multiple(() =>
- {
- Assert.That(channelOptions.ServiceConfig, Is.Not.Null);
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs, Has.Exactly(1).InstanceOf());
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names, Has.Exactly(1).InstanceOf());
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Service, Is.EqualTo(serviceName));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Method, Is.EqualTo(methodName));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy, Is.Null);
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy, Is.Not.Null);
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy!.HedgingDelay, Is.EqualTo(hedgingPolicy.HedgingDelay));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy!.MaxAttempts, Is.EqualTo(hedgingPolicy.MaxAttempts));
-
- Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy!.NonFatalStatusCodes, Is.EquivalentTo(hedgingPolicy.NonFatalStatusCodes));
- });
- }
-
[Test]
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
@@ -1023,15 +921,51 @@ public void ConfigureServiceMethod_throws_if_string_service_configuration_has_bo
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethod_can_configure_string_method_retry_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
+ public void ConfigureServiceMethod_does_nothing_if_no_configuration_is_added_for_string_method(string serviceName, string methodName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri)
{
var method = CreateMethodNameString(serviceName, methodName);
+ var testConfiguration = new
+ {
+ GRPC = new Dictionary
+ {
+ ["Foo"] = "Bar"
+ }
+ };
+
+ var configuration = configurationBuilder.AddObject(testConfiguration).Build();
+
+ var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureServiceMethod(method, configuration.GetSection("GRPC"));
+
+ var provider = services.BuildServiceProvider();
+
+ var options = provider.GetRequiredService>().Get(builder.Name);
+
+ Assert.That(options.ChannelOptionsActions, Has.No.InstanceOf>());
+ }
+
+ }
+
+ [TestOf(nameof(GrpcServiceMethodConfigurationExtensions.SetServiceMethodRetryPolicy))]
+ public class SetServiceMethodRetryPolicy
+ {
+ [Test]
+ [CustomAutoData]
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.SetServiceMethodRetryPolicy)));
+
+ [Test]
+ [CustomInlineAutoData(null!, null!)]
+ [CustomInlineAutoData(null!)]
+ [CustomInlineAutoData]
+ public void Can_configure_method_retry_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
+ {
+ var method = new MethodName { Service = serviceName, Method = methodName };
+
retryPolicy.RetryableStatusCodes.Add(statusCode);
var builder = services.AddGrpcClient(o => o.Address = uri);
- builder.ConfigureServiceMethod(method, retryPolicy);
+ builder.SetServiceMethodRetryPolicy(method, retryPolicy);
var options = services.BuildServiceProvider()
.GetRequiredService>()
@@ -1075,15 +1009,76 @@ public void ConfigureServiceMethod_can_configure_string_method_retry_policy_from
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethod_can_configure_string_method_hedging_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Can_configure_string_method_retry_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
{
var method = CreateMethodNameString(serviceName, methodName);
+ retryPolicy.RetryableStatusCodes.Add(statusCode);
+
+ var builder = services.AddGrpcClient(o => o.Address = uri);
+
+ builder.SetServiceMethodRetryPolicy(method, retryPolicy);
+
+ var options = services.BuildServiceProvider()
+ .GetRequiredService>()
+ .Get(builder.Name);
+
+ Assume.That(options.ChannelOptionsActions, Has.Exactly(1).InstanceOf>());
+
+ var configurationDelegate = options.ChannelOptionsActions[0];
+
+ var channelOptions = new GrpcChannelOptions();
+
+ configurationDelegate(channelOptions);
+
+ Assert.Multiple(() =>
+ {
+ Assert.That(channelOptions.ServiceConfig, Is.Not.Null);
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs, Has.Exactly(1).InstanceOf());
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names, Has.Exactly(1).InstanceOf());
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Service, Is.EqualTo(serviceName));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Method, Is.EqualTo(methodName));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy, Is.Null);
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy, Is.Not.Null);
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.BackoffMultiplier, Is.EqualTo(retryPolicy.BackoffMultiplier));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.InitialBackoff, Is.EqualTo(retryPolicy.InitialBackoff));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.MaxAttempts, Is.EqualTo(retryPolicy.MaxAttempts));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy!.RetryableStatusCodes, Is.EquivalentTo(retryPolicy.RetryableStatusCodes));
+ });
+ }
+
+ }
+
+ [TestOf(nameof(GrpcServiceMethodConfigurationExtensions.SetServiceMethodHedgingPolicy))]
+ public class SetServiceMethodHedgingPolicy
+ {
+ [Test]
+ [CustomAutoData]
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.SetServiceMethodHedgingPolicy)));
+
+ [Test]
+ [CustomInlineAutoData(null!, null!)]
+ [CustomInlineAutoData(null!)]
+ [CustomInlineAutoData]
+ public void Can_configure_method_hedging_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ {
+ var method = new MethodName { Service = serviceName, Method = methodName };
+
hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
var builder = services.AddGrpcClient(o => o.Address = uri);
- builder.ConfigureServiceMethod(method, hedgingPolicy);
+ builder.SetServiceMethodHedgingPolicy(method, hedgingPolicy);
var options = services.BuildServiceProvider()
.GetRequiredService>()
@@ -1125,40 +1120,62 @@ public void ConfigureServiceMethod_can_configure_string_method_hedging_policy_fr
[CustomInlineAutoData(null!, null!)]
[CustomInlineAutoData(null!)]
[CustomInlineAutoData]
- public void ConfigureServiceMethod_does_nothing_if_no_configuration_is_added_for_string_method(string serviceName, string methodName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri)
+ public void Can_configure_string_method_hedging_policy_from_policy(string methodName, string serviceName, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
var method = CreateMethodNameString(serviceName, methodName);
- var testConfiguration = new
+ hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
+
+ var builder = services.AddGrpcClient(o => o.Address = uri);
+
+ builder.SetServiceMethodHedgingPolicy(method, hedgingPolicy);
+
+ var options = services.BuildServiceProvider()
+ .GetRequiredService>()
+ .Get(builder.Name);
+
+ Assume.That(options.ChannelOptionsActions, Has.Exactly(1).InstanceOf>());
+
+ var configurationDelegate = options.ChannelOptionsActions[0];
+
+ var channelOptions = new GrpcChannelOptions();
+
+ configurationDelegate(channelOptions);
+
+ Assert.Multiple(() =>
{
- GRPC = new Dictionary
- {
- ["Foo"] = "Bar"
- }
- };
+ Assert.That(channelOptions.ServiceConfig, Is.Not.Null);
- var configuration = configurationBuilder.AddObject(testConfiguration).Build();
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs, Has.Exactly(1).InstanceOf());
- var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureServiceMethod(method, configuration.GetSection("GRPC"));
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names, Has.Exactly(1).InstanceOf());
- var provider = services.BuildServiceProvider();
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Service, Is.EqualTo(serviceName));
- var options = provider.GetRequiredService>().Get(builder.Name);
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].Names[0].Method, Is.EqualTo(methodName));
- Assert.That(options.ChannelOptionsActions, Has.No.InstanceOf>());
- }
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].RetryPolicy, Is.Null);
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy, Is.Not.Null);
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy!.HedgingDelay, Is.EqualTo(hedgingPolicy.HedgingDelay));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy!.MaxAttempts, Is.EqualTo(hedgingPolicy.MaxAttempts));
+
+ Assert.That(channelOptions.ServiceConfig!.MethodConfigs[0].HedgingPolicy!.NonFatalStatusCodes, Is.EquivalentTo(hedgingPolicy.NonFatalStatusCodes));
+ });
+ }
}
- [TestOf(nameof(GrpcServiceMethodConfigurationExtensions.ConfigureDefaultServiceMethod))]
+ [TestOf(nameof(GrpcServiceMethodConfigurationExtensions.ConfigureServiceMethodFallback))]
public class ConfigureDefaultServiceMethod
{
[Test]
[CustomAutoData]
- public void ConfigureDefaultServiceMethod_do_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.ConfigureDefaultServiceMethod)));
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.ConfigureServiceMethodFallback)));
[Test, CustomAutoData]
- public void ConfigureDefaultServiceMethod_can_set_fallback_retry_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
+ public void Can_set_fallback_retry_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -1178,7 +1195,7 @@ public void ConfigureDefaultServiceMethod_can_set_fallback_retry_configuration(C
var configuration = configurationBuilder.AddObject(testConfiguration).Build();
- var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureDefaultServiceMethod(configuration.GetSection("GRPC"));
+ var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureServiceMethodFallback(configuration.GetSection("GRPC"));
var provider = services.BuildServiceProvider();
@@ -1219,7 +1236,7 @@ public void ConfigureDefaultServiceMethod_can_set_fallback_retry_configuration(C
}
[Test, CustomAutoData]
- public void ConfigureDefaultServiceMethod_can_set_fallback_hedging_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Can_set_fallback_hedging_configuration(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
@@ -1238,7 +1255,7 @@ public void ConfigureDefaultServiceMethod_can_set_fallback_hedging_configuration
var configuration = configurationBuilder.AddObject(testConfiguration).Build();
- var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureDefaultServiceMethod(configuration.GetSection("GRPC"));
+ var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureServiceMethodFallback(configuration.GetSection("GRPC"));
var provider = services.BuildServiceProvider();
@@ -1277,7 +1294,7 @@ public void ConfigureDefaultServiceMethod_can_set_fallback_hedging_configuration
}
[Test, CustomAutoData]
- public void ConfigureDefaultServiceMethod_throws_if_fallback_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Throws_if_fallback_configuration_has_both_retry_policy_and_hedging_policy(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri, RetryPolicy retryPolicy, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
@@ -1305,17 +1322,48 @@ public void ConfigureDefaultServiceMethod_throws_if_fallback_configuration_has_b
var builder = services.AddGrpcClient(o => o.Address = uri);
- Assert.That(() => builder.ConfigureDefaultServiceMethod(configuration.GetSection("GRPC")), Throws.ArgumentException);
+ Assert.That(() => builder.ConfigureServiceMethodFallback(configuration.GetSection("GRPC")), Throws.ArgumentException);
}
[Test, CustomAutoData]
- public void ConfigureDefaultServiceMethod_can_set_fallback_retry_policy(ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
+ public void Does_nothing_if_no_configuration_is_added_for_string_method(ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri)
+ {
+ var testConfiguration = new
+ {
+ GRPC = new Dictionary
+ {
+ ["Foo"] = "Bar"
+ }
+ };
+
+ var configuration = configurationBuilder.AddObject(testConfiguration).Build();
+
+ var builder = services.AddGrpcClient(o => o.Address = uri)
+ .ConfigureServiceMethodFallback(configuration.GetSection("GRPC"));
+
+ var provider = services.BuildServiceProvider();
+
+ var options = provider.GetRequiredService>().Get(builder.Name);
+
+ Assert.That(options.ChannelOptionsActions, Has.No.InstanceOf>());
+ }
+ }
+
+ [TestOf(nameof(GrpcServiceMethodConfigurationExtensions.SetFallbackRetryPolicy))]
+ public class SetFallbackRetryPolicy
+ {
+ [Test]
+ [CustomAutoData]
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.SetFallbackRetryPolicy)));
+
+ [Test, CustomAutoData]
+ public void Can_set_fallback_retry_policy(ServiceCollection services, Uri uri, RetryPolicy retryPolicy, StatusCode statusCode)
{
retryPolicy.RetryableStatusCodes.Add(statusCode);
var builder = services.AddGrpcClient(o => o.Address = uri);
- builder.ConfigureDefaultServiceMethod(retryPolicy);
+ builder.SetFallbackRetryPolicy(retryPolicy);
var options = services.BuildServiceProvider()
.GetRequiredService>()
@@ -1355,14 +1403,23 @@ public void ConfigureDefaultServiceMethod_can_set_fallback_retry_policy(ServiceC
});
}
+ }
+
+ [TestOf(nameof(GrpcServiceMethodConfigurationExtensions.SetFallbackHedgingPolicy))]
+ public class SetFallbackHedgingPolicy
+ {
+ [Test]
+ [CustomAutoData]
+ public void Does_not_accept_nulls(GuardClauseAssertion assertion) => assertion.Verify(typeof(GrpcServiceMethodConfigurationExtensions).GetMethods().Where(i => i.Name == nameof(GrpcServiceMethodConfigurationExtensions.SetFallbackHedgingPolicy)));
+
[Test, CustomAutoData]
- public void ConfigureDefaultServiceMethod_can_set_fallback_hedging_policy(ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
+ public void Can_set_fallback_hedging_policy(ServiceCollection services, Uri uri, HedgingPolicy hedgingPolicy, StatusCode statusCode)
{
hedgingPolicy.NonFatalStatusCodes.Add(statusCode);
var builder = services.AddGrpcClient(o => o.Address = uri);
- builder.ConfigureDefaultServiceMethod(hedgingPolicy);
+ builder.SetFallbackHedgingPolicy(hedgingPolicy);
var options = services.BuildServiceProvider()
.GetRequiredService>()
@@ -1400,26 +1457,5 @@ public void ConfigureDefaultServiceMethod_can_set_fallback_hedging_policy(Servic
});
}
- [Test, CustomAutoData]
- public void ConfigureServiceMethod_does_nothing_if_no_configuration_is_added_for_string_method(string serviceName, string methodName, ConfigurationBuilder configurationBuilder, ServiceCollection services, Uri uri)
- {
- var testConfiguration = new
- {
- GRPC = new Dictionary
- {
- ["Foo"] = "Bar"
- }
- };
-
- var configuration = configurationBuilder.AddObject(testConfiguration).Build();
-
- var builder = services.AddGrpcClient(o => o.Address = uri).ConfigureDefaultServiceMethod(configuration.GetSection("GRPC"));
-
- var provider = services.BuildServiceProvider();
-
- var options = provider.GetRequiredService>().Get(builder.Name);
-
- Assert.That(options.ChannelOptionsActions, Has.No.InstanceOf>());
- }
}
}