blob: 844bd10d2008fcb6bc041b02855514e8304e79dd [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]
Jens Geyer3e6be732025-06-04 22:31:55 +020034 public class ProtocolsOperationsTests : TestBase
Jens Geyeraa0c8b32019-01-28 23:27:45 +010035 {
Jens Geyeraa0c8b32019-01-28 23:27:45 +010036 [DataTestMethod]
37 [DataRow(typeof(TBinaryProtocol), TMessageType.Call)]
38 [DataRow(typeof(TBinaryProtocol), TMessageType.Exception)]
39 [DataRow(typeof(TBinaryProtocol), TMessageType.Oneway)]
40 [DataRow(typeof(TBinaryProtocol), TMessageType.Reply)]
41 [DataRow(typeof(TCompactProtocol), TMessageType.Call)]
42 [DataRow(typeof(TCompactProtocol), TMessageType.Exception)]
43 [DataRow(typeof(TCompactProtocol), TMessageType.Oneway)]
44 [DataRow(typeof(TCompactProtocol), TMessageType.Reply)]
45 [DataRow(typeof(TJsonProtocol), TMessageType.Call)]
46 [DataRow(typeof(TJsonProtocol), TMessageType.Exception)]
47 [DataRow(typeof(TJsonProtocol), TMessageType.Oneway)]
48 [DataRow(typeof(TJsonProtocol), TMessageType.Reply)]
49 public async Task WriteReadMessage_Test(Type protocolType, TMessageType messageType)
50 {
51 var expected = new TMessage(nameof(TMessage), messageType, 1);
52
53 try
54 {
55 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +010056 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +010057 {
Jens Geyer7eec2272025-02-12 00:36:44 +010058 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +010059
Jens Geyerdce22992020-05-16 23:02:27 +020060 await protocol.WriteMessageBeginAsync(expected, default);
61 await protocol.WriteMessageEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +010062 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +010063
64 stream.Seek(0, SeekOrigin.Begin);
65
Jens Geyerdce22992020-05-16 23:02:27 +020066 var actualMessage = await protocol.ReadMessageBeginAsync(default);
67 await protocol.ReadMessageEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +010068
69 var result = _compareLogic.Compare(expected, actualMessage);
70 Assert.IsTrue(result.AreEqual, result.DifferencesString);
71 }
72 }
73 catch (Exception e)
74 {
75 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
76 }
77 }
78
79 [DataTestMethod]
80 [DataRow(typeof(TBinaryProtocol))]
81 [DataRow(typeof(TCompactProtocol))]
82 [DataRow(typeof(TJsonProtocol))]
83 [ExpectedException(typeof(Exception))]
84 public async Task WriteReadStruct_Test(Type protocolType)
85 {
86 var expected = new TStruct(nameof(TStruct));
87
88 try
89 {
90 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +010091 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +010092 {
Jens Geyer7eec2272025-02-12 00:36:44 +010093 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +010094
Jens Geyerdce22992020-05-16 23:02:27 +020095 await protocol.WriteStructBeginAsync(expected, default);
96 await protocol.WriteStructEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +010097 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +010098
Jens Geyer3e6be732025-06-04 22:31:55 +020099 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100100
Jens Geyerdce22992020-05-16 23:02:27 +0200101 var actual = await protocol.ReadStructBeginAsync(default);
102 await protocol.ReadStructEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100103
104 var result = _compareLogic.Compare(expected, actual);
105 Assert.IsTrue(result.AreEqual, result.DifferencesString);
106 }
107
108 }
109 catch (Exception e)
110 {
111 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
112 }
113 }
114
115 [DataTestMethod]
116 [DataRow(typeof(TBinaryProtocol))]
117 [DataRow(typeof(TCompactProtocol))]
118 [DataRow(typeof(TJsonProtocol))]
119 [ExpectedException(typeof(Exception))]
120 public async Task WriteReadField_Test(Type protocolType)
121 {
122 var expected = new TField(nameof(TField), TType.String, 1);
123
124 try
125 {
126 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100127 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100128 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100129 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100130
Jens Geyerdce22992020-05-16 23:02:27 +0200131 await protocol.WriteFieldBeginAsync(expected, default);
132 await protocol.WriteFieldEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100133 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100134
Jens Geyer3e6be732025-06-04 22:31:55 +0200135 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100136
Jens Geyerdce22992020-05-16 23:02:27 +0200137 var actual = await protocol.ReadFieldBeginAsync(default);
138 await protocol.ReadFieldEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100139
140 var result = _compareLogic.Compare(expected, actual);
141 Assert.IsTrue(result.AreEqual, result.DifferencesString);
142 }
143 }
144 catch (Exception e)
145 {
146 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
147 }
148 }
149
150 [DataTestMethod]
151 [DataRow(typeof(TBinaryProtocol))]
152 [DataRow(typeof(TCompactProtocol))]
153 [DataRow(typeof(TJsonProtocol))]
154 public async Task WriteReadMap_Test(Type protocolType)
155 {
156 var expected = new TMap(TType.String, TType.String, 1);
157
158 try
159 {
160 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100161 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100162 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100163 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100164
Jens Geyerdce22992020-05-16 23:02:27 +0200165 await protocol.WriteMapBeginAsync(expected, default);
166 await protocol.WriteMapEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100167 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100168
Jens Geyer3e6be732025-06-04 22:31:55 +0200169 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100170
Jens Geyerdce22992020-05-16 23:02:27 +0200171 var actual = await protocol.ReadMapBeginAsync(default);
172 await protocol.ReadMapEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100173
174 var result = _compareLogic.Compare(expected, actual);
175 Assert.IsTrue(result.AreEqual, result.DifferencesString);
176 }
177 }
178 catch (Exception e)
179 {
180 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
181 }
182
183 }
184
185 [DataTestMethod]
186 [DataRow(typeof(TBinaryProtocol))]
187 [DataRow(typeof(TCompactProtocol))]
188 [DataRow(typeof(TJsonProtocol))]
189 public async Task WriteReadList_Test(Type protocolType)
190 {
191 var expected = new TList(TType.String, 1);
192
193 try
194 {
195 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100196 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100197 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100198 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100199
Jens Geyerdce22992020-05-16 23:02:27 +0200200 await protocol.WriteListBeginAsync(expected, default);
201 await protocol.WriteListEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100202 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100203
Jens Geyer3e6be732025-06-04 22:31:55 +0200204 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100205
Jens Geyerdce22992020-05-16 23:02:27 +0200206 var actual = await protocol.ReadListBeginAsync(default);
207 await protocol.ReadListEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100208
209 var result = _compareLogic.Compare(expected, actual);
210 Assert.IsTrue(result.AreEqual, result.DifferencesString);
211 }
212 }
213 catch (Exception e)
214 {
215 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
216 }
217 }
218
219 [DataTestMethod]
220 [DataRow(typeof(TBinaryProtocol))]
221 [DataRow(typeof(TCompactProtocol))]
222 [DataRow(typeof(TJsonProtocol))]
223 public async Task WriteReadSet_Test(Type protocolType)
224 {
225 var expected = new TSet(TType.String, 1);
226
227 try
228 {
229 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100230 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100231 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100232 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100233
Jens Geyerdce22992020-05-16 23:02:27 +0200234 await protocol.WriteSetBeginAsync(expected, default);
235 await protocol.WriteSetEndAsync(default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100236 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100237
Jens Geyer3e6be732025-06-04 22:31:55 +0200238 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100239
Jens Geyerdce22992020-05-16 23:02:27 +0200240 var actual = await protocol.ReadSetBeginAsync(default);
241 await protocol.ReadSetEndAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100242
243 var result = _compareLogic.Compare(expected, actual);
244 Assert.IsTrue(result.AreEqual, result.DifferencesString);
245 }
246 }
247 catch (Exception e)
248 {
249 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
250 }
251 }
252
253 [DataTestMethod]
254 [DataRow(typeof(TBinaryProtocol))]
255 [DataRow(typeof(TCompactProtocol))]
256 [DataRow(typeof(TJsonProtocol))]
257 public async Task WriteReadBool_Test(Type protocolType)
258 {
259 var expected = true;
260
261 try
262 {
263 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100264 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100265 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100266 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100267
Jens Geyerdce22992020-05-16 23:02:27 +0200268 await protocol.WriteBoolAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100269 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100270
Jens Geyer3e6be732025-06-04 22:31:55 +0200271 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100272
Jens Geyerdce22992020-05-16 23:02:27 +0200273 var actual = await protocol.ReadBoolAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100274
275 var result = _compareLogic.Compare(expected, actual);
276 Assert.IsTrue(result.AreEqual, result.DifferencesString);
277 }
278 }
279 catch (Exception e)
280 {
281 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
282 }
283 }
284
285 [DataTestMethod]
286 [DataRow(typeof(TBinaryProtocol))]
287 [DataRow(typeof(TCompactProtocol))]
288 [DataRow(typeof(TJsonProtocol))]
289 public async Task WriteReadByte_Test(Type protocolType)
290 {
291 var expected = sbyte.MaxValue;
292
293 try
294 {
295 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100296 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100297 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100298 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100299
Jens Geyerdce22992020-05-16 23:02:27 +0200300 await protocol.WriteByteAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100301 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100302
Jens Geyer3e6be732025-06-04 22:31:55 +0200303 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100304
Jens Geyerdce22992020-05-16 23:02:27 +0200305 var actual = await protocol.ReadByteAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100306
307 var result = _compareLogic.Compare(expected, actual);
308 Assert.IsTrue(result.AreEqual, result.DifferencesString);
309 }
310 }
311 catch (Exception e)
312 {
313 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
314 }
315 }
316
317 [DataTestMethod]
318 [DataRow(typeof(TBinaryProtocol))]
319 [DataRow(typeof(TCompactProtocol))]
320 [DataRow(typeof(TJsonProtocol))]
321 public async Task WriteReadI16_Test(Type protocolType)
322 {
323 var expected = short.MaxValue;
324
325 try
326 {
327 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100328 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100329 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100330 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100331
Jens Geyerdce22992020-05-16 23:02:27 +0200332 await protocol.WriteI16Async(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100333 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100334
Jens Geyer3e6be732025-06-04 22:31:55 +0200335 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100336
Jens Geyerdce22992020-05-16 23:02:27 +0200337 var actual = await protocol.ReadI16Async(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100338
339 var result = _compareLogic.Compare(expected, actual);
340 Assert.IsTrue(result.AreEqual, result.DifferencesString);
341 }
342 }
343 catch (Exception e)
344 {
345 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
346 }
347 }
348
349 [DataTestMethod]
350 [DataRow(typeof(TBinaryProtocol))]
351 [DataRow(typeof(TCompactProtocol))]
352 [DataRow(typeof(TJsonProtocol))]
353 public async Task WriteReadI32_Test(Type protocolType)
354 {
355 var expected = int.MaxValue;
356
357 try
358 {
359 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100360 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100361 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100362 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100363
Jens Geyerdce22992020-05-16 23:02:27 +0200364 await protocol.WriteI32Async(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100365 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100366
Jens Geyer3e6be732025-06-04 22:31:55 +0200367 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100368
Jens Geyerdce22992020-05-16 23:02:27 +0200369 var actual = await protocol.ReadI32Async(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100370
371 var result = _compareLogic.Compare(expected, actual);
372 Assert.IsTrue(result.AreEqual, result.DifferencesString);
373 }
374 }
375 catch (Exception e)
376 {
377 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
378 }
379 }
380
381 [DataTestMethod]
382 [DataRow(typeof(TBinaryProtocol))]
383 [DataRow(typeof(TCompactProtocol))]
384 [DataRow(typeof(TJsonProtocol))]
385 public async Task WriteReadI64_Test(Type protocolType)
386 {
387 var expected = long.MaxValue;
388
389 try
390 {
391 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100392 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100393 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100394 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100395
Jens Geyerdce22992020-05-16 23:02:27 +0200396 await protocol.WriteI64Async(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100397 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100398
Jens Geyer3e6be732025-06-04 22:31:55 +0200399 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100400
Jens Geyerdce22992020-05-16 23:02:27 +0200401 var actual = await protocol.ReadI64Async(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100402
403 var result = _compareLogic.Compare(expected, actual);
404 Assert.IsTrue(result.AreEqual, result.DifferencesString);
405 }
406 }
407 catch (Exception e)
408 {
409 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
410 }
411 }
412
413 [DataTestMethod]
414 [DataRow(typeof(TBinaryProtocol))]
415 [DataRow(typeof(TCompactProtocol))]
416 [DataRow(typeof(TJsonProtocol))]
417 public async Task WriteReadDouble_Test(Type protocolType)
418 {
419 var expected = double.MaxValue;
420
421 try
422 {
423 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100424 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100425 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100426 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100427
Jens Geyerdce22992020-05-16 23:02:27 +0200428 await protocol.WriteDoubleAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100429 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100430
Jens Geyer3e6be732025-06-04 22:31:55 +0200431 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100432
Jens Geyerdce22992020-05-16 23:02:27 +0200433 var actual = await protocol.ReadDoubleAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100434
435 var result = _compareLogic.Compare(expected, actual);
436 Assert.IsTrue(result.AreEqual, result.DifferencesString);
437 }
438 }
439 catch (Exception e)
440 {
441 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
442 }
443 }
444
445 [DataTestMethod]
446 [DataRow(typeof(TBinaryProtocol))]
447 [DataRow(typeof(TCompactProtocol))]
448 [DataRow(typeof(TJsonProtocol))]
Jens Geyer3e6be732025-06-04 22:31:55 +0200449 public async Task WriteReadUuid_Test(Type protocolType)
450 {
451 var expected = new Guid("{00112233-4455-6677-8899-aabbccddeeff}");
452
453 try
454 {
455 var tuple = GetProtocolInstance(protocolType);
456 using (var stream = tuple.Stream)
457 {
458 var protocol = tuple.Protocol;
459
460 await protocol.WriteUuidAsync(expected, default);
461 await tuple.Transport.FlushAsync(default);
462
463 stream.Seek(0, SeekOrigin.Begin);
464
465 var actual = await protocol.ReadUuidAsync(default);
466
467 var result = _compareLogic.Compare(expected, actual);
468 Assert.IsTrue(result.AreEqual, result.DifferencesString);
469 }
470 }
471 catch (Exception e)
472 {
473 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
474 }
475 }
476
477 [DataTestMethod]
478 [DataRow(typeof(TBinaryProtocol))]
479 [DataRow(typeof(TCompactProtocol))]
480 [DataRow(typeof(TJsonProtocol))]
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100481 public async Task WriteReadString_Test(Type protocolType)
482 {
483 var expected = nameof(String);
484
485 try
486 {
487 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100488 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100489 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100490 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100491
Jens Geyerdce22992020-05-16 23:02:27 +0200492 await protocol.WriteStringAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100493 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100494
Jens Geyer3e6be732025-06-04 22:31:55 +0200495 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100496
Jens Geyerdce22992020-05-16 23:02:27 +0200497 var actual = await protocol.ReadStringAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100498
499 var result = _compareLogic.Compare(expected, actual);
500 Assert.IsTrue(result.AreEqual, result.DifferencesString);
501 }
502 }
503 catch (Exception e)
504 {
505 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
506 }
507 }
508
509 [DataTestMethod]
510 [DataRow(typeof(TBinaryProtocol))]
511 [DataRow(typeof(TCompactProtocol))]
512 [DataRow(typeof(TJsonProtocol))]
513 public async Task WriteReadBinary_Test(Type protocolType)
514 {
515 var expected = Encoding.UTF8.GetBytes(nameof(String));
516
517 try
518 {
519 var tuple = GetProtocolInstance(protocolType);
Jens Geyer7eec2272025-02-12 00:36:44 +0100520 using (var stream = tuple.Stream)
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100521 {
Jens Geyer7eec2272025-02-12 00:36:44 +0100522 var protocol = tuple.Protocol;
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100523
Jens Geyerdce22992020-05-16 23:02:27 +0200524 await protocol.WriteBinaryAsync(expected, default);
Jens Geyer7eec2272025-02-12 00:36:44 +0100525 await tuple.Transport.FlushAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100526
Jens Geyer3e6be732025-06-04 22:31:55 +0200527 stream.Seek(0, SeekOrigin.Begin);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100528
Jens Geyerdce22992020-05-16 23:02:27 +0200529 var actual = await protocol.ReadBinaryAsync(default);
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100530
531 var result = _compareLogic.Compare(expected, actual);
532 Assert.IsTrue(result.AreEqual, result.DifferencesString);
533 }
534 }
535 catch (Exception e)
536 {
537 throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
538 }
539 }
Jens Geyeraa0c8b32019-01-28 23:27:45 +0100540 }
541}