using System.Reflection; using System.ServiceModel; using AVEVA.Historian.Client.Wcf; using AVEVA.Historian.Client.Wcf.Contracts; namespace AVEVA.Historian.Client.Tests; public sealed class WcfEvidenceTests { [Fact] public void ServiceContractsUseDecompiledNamesAndNamespace() { AssertServiceContract("Hist"); AssertServiceContract("Hist"); AssertServiceContract("Retr"); AssertServiceContract("Retr"); AssertServiceContract("Stat"); AssertServiceContract("Stat"); AssertServiceContract("Storage"); AssertServiceContract("Trx"); } [Fact] public void RelayEvidenceIdentifiesHistorySecurityEndpointNames() { Assert.Equal("HistCert", HistorianWcfServiceNames.HistoryCertificate); Assert.Equal("Hist-Integrated", HistorianWcfServiceNames.HistoryIntegrated); } [Fact] public void KnownOperationAliasesMatchManagedWrapperEvidence() { AssertOperation(nameof(IHistoryServiceContract.GetInterfaceVersion), "GetV"); AssertOperation(nameof(IHistoryServiceContract.OpenConnection), "Open"); AssertOperation(nameof(IHistoryServiceContract.ValidateClient), "VldC"); AssertOperation(nameof(IHistoryServiceContract.UpdateClientStatus), "UpdC"); AssertOperation(nameof(IHistoryServiceContract2.OpenConnection2), "Open2"); AssertOperation(nameof(IHistoryServiceContract2.ExchangeKey), "ExKey"); AssertOperation(nameof(IRetrievalServiceContract2.GetTagInfosFromId), "GetTg"); AssertOperation(nameof(IRetrievalServiceContract3.StartTagQuery), "QTB"); AssertOperation(nameof(IRetrievalServiceContract4.GetTagExtendedPropertiesFromName), "GetTepByNm"); AssertOperation(nameof(IStorageServiceContract.OpenStorageConnection), "Open"); AssertOperation(nameof(IStorageServiceContract.LoadBlocks), "LoadB"); AssertOperation(nameof(ITransactionServiceContract.GetInterfaceVersion), "GetV"); AssertDefaultOperation(nameof(IRetrievalServiceContract.StartQuery)); AssertDefaultOperation(nameof(IRetrievalServiceContract4.StartEventQuery)); AssertDefaultOperation(nameof(IStatusServiceContract.GetServerTime)); AssertDefaultOperation(nameof(IStatusServiceContract2.GetSystemParameter)); AssertOperation(nameof(IStatusServiceContract2.GetHistorianInfo), "GETHI"); AssertOperation(nameof(IStatusServiceContract2.PingServer), "PNGS"); AssertOperation(nameof(IStatusServiceContract2.PingPipe), "PNGP"); } [Fact] public void MdasBindingUsesNetTcpAndCustomContentType() { var binding = HistorianWcfBindingFactory.CreateMdasNetTcpBinding(TimeSpan.FromSeconds(5)); var encoder = binding.CreateBindingElements().Find(); var endpoint = HistorianWcfBindingFactory.CreateEndpointAddress("localhost", HistorianWcfBindingFactory.DefaultPort, HistorianWcfServiceNames.History); Assert.NotNull(encoder); Assert.Equal("net.tcp://localhost:32568/Hist", endpoint.Uri.AbsoluteUri); Assert.Equal(MdasMessageEncoder.MdasContentType, encoder.CreateMessageEncoderFactory().Encoder.ContentType); } [Fact] public void CertificateBindingUsesMdasEncodingOverTransportSecurity() { var binding = HistorianWcfBindingFactory.CreateMdasNetTcpCertificateBinding(TimeSpan.FromSeconds(5)); var elements = binding.CreateBindingElements(); var encoder = elements.Find(); var security = elements.Find(); Assert.NotNull(encoder); Assert.NotNull(security); Assert.Equal(MdasMessageEncoder.MdasContentType, encoder.CreateMessageEncoderFactory().Encoder.ContentType); } private static void AssertServiceContract(string name) { var attribute = typeof(TContract).GetCustomAttribute(); Assert.NotNull(attribute); Assert.Equal(name, attribute.Name); Assert.Equal("aa", attribute.Namespace); } private static void AssertOperation(string methodName, string operationName) { var method = typeof(TContract).GetMethod(methodName); var attribute = method?.GetCustomAttribute(); Assert.NotNull(attribute); Assert.Equal(operationName, attribute.Name); } private static void AssertDefaultOperation(string methodName) { var method = typeof(TContract).GetMethod(methodName); var attribute = method?.GetCustomAttribute(); Assert.NotNull(attribute); Assert.Null(attribute.Name); } }