public void GetAttributes_InteropFails_ShouldThrowSapException()
        {
            // Arrange
            RfcAttributes rfcAttributes = Fixture.Create <RfcAttributes>();
            RfcErrorInfo  errorInfo;

            _interopMock
            .Setup(x => x.GetConnectionAttributes(RfcConnectionHandle, out rfcAttributes, out errorInfo))
            .Returns(RfcResultCode.RFC_NOT_FOUND);
            var serverConnection = new SapServerConnection(_interopMock.Object, RfcConnectionHandle);

            // Act
            Action action = () => serverConnection.GetAttributes();

            // Assert
            action.Should().Throw <SapException>();
        }
        public void GetAttributes_GettingTheAttributesFails_ShouldThrowException()
        {
            // Arrange
            RfcAttributes rfcAttributes = Fixture.Create <RfcAttributes>();
            RfcErrorInfo  errorInfo;

            _interopMock
            .Setup(x => x.GetConnectionAttributes(It.IsAny <IntPtr>(), out rfcAttributes, out errorInfo))
            .Returns(RfcResultCode.RFC_CLOSED);
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            // Act
            Action action = () => connection.GetAttributes();

            // Assert
            action.Should().Throw <SapException>()
            .WithMessage("SAP RFC Error: RFC_CLOSED");
        }
        public void GetAttributes_InteropSucceeds_ShouldReturnAttributesFromInterop()
        {
            // Arrange
            RfcAttributes rfcAttributes = Fixture.Create <RfcAttributes>();
            RfcErrorInfo  errorInfo;

            _interopMock
            .Setup(x => x.GetConnectionAttributes(RfcConnectionHandle, out rfcAttributes, out errorInfo))
            .Returns(RfcResultCode.RFC_OK);
            var serverConnection = new SapServerConnection(_interopMock.Object, RfcConnectionHandle);

            // Act
            SapAttributes sapAttributes = serverConnection.GetAttributes();

            // Assert
            sapAttributes.Should().BeEquivalentTo(rfcAttributes, ctx => ctx
                                                  .ComparingByMembers <RfcAttributes>()
                                                  .ComparingByMembers <SapAttributes>()
                                                  .ExcludingMissingMembers());
        }
        public void GetAttributes_GettingConnectionAttributesSucceeds_ShouldReturnConnectionAttributes()
        {
            // Arrange
            RfcAttributes rfcAttributes = Fixture.Create <RfcAttributes>();

            rfcAttributes.Reserved = null;
            RfcErrorInfo errorInfo;

            _interopMock
            .Setup(x => x.GetConnectionAttributes(It.IsAny <IntPtr>(), out rfcAttributes, out errorInfo))
            .Returns(RfcResultCode.RFC_OK);
            var connection = new SapConnection(_interopMock.Object, new SapConnectionParameters());

            // Act
            SapAttributes attributes = connection.GetAttributes();

            // Assert
            attributes.Should().NotBeNull();
            attributes.Should().BeEquivalentTo(rfcAttributes, config => config
                                               .ComparingByMembers <RfcAttributes>()
                                               .ComparingByMembers <SapAttributes>()
                                               .ExcludingMissingMembers());
        }
Beispiel #5
0
 internal SapAttributes(RfcAttributes attributes)
 {
     _attributes = attributes;
 }
 public static extern RfcRc RfcGetConnectionAttributes(IntPtr rfcHandle, out RfcAttributes attributes, out RfcErrorInfo errorInfo);
 internal SapConnectionAttributes(RfcAttributes attributes)
 {
     _attributes = attributes;
 }
Beispiel #8
0
        private static RfcResultCode HandleGenericMetadata(RfcInterop interop, SapConnectionParameters parameters, string functionName, RfcAttributes attributes, out IntPtr funcDescHandle)
        {
            RfcConnectionParameter[] interopParameters = parameters.ToInterop();

            IntPtr connection = interop.OpenConnection(
                connectionParams: interopParameters,
                paramCount: (uint)interopParameters.Length,
                errorInfo: out RfcErrorInfo connectionErrorInfo);

            if (connectionErrorInfo.Code != RfcResultCode.RFC_OK)
            {
                funcDescHandle = IntPtr.Zero;
                return(connectionErrorInfo.Code);
            }

            funcDescHandle = interop.GetFunctionDesc(
                rfcHandle: connection,
                funcName: functionName,
                errorInfo: out RfcErrorInfo errorInfo);

            RfcResultCode resultCode = interop.CloseConnection(
                rfcHandle: connection,
                errorInfo: out RfcErrorInfo closeErrorInfo);

            return(errorInfo.Code);
        }