mirror of https://github.com/grpc/grpc-java.git
Added unit test for Bootstrapper.
This commit is contained in:
parent
27ec907e68
commit
3ae88de5fe
|
|
@ -0,0 +1,219 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2019 The 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.grpc.xds;
|
||||||
|
|
||||||
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import com.google.protobuf.InvalidProtocolBufferException;
|
||||||
|
import com.google.protobuf.Struct;
|
||||||
|
import com.google.protobuf.Value;
|
||||||
|
import io.envoyproxy.envoy.api.v2.core.ApiConfigSource;
|
||||||
|
import io.envoyproxy.envoy.api.v2.core.ApiConfigSource.ApiType;
|
||||||
|
import io.envoyproxy.envoy.api.v2.core.GrpcService;
|
||||||
|
import io.envoyproxy.envoy.api.v2.core.GrpcService.GoogleGrpc;
|
||||||
|
import io.envoyproxy.envoy.api.v2.core.Locality;
|
||||||
|
import io.envoyproxy.envoy.api.v2.core.Node;
|
||||||
|
import io.grpc.xds.Bootstrapper.FileBasedBootstrapper;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
import org.junit.runners.JUnit4;
|
||||||
|
|
||||||
|
/** Unit tests for {@link Bootstrapper}. */
|
||||||
|
@RunWith(JUnit4.class)
|
||||||
|
public class BootstrapperTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void validBootstrap() {
|
||||||
|
Bootstrap config =
|
||||||
|
Bootstrap.newBuilder()
|
||||||
|
.setNode(
|
||||||
|
Node.newBuilder()
|
||||||
|
.setId("ENVOY_NODE_ID")
|
||||||
|
.setLocality(
|
||||||
|
Locality.newBuilder().setZone("ENVOY_ZONE").setRegion("ENVOY_REGION"))
|
||||||
|
.setMetadata(
|
||||||
|
Struct.newBuilder()
|
||||||
|
.putFields("TRAFFICDIRECTOR_INTERCEPTION_PORT",
|
||||||
|
Value.newBuilder().setStringValue("ENVOY_PORT").build())
|
||||||
|
.putFields("TRAFFICDIRECTOR_NETWORK_NAME",
|
||||||
|
Value.newBuilder().setStringValue("VPC_NETWORK_NAME").build())))
|
||||||
|
.setXdsServer(ApiConfigSource.newBuilder()
|
||||||
|
.setApiType(ApiType.GRPC)
|
||||||
|
.addGrpcServices(
|
||||||
|
GrpcService.newBuilder()
|
||||||
|
.setGoogleGrpc(
|
||||||
|
GoogleGrpc.newBuilder()
|
||||||
|
.setTargetUri("trafficdirector.googleapis.com:443").build())))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Bootstrapper bootstrapper = new FileBasedBootstrapper(config);
|
||||||
|
assertThat(bootstrapper.getBalancerName()).isEqualTo("trafficdirector.googleapis.com:443");
|
||||||
|
assertThat(bootstrapper.getNode())
|
||||||
|
.isEqualTo(
|
||||||
|
Node.newBuilder()
|
||||||
|
.setId("ENVOY_NODE_ID")
|
||||||
|
.setLocality(Locality.newBuilder().setZone("ENVOY_ZONE").setRegion("ENVOY_REGION"))
|
||||||
|
.setMetadata(
|
||||||
|
Struct.newBuilder()
|
||||||
|
.putFields("TRAFFICDIRECTOR_INTERCEPTION_PORT",
|
||||||
|
Value.newBuilder().setStringValue("ENVOY_PORT").build())
|
||||||
|
.putFields("TRAFFICDIRECTOR_NETWORK_NAME",
|
||||||
|
Value.newBuilder().setStringValue("VPC_NETWORK_NAME").build())
|
||||||
|
.build()).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void unsupportedApiType() {
|
||||||
|
Bootstrap config =
|
||||||
|
Bootstrap.newBuilder()
|
||||||
|
.setNode(
|
||||||
|
Node.newBuilder()
|
||||||
|
.setId("ENVOY_NODE_ID")
|
||||||
|
.setLocality(
|
||||||
|
Locality.newBuilder().setZone("ENVOY_ZONE").setRegion("ENVOY_REGION"))
|
||||||
|
.setMetadata(
|
||||||
|
Struct.newBuilder()
|
||||||
|
.putFields("TRAFFICDIRECTOR_INTERCEPTION_PORT",
|
||||||
|
Value.newBuilder().setStringValue("ENVOY_PORT").build())
|
||||||
|
.putFields("TRAFFICDIRECTOR_NETWORK_NAME",
|
||||||
|
Value.newBuilder().setStringValue("VPC_NETWORK_NAME").build())))
|
||||||
|
.setXdsServer(ApiConfigSource.newBuilder()
|
||||||
|
.setApiType(ApiType.REST)
|
||||||
|
.addGrpcServices(
|
||||||
|
GrpcService.newBuilder()
|
||||||
|
.setGoogleGrpc(
|
||||||
|
GoogleGrpc.newBuilder()
|
||||||
|
.setTargetUri("trafficdirector.googleapis.com:443").build())))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
new FileBasedBootstrapper(config);
|
||||||
|
fail("RuntimeException should have been thrown");
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
// Expected.
|
||||||
|
assertThat(e.getMessage()).isEqualTo("Unexpected api type: REST");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void tooManyGrpcServices() {
|
||||||
|
Bootstrap config =
|
||||||
|
Bootstrap.newBuilder()
|
||||||
|
.setNode(
|
||||||
|
Node.newBuilder()
|
||||||
|
.setId("ENVOY_NODE_ID")
|
||||||
|
.setLocality(
|
||||||
|
Locality.newBuilder().setZone("ENVOY_ZONE").setRegion("ENVOY_REGION"))
|
||||||
|
.setMetadata(
|
||||||
|
Struct.newBuilder()
|
||||||
|
.putFields("TRAFFICDIRECTOR_INTERCEPTION_PORT",
|
||||||
|
Value.newBuilder().setStringValue("ENVOY_PORT").build())
|
||||||
|
.putFields("TRAFFICDIRECTOR_NETWORK_NAME",
|
||||||
|
Value.newBuilder().setStringValue("VPC_NETWORK_NAME").build())))
|
||||||
|
.setXdsServer(ApiConfigSource.newBuilder()
|
||||||
|
.setApiType(ApiType.GRPC)
|
||||||
|
.addGrpcServices(
|
||||||
|
GrpcService.newBuilder()
|
||||||
|
.setGoogleGrpc(
|
||||||
|
GoogleGrpc.newBuilder()
|
||||||
|
.setTargetUri("trafficdirector.googleapis.com:443").build()))
|
||||||
|
.addGrpcServices(
|
||||||
|
GrpcService.newBuilder()
|
||||||
|
.setGoogleGrpc(
|
||||||
|
GoogleGrpc.newBuilder()
|
||||||
|
.setTargetUri("foobar.googleapis.com:443").build()))
|
||||||
|
)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
try {
|
||||||
|
new FileBasedBootstrapper(config);
|
||||||
|
fail("RuntimeException should have been thrown");
|
||||||
|
} catch (RuntimeException e) {
|
||||||
|
// Expected.
|
||||||
|
assertThat(e.getMessage())
|
||||||
|
.isEqualTo("Unexpected number of gRPC services: expected: 1, actual: 2");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseBootstrap_emptyData() {
|
||||||
|
String rawData = "";
|
||||||
|
try {
|
||||||
|
Bootstrapper.parseConfig(rawData);
|
||||||
|
fail("InvalidProtocolBufferException should have been thrown");
|
||||||
|
} catch (InvalidProtocolBufferException e) {
|
||||||
|
// Expected.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseBootstrap_invalidNodeProto() {
|
||||||
|
String rawData = "{"
|
||||||
|
+ "\"node\": {"
|
||||||
|
+ "\"id\": \"ENVOY_NODE_ID\","
|
||||||
|
+ "\"bad_field\": \"bad_value\""
|
||||||
|
+ "\"locality\": {"
|
||||||
|
+ "\"zone\": \"ENVOY_ZONE\"},"
|
||||||
|
+ "\"metadata\": {"
|
||||||
|
+ "\"TRAFFICDIRECTOR_INTERCEPTION_PORT\": \"ENVOY_PORT\", "
|
||||||
|
+ "\"TRAFFICDIRECTOR_NETWORK_NAME\": \"VPC_NETWORK_NAME\""
|
||||||
|
+ "}"
|
||||||
|
+ "},"
|
||||||
|
+ "\"xds_server\": {"
|
||||||
|
+ "\"api_type\": \"GRPC\","
|
||||||
|
+ "\"grpc_services\": "
|
||||||
|
+ "[ {\"google_grpc\": {\"target_uri\": \"trafficdirector.googleapis.com:443\"} } ]"
|
||||||
|
+ "} "
|
||||||
|
+ "}";
|
||||||
|
|
||||||
|
try {
|
||||||
|
Bootstrapper.parseConfig(rawData);
|
||||||
|
fail("InvalidProtocolBufferException should have been thrown");
|
||||||
|
} catch (InvalidProtocolBufferException e) {
|
||||||
|
// Expected.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void parseBootstrap_invalidApiConfigSourceProto() {
|
||||||
|
String rawData = "{"
|
||||||
|
+ "\"node\": {"
|
||||||
|
+ "\"id\": \"ENVOY_NODE_ID\","
|
||||||
|
+ "\"locality\": {"
|
||||||
|
+ "\"zone\": \"ENVOY_ZONE\"},"
|
||||||
|
+ "\"metadata\": {"
|
||||||
|
+ "\"TRAFFICDIRECTOR_INTERCEPTION_PORT\": \"ENVOY_PORT\", "
|
||||||
|
+ "\"TRAFFICDIRECTOR_NETWORK_NAME\": \"VPC_NETWORK_NAME\""
|
||||||
|
+ "}"
|
||||||
|
+ "},"
|
||||||
|
+ "\"xds_server\": {"
|
||||||
|
+ "\"api_type\": \"GRPC\","
|
||||||
|
+ "\"bad_field\": \"bad_value\""
|
||||||
|
+ "\"grpc_services\": "
|
||||||
|
+ "[ {\"google_grpc\": {\"target_uri\": \"trafficdirector.googleapis.com:443\"} } ]"
|
||||||
|
+ "} "
|
||||||
|
+ "}";
|
||||||
|
|
||||||
|
try {
|
||||||
|
Bootstrapper.parseConfig(rawData);
|
||||||
|
fail("InvalidProtocolBufferException should have been thrown");
|
||||||
|
} catch (InvalidProtocolBufferException e) {
|
||||||
|
// Expected.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue