public void transaction_must_be_specified() { var frame = new BasicFrame("COMMIT"); var client = Substitute.For <IStompClient>(); var sut = new CommitHandler(); Action actual = () => sut.Process(client, frame); actual.ShouldThrow <BadRequestException>(); }
public void succeed_if_transaction_was_specified() { var frame = new BasicFrame("COMMIT"); frame.Headers["transaction"] = "aa"; var client = Substitute.For <IStompClient>(); var sut = new CommitHandler(); sut.Process(client, frame); client.Received().CommitTransaction("aa"); }
public void Run(Replica[] activeReplicas, CancellationToken cancellationToken) { // process messages Task.Factory.StartNew(() => { var signedByPrimaryReplicaAheadBlocksOrTreeHashAndCounterViewNumber = new byte[0]; var encryptedViewKey = string.Empty; var viewChangesCount = new ConcurrentDictionary <int, int>(); var replicaSecrets = new Dictionary <int, byte[]>(2); var block = new int[0]; var replicaSecretShare = string.Empty; var secretHash = default(uint); var childSecretHashes = new Dictionary <int, uint>(); var verifiedChildShareSecrets = new ConcurrentDictionary <int, string>(); var secretShareMessageTokenSources = new Dictionary <int, CancellationTokenSource>(); Log("Running..."); while (cancellationToken.IsCancellationRequested == false) { var message = ReceiveMessage(); if (message == null) { Thread.Sleep(10); continue; } if (Tee.ViewKey == 0) { var newViewMessage = message as NewViewMessage; if (newViewMessage != null) { Log("Received NewViewMessage"); NewViewHandler.Handle( newViewMessage, this, activeReplicas, out signedByPrimaryReplicaAheadBlocksOrTreeHashAndCounterViewNumber, out encryptedViewKey); } var viewChangeMessage = message as ViewChangeMessage; if (viewChangeMessage != null) { Log("Received ViewChangeMessage (SourceReplicaId: {0})", viewChangeMessage.ReplicaId); ViewChangeHandler.Handle( viewChangeMessage, this, activeReplicas, viewChangesCount, signedByPrimaryReplicaAheadBlocksOrTreeHashAndCounterViewNumber, encryptedViewKey); } continue; } var preprocessingMessage = message as PreprocessingMessage; if (preprocessingMessage != null) { Log("Received PreprocessingMessage"); childSecretHashes.Clear(); secretShareMessageTokenSources.Clear(); verifiedChildShareSecrets.Clear(); PreprocessingHandler.Handle(preprocessingMessage, replicaSecrets); } var prepareMessage = message as PrepareMessage; if (prepareMessage != null) { Log("Received PrepareMessage"); PrepareHandler.Handle( prepareMessage, this, replicaSecrets[0], out block, out replicaSecretShare, out childSecretHashes, out secretHash, secretShareMessageTokenSources ); } var secretShareMessage = message as SecretShareMessage; if (secretShareMessage != null) { Log("Received SecretShareMessage (SourceReplicaId: {0})", secretShareMessage.ReplicaId); SecretShareHandler.Handle( secretShareMessage, this, replicaSecretShare, childSecretHashes, secretShareMessageTokenSources, verifiedChildShareSecrets); } var commitMessage = message as CommitMessage; if (commitMessage != null) { Log("Received CommitMessage"); childSecretHashes.Clear(); secretShareMessageTokenSources.Clear(); verifiedChildShareSecrets.Clear(); CommitHandler.Handle( commitMessage, this, secretHash, block, Blockchain, replicaSecrets[1], out replicaSecretShare, out childSecretHashes, secretShareMessageTokenSources); replicaSecrets.Clear(); } } Log("Stopped."); }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Default); }