blob: f9f3117a6fc0fc62e403020c8df8ee174c155a77 [file] [log] [blame]
Jens Geyeraa0c8b32019-01-28 23:27:45 +01001// Licensed to the Apache Software Foundation(ASF) under one
2// or more contributor license agreements.See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership.The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18using System;
19using System.IO;
20using System.Text;
21using System.Threading.Tasks;
22using KellermanSoftware.CompareNetObjects;
23using Microsoft.VisualStudio.TestTools.UnitTesting;
24using Thrift.Protocol;
25using Thrift.Protocol.Entities;
Jens Geyer7eec2272025-02-12 00:36:44 +010026using Thrift.Transport;
Jens Geyeraa0c8b32019-01-28 23:27:45 +010027using Thrift.Transport.Client;
28
Jens Geyer98a23252022-01-09 16:50:52 +010029#pragma warning disable IDE0063 // using
30
Jens Geyeraa0c8b32019-01-28 23:27:45 +010031namespace Thrift.IntegrationTests.Protocols
32{
33 [TestClass]
34 public class ProtocolsOperationsTests
35 {
Jens Geyer98a23252022-01-09 16:50:52 +010036 private readonly CompareLogic _compareLogic = new();
37 private static readonly TConfiguration Configuration = new();
Jens Geyeraa0c8b32019-01-28 23:27:45 +010038
39 [DataTestMethod]
40 [DataRow(typeof(TBinaryProtocol), TMessageType.Call)]
41 [DataRow(typeof(TBinaryProtocol), TMessageType.Exception)]
42 [DataRow(typeof(TBinaryProtocol), TMessageType.Oneway)]
43 [DataRow(typeof(TBinaryProtocol), TMessageType.Reply)]
44 [DataRow(typeof(TCompactProtocol), TMessageType.Call)]
45 [DataRow(typeof(TCompactProtocol), TMessageType.Exception)]
46 [DataRow(typeof(TCompactProtocol), TMessageType.Oneway)]
47 [DataRow(typeof(TCompactProtocol), TMessageType.Reply)]
48 [DataRow(typeof(TJsonProtocol), TMessageType.Call)]
49 [DataRow(typeof(TJsonProtocol), TMessageType.Exception)]
50 [DataRow(typeof(TJsonProtocol), TMessageType.Oneway)]
51 [DataRow(typeof(TJsonProtocol), TMessageType.Reply)]
52 public async Task WriteReadMessage_Test(Type protocolType, TMessageType messageType)
53 {
54 var expected = new TMessage(nameof(TMessage), messageType, 1);
55
56 try
57 {
58 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +010059 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +010060 {
Jens Geyer7eec2272025-02-12 00:36:44 +010061 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +010062
Jens Geyerdce22992020-05-16 23:02:27 +020063 await protocol.WriteMessageBeginAsync(expected, default);
64 await protocol.WriteMessageEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +010065 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +010066
67 stream.Seek(0, SeekOrigin.Begin);
68
Jens Geyerdce22992020-05-16 23:02:27 +020069 var actualMessage = await protocol.ReadMessageBeginAsync(default);
70 await protocol.ReadMessageEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +010071
72 var result = _compareLogic.Compare(expected, actualMessage);
73 Assert.IsTrue(result.AreEqual, result.DifferencesString);
74 }
75 }
76 catch (Exception e)
77 {
78 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
79 }
80 }
81
82 [DataTestMethod]
83 [DataRow(typeof(TBinaryProtocol))]
84 [DataRow(typeof(TCompactProtocol))]
85 [DataRow(typeof(TJsonProtocol))]
86 [ExpectedException(typeof(Exception))]
87 public async Task WriteReadStruct_Test(Type protocolType)
88 {
89 var expected = new TStruct(nameof(TStruct));
90
91 try
92 {
93 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +010094 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +010095 {
Jens Geyer7eec2272025-02-12 00:36:44 +010096 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +010097
Jens Geyerdce22992020-05-16 23:02:27 +020098 await protocol.WriteStructBeginAsync(expected, default);
99 await protocol.WriteStructEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100100 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100101
102 stream?.Seek(0, SeekOrigin.Begin);
103
Jens Geyerdce22992020-05-16 23:02:27 +0200104 var actual = await protocol.ReadStructBeginAsync(default);
105 await protocol.ReadStructEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100106
107 var result = _compareLogic.Compare(expected, actual);
108 Assert.IsTrue(result.AreEqual, result.DifferencesString);
109 }
110
111 }
112 catch (Exception e)
113 {
114 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
115 }
116 }
117
118 [DataTestMethod]
119 [DataRow(typeof(TBinaryProtocol))]
120 [DataRow(typeof(TCompactProtocol))]
121 [DataRow(typeof(TJsonProtocol))]
122 [ExpectedException(typeof(Exception))]
123 public async Task WriteReadField_Test(Type protocolType)
124 {
125 var expected = new TField(nameof(TField), TType.String, 1);
126
127 try
128 {
129 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100130 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100131 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100132 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100133
Jens Geyerdce22992020-05-16 23:02:27 +0200134 await protocol.WriteFieldBeginAsync(expected, default);
135 await protocol.WriteFieldEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100136 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100137
138 stream?.Seek(0, SeekOrigin.Begin);
139
Jens Geyerdce22992020-05-16 23:02:27 +0200140 var actual = await protocol.ReadFieldBeginAsync(default);
141 await protocol.ReadFieldEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100142
143 var result = _compareLogic.Compare(expected, actual);
144 Assert.IsTrue(result.AreEqual, result.DifferencesString);
145 }
146 }
147 catch (Exception e)
148 {
149 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
150 }
151 }
152
153 [DataTestMethod]
154 [DataRow(typeof(TBinaryProtocol))]
155 [DataRow(typeof(TCompactProtocol))]
156 [DataRow(typeof(TJsonProtocol))]
157 public async Task WriteReadMap_Test(Type protocolType)
158 {
159 var expected = new TMap(TType.String, TType.String, 1);
160
161 try
162 {
163 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100164 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100165 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100166 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100167
Jens Geyerdce22992020-05-16 23:02:27 +0200168 await protocol.WriteMapBeginAsync(expected, default);
169 await protocol.WriteMapEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100170 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100171
172 stream?.Seek(0, SeekOrigin.Begin);
173
Jens Geyerdce22992020-05-16 23:02:27 +0200174 var actual = await protocol.ReadMapBeginAsync(default);
175 await protocol.ReadMapEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100176
177 var result = _compareLogic.Compare(expected, actual);
178 Assert.IsTrue(result.AreEqual, result.DifferencesString);
179 }
180 }
181 catch (Exception e)
182 {
183 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
184 }
185
186 }
187
188 [DataTestMethod]
189 [DataRow(typeof(TBinaryProtocol))]
190 [DataRow(typeof(TCompactProtocol))]
191 [DataRow(typeof(TJsonProtocol))]
192 public async Task WriteReadList_Test(Type protocolType)
193 {
194 var expected = new TList(TType.String, 1);
195
196 try
197 {
198 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100199 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100200 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100201 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100202
Jens Geyerdce22992020-05-16 23:02:27 +0200203 await protocol.WriteListBeginAsync(expected, default);
204 await protocol.WriteListEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100205 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100206
207 stream?.Seek(0, SeekOrigin.Begin);
208
Jens Geyerdce22992020-05-16 23:02:27 +0200209 var actual = await protocol.ReadListBeginAsync(default);
210 await protocol.ReadListEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100211
212 var result = _compareLogic.Compare(expected, actual);
213 Assert.IsTrue(result.AreEqual, result.DifferencesString);
214 }
215 }
216 catch (Exception e)
217 {
218 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
219 }
220 }
221
222 [DataTestMethod]
223 [DataRow(typeof(TBinaryProtocol))]
224 [DataRow(typeof(TCompactProtocol))]
225 [DataRow(typeof(TJsonProtocol))]
226 public async Task WriteReadSet_Test(Type protocolType)
227 {
228 var expected = new TSet(TType.String, 1);
229
230 try
231 {
232 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100233 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100234 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100235 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100236
Jens Geyerdce22992020-05-16 23:02:27 +0200237 await protocol.WriteSetBeginAsync(expected, default);
238 await protocol.WriteSetEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100239 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100240
241 stream?.Seek(0, SeekOrigin.Begin);
242
Jens Geyerdce22992020-05-16 23:02:27 +0200243 var actual = await protocol.ReadSetBeginAsync(default);
244 await protocol.ReadSetEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100245
246 var result = _compareLogic.Compare(expected, actual);
247 Assert.IsTrue(result.AreEqual, result.DifferencesString);
248 }
249 }
250 catch (Exception e)
251 {
252 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
253 }
254 }
255
256 [DataTestMethod]
257 [DataRow(typeof(TBinaryProtocol))]
258 [DataRow(typeof(TCompactProtocol))]
259 [DataRow(typeof(TJsonProtocol))]
260 public async Task WriteReadBool_Test(Type protocolType)
261 {
262 var expected = true;
263
264 try
265 {
266 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100267 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100268 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100269 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100270
Jens Geyerdce22992020-05-16 23:02:27 +0200271 await protocol.WriteBoolAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100272 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100273
274 stream?.Seek(0, SeekOrigin.Begin);
275
Jens Geyerdce22992020-05-16 23:02:27 +0200276 var actual = await protocol.ReadBoolAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100277
278 var result = _compareLogic.Compare(expected, actual);
279 Assert.IsTrue(result.AreEqual, result.DifferencesString);
280 }
281 }
282 catch (Exception e)
283 {
284 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
285 }
286 }
287
288 [DataTestMethod]
289 [DataRow(typeof(TBinaryProtocol))]
290 [DataRow(typeof(TCompactProtocol))]
291 [DataRow(typeof(TJsonProtocol))]
292 public async Task WriteReadByte_Test(Type protocolType)
293 {
294 var expected = sbyte.MaxValue;
295
296 try
297 {
298 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100299 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100300 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100301 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100302
Jens Geyerdce22992020-05-16 23:02:27 +0200303 await protocol.WriteByteAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100304 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100305
306 stream?.Seek(0, SeekOrigin.Begin);
307
Jens Geyerdce22992020-05-16 23:02:27 +0200308 var actual = await protocol.ReadByteAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100309
310 var result = _compareLogic.Compare(expected, actual);
311 Assert.IsTrue(result.AreEqual, result.DifferencesString);
312 }
313 }
314 catch (Exception e)
315 {
316 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
317 }
318 }
319
320 [DataTestMethod]
321 [DataRow(typeof(TBinaryProtocol))]
322 [DataRow(typeof(TCompactProtocol))]
323 [DataRow(typeof(TJsonProtocol))]
324 public async Task WriteReadI16_Test(Type protocolType)
325 {
326 var expected = short.MaxValue;
327
328 try
329 {
330 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100331 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100332 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100333 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100334
Jens Geyerdce22992020-05-16 23:02:27 +0200335 await protocol.WriteI16Async(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100336 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100337
338 stream?.Seek(0, SeekOrigin.Begin);
339
Jens Geyerdce22992020-05-16 23:02:27 +0200340 var actual = await protocol.ReadI16Async(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100341
342 var result = _compareLogic.Compare(expected, actual);
343 Assert.IsTrue(result.AreEqual, result.DifferencesString);
344 }
345 }
346 catch (Exception e)
347 {
348 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
349 }
350 }
351
352 [DataTestMethod]
353 [DataRow(typeof(TBinaryProtocol))]
354 [DataRow(typeof(TCompactProtocol))]
355 [DataRow(typeof(TJsonProtocol))]
356 public async Task WriteReadI32_Test(Type protocolType)
357 {
358 var expected = int.MaxValue;
359
360 try
361 {
362 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100363 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100364 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100365 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100366
Jens Geyerdce22992020-05-16 23:02:27 +0200367 await protocol.WriteI32Async(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100368 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100369
370 stream?.Seek(0, SeekOrigin.Begin);
371
Jens Geyerdce22992020-05-16 23:02:27 +0200372 var actual = await protocol.ReadI32Async(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100373
374 var result = _compareLogic.Compare(expected, actual);
375 Assert.IsTrue(result.AreEqual, result.DifferencesString);
376 }
377 }
378 catch (Exception e)
379 {
380 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
381 }
382 }
383
384 [DataTestMethod]
385 [DataRow(typeof(TBinaryProtocol))]
386 [DataRow(typeof(TCompactProtocol))]
387 [DataRow(typeof(TJsonProtocol))]
388 public async Task WriteReadI64_Test(Type protocolType)
389 {
390 var expected = long.MaxValue;
391
392 try
393 {
394 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100395 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100396 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100397 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100398
Jens Geyerdce22992020-05-16 23:02:27 +0200399 await protocol.WriteI64Async(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100400 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100401
402 stream?.Seek(0, SeekOrigin.Begin);
403
Jens Geyerdce22992020-05-16 23:02:27 +0200404 var actual = await protocol.ReadI64Async(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100405
406 var result = _compareLogic.Compare(expected, actual);
407 Assert.IsTrue(result.AreEqual, result.DifferencesString);
408 }
409 }
410 catch (Exception e)
411 {
412 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
413 }
414 }
415
416 [DataTestMethod]
417 [DataRow(typeof(TBinaryProtocol))]
418 [DataRow(typeof(TCompactProtocol))]
419 [DataRow(typeof(TJsonProtocol))]
420 public async Task WriteReadDouble_Test(Type protocolType)
421 {
422 var expected = double.MaxValue;
423
424 try
425 {
426 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100427 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100428 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100429 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100430
Jens Geyerdce22992020-05-16 23:02:27 +0200431 await protocol.WriteDoubleAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100432 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100433
434 stream?.Seek(0, SeekOrigin.Begin);
435
Jens Geyerdce22992020-05-16 23:02:27 +0200436 var actual = await protocol.ReadDoubleAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100437
438 var result = _compareLogic.Compare(expected, actual);
439 Assert.IsTrue(result.AreEqual, result.DifferencesString);
440 }
441 }
442 catch (Exception e)
443 {
444 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
445 }
446 }
447
448 [DataTestMethod]
449 [DataRow(typeof(TBinaryProtocol))]
450 [DataRow(typeof(TCompactProtocol))]
451 [DataRow(typeof(TJsonProtocol))]
452 public async Task WriteReadString_Test(Type protocolType)
453 {
454 var expected = nameof(String);
455
456 try
457 {
458 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100459 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100460 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100461 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100462
Jens Geyerdce22992020-05-16 23:02:27 +0200463 await protocol.WriteStringAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100464 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100465
466 stream?.Seek(0, SeekOrigin.Begin);
467
Jens Geyerdce22992020-05-16 23:02:27 +0200468 var actual = await protocol.ReadStringAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100469
470 var result = _compareLogic.Compare(expected, actual);
471 Assert.IsTrue(result.AreEqual, result.DifferencesString);
472 }
473 }
474 catch (Exception e)
475 {
476 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
477 }
478 }
479
480 [DataTestMethod]
481 [DataRow(typeof(TBinaryProtocol))]
482 [DataRow(typeof(TCompactProtocol))]
483 [DataRow(typeof(TJsonProtocol))]
484 public async Task WriteReadBinary_Test(Type protocolType)
485 {
486 var expected = Encoding.UTF8.GetBytes(nameof(String));
487
488 try
489 {
490 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100491 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100492 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100493 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100494
Jens Geyerdce22992020-05-16 23:02:27 +0200495 await protocol.WriteBinaryAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100496 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100497
498 stream?.Seek(0, SeekOrigin.Begin);
499
Jens Geyerdce22992020-05-16 23:02:27 +0200500 var actual = await protocol.ReadBinaryAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100501
502 var result = _compareLogic.Compare(expected, actual);
503 Assert.IsTrue(result.AreEqual, result.DifferencesString);
504 }
505 }
506 catch (Exception e)
507 {
508 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
509 }
510 }
511
Jens Geyer7eec2272025-02-12 00:36:44 +0100512 private record struct ProtocolTransportStack(Stream Stream, TTransport Transport, TProtocol Protocol);
513
514 private static ProtocolTransportStack GetProtocolInstance(Type protocolType)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100515 {
516 var memoryStream = new MemoryStream();
Jens Geyereacd1d42019-11-20 19:03:14 +0100517 var streamClientTransport = new TStreamTransport(memoryStream, memoryStream,Configuration);
Jens Geyer98a23252022-01-09 16:50:52 +0100518 if( Activator.CreateInstance(protocolType, streamClientTransport) is TProtocol protocol)
Jens Geyer7eec2272025-02-12 00:36:44 +0100519 return new ProtocolTransportStack(memoryStream, streamClientTransport, protocol);
Jens Geyer98a23252022-01-09 16:50:52 +0100520 throw new Exception("Unexpected");
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100521 }
522 }
523}