public void Given_a_sequence_validation_transcoder_When_writen_to_the_transcoding_stream_Then_the_inner_stream_contains_the_previous_identifier_followed_by_the_data_written() { byte[] hashBytes = { 1, 2, 3, 4 }; const string TestText = "Test"; var hash = new Hash(hashBytes); var previousEventHashReader = new PreviousEventHashReader(hash); var sequenceValidationTranscodingStreamFactory = new SequenceValidationTranscodingStreamFactory(previousEventHashReader); using (var innerStream = new MemoryStream()) using (var sequenceValidationTranscodingStream = sequenceValidationTranscodingStreamFactory.CreateTrancodingStream(innerStream)) { var writer = new StreamWriter(sequenceValidationTranscodingStream); writer.Write(TestText); writer.Flush(); sequenceValidationTranscodingStream.Flush(); innerStream.Seek(0, SeekOrigin.Begin); var hashBuffer = new byte[4]; innerStream.Read(hashBuffer, 0, 4); var reader = new StreamReader(innerStream); var actualText = reader.ReadToEnd(); CollectionAssert.AreEqual(hashBytes, hashBuffer); Assert.AreEqual(TestText, actualText); } }
private static ITranscodingStreamFactory ConstructTranscodingStreamFactories() { var hashAlgorithm = SHA256.Create(); var streamHashGenerator = new CryptoStreamHashGenerator(hashAlgorithm); var hashByteCount = streamHashGenerator.GetHashSize(); var previousEventStreamProvider = new DirectoryPreviousEventStreamProvider( EventStorePath, EventFilenameGenerator.DefaultFileExtension); var previousEventHashReader = new PreviousEventStreamHashReader( previousEventStreamProvider, hashByteCount); var sequenceValidationTranscodingStreamFactor = new SequenceValidationTranscodingStreamFactory(previousEventHashReader); var hashChecksumTranscodingStreamFactory = new HashChecksumTranscodingStreamFactory(streamHashGenerator, sequenceValidationTranscodingStreamFactor); return hashChecksumTranscodingStreamFactory; }