@@ -2934,7 +2934,7 @@ private final class TestChannel extends Channel {
29342934 @ Override
29352935 public <ReqT , RespT > ClientCall <ReqT , RespT > newCall (
29362936 MethodDescriptor <ReqT , RespT > methodDescriptor , CallOptions callOptions ) {
2937- TestCall <ReqT , RespT > call = new TestCall <>(callOptions );
2937+ TestCall <ReqT , RespT > call = new TestCall <>(methodDescriptor , callOptions );
29382938 testCall = call ;
29392939 return call ;
29402940 }
@@ -2946,11 +2946,13 @@ public String authority() {
29462946 }
29472947
29482948 private static final class TestCall <ReqT , RespT > extends NoopClientCall <ReqT , RespT > {
2949+ final MethodDescriptor <ReqT , RespT > methodDescriptor ;
29492950 // CallOptions actually received from the channel when the call is created.
29502951 final CallOptions callOptions ;
29512952 ClientCall .Listener <RespT > listener ;
29522953
2953- TestCall (CallOptions callOptions ) {
2954+ TestCall (MethodDescriptor <ReqT , RespT > methodDescriptor , CallOptions callOptions ) {
2955+ this .methodDescriptor = methodDescriptor ;
29542956 this .callOptions = callOptions ;
29552957 }
29562958
@@ -3038,4 +3040,81 @@ public void onMessage(String message) {
30383040 channel , METHOD_SAY_HELLO , CallOptions .DEFAULT , "World" );
30393041 assertThat (response ).isEqualTo ("Hello World" );
30403042 }
3043+
3044+ @ Test
3045+ public void rawMessageClientInterceptor_flagFalse () {
3046+ String origClientProp = System .getProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" );
3047+ String origServerProp = System .getProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" );
3048+ System .setProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" , "false" );
3049+ System .setProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" , "false" );
3050+ try {
3051+ filterStateTestSetupResolver ();
3052+ FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
3053+ VirtualHost vhost = filterStateTestVhost ();
3054+
3055+ xdsClient .deliverLdsUpdateWithFilters (vhost , filterStateTestConfigs (STATEFUL_1 ));
3056+ createAndDeliverClusterUpdates (xdsClient , cluster1 );
3057+
3058+ // When flags are false, RawMessageClientInterceptor is not added.
3059+ assertClusterResolutionResult (call1 , cluster1 );
3060+ assertThat (testCall .methodDescriptor ).isSameInstanceAs (call1 .methodDescriptor );
3061+ } finally {
3062+ restoreProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" , origClientProp );
3063+ restoreProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" , origServerProp );
3064+ }
3065+ }
3066+
3067+ @ Test
3068+ public void rawMessageClientInterceptor_flagTrue () {
3069+ String origClientProp = System .getProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" );
3070+ String origServerProp = System .getProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" );
3071+
3072+ // When GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT is true, RawMessageClientInterceptor is added.
3073+ System .setProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" , "true" );
3074+ System .setProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" , "false" );
3075+ try {
3076+ filterStateTestSetupResolver ();
3077+ FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
3078+ VirtualHost vhost = filterStateTestVhost ();
3079+
3080+ xdsClient .deliverLdsUpdateWithFilters (vhost , filterStateTestConfigs (STATEFUL_1 ));
3081+ createAndDeliverClusterUpdates (xdsClient , cluster1 );
3082+
3083+ assertClusterResolutionResult (call1 , cluster1 );
3084+ assertThat (testCall .methodDescriptor ).isNotSameInstanceAs (call1 .methodDescriptor );
3085+ } finally {
3086+ restoreProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" , origClientProp );
3087+ restoreProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" , origServerProp );
3088+ }
3089+
3090+ resolver .shutdown ();
3091+ reset (mockListener );
3092+ when (mockListener .onResult2 (any ())).thenReturn (Status .OK );
3093+
3094+ // When GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER is true, RawMessageClientInterceptor is added.
3095+ System .setProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" , "false" );
3096+ System .setProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" , "true" );
3097+ try {
3098+ filterStateTestSetupResolver ();
3099+ FakeXdsClient xdsClient = (FakeXdsClient ) resolver .getXdsClient ();
3100+ VirtualHost vhost = filterStateTestVhost ();
3101+
3102+ xdsClient .deliverLdsUpdateWithFilters (vhost , filterStateTestConfigs (STATEFUL_1 ));
3103+ createAndDeliverClusterUpdates (xdsClient , cluster1 );
3104+
3105+ assertClusterResolutionResult (call1 , cluster1 );
3106+ assertThat (testCall .methodDescriptor ).isNotSameInstanceAs (call1 .methodDescriptor );
3107+ } finally {
3108+ restoreProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_CLIENT" , origClientProp );
3109+ restoreProperty ("GRPC_EXPERIMENTAL_XDS_EXT_PROC_ON_SERVER" , origServerProp );
3110+ }
3111+ }
3112+
3113+ private static void restoreProperty (String key , @ Nullable String value ) {
3114+ if (value == null ) {
3115+ System .clearProperty (key );
3116+ } else {
3117+ System .setProperty (key , value );
3118+ }
3119+ }
30413120}
0 commit comments