コード例 #1
0
        public void SetIPLocalAddressPreference()
        {
            TestRuntime.AssertXcodeVersion(11, 0);

            foreach (var ipOption in new [] { NWIPLocalAddressPreference.Default, NWIPLocalAddressPreference.Stable, NWIPLocalAddressPreference.Temporary })
            {
#if NET
                using (var options = new NWProtocolTlsOptions())
#else
                using (var options = NWProtocolOptions.CreateTls())
#endif
                    Assert.DoesNotThrow(() => options.IPLocalAddressPreference = ipOption, "Tls");
#if NET
                using (var options = new NWProtocolTcpOptions())
#else
                using (var options = NWProtocolOptions.CreateTcp())
#endif
                    Assert.DoesNotThrow(() => options.IPLocalAddressPreference = ipOption, "Tcp");
#if NET
                using (var options = new NWProtocolUdpOptions())
#else
                using (var options = NWProtocolOptions.CreateUdp())
#endif
                    Assert.DoesNotThrow(() => options.IPLocalAddressPreference = ipOption, "Udp");
            }
        }
コード例 #2
0
 public void CreateTlsTest()
 {
     using (var options = NWProtocolOptions.CreateTls()) {
         var sec = options.TlsProtocolOptions;
         // we cannot test much more :(
         Assert.AreNotEqual(IntPtr.Zero, options.Handle);
     }
 }
コード例 #3
0
 public void SetUp()
 {
     using (var tcpOptions = NWProtocolOptions.CreateTcp())
         using (var tlsOptions = NWProtocolOptions.CreateTls())
             using (var parameters = NWParameters.CreateTcp()) {
                 parameters.ProtocolStack.PrependApplicationProtocol(tlsOptions);
                 parameters.ProtocolStack.PrependApplicationProtocol(tcpOptions);
                 parameters.IncludePeerToPeer = true;
                 listener = NWListener.Create("1234", parameters);
             }
 }
コード例 #4
0
        public void CreateTlsTest()
        {
#if NET
            using (var options = new NWProtocolTlsOptions()) {
                var sec = options.ProtocolOptions;
#else
            using (var options = NWProtocolOptions.CreateTls()) {
                var sec = options.TlsProtocolOptions;
#endif
                // we cannot test much more :(
                Assert.AreNotEqual(IntPtr.Zero, options.Handle);
            }
        }
コード例 #5
0
 public void NewTlsOptions()
 {
     TestRuntime.AssertXcodeVersion(11, 0);
     using (var npo = NWProtocolOptions.CreateTls()) {
         var options = npo.TlsProtocolOptions;
         options.SetTlsMaxVersion(TlsProtocolVersion.Tls12);
         options.SetTlsMinVersion(TlsProtocolVersion.Tls10);
         options.AddTlsCipherSuite(TlsCipherSuite.Aes128GcmSha256);
         options.AddTlsCipherSuiteGroup(TlsCipherSuiteGroup.Legacy);
         using (var dd = DispatchData.FromByteBuffer(new byte [1])) {
             options.SetTlsPreSharedKeyIdentityHint(dd);
         }
     }
 }
コード例 #6
0
        public void Equals()
        {
            TestRuntime.AssertXcodeVersion(11, 0);
            using (var npo = NWProtocolOptions.CreateTls()) {
                var options = npo.TlsProtocolOptions;

                Assert.True(SecProtocolOptions.Equals(null, null), "1");
                Assert.True(SecProtocolOptions.Equals(options, options), "2");
                Assert.False(SecProtocolOptions.Equals(null, options), "3");
                Assert.False(SecProtocolOptions.Equals(options, null), "4");

                Assert.True(options.Equals(options), "5");
                Assert.False(options.Equals(null), "6");
            }
        }
コード例 #7
0
        public void TestStateChangesHandler()
        {
            // In the test we are doing the following:
            //
            // 1. Start a browser. At this point, we have no listeners (unless someone is exposing it in the lab)
            // and therefore the browser cannot find any services/listeners.
            // 2. Start a listener that is using the same type/domain pair that the browser expects.
            // 3. Browser picks up the new listener, and sends an event (service found).
            // 4. Listener stops, and the service disappears.
            // 5. The browser is not yet canceled, so it picks up that the service/listener is not longer then and returns it.
            //
            // The test will block until the different events are set by the callbacks that are executed in a diff thread.

            bool      firstRun      = true;
            bool      eventsDone    = false;
            bool      listeningDone = false;
            Exception ex            = null;
            var       changesEvent  = new AutoResetEvent(false);
            var       browserReady  = new AutoResetEvent(false);
            var       finalEvent    = new AutoResetEvent(false);

            TestRuntime.RunAsync(DateTime.Now.AddSeconds(30), async() => {
                // start the browser, before the listener
                browser.SetStateChangesHandler((st, er) => {
                    Assert.IsNotNull(st, "State");
                    Assert.IsNull(er, "Error");
                    if (st == NWBrowserState.Ready)
                    {
                        browserReady.Set();
                    }
                });
                browser.SetChangesHandler((oldResult, newResult) => {
                    // first time, listener appears, so we do not have an old result, second time
                    // listener goes, so we do not have a new result
                    try {
                        if (firstRun)
                        {
                            Assert.IsNull(oldResult, "oldResult first run.");
                            Assert.IsNotNull(newResult, "newResult first run");
                            firstRun = false;
                        }
                        else
                        {
                            Assert.IsNotNull(oldResult, "oldResult first run.");
                            Assert.IsNull(newResult, "newResult first run");
                        }
                    } catch (Exception e) {
                        ex = e;
                    } finally {
                        changesEvent.Set();
                        eventsDone = true;
                    }
                });
                browser.Start();
                browserReady.WaitOne(30000);
                using (var advertiser = NWAdvertiseDescriptor.CreateBonjourService("MonoTouchFixtures.Network", type))
                    using (var tcpOptions = NWProtocolOptions.CreateTcp())
                        using (var tlsOptions = NWProtocolOptions.CreateTls())
                            using (var paramenters = NWParameters.CreateTcp()) {
                                paramenters.ProtocolStack.PrependApplicationProtocol(tlsOptions);
                                paramenters.ProtocolStack.PrependApplicationProtocol(tcpOptions);
                                paramenters.IncludePeerToPeer = true;
                                using (var listener = NWListener.Create("1234", paramenters)) {
                                    listener.SetQueue(DispatchQueue.CurrentQueue);
                                    listener.SetAdvertiseDescriptor(advertiser);
                                    // we need the connection handler, else we will get an exception
                                    listener.SetNewConnectionHandler((c) => { });
                                    listener.SetStateChangedHandler((s, e) => {
                                        if (e != null)
                                        {
                                            Console.WriteLine($"Got error {e.ErrorCode} {e.ErrorDomain} '{e.CFError.FailureReason}' {e.ToString ()}");
                                        }
                                    });
                                    listener.Start();
                                    changesEvent.WaitOne(30000);
                                    listener.Cancel();
                                    listeningDone = true;
                                    finalEvent.Set();
                                }
                            }
            }, () => eventsDone);

            finalEvent.WaitOne(30000);
            Assert.IsTrue(eventsDone);
            Assert.IsTrue(listeningDone);
            Assert.IsNull(ex, "Exception");
            browser.Cancel();
        }