diff --git a/src/csharp/Grpc.IntegrationTesting/Messages.cs b/src/csharp/Grpc.IntegrationTesting/Messages.cs
index 083dbb22af7..9fe22e97de1 100644
--- a/src/csharp/Grpc.IntegrationTesting/Messages.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Messages.cs
@@ -69,11 +69,32 @@ namespace Grpc.Testing {
"IAEoCRINCgV2YWx1ZRgCIAEoBToCOAEaMQoPUnBjc0J5UGVlckVudHJ5EgsK",
"A2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoBToCOAEaZwoRUnBjc0J5TWV0aG9k",
"RW50cnkSCwoDa2V5GAEgASgJEkEKBXZhbHVlGAIgASgLMjIuZ3JwYy50ZXN0",
- "aW5nLkxvYWRCYWxhbmNlclN0YXRzUmVzcG9uc2UuUnBjc0J5UGVlcjoCOAEq",
- "HwoLUGF5bG9hZFR5cGUSEAoMQ09NUFJFU1NBQkxFEAAqbwoPR3JwY2xiUm91",
- "dGVUeXBlEh0KGUdSUENMQl9ST1VURV9UWVBFX1VOS05PV04QABIeChpHUlBD",
- "TEJfUk9VVEVfVFlQRV9GQUxMQkFDSxABEh0KGUdSUENMQl9ST1VURV9UWVBF",
- "X0JBQ0tFTkQQAmIGcHJvdG8z"));
+ "aW5nLkxvYWRCYWxhbmNlclN0YXRzUmVzcG9uc2UuUnBjc0J5UGVlcjoCOAEi",
+ "JQojTG9hZEJhbGFuY2VyQWNjdW11bGF0ZWRTdGF0c1JlcXVlc3QiwgQKJExv",
+ "YWRCYWxhbmNlckFjY3VtdWxhdGVkU3RhdHNSZXNwb25zZRJyChpudW1fcnBj",
+ "c19zdGFydGVkX2J5X21ldGhvZBgBIAMoCzJOLmdycGMudGVzdGluZy5Mb2Fk",
+ "QmFsYW5jZXJBY2N1bXVsYXRlZFN0YXRzUmVzcG9uc2UuTnVtUnBjc1N0YXJ0",
+ "ZWRCeU1ldGhvZEVudHJ5EnYKHG51bV9ycGNzX3N1Y2NlZWRlZF9ieV9tZXRo",
+ "b2QYAiADKAsyUC5ncnBjLnRlc3RpbmcuTG9hZEJhbGFuY2VyQWNjdW11bGF0",
+ "ZWRTdGF0c1Jlc3BvbnNlLk51bVJwY3NTdWNjZWVkZWRCeU1ldGhvZEVudHJ5",
+ "EnAKGW51bV9ycGNzX2ZhaWxlZF9ieV9tZXRob2QYAyADKAsyTS5ncnBjLnRl",
+ "c3RpbmcuTG9hZEJhbGFuY2VyQWNjdW11bGF0ZWRTdGF0c1Jlc3BvbnNlLk51",
+ "bVJwY3NGYWlsZWRCeU1ldGhvZEVudHJ5Gj0KG051bVJwY3NTdGFydGVkQnlN",
+ "ZXRob2RFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAU6AjgBGj8K",
+ "HU51bVJwY3NTdWNjZWVkZWRCeU1ldGhvZEVudHJ5EgsKA2tleRgBIAEoCRIN",
+ "CgV2YWx1ZRgCIAEoBToCOAEaPAoaTnVtUnBjc0ZhaWxlZEJ5TWV0aG9kRW50",
+ "cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgFOgI4ASKlAgoWQ2xpZW50",
+ "Q29uZmlndXJlUmVxdWVzdBI7CgV0eXBlcxgBIAMoDjIsLmdycGMudGVzdGlu",
+ "Zy5DbGllbnRDb25maWd1cmVSZXF1ZXN0LlJwY1R5cGUSPwoIbWV0YWRhdGEY",
+ "AiADKAsyLS5ncnBjLnRlc3RpbmcuQ2xpZW50Q29uZmlndXJlUmVxdWVzdC5N",
+ "ZXRhZGF0YRpiCghNZXRhZGF0YRI6CgR0eXBlGAEgASgOMiwuZ3JwYy50ZXN0",
+ "aW5nLkNsaWVudENvbmZpZ3VyZVJlcXVlc3QuUnBjVHlwZRILCgNrZXkYAiAB",
+ "KAkSDQoFdmFsdWUYAyABKAkiKQoHUnBjVHlwZRIOCgpFTVBUWV9DQUxMEAAS",
+ "DgoKVU5BUllfQ0FMTBABIhkKF0NsaWVudENvbmZpZ3VyZVJlc3BvbnNlKh8K",
+ "C1BheWxvYWRUeXBlEhAKDENPTVBSRVNTQUJMRRAAKm8KD0dycGNsYlJvdXRl",
+ "VHlwZRIdChlHUlBDTEJfUk9VVEVfVFlQRV9VTktOT1dOEAASHgoaR1JQQ0xC",
+ "X1JPVVRFX1RZUEVfRkFMTEJBQ0sQARIdChlHUlBDTEJfUk9VVEVfVFlQRV9C",
+ "QUNLRU5EEAJiBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { },
new pbr::GeneratedClrTypeInfo(new[] {typeof(global::Grpc.Testing.PayloadType), typeof(global::Grpc.Testing.GrpclbRouteType), }, null, new pbr::GeneratedClrTypeInfo[] {
@@ -91,7 +112,11 @@ namespace Grpc.Testing {
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ReconnectInfo), global::Grpc.Testing.ReconnectInfo.Parser, new[]{ "Passed", "BackoffMs" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadBalancerStatsRequest), global::Grpc.Testing.LoadBalancerStatsRequest.Parser, new[]{ "NumRpcs", "TimeoutSec" }, null, null, null, null),
new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadBalancerStatsResponse), global::Grpc.Testing.LoadBalancerStatsResponse.Parser, new[]{ "RpcsByPeer", "NumFailures", "RpcsByMethod" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadBalancerStatsResponse.Types.RpcsByPeer), global::Grpc.Testing.LoadBalancerStatsResponse.Types.RpcsByPeer.Parser, new[]{ "RpcsByPeer_" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, }),
- null, null, })
+ null, null, }),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest), global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest.Parser, null, null, null, null, null),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.LoadBalancerAccumulatedStatsResponse), global::Grpc.Testing.LoadBalancerAccumulatedStatsResponse.Parser, new[]{ "NumRpcsStartedByMethod", "NumRpcsSucceededByMethod", "NumRpcsFailedByMethod" }, null, null, null, new pbr::GeneratedClrTypeInfo[] { null, null, null, }),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientConfigureRequest), global::Grpc.Testing.ClientConfigureRequest.Parser, new[]{ "Types_", "Metadata" }, null, new[]{ typeof(global::Grpc.Testing.ClientConfigureRequest.Types.RpcType) }, null, new pbr::GeneratedClrTypeInfo[] { new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientConfigureRequest.Types.Metadata), global::Grpc.Testing.ClientConfigureRequest.Types.Metadata.Parser, new[]{ "Type", "Key", "Value" }, null, null, null, null)}),
+ new pbr::GeneratedClrTypeInfo(typeof(global::Grpc.Testing.ClientConfigureResponse), global::Grpc.Testing.ClientConfigureResponse.Parser, null, null, null, null, null)
}));
}
#endregion
@@ -3866,6 +3891,966 @@ namespace Grpc.Testing {
}
+ ///
+ /// Request for retrieving a test client's accumulated stats.
+ ///
+ public sealed partial class LoadBalancerAccumulatedStatsRequest : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new LoadBalancerAccumulatedStatsRequest());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[14]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LoadBalancerAccumulatedStatsRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LoadBalancerAccumulatedStatsRequest(LoadBalancerAccumulatedStatsRequest other) : this() {
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LoadBalancerAccumulatedStatsRequest Clone() {
+ return new LoadBalancerAccumulatedStatsRequest(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as LoadBalancerAccumulatedStatsRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(LoadBalancerAccumulatedStatsRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(LoadBalancerAccumulatedStatsRequest other) {
+ if (other == null) {
+ return;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ }
+ }
+ }
+ #endif
+
+ }
+
+ ///
+ /// Accumulated stats for RPCs sent by a test client.
+ ///
+ public sealed partial class LoadBalancerAccumulatedStatsResponse : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new LoadBalancerAccumulatedStatsResponse());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[15]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LoadBalancerAccumulatedStatsResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LoadBalancerAccumulatedStatsResponse(LoadBalancerAccumulatedStatsResponse other) : this() {
+ numRpcsStartedByMethod_ = other.numRpcsStartedByMethod_.Clone();
+ numRpcsSucceededByMethod_ = other.numRpcsSucceededByMethod_.Clone();
+ numRpcsFailedByMethod_ = other.numRpcsFailedByMethod_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public LoadBalancerAccumulatedStatsResponse Clone() {
+ return new LoadBalancerAccumulatedStatsResponse(this);
+ }
+
+ /// Field number for the "num_rpcs_started_by_method" field.
+ public const int NumRpcsStartedByMethodFieldNumber = 1;
+ private static readonly pbc::MapField.Codec _map_numRpcsStartedByMethod_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForInt32(16, 0), 10);
+ private readonly pbc::MapField numRpcsStartedByMethod_ = new pbc::MapField();
+ ///
+ /// The total number of RPCs have ever issued for each type.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField NumRpcsStartedByMethod {
+ get { return numRpcsStartedByMethod_; }
+ }
+
+ /// Field number for the "num_rpcs_succeeded_by_method" field.
+ public const int NumRpcsSucceededByMethodFieldNumber = 2;
+ private static readonly pbc::MapField.Codec _map_numRpcsSucceededByMethod_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForInt32(16, 0), 18);
+ private readonly pbc::MapField numRpcsSucceededByMethod_ = new pbc::MapField();
+ ///
+ /// The total number of RPCs have ever completed successfully for each type.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField NumRpcsSucceededByMethod {
+ get { return numRpcsSucceededByMethod_; }
+ }
+
+ /// Field number for the "num_rpcs_failed_by_method" field.
+ public const int NumRpcsFailedByMethodFieldNumber = 3;
+ private static readonly pbc::MapField.Codec _map_numRpcsFailedByMethod_codec
+ = new pbc::MapField.Codec(pb::FieldCodec.ForString(10, ""), pb::FieldCodec.ForInt32(16, 0), 26);
+ private readonly pbc::MapField numRpcsFailedByMethod_ = new pbc::MapField();
+ ///
+ /// The total number of RPCs have ever failed for each type.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::MapField NumRpcsFailedByMethod {
+ get { return numRpcsFailedByMethod_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as LoadBalancerAccumulatedStatsResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(LoadBalancerAccumulatedStatsResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (!NumRpcsStartedByMethod.Equals(other.NumRpcsStartedByMethod)) return false;
+ if (!NumRpcsSucceededByMethod.Equals(other.NumRpcsSucceededByMethod)) return false;
+ if (!NumRpcsFailedByMethod.Equals(other.NumRpcsFailedByMethod)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= NumRpcsStartedByMethod.GetHashCode();
+ hash ^= NumRpcsSucceededByMethod.GetHashCode();
+ hash ^= NumRpcsFailedByMethod.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ numRpcsStartedByMethod_.WriteTo(output, _map_numRpcsStartedByMethod_codec);
+ numRpcsSucceededByMethod_.WriteTo(output, _map_numRpcsSucceededByMethod_codec);
+ numRpcsFailedByMethod_.WriteTo(output, _map_numRpcsFailedByMethod_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ numRpcsStartedByMethod_.WriteTo(ref output, _map_numRpcsStartedByMethod_codec);
+ numRpcsSucceededByMethod_.WriteTo(ref output, _map_numRpcsSucceededByMethod_codec);
+ numRpcsFailedByMethod_.WriteTo(ref output, _map_numRpcsFailedByMethod_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += numRpcsStartedByMethod_.CalculateSize(_map_numRpcsStartedByMethod_codec);
+ size += numRpcsSucceededByMethod_.CalculateSize(_map_numRpcsSucceededByMethod_codec);
+ size += numRpcsFailedByMethod_.CalculateSize(_map_numRpcsFailedByMethod_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(LoadBalancerAccumulatedStatsResponse other) {
+ if (other == null) {
+ return;
+ }
+ numRpcsStartedByMethod_.Add(other.numRpcsStartedByMethod_);
+ numRpcsSucceededByMethod_.Add(other.numRpcsSucceededByMethod_);
+ numRpcsFailedByMethod_.Add(other.numRpcsFailedByMethod_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10: {
+ numRpcsStartedByMethod_.AddEntriesFrom(input, _map_numRpcsStartedByMethod_codec);
+ break;
+ }
+ case 18: {
+ numRpcsSucceededByMethod_.AddEntriesFrom(input, _map_numRpcsSucceededByMethod_codec);
+ break;
+ }
+ case 26: {
+ numRpcsFailedByMethod_.AddEntriesFrom(input, _map_numRpcsFailedByMethod_codec);
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10: {
+ numRpcsStartedByMethod_.AddEntriesFrom(ref input, _map_numRpcsStartedByMethod_codec);
+ break;
+ }
+ case 18: {
+ numRpcsSucceededByMethod_.AddEntriesFrom(ref input, _map_numRpcsSucceededByMethod_codec);
+ break;
+ }
+ case 26: {
+ numRpcsFailedByMethod_.AddEntriesFrom(ref input, _map_numRpcsFailedByMethod_codec);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ ///
+ /// Configurations for a test client.
+ ///
+ public sealed partial class ClientConfigureRequest : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ClientConfigureRequest());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[16]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClientConfigureRequest() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClientConfigureRequest(ClientConfigureRequest other) : this() {
+ types_ = other.types_.Clone();
+ metadata_ = other.metadata_.Clone();
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClientConfigureRequest Clone() {
+ return new ClientConfigureRequest(this);
+ }
+
+ /// Field number for the "types" field.
+ public const int Types_FieldNumber = 1;
+ private static readonly pb::FieldCodec _repeated_types_codec
+ = pb::FieldCodec.ForEnum(10, x => (int) x, x => (global::Grpc.Testing.ClientConfigureRequest.Types.RpcType) x);
+ private readonly pbc::RepeatedField types_ = new pbc::RepeatedField();
+ ///
+ /// The types of RPCs the client sends.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Types_ {
+ get { return types_; }
+ }
+
+ /// Field number for the "metadata" field.
+ public const int MetadataFieldNumber = 2;
+ private static readonly pb::FieldCodec _repeated_metadata_codec
+ = pb::FieldCodec.ForMessage(18, global::Grpc.Testing.ClientConfigureRequest.Types.Metadata.Parser);
+ private readonly pbc::RepeatedField metadata_ = new pbc::RepeatedField();
+ ///
+ /// The collection of custom metadata to be attached to RPCs sent by the client.
+ ///
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public pbc::RepeatedField Metadata {
+ get { return metadata_; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ClientConfigureRequest);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ClientConfigureRequest other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if(!types_.Equals(other.types_)) return false;
+ if(!metadata_.Equals(other.metadata_)) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ hash ^= types_.GetHashCode();
+ hash ^= metadata_.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ types_.WriteTo(output, _repeated_types_codec);
+ metadata_.WriteTo(output, _repeated_metadata_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ types_.WriteTo(ref output, _repeated_types_codec);
+ metadata_.WriteTo(ref output, _repeated_metadata_codec);
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ size += types_.CalculateSize(_repeated_types_codec);
+ size += metadata_.CalculateSize(_repeated_metadata_codec);
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ClientConfigureRequest other) {
+ if (other == null) {
+ return;
+ }
+ types_.Add(other.types_);
+ metadata_.Add(other.metadata_);
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 10:
+ case 8: {
+ types_.AddEntriesFrom(input, _repeated_types_codec);
+ break;
+ }
+ case 18: {
+ metadata_.AddEntriesFrom(input, _repeated_metadata_codec);
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 10:
+ case 8: {
+ types_.AddEntriesFrom(ref input, _repeated_types_codec);
+ break;
+ }
+ case 18: {
+ metadata_.AddEntriesFrom(ref input, _repeated_metadata_codec);
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ #region Nested types
+ /// Container for nested types declared in the ClientConfigureRequest message type.
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static partial class Types {
+ ///
+ /// Type of RPCs to send.
+ ///
+ public enum RpcType {
+ [pbr::OriginalName("EMPTY_CALL")] EmptyCall = 0,
+ [pbr::OriginalName("UNARY_CALL")] UnaryCall = 1,
+ }
+
+ ///
+ /// Metadata to be attached for the given type of RPCs.
+ ///
+ public sealed partial class Metadata : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new Metadata());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.ClientConfigureRequest.Descriptor.NestedTypes[0]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Metadata() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Metadata(Metadata other) : this() {
+ type_ = other.type_;
+ key_ = other.key_;
+ value_ = other.value_;
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public Metadata Clone() {
+ return new Metadata(this);
+ }
+
+ /// Field number for the "type" field.
+ public const int TypeFieldNumber = 1;
+ private global::Grpc.Testing.ClientConfigureRequest.Types.RpcType type_ = global::Grpc.Testing.ClientConfigureRequest.Types.RpcType.EmptyCall;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public global::Grpc.Testing.ClientConfigureRequest.Types.RpcType Type {
+ get { return type_; }
+ set {
+ type_ = value;
+ }
+ }
+
+ /// Field number for the "key" field.
+ public const int KeyFieldNumber = 2;
+ private string key_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Key {
+ get { return key_; }
+ set {
+ key_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ /// Field number for the "value" field.
+ public const int ValueFieldNumber = 3;
+ private string value_ = "";
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public string Value {
+ get { return value_; }
+ set {
+ value_ = pb::ProtoPreconditions.CheckNotNull(value, "value");
+ }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as Metadata);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(Metadata other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ if (Type != other.Type) return false;
+ if (Key != other.Key) return false;
+ if (Value != other.Value) return false;
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (Type != global::Grpc.Testing.ClientConfigureRequest.Types.RpcType.EmptyCall) hash ^= Type.GetHashCode();
+ if (Key.Length != 0) hash ^= Key.GetHashCode();
+ if (Value.Length != 0) hash ^= Value.GetHashCode();
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (Type != global::Grpc.Testing.ClientConfigureRequest.Types.RpcType.EmptyCall) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Type);
+ }
+ if (Key.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(Key);
+ }
+ if (Value.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(Value);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (Type != global::Grpc.Testing.ClientConfigureRequest.Types.RpcType.EmptyCall) {
+ output.WriteRawTag(8);
+ output.WriteEnum((int) Type);
+ }
+ if (Key.Length != 0) {
+ output.WriteRawTag(18);
+ output.WriteString(Key);
+ }
+ if (Value.Length != 0) {
+ output.WriteRawTag(26);
+ output.WriteString(Value);
+ }
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (Type != global::Grpc.Testing.ClientConfigureRequest.Types.RpcType.EmptyCall) {
+ size += 1 + pb::CodedOutputStream.ComputeEnumSize((int) Type);
+ }
+ if (Key.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Key);
+ }
+ if (Value.Length != 0) {
+ size += 1 + pb::CodedOutputStream.ComputeStringSize(Value);
+ }
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(Metadata other) {
+ if (other == null) {
+ return;
+ }
+ if (other.Type != global::Grpc.Testing.ClientConfigureRequest.Types.RpcType.EmptyCall) {
+ Type = other.Type;
+ }
+ if (other.Key.Length != 0) {
+ Key = other.Key;
+ }
+ if (other.Value.Length != 0) {
+ Value = other.Value;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ case 8: {
+ Type = (global::Grpc.Testing.ClientConfigureRequest.Types.RpcType) input.ReadEnum();
+ break;
+ }
+ case 18: {
+ Key = input.ReadString();
+ break;
+ }
+ case 26: {
+ Value = input.ReadString();
+ break;
+ }
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ case 8: {
+ Type = (global::Grpc.Testing.ClientConfigureRequest.Types.RpcType) input.ReadEnum();
+ break;
+ }
+ case 18: {
+ Key = input.ReadString();
+ break;
+ }
+ case 26: {
+ Value = input.ReadString();
+ break;
+ }
+ }
+ }
+ }
+ #endif
+
+ }
+
+ }
+ #endregion
+
+ }
+
+ ///
+ /// Response for updating a test client's configuration.
+ ///
+ public sealed partial class ClientConfigureResponse : pb::IMessage
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ , pb::IBufferMessage
+ #endif
+ {
+ private static readonly pb::MessageParser _parser = new pb::MessageParser(() => new ClientConfigureResponse());
+ private pb::UnknownFieldSet _unknownFields;
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pb::MessageParser Parser { get { return _parser; } }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public static pbr::MessageDescriptor Descriptor {
+ get { return global::Grpc.Testing.MessagesReflection.Descriptor.MessageTypes[17]; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ pbr::MessageDescriptor pb::IMessage.Descriptor {
+ get { return Descriptor; }
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClientConfigureResponse() {
+ OnConstruction();
+ }
+
+ partial void OnConstruction();
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClientConfigureResponse(ClientConfigureResponse other) : this() {
+ _unknownFields = pb::UnknownFieldSet.Clone(other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public ClientConfigureResponse Clone() {
+ return new ClientConfigureResponse(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override bool Equals(object other) {
+ return Equals(other as ClientConfigureResponse);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public bool Equals(ClientConfigureResponse other) {
+ if (ReferenceEquals(other, null)) {
+ return false;
+ }
+ if (ReferenceEquals(other, this)) {
+ return true;
+ }
+ return Equals(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override int GetHashCode() {
+ int hash = 1;
+ if (_unknownFields != null) {
+ hash ^= _unknownFields.GetHashCode();
+ }
+ return hash;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public override string ToString() {
+ return pb::JsonFormatter.ToDiagnosticString(this);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void WriteTo(pb::CodedOutputStream output) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ output.WriteRawMessage(this);
+ #else
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(output);
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalWriteTo(ref pb::WriteContext output) {
+ if (_unknownFields != null) {
+ _unknownFields.WriteTo(ref output);
+ }
+ }
+ #endif
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public int CalculateSize() {
+ int size = 0;
+ if (_unknownFields != null) {
+ size += _unknownFields.CalculateSize();
+ }
+ return size;
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(ClientConfigureResponse other) {
+ if (other == null) {
+ return;
+ }
+ _unknownFields = pb::UnknownFieldSet.MergeFrom(_unknownFields, other._unknownFields);
+ }
+
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ public void MergeFrom(pb::CodedInputStream input) {
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ input.ReadRawMessage(this);
+ #else
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, input);
+ break;
+ }
+ }
+ #endif
+ }
+
+ #if !GOOGLE_PROTOBUF_REFSTRUCT_COMPATIBILITY_MODE
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute]
+ void pb::IBufferMessage.InternalMergeFrom(ref pb::ParseContext input) {
+ uint tag;
+ while ((tag = input.ReadTag()) != 0) {
+ switch(tag) {
+ default:
+ _unknownFields = pb::UnknownFieldSet.MergeFieldFrom(_unknownFields, ref input);
+ break;
+ }
+ }
+ }
+ #endif
+
+ }
+
#endregion
}
diff --git a/src/csharp/Grpc.IntegrationTesting/Test.cs b/src/csharp/Grpc.IntegrationTesting/Test.cs
index 8967af6f3d9..f82862a52c9 100644
--- a/src/csharp/Grpc.IntegrationTesting/Test.cs
+++ b/src/csharp/Grpc.IntegrationTesting/Test.cs
@@ -47,13 +47,19 @@ namespace Grpc.Testing {
"bmcuRW1wdHkaEy5ncnBjLnRlc3RpbmcuRW1wdHkyiQEKEFJlY29ubmVjdFNl",
"cnZpY2USOwoFU3RhcnQSHS5ncnBjLnRlc3RpbmcuUmVjb25uZWN0UGFyYW1z",
"GhMuZ3JwYy50ZXN0aW5nLkVtcHR5EjgKBFN0b3ASEy5ncnBjLnRlc3Rpbmcu",
- "RW1wdHkaGy5ncnBjLnRlc3RpbmcuUmVjb25uZWN0SW5mbzJ/ChhMb2FkQmFs",
- "YW5jZXJTdGF0c1NlcnZpY2USYwoOR2V0Q2xpZW50U3RhdHMSJi5ncnBjLnRl",
- "c3RpbmcuTG9hZEJhbGFuY2VyU3RhdHNSZXF1ZXN0GicuZ3JwYy50ZXN0aW5n",
- "LkxvYWRCYWxhbmNlclN0YXRzUmVzcG9uc2UiADKLAQoWWGRzVXBkYXRlSGVh",
- "bHRoU2VydmljZRI2CgpTZXRTZXJ2aW5nEhMuZ3JwYy50ZXN0aW5nLkVtcHR5",
- "GhMuZ3JwYy50ZXN0aW5nLkVtcHR5EjkKDVNldE5vdFNlcnZpbmcSEy5ncnBj",
- "LnRlc3RpbmcuRW1wdHkaEy5ncnBjLnRlc3RpbmcuRW1wdHliBnByb3RvMw=="));
+ "RW1wdHkaGy5ncnBjLnRlc3RpbmcuUmVjb25uZWN0SW5mbzKGAgoYTG9hZEJh",
+ "bGFuY2VyU3RhdHNTZXJ2aWNlEmMKDkdldENsaWVudFN0YXRzEiYuZ3JwYy50",
+ "ZXN0aW5nLkxvYWRCYWxhbmNlclN0YXRzUmVxdWVzdBonLmdycGMudGVzdGlu",
+ "Zy5Mb2FkQmFsYW5jZXJTdGF0c1Jlc3BvbnNlIgAShAEKGUdldENsaWVudEFj",
+ "Y3VtdWxhdGVkU3RhdHMSMS5ncnBjLnRlc3RpbmcuTG9hZEJhbGFuY2VyQWNj",
+ "dW11bGF0ZWRTdGF0c1JlcXVlc3QaMi5ncnBjLnRlc3RpbmcuTG9hZEJhbGFu",
+ "Y2VyQWNjdW11bGF0ZWRTdGF0c1Jlc3BvbnNlIgAyiwEKFlhkc1VwZGF0ZUhl",
+ "YWx0aFNlcnZpY2USNgoKU2V0U2VydmluZxITLmdycGMudGVzdGluZy5FbXB0",
+ "eRoTLmdycGMudGVzdGluZy5FbXB0eRI5Cg1TZXROb3RTZXJ2aW5nEhMuZ3Jw",
+ "Yy50ZXN0aW5nLkVtcHR5GhMuZ3JwYy50ZXN0aW5nLkVtcHR5MnsKH1hkc1Vw",
+ "ZGF0ZUNsaWVudENvbmZpZ3VyZVNlcnZpY2USWAoJQ29uZmlndXJlEiQuZ3Jw",
+ "Yy50ZXN0aW5nLkNsaWVudENvbmZpZ3VyZVJlcXVlc3QaJS5ncnBjLnRlc3Rp",
+ "bmcuQ2xpZW50Q29uZmlndXJlUmVzcG9uc2ViBnByb3RvMw=="));
descriptor = pbr::FileDescriptor.FromGeneratedCode(descriptorData,
new pbr::FileDescriptor[] { global::Grpc.Testing.EmptyReflection.Descriptor, global::Grpc.Testing.MessagesReflection.Descriptor, },
new pbr::GeneratedClrTypeInfo(null, null, null));
diff --git a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
index 168c0892bae..8c1e0123879 100644
--- a/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
+++ b/src/csharp/Grpc.IntegrationTesting/TestGrpc.cs
@@ -947,6 +947,8 @@ namespace Grpc.Testing {
static readonly grpc::Marshaller __Marshaller_grpc_testing_LoadBalancerStatsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Grpc.Testing.LoadBalancerStatsRequest.Parser));
static readonly grpc::Marshaller __Marshaller_grpc_testing_LoadBalancerStatsResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Grpc.Testing.LoadBalancerStatsResponse.Parser));
+ static readonly grpc::Marshaller __Marshaller_grpc_testing_LoadBalancerAccumulatedStatsRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest.Parser));
+ static readonly grpc::Marshaller __Marshaller_grpc_testing_LoadBalancerAccumulatedStatsResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Grpc.Testing.LoadBalancerAccumulatedStatsResponse.Parser));
static readonly grpc::Method __Method_GetClientStats = new grpc::Method(
grpc::MethodType.Unary,
@@ -955,6 +957,13 @@ namespace Grpc.Testing {
__Marshaller_grpc_testing_LoadBalancerStatsRequest,
__Marshaller_grpc_testing_LoadBalancerStatsResponse);
+ static readonly grpc::Method __Method_GetClientAccumulatedStats = new grpc::Method(
+ grpc::MethodType.Unary,
+ __ServiceName,
+ "GetClientAccumulatedStats",
+ __Marshaller_grpc_testing_LoadBalancerAccumulatedStatsRequest,
+ __Marshaller_grpc_testing_LoadBalancerAccumulatedStatsResponse);
+
/// Service descriptor
public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
{
@@ -976,6 +985,17 @@ namespace Grpc.Testing {
throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
}
+ ///
+ /// Gets the accumulated stats for RPCs sent by a test client.
+ ///
+ /// The request received from the client.
+ /// The context of the server-side call handler being invoked.
+ /// The response to send back to the client (wrapped by a task).
+ public virtual global::System.Threading.Tasks.Task GetClientAccumulatedStats(global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest request, grpc::ServerCallContext context)
+ {
+ throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
+ }
+
}
/// Client for LoadBalancerStatsService
@@ -1045,6 +1065,50 @@ namespace Grpc.Testing {
{
return CallInvoker.AsyncUnaryCall(__Method_GetClientStats, null, options, request);
}
+ ///
+ /// Gets the accumulated stats for RPCs sent by a test client.
+ ///
+ /// The request to send to the server.
+ /// The initial metadata to send with the call. This parameter is optional.
+ /// An optional deadline for the call. The call will be cancelled if deadline is hit.
+ /// An optional token for canceling the call.
+ /// The response received from the server.
+ public virtual global::Grpc.Testing.LoadBalancerAccumulatedStatsResponse GetClientAccumulatedStats(global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return GetClientAccumulatedStats(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ ///
+ /// Gets the accumulated stats for RPCs sent by a test client.
+ ///
+ /// The request to send to the server.
+ /// The options for the call.
+ /// The response received from the server.
+ public virtual global::Grpc.Testing.LoadBalancerAccumulatedStatsResponse GetClientAccumulatedStats(global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.BlockingUnaryCall(__Method_GetClientAccumulatedStats, null, options, request);
+ }
+ ///
+ /// Gets the accumulated stats for RPCs sent by a test client.
+ ///
+ /// The request to send to the server.
+ /// The initial metadata to send with the call. This parameter is optional.
+ /// An optional deadline for the call. The call will be cancelled if deadline is hit.
+ /// An optional token for canceling the call.
+ /// The call object.
+ public virtual grpc::AsyncUnaryCall GetClientAccumulatedStatsAsync(global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return GetClientAccumulatedStatsAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ ///
+ /// Gets the accumulated stats for RPCs sent by a test client.
+ ///
+ /// The request to send to the server.
+ /// The options for the call.
+ /// The call object.
+ public virtual grpc::AsyncUnaryCall GetClientAccumulatedStatsAsync(global::Grpc.Testing.LoadBalancerAccumulatedStatsRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.AsyncUnaryCall(__Method_GetClientAccumulatedStats, null, options, request);
+ }
/// Creates a new instance of client from given ClientBaseConfiguration.
protected override LoadBalancerStatsServiceClient NewInstance(ClientBaseConfiguration configuration)
{
@@ -1057,7 +1121,8 @@ namespace Grpc.Testing {
public static grpc::ServerServiceDefinition BindService(LoadBalancerStatsServiceBase serviceImpl)
{
return grpc::ServerServiceDefinition.CreateBuilder()
- .AddMethod(__Method_GetClientStats, serviceImpl.GetClientStats).Build();
+ .AddMethod(__Method_GetClientStats, serviceImpl.GetClientStats)
+ .AddMethod(__Method_GetClientAccumulatedStats, serviceImpl.GetClientAccumulatedStats).Build();
}
/// Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
@@ -1067,6 +1132,7 @@ namespace Grpc.Testing {
public static void BindService(grpc::ServiceBinderBase serviceBinder, LoadBalancerStatsServiceBase serviceImpl)
{
serviceBinder.AddMethod(__Method_GetClientStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.GetClientStats));
+ serviceBinder.AddMethod(__Method_GetClientAccumulatedStats, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.GetClientAccumulatedStats));
}
}
@@ -1227,5 +1293,167 @@ namespace Grpc.Testing {
}
}
+ ///
+ /// A service to dynamically update the configuration of an xDS test client.
+ ///
+ public static partial class XdsUpdateClientConfigureService
+ {
+ static readonly string __ServiceName = "grpc.testing.XdsUpdateClientConfigureService";
+
+ static void __Helper_SerializeMessage(global::Google.Protobuf.IMessage message, grpc::SerializationContext context)
+ {
+ #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
+ if (message is global::Google.Protobuf.IBufferMessage)
+ {
+ context.SetPayloadLength(message.CalculateSize());
+ global::Google.Protobuf.MessageExtensions.WriteTo(message, context.GetBufferWriter());
+ context.Complete();
+ return;
+ }
+ #endif
+ context.Complete(global::Google.Protobuf.MessageExtensions.ToByteArray(message));
+ }
+
+ static class __Helper_MessageCache
+ {
+ public static readonly bool IsBufferMessage = global::System.Reflection.IntrospectionExtensions.GetTypeInfo(typeof(global::Google.Protobuf.IBufferMessage)).IsAssignableFrom(typeof(T));
+ }
+
+ static T __Helper_DeserializeMessage(grpc::DeserializationContext context, global::Google.Protobuf.MessageParser parser) where T : global::Google.Protobuf.IMessage
+ {
+ #if !GRPC_DISABLE_PROTOBUF_BUFFER_SERIALIZATION
+ if (__Helper_MessageCache.IsBufferMessage)
+ {
+ return parser.ParseFrom(context.PayloadAsReadOnlySequence());
+ }
+ #endif
+ return parser.ParseFrom(context.PayloadAsNewBuffer());
+ }
+
+ static readonly grpc::Marshaller __Marshaller_grpc_testing_ClientConfigureRequest = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Grpc.Testing.ClientConfigureRequest.Parser));
+ static readonly grpc::Marshaller __Marshaller_grpc_testing_ClientConfigureResponse = grpc::Marshallers.Create(__Helper_SerializeMessage, context => __Helper_DeserializeMessage(context, global::Grpc.Testing.ClientConfigureResponse.Parser));
+
+ static readonly grpc::Method __Method_Configure = new grpc::Method(
+ grpc::MethodType.Unary,
+ __ServiceName,
+ "Configure",
+ __Marshaller_grpc_testing_ClientConfigureRequest,
+ __Marshaller_grpc_testing_ClientConfigureResponse);
+
+ /// Service descriptor
+ public static global::Google.Protobuf.Reflection.ServiceDescriptor Descriptor
+ {
+ get { return global::Grpc.Testing.TestReflection.Descriptor.Services[5]; }
+ }
+
+ /// Base class for server-side implementations of XdsUpdateClientConfigureService
+ [grpc::BindServiceMethod(typeof(XdsUpdateClientConfigureService), "BindService")]
+ public abstract partial class XdsUpdateClientConfigureServiceBase
+ {
+ ///
+ /// Update the tes client's configuration.
+ ///
+ /// The request received from the client.
+ /// The context of the server-side call handler being invoked.
+ /// The response to send back to the client (wrapped by a task).
+ public virtual global::System.Threading.Tasks.Task Configure(global::Grpc.Testing.ClientConfigureRequest request, grpc::ServerCallContext context)
+ {
+ throw new grpc::RpcException(new grpc::Status(grpc::StatusCode.Unimplemented, ""));
+ }
+
+ }
+
+ /// Client for XdsUpdateClientConfigureService
+ public partial class XdsUpdateClientConfigureServiceClient : grpc::ClientBase
+ {
+ /// Creates a new client for XdsUpdateClientConfigureService
+ /// The channel to use to make remote calls.
+ public XdsUpdateClientConfigureServiceClient(grpc::ChannelBase channel) : base(channel)
+ {
+ }
+ /// Creates a new client for XdsUpdateClientConfigureService that uses a custom CallInvoker.
+ /// The callInvoker to use to make remote calls.
+ public XdsUpdateClientConfigureServiceClient(grpc::CallInvoker callInvoker) : base(callInvoker)
+ {
+ }
+ /// Protected parameterless constructor to allow creation of test doubles.
+ protected XdsUpdateClientConfigureServiceClient() : base()
+ {
+ }
+ /// Protected constructor to allow creation of configured clients.
+ /// The client configuration.
+ protected XdsUpdateClientConfigureServiceClient(ClientBaseConfiguration configuration) : base(configuration)
+ {
+ }
+
+ ///
+ /// Update the tes client's configuration.
+ ///
+ /// The request to send to the server.
+ /// The initial metadata to send with the call. This parameter is optional.
+ /// An optional deadline for the call. The call will be cancelled if deadline is hit.
+ /// An optional token for canceling the call.
+ /// The response received from the server.
+ public virtual global::Grpc.Testing.ClientConfigureResponse Configure(global::Grpc.Testing.ClientConfigureRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return Configure(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ ///
+ /// Update the tes client's configuration.
+ ///
+ /// The request to send to the server.
+ /// The options for the call.
+ /// The response received from the server.
+ public virtual global::Grpc.Testing.ClientConfigureResponse Configure(global::Grpc.Testing.ClientConfigureRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.BlockingUnaryCall(__Method_Configure, null, options, request);
+ }
+ ///
+ /// Update the tes client's configuration.
+ ///
+ /// The request to send to the server.
+ /// The initial metadata to send with the call. This parameter is optional.
+ /// An optional deadline for the call. The call will be cancelled if deadline is hit.
+ /// An optional token for canceling the call.
+ /// The call object.
+ public virtual grpc::AsyncUnaryCall ConfigureAsync(global::Grpc.Testing.ClientConfigureRequest request, grpc::Metadata headers = null, global::System.DateTime? deadline = null, global::System.Threading.CancellationToken cancellationToken = default(global::System.Threading.CancellationToken))
+ {
+ return ConfigureAsync(request, new grpc::CallOptions(headers, deadline, cancellationToken));
+ }
+ ///
+ /// Update the tes client's configuration.
+ ///
+ /// The request to send to the server.
+ /// The options for the call.
+ /// The call object.
+ public virtual grpc::AsyncUnaryCall ConfigureAsync(global::Grpc.Testing.ClientConfigureRequest request, grpc::CallOptions options)
+ {
+ return CallInvoker.AsyncUnaryCall(__Method_Configure, null, options, request);
+ }
+ /// Creates a new instance of client from given ClientBaseConfiguration.
+ protected override XdsUpdateClientConfigureServiceClient NewInstance(ClientBaseConfiguration configuration)
+ {
+ return new XdsUpdateClientConfigureServiceClient(configuration);
+ }
+ }
+
+ /// Creates service definition that can be registered with a server
+ /// An object implementing the server-side handling logic.
+ public static grpc::ServerServiceDefinition BindService(XdsUpdateClientConfigureServiceBase serviceImpl)
+ {
+ return grpc::ServerServiceDefinition.CreateBuilder()
+ .AddMethod(__Method_Configure, serviceImpl.Configure).Build();
+ }
+
+ /// Register service method with a service binder with or without implementation. Useful when customizing the service binding logic.
+ /// Note: this method is part of an experimental API that can change or be removed without any prior notice.
+ /// Service methods will be bound by calling AddMethod on this object.
+ /// An object implementing the server-side handling logic.
+ public static void BindService(grpc::ServiceBinderBase serviceBinder, XdsUpdateClientConfigureServiceBase serviceImpl)
+ {
+ serviceBinder.AddMethod(__Method_Configure, serviceImpl == null ? null : new grpc::UnaryServerMethod(serviceImpl.Configure));
+ }
+
+ }
}
#endregion
diff --git a/src/php/tests/generated_code/GPBMetadata/Math.php b/src/php/tests/generated_code/GPBMetadata/Math.php
index 10f043607ac..c96131a02e6 100644
Binary files a/src/php/tests/generated_code/GPBMetadata/Math.php and b/src/php/tests/generated_code/GPBMetadata/Math.php differ
diff --git a/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php b/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php
index ec3ae2dcdcd..6ba468ef541 100644
Binary files a/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php and b/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Messages.php differ
diff --git a/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/PBEmpty.php b/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/PBEmpty.php
index f103e2e3ed2..542c18b23e5 100644
--- a/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/PBEmpty.php
+++ b/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/PBEmpty.php
@@ -14,9 +14,12 @@ class PBEmpty
if (static::$is_initialized == true) {
return;
}
- $pool->internalAddGeneratedFile(hex2bin(
- "0a4a0a227372632f70726f746f2f677270632f74657374696e672f656d7074792e70726f746f120c677270632e74657374696e67220e0a0c456d7074794d657373616765620670726f746f33"
- ), true);
+ $pool->internalAddGeneratedFile(
+ '
+J
+"src/proto/grpc/testing/empty.protogrpc.testing"
+EmptyMessagebproto3'
+ , true);
static::$is_initialized = true;
}
diff --git a/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Test.php b/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Test.php
index f8a22f6ea54..00b82e5f664 100644
Binary files a/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Test.php and b/src/php/tests/interop/GPBMetadata/Src/Proto/Grpc/Testing/Test.php differ