Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.MoreExecutors;
Expand Down Expand Up @@ -57,7 +56,6 @@
import io.grpc.xds.internal.extauthz.ExtAuthzTestHelper.CapturingListener;
import io.grpc.xds.internal.grpcservice.GrpcServiceConfig;
import io.grpc.xds.internal.headermutations.HeaderMutationFilter;
import io.grpc.xds.internal.headermutations.HeaderMutations;
import java.util.Optional;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
Expand Down Expand Up @@ -585,50 +583,6 @@ public void allow_withHeadersToRemoveOnly_backendReceivesMutatedHeaders() {
assertThat(capturedBackendMessage).isEqualTo(request);
}

@Test
public void deny_withMissingStatus_failsCallWithInternal() {
CheckResponseHandler mockHandler = mock(CheckResponseHandler.class);
AuthzResponse fakeAuthzResponse = new AuthzResponse() {
@Override
public Decision decision() {
return Decision.DENY;
}

@Override
public Optional<Status> status() {
return Optional.empty();
}

@Override
public HeaderMutations requestHeaderMutations() {
return HeaderMutations.create(ImmutableList.of(), ImmutableList.of());
}

@Override
public HeaderMutations responseHeaderMutations() {
return HeaderMutations.create(ImmutableList.of(), ImmutableList.of());
}
};
when(mockHandler.handleResponse(any())).thenReturn(fakeAuthzResponse);

TestDelayedCall<SimpleRequest, SimpleResponse> delayedCall =
new TestDelayedCall<>(MoreExecutors.directExecutor(), scheduler, null);
Context.CancellableContext authzCtx = Context.current().withCancellation();
AuthzCallbackObserver<SimpleRequest, SimpleResponse> observer =
new AuthzCallbackObserver<>(
delayedCall, channel,
SimpleServiceGrpc.getUnaryRpcMethod(),
CallOptions.DEFAULT,
MoreExecutors.directExecutor(),
mockHandler, failClosedConfig(), authzCtx);
CapturingListener<SimpleResponse> listener = new CapturingListener<>();
delayedCall.start(listener, new Metadata());
delayedCall.request(1);

observer.onNext(CheckResponse.getDefaultInstance());

assertThat(listener.getCloseStatus().getCode()).isEqualTo(Status.Code.INTERNAL);
}

@Test
public void allow_whenDelayedCallCancelledInFlight_setCallReturnsNull() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,22 @@
import static org.mockito.Mockito.when;

import com.google.common.collect.ImmutableList;
import com.google.protobuf.ByteString;
import com.google.protobuf.Timestamp;
import io.envoyproxy.envoy.config.core.v3.Address;
import io.envoyproxy.envoy.config.core.v3.HeaderMap;
import io.envoyproxy.envoy.config.core.v3.HeaderValue;
import io.envoyproxy.envoy.service.auth.v3.AttributeContext;
import io.envoyproxy.envoy.service.auth.v3.CheckRequest;
import io.grpc.Attributes;
import io.grpc.ChannelCredentials;
import io.grpc.Grpc;
import io.grpc.Metadata;
import io.grpc.MethodDescriptor;
import io.grpc.Status;
import io.grpc.StatusException;
import io.grpc.testing.TestMethodDescriptors;
import io.grpc.xds.client.ConfiguredChannelCredentials;
import io.grpc.xds.internal.Matchers;
import io.grpc.xds.internal.extauthz.ExtAuthzTestHelper.TestServerCall;
import io.grpc.xds.internal.grpcservice.GrpcServiceConfig;
Expand Down Expand Up @@ -133,8 +137,8 @@ public void buildRequest_forServer_happyPath() throws Exception {

AttributeContext.HttpRequest http = attrContext.getRequest().getHttp();
assertThat(http.getHeaderMap().getHeadersList()).containsExactly(
io.envoyproxy.envoy.config.core.v3.HeaderValue.newBuilder().setKey("allowed-header")
.setRawValue(com.google.protobuf.ByteString.copyFromUtf8("v1")).build());
HeaderValue.newBuilder().setKey("allowed-header")
.setRawValue(ByteString.copyFromUtf8("v1")).build());
}

@Test
Expand Down Expand Up @@ -185,10 +189,10 @@ public void buildRequest_forClient_happyPath_emptyAllowedHeaders() throws Except
assertThat(http.getPath()).isEqualTo("/" + methodDescriptor.getFullMethodName());

assertThat(http.getHeaderMap().getHeadersList()).containsExactly(
io.envoyproxy.envoy.config.core.v3.HeaderValue.newBuilder().setKey("some-header")
.setRawValue(com.google.protobuf.ByteString.copyFromUtf8("v1")).build(),
io.envoyproxy.envoy.config.core.v3.HeaderValue.newBuilder().setKey("bin-header-bin")
.setRawValue(com.google.protobuf.ByteString.copyFromUtf8("AQID")).build());
HeaderValue.newBuilder().setKey("some-header")
.setRawValue(ByteString.copyFromUtf8("v1")).build(),
HeaderValue.newBuilder().setKey("bin-header-bin")
.setRawValue(ByteString.copyFromUtf8("AQID")).build());
}

@Test
Expand Down Expand Up @@ -437,15 +441,15 @@ public void buildRequest_multiValuedHeaders() throws Exception {
builderWithConfig.buildRequest(methodDescriptor, headers, requestTime);

HeaderMap headerMap = request.getAttributes().getRequest().getHttp().getHeaderMap();
assertThat(headerMap.getHeadersList()).hasSize(4);
assertThat(headerMap.getHeadersList().get(0).getKey()).isEqualTo("x-custom-bin");
assertThat(headerMap.getHeadersList().get(0).getRawValue().toStringUtf8()).isEqualTo("AQI");
assertThat(headerMap.getHeadersList().get(1).getKey()).isEqualTo("x-custom-bin");
assertThat(headerMap.getHeadersList().get(1).getRawValue().toStringUtf8()).isEqualTo("AwQ");
assertThat(headerMap.getHeadersList().get(2).getKey()).isEqualTo("x-custom");
assertThat(headerMap.getHeadersList().get(2).getRawValue().toStringUtf8()).isEqualTo("value1");
assertThat(headerMap.getHeadersList().get(3).getKey()).isEqualTo("x-custom");
assertThat(headerMap.getHeadersList().get(3).getRawValue().toStringUtf8()).isEqualTo("value2");
assertThat(headerMap.getHeadersList()).containsExactly(
HeaderValue.newBuilder().setKey("x-custom-bin")
.setRawValue(ByteString.copyFromUtf8("AQI")).build(),
HeaderValue.newBuilder().setKey("x-custom-bin")
.setRawValue(ByteString.copyFromUtf8("AwQ")).build(),
HeaderValue.newBuilder().setKey("x-custom")
.setRawValue(ByteString.copyFromUtf8("value1")).build(),
HeaderValue.newBuilder().setKey("x-custom")
.setRawValue(ByteString.copyFromUtf8("value2")).build());
}

private ExtAuthzConfig buildExtAuthzConfig() {
Expand All @@ -458,9 +462,9 @@ private ExtAuthzConfig buildExtAuthzConfig(
boolean includePeerCertificate) {
GrpcServiceConfig.GoogleGrpcConfig googleGrpc = GrpcServiceConfig.GoogleGrpcConfig.builder()
.target("test-cluster")
.configuredChannelCredentials(io.grpc.xds.client.ConfiguredChannelCredentials.create(
mock(io.grpc.ChannelCredentials.class),
mock(io.grpc.xds.client.ConfiguredChannelCredentials.ChannelCredsConfig.class)))
.configuredChannelCredentials(ConfiguredChannelCredentials.create(
mock(ChannelCredentials.class),
mock(ConfiguredChannelCredentials.ChannelCredsConfig.class)))
.build();

GrpcServiceConfig dummyServiceConfig = GrpcServiceConfig.builder()
Expand All @@ -477,7 +481,7 @@ private ExtAuthzConfig buildExtAuthzConfig(
.failureModeAllowHeaderAdd(false)
.denyAtDisable(false)
.filterEnabled(Matchers.FractionMatcher.create(100, 100))
.statusOnError(io.grpc.Status.INTERNAL)
.statusOnError(Status.INTERNAL)
.build();
}
}
Loading