interop-testing: Custom credentials in stress test

Adds support for specifying either google default or compute engine
"custom" credentials on the command line. This works like it does in
TestServiceClient.

Another feature from TestServiceClient is also included - the channel
builder is created differently when the server port is 0. This avoids
some ipv6 address parsing shenanigans.
This commit is contained in:
Terry Wilson 2023-10-06 08:52:33 -07:00 committed by Terry Wilson
parent e488b67d99
commit 21c287f7c3
2 changed files with 32 additions and 3 deletions

View File

@ -42,6 +42,8 @@ import io.grpc.ServerBuilder;
import io.grpc.Status; import io.grpc.Status;
import io.grpc.StatusException; import io.grpc.StatusException;
import io.grpc.TlsChannelCredentials; import io.grpc.TlsChannelCredentials;
import io.grpc.alts.ComputeEngineChannelCredentials;
import io.grpc.alts.GoogleDefaultChannelCredentials;
import io.grpc.stub.StreamObserver; import io.grpc.stub.StreamObserver;
import io.grpc.testing.TlsTesting; import io.grpc.testing.TlsTesting;
import java.io.IOException; import java.io.IOException;
@ -105,6 +107,7 @@ public class StressTestClient {
private String serverHostOverride; private String serverHostOverride;
private boolean useTls = false; private boolean useTls = false;
private boolean useTestCa = false; private boolean useTestCa = false;
private String customCredentialsType;
private int durationSecs = -1; private int durationSecs = -1;
private int channelsPerServer = 1; private int channelsPerServer = 1;
private int stubsPerChannel = 1; private int stubsPerChannel = 1;
@ -157,6 +160,8 @@ public class StressTestClient {
useTls = Boolean.parseBoolean(value); useTls = Boolean.parseBoolean(value);
} else if ("use_test_ca".equals(key)) { } else if ("use_test_ca".equals(key)) {
useTestCa = Boolean.parseBoolean(value); useTestCa = Boolean.parseBoolean(value);
} else if ("custom_credentials_type".equals(key)) {
customCredentialsType = value;
} else if ("test_cases".equals(key)) { } else if ("test_cases".equals(key)) {
testCaseWeightPairs = parseTestCases(value); testCaseWeightPairs = parseTestCases(value);
} else if ("test_duration_secs".equals(key)) { } else if ("test_duration_secs".equals(key)) {
@ -199,6 +204,8 @@ public class StressTestClient {
+ "\n --use_test_ca=true|false Whether to trust our fake CA. Requires" + "\n --use_test_ca=true|false Whether to trust our fake CA. Requires"
+ " --use_tls=true" + " --use_tls=true"
+ "\n to have effect. Default: " + c.useTestCa + "\n to have effect. Default: " + c.useTestCa
+ "\n --custom_credentials_type Custom credentials type to use. Default "
+ c.customCredentialsType
+ "\n --test_duration_secs=SECONDS '-1' for no limit. Default: " + c.durationSecs + "\n --test_duration_secs=SECONDS '-1' for no limit. Default: " + c.durationSecs
+ "\n --num_channels_per_server=INT Number of connections to each server address." + "\n --num_channels_per_server=INT Number of connections to each server address."
+ " Default: " + c.channelsPerServer + " Default: " + c.channelsPerServer
@ -365,7 +372,16 @@ public class StressTestClient {
private ManagedChannel createChannel(InetSocketAddress address) { private ManagedChannel createChannel(InetSocketAddress address) {
ChannelCredentials channelCredentials; ChannelCredentials channelCredentials;
if (useTls) { if (customCredentialsType != null) {
if (customCredentialsType.equals("google_default_credentials")) {
channelCredentials = GoogleDefaultChannelCredentials.create();
} else if (customCredentialsType.equals("compute_engine_channel_creds")) {
channelCredentials = ComputeEngineChannelCredentials.create();
} else {
throw new IllegalArgumentException(
"Unknown custom credentials: " + customCredentialsType);
}
} else if (useTls) {
if (useTestCa) { if (useTestCa) {
try { try {
channelCredentials = TlsChannelCredentials.newBuilder() channelCredentials = TlsChannelCredentials.newBuilder()
@ -380,8 +396,14 @@ public class StressTestClient {
} else { } else {
channelCredentials = InsecureChannelCredentials.create(); channelCredentials = InsecureChannelCredentials.create();
} }
ManagedChannelBuilder<?> builder = Grpc.newChannelBuilderForAddress( ManagedChannelBuilder<?> builder;
address.getHostString(), address.getPort(), channelCredentials); if (address.getPort() == 0) {
builder = Grpc.newChannelBuilder(address.getHostString(), channelCredentials);
} else {
builder = Grpc.newChannelBuilderForAddress(address.getHostString(), address.getPort(),
channelCredentials);
}
if (serverHostOverride != null) { if (serverHostOverride != null) {
builder.overrideAuthority(serverHostOverride); builder.overrideAuthority(serverHostOverride);
} }
@ -672,6 +694,11 @@ public class StressTestClient {
return useTestCa; return useTestCa;
} }
@VisibleForTesting
String customCredentialsType() {
return customCredentialsType;
}
@VisibleForTesting @VisibleForTesting
List<TestCaseWeightPair> testCaseWeightPairs() { List<TestCaseWeightPair> testCaseWeightPairs() {
return testCaseWeightPairs; return testCaseWeightPairs;

View File

@ -80,6 +80,7 @@ public class StressTestClientTest {
"--server_host_override=foo.test.google.fr", "--server_host_override=foo.test.google.fr",
"--use_tls=true", "--use_tls=true",
"--use_test_ca=true", "--use_test_ca=true",
"--custom_credentials_type=google_default_credentials",
"--metrics_log_rate_secs=60" "--metrics_log_rate_secs=60"
}); });
@ -100,6 +101,7 @@ public class StressTestClientTest {
assertEquals(10, client.channelsPerServer()); assertEquals(10, client.channelsPerServer());
assertEquals(5, client.stubsPerChannel()); assertEquals(5, client.stubsPerChannel());
assertEquals(9090, client.metricsPort()); assertEquals(9090, client.metricsPort());
assertEquals("google_default_credentials", client.customCredentialsType());
assertEquals(60, client.metricsLogRateSecs()); assertEquals(60, client.metricsLogRateSecs());
} }