public void OffsetFetchResponse( [Values("test", "a really long name, with spaces and punctuation!")] string topicName, [Values(1, 10)] int topicsPerRequest, [Values(1, 5)] int partitionsPerTopic, [Values( ErrorResponseCode.None, ErrorResponseCode.UnknownTopicOrPartition, ErrorResponseCode.GroupLoadInProgress, ErrorResponseCode.NotCoordinatorForGroup, ErrorResponseCode.IllegalGeneration, ErrorResponseCode.UnknownMemberId, ErrorResponseCode.TopicAuthorizationFailed, ErrorResponseCode.GroupAuthorizationFailed )] ErrorResponseCode errorCode) { var topics = new List <OffsetFetchResponse.Topic>(); for (var t = 0; t < topicsPerRequest; t++) { for (var partitionId = 0; partitionId < partitionsPerTopic; partitionId++) { var offset = (long)_randomizer.Next(int.MinValue, int.MaxValue); topics.Add(new OffsetFetchResponse.Topic(topicName + t, partitionId, errorCode, offset, offset >= 0 ? topicName : string.Empty)); } } var response = new OffsetFetchResponse(topics); response.AssertCanEncodeDecodeResponse(0); }
public void OffsetFetchResponse( [Values("testTopic")] string topicName, [Values(1, 10)] int topicsPerRequest, [Values(1, 5)] int partitionsPerTopic, [Values( ErrorCode.NONE, ErrorCode.UNKNOWN_TOPIC_OR_PARTITION, ErrorCode.GROUP_LOAD_IN_PROGRESS, ErrorCode.NOT_COORDINATOR_FOR_GROUP, ErrorCode.ILLEGAL_GENERATION, ErrorCode.UNKNOWN_MEMBER_ID, ErrorCode.TOPIC_AUTHORIZATION_FAILED, ErrorCode.GROUP_AUTHORIZATION_FAILED )] ErrorCode errorCode) { var topics = new List <OffsetFetchResponse.Topic>(); for (var t = 0; t < topicsPerRequest; t++) { for (var partitionId = 0; partitionId < partitionsPerTopic; partitionId++) { var offset = (long)_randomizer.Next(int.MinValue, int.MaxValue); topics.Add(new OffsetFetchResponse.Topic(topicName + t, partitionId, errorCode, offset, offset >= 0 ? topicName : string.Empty)); } } var response = new OffsetFetchResponse(topics); response.AssertCanEncodeDecodeResponse(0); }
public void OffsetFetchResponse() { var response1 = new OffsetFetchResponse { TopicPartitions = new[] { new OffsetFetchResponseTopicPartition { TopicName = Guid.NewGuid().ToString(), Details = new [] { new OffsetFetchResponseTopicPartitionDetail { Partition = _random.Next(), Metadata = Guid.NewGuid().ToString(), Offset = (Int64)_random.Next(), } } } } }; Stream binary1 = new MemoryStream(); response1.Serialize(binary1); binary1.Seek(0L, SeekOrigin.Begin); var response2 = new OffsetFetchResponse(); response2.Deserialize(binary1); var compareLogic = new CompareLogic(); var result = compareLogic.Compare(response1, response2); Assert.True(result.AreEqual); Stream binary2 = new MemoryStream(); response2.Serialize(binary2); Assert.Equal(binary1.Length, binary2.Length); using (var stream1 = new MemoryStream()) using (var stream2 = new MemoryStream()) { binary1.Seek(0L, SeekOrigin.Begin); binary1.CopyTo(stream1); binary2.Seek(0L, SeekOrigin.Begin); binary2.CopyTo(stream2); Assert.Equal(stream1.Length, stream2.Length); stream1.Seek(0L, SeekOrigin.Begin); var bytes1 = stream1.ToArray(); stream2.Seek(0L, SeekOrigin.Begin); var bytes2 = stream2.ToArray(); Assert.Equal(bytes1.Length, bytes2.Length); for (int i = 0; i < bytes1.Length; i++) { Assert.Equal(bytes1[i], bytes2[i]); } } }
private static bool TryEncodeResponse(IKafkaWriter writer, IRequestContext context, OffsetFetchResponse 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); // partitionsPerTopic foreach (var partition in partitions) { writer.Write(partition.partition_id) .Write(partition.offset) .Write(partition.metadata) .Write(partition.error_code); } } return(true); }