private URLEndpointListener Listen(URLEndpointListenerConfiguration config, int expectedErrCode = 0, CouchbaseLiteErrorType expectedErrDomain = 0) { _listener?.Stop(); _listener = new URLEndpointListener(config); _listener.Port.Should().Be(0, "Listener's port should be 0 because the listener has not yet started."); _listener.Urls.Count.Should().Be(0, "Listener's Urls count should be 0 because the listener has not yet started."); _listener.TlsIdentity.Should().BeNull("Listener's TlsIdentity should be null because the listener has not yet started."); _listener.Status.ConnectionCount.Should().Be(0, "Listener's connection count should be 0 because the listener has not yet started."); _listener.Status.ActiveConnectionCount.Should().Be(0, "Listener's active connection count should be 0 because the listener has not yet started."); try { _listener.Start(); } catch (CouchbaseLiteException e) { if (expectedErrCode == 0) { throw; } e.Domain.Should().Be(expectedErrDomain); e.Error.Should().Be(expectedErrCode); } catch (CouchbaseNetworkException ne) { if (expectedErrCode == 0) { throw; } ne.Domain.Should().Be(expectedErrDomain); ne.Error.Should().Be(expectedErrCode); } return(_listener); }
private void RunReplication(ReplicatorConfiguration config, int expectedErrCode, CouchbaseLiteErrorType expectedErrDomain, bool reset = false) { Misc.SafeSwap(ref _repl, new Replicator(config)); _waitAssert = new WaitAssert(); var token = _repl.AddChangeListener((sender, args) => { _waitAssert.RunConditionalAssert(() => { VerifyChange(args, expectedErrCode, expectedErrDomain); if (config.Continuous && args.Status.Activity == ReplicatorActivityLevel.Idle && args.Status.Progress.Completed == args.Status.Progress.Total) { ((Replicator)sender).Stop(); } return(args.Status.Activity == ReplicatorActivityLevel.Stopped); }); }); if (reset) { _repl.ResetCheckpoint(); } _repl.Start(); try { _waitAssert.WaitForResult(TimeSpan.FromSeconds(10)); } catch { _repl.Stop(); throw; } finally { _repl.RemoveChangeListener(token); } }
private void VerifyChange(ReplicatorStatusChangedEventArgs change, int errorCode, CouchbaseLiteErrorType domain) { var s = change.Status; WriteLine($"---Status: {s.Activity} ({s.Progress.Completed} / {s.Progress.Total}), lastError = {s.Error}"); if (s.Activity == ReplicatorActivityLevel.Stopped) { if (errorCode != 0) { s.Error.Should().NotBeNull(); s.Error.Should().BeAssignableTo <CouchbaseException>(); var error = s.Error.As <CouchbaseException>(); error.Error.Should().Be(errorCode); if ((int)domain != 0) { error.Domain.As <CouchbaseLiteErrorType>().Should().Be(domain); } } else { s.Error.Should().BeNull("because otherwise an unexpected error occurred"); } } }