Beispiel #1
0
        public void StreamDefaults()
        {
            TestRuntime.AssertSystemVersion(PlatformName.MacOSX, 10, 8, throwIfOtherPlatform: false);

            using (var ssl = new SslContext(SslProtocolSide.Client, SslConnectionType.Stream)) {
                Assert.That(ssl.BufferedReadSize, Is.EqualTo((nint)0), "BufferedReadSize");
                Assert.That(ssl.ClientCertificateState, Is.EqualTo(SslClientCertificateState.None), "ClientCertificateState");
                Assert.Null(ssl.Connection, "Connection");
                Assert.That(ssl.DatagramWriteSize, Is.EqualTo((nint)0), "DatagramWriteSize");
                Assert.That(ssl.Handle, Is.Not.EqualTo(IntPtr.Zero), "Handle");
                Assert.That(ssl.MaxDatagramRecordSize, Is.EqualTo((nint)0), "MaxDatagramRecordSize");
                Assert.That(ssl.MaxProtocol, Is.EqualTo(SslProtocol.Tls_1_2), "MaxProtocol");
                if (TestRuntime.CheckXcodeVersion(8, 0))
                {
                    Assert.That(ssl.MinProtocol, Is.EqualTo(SslProtocol.Tls_1_0), "MinProtocol");
                }
                else
                {
                    Assert.That(ssl.MinProtocol, Is.EqualTo(SslProtocol.Ssl_3_0), "MinProtocol");
                }
                Assert.That(ssl.NegotiatedCipher, Is.EqualTo(SslCipherSuite.SSL_NULL_WITH_NULL_NULL), "NegotiatedCipher");
                Assert.That(ssl.NegotiatedProtocol, Is.EqualTo(SslProtocol.Unknown), "NegotiatedProtocol");

                Assert.That(ssl.PeerDomainName, Is.Empty, "PeerDomainName");
                ssl.PeerDomainName = "google.ca";
                Assert.That(ssl.PeerDomainName, Is.EqualTo("google.ca"), "PeerDomainName-2");
                ssl.PeerDomainName = null;
                Assert.That(ssl.PeerDomainName, Is.Empty, "PeerDomainName");

                Assert.Null(ssl.PeerId, "PeerId");
                ssl.PeerId = new byte [] { 0xff };
                Assert.That(ssl.PeerId.Length, Is.EqualTo(1), "1a");

                // note: SSLSetPeerID (see Apple open source code) does not accept a null/zero-length value
                ssl.PeerId = new byte [0];
                Assert.That((int)ssl.GetLastStatus(), Is.EqualTo(errSecParam), "set_PeerId/empty");
                Assert.That(ssl.PeerId.Length, Is.EqualTo(1), "1b");

                ssl.PeerId = new byte [] { 0x01, 0x02 };
                Assert.That(ssl.PeerId.Length, Is.EqualTo(2), "2");

                Assert.Null(ssl.PeerTrust, "PeerTrust");
                Assert.That(ssl.SessionState, Is.EqualTo(SslSessionState.Idle), "SessionState");

                Assert.That((int)ssl.SetDatagramHelloCookie(new byte [32]), Is.EqualTo(-50), "no cookie in stream");

                // Assert.Null (ssl.GetDistinguishedNames<string> (), "GetDistinguishedNames");

                if (TestRuntime.CheckXcodeVersion(9, 0))
                {
                    Assert.That(ssl.SetSessionTickets(false), Is.EqualTo(0), "SetSessionTickets");
                    Assert.That(ssl.SetError(SecStatusCode.Success), Is.EqualTo(0), "SetError");

                    Assert.Throws <ArgumentNullException> (() => ssl.SetOcspResponse(null), "SetOcspResponse/null");
                    using (var data = new NSData())
                        Assert.That(ssl.SetOcspResponse(data), Is.EqualTo(0), "SetOcspResponse/empty");

#if MONOMAC
                    if (TestRuntime.CheckXcodeVersion(9, 3))
                    {
#endif
                    int error;
                    var alpn = ssl.GetAlpnProtocols(out error);
                    Assert.That(alpn, Is.Empty, "alpn");
                    Assert.That(error, Is.EqualTo((int)SecStatusCode.Param), "GetAlpnProtocols");
                    var protocols = new [] { "HTTP/1.1", "SPDY/1" }
                    ;
                    Assert.That(ssl.SetAlpnProtocols(protocols), Is.EqualTo(0), "SetAlpnProtocols");
#if MONOMAC
                }
#endif
                }
            }
        }