コード例 #1
0
        public void TryAppend_should_correctly_assemble_message_from_multiple_record_groups()
        {
            builder.TryAppend("key1", CreateGroupBufferSlice("message1"));
            builder.TryAppend("key2", CreateGroupBufferSlice("message22"));
            builder.TryAppend("key3", CreateGroupBufferSlice("message333"));

            builder.Message.Count.Should().Be(81);

            var reader = new BinaryBufferReader(buffer, 0);

            reader.ReadInt16().Should().Be(1);             // version
            reader.ReadInt32().Should().Be(3);             // groups count

            reader.ReadString().Should().Be("key1");       // routing key
            reader.ReadInt32().Should().Be(1);             // payload count
            reader.ReadString().Should().Be("message1");   // payload message

            reader.ReadString().Should().Be("key2");       // routing key
            reader.ReadInt32().Should().Be(1);             // payload count
            reader.ReadString().Should().Be("message22");  // payload message

            reader.ReadString().Should().Be("key3");       // routing key
            reader.ReadInt32().Should().Be(1);             // payload count
            reader.ReadString().Should().Be("message333"); // payload message
        }
コード例 #2
0
        private static Uri ReadReplica([NotNull] BinaryBufferReader reader)
        {
            var host = reader.ReadString();
            var port = reader.ReadInt32();

            return(new Uri($"http://{host}:{port}"));
        }
コード例 #3
0
        public void Should_produce_a_well_formed_request_body_from_several_snapshots()
        {
            var data1 = Guid.NewGuid().ToByteArray();
            var data2 = Guid.NewGuid().ToByteArray();
            var data3 = Guid.NewGuid().ToByteArray();

            var snapshot1 = Snapshot(data1, 2);
            var snapshot2 = Snapshot(data2, 5);
            var snapshot3 = Snapshot(data3, 1);

            using (var content = factory.CreateContent(new[] { snapshot1, snapshot2, snapshot3 }, out var recordsCount, out var recordsSize))
            {
                var body = content.Value;

                recordsCount.Should().Be(8);
                recordsSize.Should().Be(48);

                var reader = new BinaryBufferReader(body.Buffer, 0)
                {
                    Endianness = Endianness.Big
                };
                reader.ReadInt32().Should().Be(recordsCount);

                body.Buffer.Skip((int)reader.Position).Take((int)(body.Length - reader.Position))
                .ToArray()
                .Should()
                .Equal(data1.Concat(data2).Concat(data3));
            }
        }
コード例 #4
0
ファイル: CompoundDocument.cs プロジェクト: silkfire/LiteCDF
        private static void GetHeaderValues(ref BinaryBufferReader reader,
                                            out int sectorSize,
                                            out int shortSectorSize,
                                            out int satSectorCount,
                                            out int firstSecIdDirectoryStream,
                                            out uint standardStreamSizeThreshold,
                                            out int firstSecIdSsat,
                                            out uint ssatSectorCount,
                                            out int firstSecIdExtendedMsat,
                                            out int msatExtraSectorCount)
        {
            if (!reader.ReadSpan(8).SequenceEqual(HEADER_SIGNATURE))
            {
                throw new CdfException(Errors.HeaderSignatureMissing);
            }

            reader.Position += 22;

            var sectorSizeExponent = reader.ReadUInt16();

            if (sectorSizeExponent < 7)
            {
                throw new CdfException(Errors.SectorSizeTooSmall);
            }
            sectorSize = (int)Math.Pow(2, sectorSizeExponent);

            var shortSectorSizeExponent = reader.ReadUInt16();

            if (shortSectorSizeExponent > sectorSizeExponent)
            {
                throw new CdfException(Errors.ShortSectorSizeGreaterThanStandardSectorSize);
            }
            shortSectorSize = (int)Math.Pow(2, shortSectorSizeExponent);

            reader.Position += 10;

            satSectorCount            = (int)reader.ReadUInt32();
            firstSecIdDirectoryStream = reader.ReadInt32();

            reader.Position += 4;

            standardStreamSizeThreshold = reader.ReadUInt32();
            firstSecIdSsat         = reader.ReadInt32();
            ssatSectorCount        = reader.ReadUInt32();
            firstSecIdExtendedMsat = reader.ReadInt32();
            msatExtraSectorCount   = reader.ReadInt32();
        }
コード例 #5
0
        public void ReadInt32(int input)
        {
            Reset();
            _writer.Write(input);

            var val = _bufferReader.ReadInt32();

            Assert.Equal(input, val);
        }
コード例 #6
0
        public void TrySerialize_should_correctly_serialize_record_given_sufficient_memory()
        {
            serializer.TrySerialize(item, itemSerializer, timestamp, buffer).Should().BeTrue();

            var reader = new BinaryBufferReader(buffer.InternalBuffer, 0);

            reader.ReadInt64().Should().Be(timestamp.ToUniversalTime().ToUnixTimeMilliseconds());
            reader.ReadInt32().Should().Be(10);
            reader.ReadString().Should().Be(item);
        }
コード例 #7
0
        public void Resize_performed_right_after_manual_position_change_should_not_lose_recent_data()
        {
            var writer = new BinaryBufferWriter(8);

            writer.Write(1);

            BitConverter.GetBytes(2).CopyTo(writer.Buffer, 4);

            writer.Position += 4;

            writer.EnsureCapacity(100);

            writer.Position.Should().Be(8);
            writer.Length.Should().Be(8);

            var reader = new BinaryBufferReader(writer.Buffer, 0);

            reader.ReadInt32().Should().Be(1);
            reader.ReadInt32().Should().Be(2);
        }
コード例 #8
0
        public static ReplicaWeights Deserialize([NotNull] byte[] data)
        {
            var reader = new BinaryBufferReader(data, 0);

            var count = reader.ReadInt32();

            var weights = new ReplicaWeights(count);

            for (var i = 0; i < count; i++)
            {
                var replica = ReadReplica(reader);
                var weight  = ReadWeight(reader);

                weights[replica] = weight;
            }

            return(weights);
        }
コード例 #9
0
        public static EnvironmentInfo Deserialize([NotNull] string environment, [CanBeNull] byte[] data)
        {
            if (data == null || data.Length == 0)
            {
                return(new EnvironmentInfo(environment, null, null));
            }

            var reader = new BinaryBufferReader(data, 0);

            var version = reader.ReadInt32();

            var parentEnvironment = reader.ReadNullable(r => r.ReadString());
            var properties        = version >= WithPropertiesVersion
                ? DeserializeProperties(reader)
                : null;

            return(new EnvironmentInfo(environment, parentEnvironment, properties));
        }
コード例 #10
0
ファイル: CompoundDocument.cs プロジェクト: silkfire/LiteCDF
        private static int[] BuildSatSecIdChain(BinaryBufferReader reader, int msatExtraSectorCount, int firstSecIdExtendedMsat, int satSectorCount, int sectorSize, int secIdsPerSector)
        {
#if DEBUG
            var msat = new int[1 + msatExtraSectorCount + 1];
            var sat  = new int[satSectorCount + 1];
            msat[0] = SECID_MSAT;
#else
            var sat = new int[satSectorCount];
#endif
            var firstPartMsatSatSectorCount = Math.Min(satSectorCount, HEADER_MSAT_SAT_SECID_COUNT);


            var remainder = firstPartMsatSatSectorCount % 4;

            for (var i = 0; i < remainder; i++)
            {
                sat[i] = reader.ReadInt32();
            }

            if (firstPartMsatSatSectorCount >= 4)
            {
                var remainingSecIdCount = firstPartMsatSatSectorCount - remainder;

                for (var i = 0; i < remainingSecIdCount; i += 4)
                {
                    sat[remainder + i]     = reader.ReadInt32();
                    sat[remainder + i + 1] = reader.ReadInt32();
                    sat[remainder + i + 2] = reader.ReadInt32();
                    sat[remainder + i + 3] = reader.ReadInt32();
                }
            }


            if (firstPartMsatSatSectorCount < satSectorCount)
            {
                var satSectorIndex = (int)HEADER_MSAT_SAT_SECID_COUNT;
                var remainingMsatSatSectorCount = satSectorCount - HEADER_MSAT_SAT_SECID_COUNT;
                var currentSecIdMsat            = firstSecIdExtendedMsat;
                var currentSectorPosMsat        = HEADER_SIZE + currentSecIdMsat * sectorSize;

                for (var i = 0; i < msatExtraSectorCount; i++)
                {
#if DEBUG
                    msat[i + 1] = currentSecIdMsat;
#endif
                    reader.Position = currentSectorPosMsat;

                    var remainingSecIdsInCurrentSector = Math.Min(remainingMsatSatSectorCount, secIdsPerSector - 1);


                    remainder = remainingSecIdsInCurrentSector % 4;

                    for (var j = 0; j < remainder; j++)
                    {
                        sat[satSectorIndex++] = reader.ReadInt32();
                        remainingMsatSatSectorCount--;
                    }

                    if (remainingSecIdsInCurrentSector >= 4)
                    {
                        var remainingSecIdCount = remainingSecIdsInCurrentSector - remainder;

                        for (var j = 0; j < remainingSecIdCount; j += 4)
                        {
                            sat[satSectorIndex]     = reader.ReadInt32();
                            sat[satSectorIndex + 1] = reader.ReadInt32();
                            sat[satSectorIndex + 2] = reader.ReadInt32();
                            sat[satSectorIndex + 3] = reader.ReadInt32();

                            remainingMsatSatSectorCount -= 4;
                            satSectorIndex += 4;
                        }
                    }

                    if (remainingMsatSatSectorCount > 0)
                    {
                        currentSecIdMsat     = reader.ReadInt32();
                        currentSectorPosMsat = HEADER_SIZE + currentSecIdMsat * sectorSize;
                    }
#if DEBUG
                    else
                    {
                        msat[1 + i + 1]     = SECID_END_OF_CHAIN;
                        sat[satSectorIndex] = SECID_END_OF_CHAIN;
                    }
#endif
                }
            }
#if DEBUG
            else
            {
                msat[^ 1] = SECID_END_OF_CHAIN;