Beispiel #1
0
        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");
        }
Beispiel #2
0
        public static CellarWriter Create(string folder, int maxBufferSize, byte[] key)
        {
            var c = new CellarWriter(folder, maxBufferSize, key);

            c.Open();
            return(c);
        }
Beispiel #3
0
        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);
            }
        }