@@ -60,7 +60,7 @@ static void test_message(Message mes) {
6060 int read = 0 ;
6161 if (msg1len !=0 ) {
6262 read = parser .execute (settings , msg1 );
63- if (mes .upgrade && parser .upgrade ) {
63+ if (mes .upgrade () && parser .upgrade ) {
6464 // Messages have a settings() that checks itself...
6565 check (1 == mes .num_called );
6666 continue ;
@@ -69,8 +69,7 @@ static void test_message(Message mes) {
6969 }
7070
7171 read = parser .execute (settings , msg2 );
72- if (mes .upgrade && parser .upgrade ) {
73- p ("here" );
72+ if (mes .upgrade () && parser .upgrade ) {
7473 check (1 == mes .num_called );
7574 continue ;
7675 }
@@ -80,7 +79,7 @@ static void test_message(Message mes) {
8079 ByteBuffer empty = Util .empty ();
8180 read = parser .execute (settings , empty );
8281
83- if (mes .upgrade && parser .upgrade ) {
82+ if (mes .upgrade () && parser .upgrade ) {
8483 check (1 == mes .num_called );
8584 continue ;
8685 }
@@ -93,13 +92,13 @@ static void test_message(Message mes) {
9392
9493 static void test_multiple3 (Message r1 , Message r2 , Message r3 ) {
9594 int message_count = 1 ;
96- if (!r1 .upgrade ) {
95+ if (!r1 .upgrade () ) {
9796 message_count ++;
98- if (!r2 .upgrade ) {
97+ if (!r2 .upgrade () ) {
9998 message_count ++;
10099 }
101100 }
102- boolean has_upgrade = (message_count < 3 || r3 .upgrade );
101+ boolean has_upgrade = (message_count < 3 || r3 .upgrade () );
103102
104103 ByteList blist = new ByteList ();
105104 blist .addAll (r1 .raw );
@@ -114,6 +113,7 @@ static void test_multiple3(Message r1, Message r2, Message r3) {
114113
115114 int read = parser .execute (settings , buf );
116115 if (has_upgrade && parser .upgrade ) {
116+ raw = upgrade_message_fix (raw , read , r1 ,r2 ,r3 );
117117 check (settings .numCalled == message_count );
118118 return ;
119119 }
@@ -130,6 +130,71 @@ static void test_multiple3(Message r1, Message r2, Message r3) {
130130 check (0 == read );
131131 check (settings .numCalled == message_count );
132132 }
133+
134+ /* Given a sequence of bytes and the number of these that we were able to
135+ * parse, verify that upgrade bodies are correct.
136+ */
137+ static byte [] upgrade_message_fix (byte [] body , int nread , Message ... msgs ) {
138+ int off = 0 ;
139+ for (Message m : msgs ) {
140+ off += m .raw .length ;
141+ if (m .upgrade ()) {
142+ off -= m .upgrade .length ;
143+ // Original C:
144+ // Check the portion of the response after its specified upgrade
145+ // if (!check_str_eq(m, "upgrade", body + off, body + nread)) {
146+ // abort();
147+ // }
148+ // to me, this seems to be equivalent to comparing off and nread ...
149+ check (off , nread );
150+
151+ // Original C:
152+ // Fix up the response so that message_eq() will verify the beginning
153+ // of the upgrade */
154+ //
155+ // *(body + nread + strlen(m->upgrade)) = '\0';
156+ // This only shortens body so the strlen check passes.
157+ return new byte [off ];
158+
159+ }
160+ }
161+ return null ;
162+ }
163+ //upgrade_message_fix(char *body, const size_t nread, const size_t nmsgs, ...) {
164+ // va_list ap;
165+ // size_t i;
166+ // size_t off = 0;
167+ //
168+ // va_start(ap, nmsgs);
169+ //
170+ // for (i = 0; i < nmsgs; i++) {
171+ // struct message *m = va_arg(ap, struct message *);
172+ //
173+ // off += strlen(m->raw);
174+ //
175+ // if (m->upgrade) {
176+ // off -= strlen(m->upgrade);
177+ //
178+ // /* Check the portion of the response after its specified upgrade */
179+ // if (!check_str_eq(m, "upgrade", body + off, body + nread)) {
180+ // abort();
181+ // }
182+ //
183+ // /* Fix up the response so that message_eq() will verify the beginning
184+ // * of the upgrade */
185+ // *(body + nread + strlen(m->upgrade)) = '\0';
186+ // messages[num_messages -1 ].upgrade = body + nread;
187+ //
188+ // va_end(ap);
189+ // return;
190+ // }
191+ // }
192+ //
193+ // va_end(ap);
194+ // printf("\n\n*** Error: expected a message with upgrade ***\n");
195+ //
196+ // abort();
197+ //}
133198 static void p (Object o ) {
134199 System .out .println (o );
135200 }
0 commit comments