1717package org .apache .kafka .common .requests ;
1818
1919import org .apache .kafka .common .message .TxnOffsetCommitResponseData ;
20+ import org .apache .kafka .common .message .TxnOffsetCommitResponseData .TxnOffsetCommitResponsePartition ;
21+ import org .apache .kafka .common .message .TxnOffsetCommitResponseData .TxnOffsetCommitResponseTopic ;
2022import org .apache .kafka .common .protocol .ApiKeys ;
2123import org .apache .kafka .common .protocol .MessageUtil ;
2224
2325import org .junit .jupiter .api .Test ;
2426
25- import java .util .Arrays ;
26- import java .util .Collections ;
27+ import java .util .List ;
2728
2829import static org .junit .jupiter .api .Assertions .assertEquals ;
30+ import static org .junit .jupiter .api .Assertions .assertThrows ;
2931
3032public class TxnOffsetCommitResponseTest extends OffsetCommitResponseTest {
3133
@@ -44,16 +46,15 @@ public void testConstructorWithErrorResponse() {
4446 public void testParse () {
4547 TxnOffsetCommitResponseData data = new TxnOffsetCommitResponseData ()
4648 .setThrottleTimeMs (throttleTimeMs )
47- .setTopics (Arrays . asList (
48- new TxnOffsetCommitResponseData . TxnOffsetCommitResponseTopic ().setPartitions (
49- Collections . singletonList ( new TxnOffsetCommitResponseData . TxnOffsetCommitResponsePartition ()
49+ .setTopics (List . of (
50+ new TxnOffsetCommitResponseTopic ().setPartitions ( List . of (
51+ new TxnOffsetCommitResponsePartition ()
5052 .setPartitionIndex (partitionOne )
5153 .setErrorCode (errorOne .code ()))),
52- new TxnOffsetCommitResponseData .TxnOffsetCommitResponseTopic ().setPartitions (
53- Collections .singletonList (new TxnOffsetCommitResponseData .TxnOffsetCommitResponsePartition ()
54- .setPartitionIndex (partitionTwo )
55- .setErrorCode (errorTwo .code ())))
56- ));
54+ new TxnOffsetCommitResponseTopic ().setPartitions (List .of (
55+ new TxnOffsetCommitResponsePartition ()
56+ .setPartitionIndex (partitionTwo )
57+ .setErrorCode (errorTwo .code ())))));
5758
5859 for (short version : ApiKeys .TXN_OFFSET_COMMIT .allVersions ()) {
5960 TxnOffsetCommitResponse response = TxnOffsetCommitResponse .parse (
@@ -64,4 +65,138 @@ public void testParse() {
6465 }
6566 }
6667
68+ @ Test
69+ public void testBuilderAddPartition () {
70+ TxnOffsetCommitResponse .Builder builder = TxnOffsetCommitResponse .newBuilder ();
71+ builder .addPartition (topicOne , partitionOne , errorOne );
72+ builder .addPartition (topicOne , partitionTwo , errorTwo );
73+ builder .addPartition (topicTwo , partitionOne , errorOne );
74+
75+ TxnOffsetCommitResponseData expected = new TxnOffsetCommitResponseData ()
76+ .setTopics (List .of (
77+ new TxnOffsetCommitResponseTopic ()
78+ .setName (topicOne )
79+ .setPartitions (List .of (
80+ new TxnOffsetCommitResponsePartition ()
81+ .setPartitionIndex (partitionOne )
82+ .setErrorCode (errorOne .code ()),
83+ new TxnOffsetCommitResponsePartition ()
84+ .setPartitionIndex (partitionTwo )
85+ .setErrorCode (errorTwo .code ()))),
86+ new TxnOffsetCommitResponseTopic ()
87+ .setName (topicTwo )
88+ .setPartitions (List .of (
89+ new TxnOffsetCommitResponsePartition ()
90+ .setPartitionIndex (partitionOne )
91+ .setErrorCode (errorOne .code ())))));
92+
93+ assertEquals (expected , builder .build ().data ());
94+ }
95+
96+ @ Test
97+ public void testBuilderAddPartitions () {
98+ TxnOffsetCommitResponse .Builder builder = TxnOffsetCommitResponse .newBuilder ();
99+ builder .addPartitions (topicOne , List .of (partitionOne , partitionTwo ), p -> p , errorOne );
100+
101+ TxnOffsetCommitResponseData expected = new TxnOffsetCommitResponseData ()
102+ .setTopics (List .of (
103+ new TxnOffsetCommitResponseTopic ()
104+ .setName (topicOne )
105+ .setPartitions (List .of (
106+ new TxnOffsetCommitResponsePartition ()
107+ .setPartitionIndex (partitionOne )
108+ .setErrorCode (errorOne .code ()),
109+ new TxnOffsetCommitResponsePartition ()
110+ .setPartitionIndex (partitionTwo )
111+ .setErrorCode (errorOne .code ())))));
112+
113+ assertEquals (expected , builder .build ().data ());
114+ }
115+
116+ @ Test
117+ public void testBuilderMergeIntoEmpty () {
118+ TxnOffsetCommitResponseData newData = new TxnOffsetCommitResponseData ()
119+ .setTopics (List .of (
120+ new TxnOffsetCommitResponseTopic ()
121+ .setName (topicOne )
122+ .setPartitions (List .of (
123+ new TxnOffsetCommitResponsePartition ()
124+ .setPartitionIndex (partitionOne )
125+ .setErrorCode (errorOne .code ())))));
126+
127+ TxnOffsetCommitResponse response = TxnOffsetCommitResponse .newBuilder ()
128+ .merge (newData )
129+ .build ();
130+
131+ assertEquals (newData , response .data ());
132+ }
133+
134+ @ Test
135+ public void testBuilderMergeAddsNewTopic () {
136+ TxnOffsetCommitResponse .Builder builder = TxnOffsetCommitResponse .newBuilder ();
137+ builder .addPartition (topicOne , partitionOne , errorOne );
138+
139+ TxnOffsetCommitResponseData newData = new TxnOffsetCommitResponseData ()
140+ .setTopics (List .of (
141+ new TxnOffsetCommitResponseTopic ()
142+ .setName (topicTwo )
143+ .setPartitions (List .of (
144+ new TxnOffsetCommitResponsePartition ()
145+ .setPartitionIndex (partitionTwo )
146+ .setErrorCode (errorTwo .code ())))));
147+
148+ TxnOffsetCommitResponseData expected = new TxnOffsetCommitResponseData ()
149+ .setTopics (List .of (
150+ new TxnOffsetCommitResponseTopic ()
151+ .setName (topicOne )
152+ .setPartitions (List .of (
153+ new TxnOffsetCommitResponsePartition ()
154+ .setPartitionIndex (partitionOne )
155+ .setErrorCode (errorOne .code ()))),
156+ new TxnOffsetCommitResponseTopic ()
157+ .setName (topicTwo )
158+ .setPartitions (List .of (
159+ new TxnOffsetCommitResponsePartition ()
160+ .setPartitionIndex (partitionTwo )
161+ .setErrorCode (errorTwo .code ())))));
162+
163+ assertEquals (expected , builder .merge (newData ).build ().data ());
164+ }
165+
166+ @ Test
167+ public void testBuilderMergeAppendsToExistingTopic () {
168+ TxnOffsetCommitResponse .Builder builder = TxnOffsetCommitResponse .newBuilder ();
169+ builder .addPartition (topicOne , partitionOne , errorOne );
170+
171+ TxnOffsetCommitResponseData newData = new TxnOffsetCommitResponseData ()
172+ .setTopics (List .of (
173+ new TxnOffsetCommitResponseTopic ()
174+ .setName (topicOne )
175+ .setPartitions (List .of (
176+ new TxnOffsetCommitResponsePartition ()
177+ .setPartitionIndex (partitionTwo )
178+ .setErrorCode (errorTwo .code ())))));
179+
180+ TxnOffsetCommitResponseData expected = new TxnOffsetCommitResponseData ()
181+ .setTopics (List .of (
182+ new TxnOffsetCommitResponseTopic ()
183+ .setName (topicOne )
184+ .setPartitions (List .of (
185+ new TxnOffsetCommitResponsePartition ()
186+ .setPartitionIndex (partitionOne )
187+ .setErrorCode (errorOne .code ()),
188+ new TxnOffsetCommitResponsePartition ()
189+ .setPartitionIndex (partitionTwo )
190+ .setErrorCode (errorTwo .code ())))));
191+
192+ assertEquals (expected , builder .merge (newData ).build ().data ());
193+ }
194+
195+ @ Test
196+ public void testTopicNameBuilderRejectsNullTopicName () {
197+ TxnOffsetCommitResponse .Builder builder = TxnOffsetCommitResponse .newBuilder ();
198+ assertThrows (IllegalArgumentException .class ,
199+ () -> builder .addPartition (null , partitionOne , errorOne ));
200+ }
201+
67202}
0 commit comments