Beispiel #1
0
        public void TestRemoveChangeListener()
        {
            var statuses         = new List <ReplicatorActivityLevel>();
            var listener         = new MessageEndpointListener(new MessageEndpointListenerConfiguration(_otherDB, ProtocolType.ByteStream));
            var awaiter          = new ListenerAwaiter(listener);
            var serverConnection = new MockServerConnection(listener, ProtocolType.ByteStream);
            var config           = new ReplicatorConfiguration(Db,
                                                               new MessageEndpoint("p2ptest1", serverConnection, ProtocolType.ByteStream,
                                                                                   new MockConnectionFactory(null)))
            {
                Continuous = true
            };
            var token = listener.AddChangeListener((sender, args) =>
            {
                statuses.Add(args.Status.Activity);
            });
            var connection = listener.Connections;

            listener.RemoveChangeListener(token);
            RunReplication(config, 0, 0);
            awaiter.WaitHandle.WaitOne(TimeSpan.FromSeconds(10)).Should().BeTrue();
            awaiter.Validate();

            statuses.Count.Should().Be(0);
        }
Beispiel #2
0
        public void TestP2PChangeListener()
        {
            var statuses         = new List <ReplicatorActivityLevel>();
            var listener         = new MessageEndpointListener(new MessageEndpointListenerConfiguration(_otherDB, ProtocolType.ByteStream));
            var serverConnection = new MockServerConnection(listener, ProtocolType.ByteStream);
            var config           = new ReplicatorConfiguration(Db,
                                                               new MessageEndpoint("p2ptest1", serverConnection, ProtocolType.ByteStream,
                                                                                   new MockConnectionFactory(null)))
            {
                Continuous = true
            };

            listener.AddChangeListener((sender, args) =>
            {
                statuses.Add(args.Status.Activity);
            });

            RunReplication(config, 0, 0);
            statuses.Count(x => x == ReplicatorActivityLevel.Connecting).Should().Be(1);
            statuses.Count(x => x == ReplicatorActivityLevel.Busy).Should().BeGreaterOrEqualTo(1);
            statuses.Any(x => x == ReplicatorActivityLevel.Offline).Should().Be(false);
            statuses.Count(x => x == ReplicatorActivityLevel.Stopped).Should().Be(1);
        }
Beispiel #3
0
//        Exception thrown at 0x00007FFE3090A799 in dotnet.exe: Microsoft C++ exception: EEFileLoadException at memory location 0x000000C288E79D88.
//Exception thrown at 0x00007FFE3090A799 in dotnet.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000000000000000.
        //[Fact] uwp
        public void TestP2PPassiveCloseAll()
        {
            using (var doc = new MutableDocument("test")) {
                doc.SetString("name", "Smokey");
                Db.Save(doc);
            }

            var listener          = new MessageEndpointListener(new MessageEndpointListenerConfiguration(OtherDb, ProtocolType.MessageStream));
            var serverConnection1 = new MockServerConnection(listener, ProtocolType.MessageStream);
            var serverConnection2 = new MockServerConnection(listener, ProtocolType.MessageStream);
            var closeWait1        = new ManualResetEventSlim();
            var closeWait2        = new ManualResetEventSlim();
            var errorLogic        = new ReconnectErrorLogic();
            var config            = new ReplicatorConfiguration(Db,
                                                                new MessageEndpoint("p2ptest1", serverConnection1, ProtocolType.MessageStream,
                                                                                    new MockConnectionFactory(errorLogic)))
            {
                Continuous = true
            };

            var config2 = new ReplicatorConfiguration(Db,
                                                      new MessageEndpoint("p2ptest2", serverConnection2, ProtocolType.MessageStream,
                                                                          new MockConnectionFactory(errorLogic)))
            {
                Continuous = true
            };

            using (var replicator = new Replicator(config))
                using (var replicator2 = new Replicator(config2)) {
                    replicator.Start();
                    replicator2.Start();

                    var count = 0;
                    while (count++ < 15 && replicator.Status.Activity != ReplicatorActivityLevel.Idle &&
                           replicator2.Status.Activity != ReplicatorActivityLevel.Idle)
                    {
                        Thread.Sleep(500);
                        count.Should().BeLessThan(15, "because otherwise the replicator(s) never went idle");
                    }

                    errorLogic.ErrorActive = true;
                    listener.AddChangeListener((sender, args) => {
                        if (args.Status.Activity == ReplicatorActivityLevel.Stopped)
                        {
                            if (args.Connection == serverConnection1)
                            {
                                closeWait1.Set();
                            }
                            else
                            {
                                closeWait2.Set();
                            }
                        }
                    });
                    var connection = listener.Connections;
                    listener.CloseAll();
                    count = 0;
                    while (count++ < 10 && replicator.Status.Activity != ReplicatorActivityLevel.Stopped &&
                           replicator2.Status.Activity != ReplicatorActivityLevel.Stopped)
                    {
                        Thread.Sleep(500);
                        count.Should().BeLessThan(10, "because otherwise the replicator(s) never stopped");
                    }

                    closeWait1.Wait(TimeSpan.FromSeconds(5)).Should()
                    .BeTrue("because otherwise the first listener did not stop");
                    closeWait2.Wait(TimeSpan.FromSeconds(5)).Should()
                    .BeTrue("because otherwise the second listener did not stop");

                    replicator.Status.Error.Should()
                    .NotBeNull("because closing the passive side creates an error on the active one");
                    replicator2.Status.Error.Should()
                    .NotBeNull("because closing the passive side creates an error on the active one");
                }
        }