public void CanSendTimeoutNow() { using (var node2Transport = new HttpTransport("node2", _requestsTimeout, CancellationToken.None)) { var node1 = new NodeConnectionInfo { Name = "node1", Uri = new Uri("http://localhost:9079") }; node2Transport.Send(node1, new AppendEntriesRequest { From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), Term = 2, PrevLogIndex = 0, PrevLogTerm = 0, LeaderCommit = 1, Entries = new[] { new LogEntry { Term = 2, Index = 1, Data = new JsonCommandSerializer().Serialize(new DictionaryCommand.Set { Key = "a", Value = 2 }) }, } }); MessageContext context; var gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); Assert.True(((AppendEntriesResponse)context.Message).Success); var mres = new ManualResetEventSlim(); _raftEngine.StateChanged += state => { if (state == RaftEngineState.CandidateByRequest) { mres.Set(); } }; node2Transport.Send(node1, new TimeoutNowRequest { Term = 4, From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), }); gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); Assert.True(context.Message is NothingToDo); Assert.True(mres.Wait(_timeout)); } }
public void CanSendRequestVotesAndGetReply() { using (var node2Transport = new HttpTransport("node2", _requestsTimeout, CancellationToken.None)) { var node1 = new NodeConnectionInfo { Name = "node1", Uri = new Uri("http://localhost:9079") }; node2Transport.Send(node1, new RequestVoteRequest { TrialOnly = true, From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), Term = 3, LastLogIndex = 2, LastLogTerm = 2, }); MessageContext context; var gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); Assert.True(context.Message is RequestVoteResponse); } }
public void CanAskIfCanInstallSnapshot() { using (var node2Transport = new HttpTransport("node2", _requestsTimeout, CancellationToken.None)) { var node1 = new NodeConnectionInfo { Name = "node1", Uri = new Uri("http://localhost:9079") }; node2Transport.Send(node1, new CanInstallSnapshotRequest { From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), Term = 2, Index = 3, }); MessageContext context; var gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); var msg = (CanInstallSnapshotResponse)context.Message; Assert.True(msg.Success); } }
public void Should_pass_on_xml() { XDocument document = new XDocument(new XElement("TEST")); with_listener( at: "http://localhost:56123/listener/error/", that_returns: 500, with_body: new XDocument(document), ensure: (transport, request) => { transport .Send(document) .Success .ShouldBeFalse(); request .Result .ShouldEqual(expected_string_representation_of(document)); } ); }
public async Task WhenCallSend_ThenCallSendWithoutAnyChanges() { var transportClient = new Mock <ITransportClient <string> >(); var target = new HttpTransport(transportClient.Object); var payload = _fixture.Create <string>(); await target.Send(payload); transportClient.Verify(c => c.Send(payload), Times.Once); }
public void CanInstallSnapshot() { using (var node2Transport = new HttpTransport("node2", _requestsTimeout, CancellationToken.None)) { var node1 = new NodeConnectionInfo { Name = "node1", Uri = new Uri("http://localhost:9079") }; node2Transport.Send(node1, new CanInstallSnapshotRequest { From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), Term = 2, Index = 3, }); MessageContext context; var gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); Assert.True(context.Message is CanInstallSnapshotResponse); node2Transport.Stream(node1, new InstallSnapshotRequest { From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), Term = 2, Topology = new Topology(new Guid("355a589b-cadc-463d-a515-5add2ea47205")), LastIncludedIndex = 2, LastIncludedTerm = 2, }, stream => { var streamWriter = new StreamWriter(stream); var data = new Dictionary <string, int> { { "a", 2 } }; new JsonSerializer().Serialize(streamWriter, data); streamWriter.Flush(); }); gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); var appendEntriesResponse = (InstallSnapshotResponse)context.Message; Assert.True(appendEntriesResponse.Success); Assert.Equal(2, ((DictionaryStateMachine)_raftEngine.StateMachine).Data["a"]); } }
public void CanSendEntries() { using (var node2Transport = new HttpTransport("node2", _requestsTimeout, CancellationToken.None)) { var node1 = new NodeConnectionInfo { Name = "node1", Uri = new Uri("http://localhost:9079") }; node2Transport.Send(node1, new AppendEntriesRequest { From = "node2", ClusterTopologyId = new Guid("355a589b-cadc-463d-a515-5add2ea47205"), Term = 2, PrevLogIndex = 0, PrevLogTerm = 0, LeaderCommit = 1, Entries = new LogEntry[] { new LogEntry { Term = 2, Index = 1, Data = new JsonCommandSerializer().Serialize(new DictionaryCommand.Set { Key = "a", Value = 2 }) }, } }); MessageContext context; var gotIt = node2Transport.TryReceiveMessage(_timeout, CancellationToken.None, out context); Assert.True(gotIt); var appendEntriesResponse = (AppendEntriesResponse)context.Message; Assert.True(appendEntriesResponse.Success); Assert.Equal(2, ((DictionaryStateMachine)_raftEngine.StateMachine).Data["a"]); } }