Exemplo n.º 1
0
        public void OffsetsResponse(
            [Values(0, 1)] short version,
            [Values("testTopic")] string topicName,
            [Values(1, 10)] int topicsPerRequest,
            [Values(5)] int totalPartitions,
            [Values(
                 ErrorCode.UNKNOWN_TOPIC_OR_PARTITION,
                 ErrorCode.NOT_LEADER_FOR_PARTITION,
                 ErrorCode.UNKNOWN
                 )] ErrorCode errorCode,
            [Values(1, 5)] int offsetsPerPartition)
        {
            var topics = new List <OffsetsResponse.Topic>();

            for (var t = 0; t < topicsPerRequest; t++)
            {
                var partitionId = t % totalPartitions;
                for (var o = 0; o < offsetsPerPartition; o++)
                {
                    topics.Add(new OffsetsResponse.Topic(topicName + t, partitionId, errorCode, _randomizer.Next(-1, int.MaxValue), version >= 1 ? (DateTimeOffset?)DateTimeOffset.UtcNow : null));
                }
            }
            var response = new OffsetsResponse(topics);

            response.AssertCanEncodeDecodeResponse(version);
        }
Exemplo n.º 2
0
        private static bool TryEncodeResponse(IKafkaWriter writer, IRequestContext context, OffsetsResponse response)
        {
            if (response == null)
            {
                return(false);
            }

            var groupedTopics = response.responses.GroupBy(t => t.topic).ToList();

            writer.Write(groupedTopics.Count);
            foreach (var topic in groupedTopics)
            {
                var partitions = topic.ToList();

                writer.Write(topic.Key)
                .Write(partitions.Count);
                foreach (var partition in partitions)
                {
                    writer.Write(partition.partition_id)
                    .Write(partition.error_code);
                    if (context.ApiVersion == 0)
                    {
                        writer.Write(1)
                        .Write(partition.offset);
                    }
                    else
                    {
                        writer.Write(partition.timestamp?.ToUnixTimeMilliseconds() ?? 0L)
                        .Write(partition.offset);
                    }
                }
            }
            return(true);
        }