public void FixedKey() { var folder = NewFolder("simple-test"); var valueWritten = 0; var key = new ArraySegment <byte>(new byte[8]); var value = new ArraySegment <byte>(new byte[64]); // 256 bits = 32 bytes var aes = GenerateKey(); using (var appender = CellarWriter.Create(folder, 1000, aes)) { for (int i = 0; i < 30; i++) { using (var ms = new MemoryStream(value.Array)) { appender.Append(key, ms, (int)ms.Length); } valueWritten += value.Count; } appender.Checkpoint("s", 0); } var valuesRead = 0L; CellarReader.Open(folder, aes).ReadAll((_, bytes, stream) => valuesRead += stream.Length); Assert.AreEqual(valueWritten, valuesRead, "values"); }
public void FuzzTest() { var fuzz = NewFolder("eda-test-fuzz"); CellarWriter appender = null; var rand = new Random(); var bytesWritten = 0; var maxIterations = 1000; var maxValueLength = rand.Next(1, 1024 * 128); var valueBuffer = new byte[maxValueLength]; var tailLength = rand.Next(1, maxValueLength * maxIterations / 2); var keyLength = rand.Next(0, 64); if (keyLength % 2 == 1) { // make key 0 (variable) in half of the cases keyLength = -1; } Console.WriteLine("Keylen {0}", keyLength); var keyBuffer = new byte[keyLength == -1 ? ushort.MaxValue : keyLength]; var aes = GenerateKey(); for (int i = 0; i <= maxIterations; i++) { if (rand.Next(17) == 13 || i == maxIterations) { if (appender != null) { appender.Checkpoint("", 0); appender.Dispose(); appender = null; Console.WriteLine("Reopen"); } var bytesRead = 0L; CellarReader.Open(fuzz, aes).ReadAll((_, arg1, stream) => { bytesRead += stream.Length; }); Assert.AreEqual(bytesWritten, bytesRead); } if (appender == null) { appender = CellarWriter.Create(fuzz, tailLength, aes); } rand.NextBytes(valueBuffer); rand.NextBytes(keyBuffer); var valueLength = rand.Next(valueBuffer.Length); ArraySegment <byte> keySegment; if (keyLength == -1) { keySegment = new ArraySegment <byte>(keyBuffer, 0, rand.Next(keyBuffer.Length)); } else { keySegment = new ArraySegment <byte>(keyBuffer, 0, keyLength); } switch (i % 4) { case 0: // write as byte var valueSegment = new ArraySegment <byte>(valueBuffer, 0, valueLength); appender.Append(keySegment, valueSegment); break; case 1: // write as bounded stream using (var ms = new MemoryStream(valueBuffer)) using (var bs = new BoundedStream(ms, valueLength)) { appender.Append(keySegment, bs, valueLength); } break; default: // write as mem stream using (var ms = new MemoryStream(valueBuffer)) appender.Append(keySegment, ms, valueLength); break; } bytesWritten += valueLength; } using (appender) { appender.Checkpoint("", 0); } }