+++ /dev/null
-// Licensed to the Apache Software Foundation(ASF) under one
-// or more contributor license agreements.See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-using System;
-using System.IO;
-using System.Text;
-using System.Threading.Tasks;
-using KellermanSoftware.CompareNetObjects;
-using Microsoft.VisualStudio.TestTools.UnitTesting;
-using Thrift.Protocol;
-using Thrift.Protocol.Entities;
-using Thrift.Transport.Client;
-
-namespace Thrift.IntegrationTests.Protocols
-{
- [TestClass]
- public class ProtocolsOperationsTests
- {
- private readonly CompareLogic _compareLogic = new CompareLogic();
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol), TMessageType.Call)]
- [DataRow(typeof(TBinaryProtocol), TMessageType.Exception)]
- [DataRow(typeof(TBinaryProtocol), TMessageType.Oneway)]
- [DataRow(typeof(TBinaryProtocol), TMessageType.Reply)]
- [DataRow(typeof(TCompactProtocol), TMessageType.Call)]
- [DataRow(typeof(TCompactProtocol), TMessageType.Exception)]
- [DataRow(typeof(TCompactProtocol), TMessageType.Oneway)]
- [DataRow(typeof(TCompactProtocol), TMessageType.Reply)]
- [DataRow(typeof(TJsonProtocol), TMessageType.Call)]
- [DataRow(typeof(TJsonProtocol), TMessageType.Exception)]
- [DataRow(typeof(TJsonProtocol), TMessageType.Oneway)]
- [DataRow(typeof(TJsonProtocol), TMessageType.Reply)]
- public async Task WriteReadMessage_Test(Type protocolType, TMessageType messageType)
- {
- var expected = new TMessage(nameof(TMessage), messageType, 1);
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteMessageBeginAsync(expected);
- await protocol.WriteMessageEndAsync();
-
- stream.Seek(0, SeekOrigin.Begin);
-
- var actualMessage = await protocol.ReadMessageBeginAsync();
- await protocol.ReadMessageEndAsync();
-
- var result = _compareLogic.Compare(expected, actualMessage);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- [ExpectedException(typeof(Exception))]
- public async Task WriteReadStruct_Test(Type protocolType)
- {
- var expected = new TStruct(nameof(TStruct));
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteStructBeginAsync(expected);
- await protocol.WriteStructEndAsync();
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadStructBeginAsync();
- await protocol.ReadStructEndAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
-
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- [ExpectedException(typeof(Exception))]
- public async Task WriteReadField_Test(Type protocolType)
- {
- var expected = new TField(nameof(TField), TType.String, 1);
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteFieldBeginAsync(expected);
- await protocol.WriteFieldEndAsync();
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadFieldBeginAsync();
- await protocol.ReadFieldEndAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadMap_Test(Type protocolType)
- {
- var expected = new TMap(TType.String, TType.String, 1);
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteMapBeginAsync(expected);
- await protocol.WriteMapEndAsync();
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadMapBeginAsync();
- await protocol.ReadMapEndAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
-
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadList_Test(Type protocolType)
- {
- var expected = new TList(TType.String, 1);
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteListBeginAsync(expected);
- await protocol.WriteListEndAsync();
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadListBeginAsync();
- await protocol.ReadListEndAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadSet_Test(Type protocolType)
- {
- var expected = new TSet(TType.String, 1);
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteSetBeginAsync(expected);
- await protocol.WriteSetEndAsync();
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadSetBeginAsync();
- await protocol.ReadSetEndAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadBool_Test(Type protocolType)
- {
- var expected = true;
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteBoolAsync(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadBoolAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadByte_Test(Type protocolType)
- {
- var expected = sbyte.MaxValue;
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteByteAsync(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadByteAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadI16_Test(Type protocolType)
- {
- var expected = short.MaxValue;
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteI16Async(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadI16Async();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadI32_Test(Type protocolType)
- {
- var expected = int.MaxValue;
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteI32Async(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadI32Async();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadI64_Test(Type protocolType)
- {
- var expected = long.MaxValue;
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteI64Async(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadI64Async();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadDouble_Test(Type protocolType)
- {
- var expected = double.MaxValue;
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteDoubleAsync(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadDoubleAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadString_Test(Type protocolType)
- {
- var expected = nameof(String);
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteStringAsync(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadStringAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- [DataTestMethod]
- [DataRow(typeof(TBinaryProtocol))]
- [DataRow(typeof(TCompactProtocol))]
- [DataRow(typeof(TJsonProtocol))]
- public async Task WriteReadBinary_Test(Type protocolType)
- {
- var expected = Encoding.UTF8.GetBytes(nameof(String));
-
- try
- {
- var tuple = GetProtocolInstance(protocolType);
- using (var stream = tuple.Item1)
- {
- var protocol = tuple.Item2;
-
- await protocol.WriteBinaryAsync(expected);
-
- stream?.Seek(0, SeekOrigin.Begin);
-
- var actual = await protocol.ReadBinaryAsync();
-
- var result = _compareLogic.Compare(expected, actual);
- Assert.IsTrue(result.AreEqual, result.DifferencesString);
- }
- }
- catch (Exception e)
- {
- throw new Exception($"Exception during testing of protocol: {protocolType.FullName}", e);
- }
- }
-
- private static Tuple<Stream, TProtocol> GetProtocolInstance(Type protocolType)
- {
- var memoryStream = new MemoryStream();
- var streamClientTransport = new TStreamTransport(memoryStream, memoryStream);
- var protocol = (TProtocol) Activator.CreateInstance(protocolType, streamClientTransport);
- return new Tuple<Stream, TProtocol>(memoryStream, protocol);
- }
- }
-}