Test that FLAG_FIN is set if the read callback is NULL.
This commit is contained in:
parent
2edceb1fb1
commit
6e7025b9f5
|
@ -138,6 +138,8 @@ int communicate(const std::string& host, uint16_t port,
|
||||||
std::cerr << "Could not connect to the host" << std::endl;
|
std::cerr << "Could not connect to the host" << std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
make_non_block(fd);
|
||||||
|
set_tcp_nodelay(fd);
|
||||||
SSL_CTX *ssl_ctx;
|
SSL_CTX *ssl_ctx;
|
||||||
ssl_ctx = SSL_CTX_new(SSLv23_client_method());
|
ssl_ctx = SSL_CTX_new(SSLv23_client_method());
|
||||||
if(!ssl_ctx) {
|
if(!ssl_ctx) {
|
||||||
|
@ -153,8 +155,6 @@ int communicate(const std::string& host, uint16_t port,
|
||||||
if(ssl_handshake(ssl, fd) == -1) {
|
if(ssl_handshake(ssl, fd) == -1) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
make_non_block(fd);
|
|
||||||
set_tcp_nodelay(fd);
|
|
||||||
Spdylay sc(fd, ssl, callbacks);
|
Spdylay sc(fd, ssl, callbacks);
|
||||||
|
|
||||||
nfds_t npollfds = 1;
|
nfds_t npollfds = 1;
|
||||||
|
|
|
@ -476,7 +476,22 @@ int ssl_handshake(SSL *ssl, int fd)
|
||||||
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
|
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
int loop_count = 0;
|
||||||
int r = SSL_connect(ssl);
|
int r = SSL_connect(ssl);
|
||||||
|
nfds_t npollfds = 1;
|
||||||
|
pollfd pollfds[1];
|
||||||
|
pollfds[0].fd = fd;
|
||||||
|
|
||||||
|
while(r == -1) {
|
||||||
|
++loop_count;
|
||||||
|
int nfds = poll(pollfds, npollfds, -1);
|
||||||
|
if(nfds == -1)
|
||||||
|
continue;
|
||||||
|
r = SSL_connect(ssl);
|
||||||
|
}
|
||||||
|
std::cerr << "Loop iterated #" << loop_count << " times." << std::endl;
|
||||||
|
//std::cerr << "Event is " << pollfds[0].events << ":" << pollfds[0].revents << std::endl;
|
||||||
|
|
||||||
if(r <= 0) {
|
if(r <= 0) {
|
||||||
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
|
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -154,7 +154,7 @@ int spdylay_submit_request(spdylay_session *session, uint8_t pri,
|
||||||
}
|
}
|
||||||
spdylay_frame_nv_downcase(nv_copy);
|
spdylay_frame_nv_downcase(nv_copy);
|
||||||
spdylay_frame_nv_sort(nv_copy);
|
spdylay_frame_nv_sort(nv_copy);
|
||||||
if(data_prd == NULL) {
|
if(data_prd_copy == NULL) {
|
||||||
flags |= SPDYLAY_FLAG_FIN;
|
flags |= SPDYLAY_FLAG_FIN;
|
||||||
}
|
}
|
||||||
spdylay_frame_syn_stream_init(&frame->syn_stream, flags, 0, 0, pri, nv_copy);
|
spdylay_frame_syn_stream_init(&frame->syn_stream, flags, 0, 0, pri, nv_copy);
|
||||||
|
|
|
@ -87,6 +87,8 @@ int main(int argc, char* argv[])
|
||||||
!CU_add_test(pSuite, "submit_response", test_spdylay_submit_response) ||
|
!CU_add_test(pSuite, "submit_response", test_spdylay_submit_response) ||
|
||||||
!CU_add_test(pSuite, "submit_request_with_data",
|
!CU_add_test(pSuite, "submit_request_with_data",
|
||||||
test_spdylay_submit_request_with_data) ||
|
test_spdylay_submit_request_with_data) ||
|
||||||
|
!CU_add_test(pSuite, "submit_request_without_data",
|
||||||
|
test_spdylay_submit_request_with_null_data_read_callback) ||
|
||||||
!CU_add_test(pSuite, "session_reply_fail",
|
!CU_add_test(pSuite, "session_reply_fail",
|
||||||
test_spdylay_session_reply_fail) ||
|
test_spdylay_session_reply_fail) ||
|
||||||
!CU_add_test(pSuite, "session_on_headers_received",
|
!CU_add_test(pSuite, "session_on_headers_received",
|
||||||
|
|
|
@ -590,6 +590,28 @@ void test_spdylay_submit_request_with_data()
|
||||||
spdylay_session_del(session);
|
spdylay_session_del(session);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void test_spdylay_submit_request_with_null_data_read_callback()
|
||||||
|
{
|
||||||
|
spdylay_session *session;
|
||||||
|
spdylay_session_callbacks callbacks = {
|
||||||
|
null_send_callback,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
const char *nv[] = { "Version", "HTTP/1.1", NULL };
|
||||||
|
spdylay_data_provider data_prd = {{-1}, NULL};
|
||||||
|
spdylay_outbound_item *item;
|
||||||
|
|
||||||
|
CU_ASSERT(0 == spdylay_session_client_new(&session, &callbacks, NULL));
|
||||||
|
CU_ASSERT(0 == spdylay_submit_request(session, 3, nv, &data_prd, NULL));
|
||||||
|
item = spdylay_session_get_next_ob_item(session);
|
||||||
|
CU_ASSERT(0 == strcmp("version", item->frame->syn_stream.nv[0]));
|
||||||
|
CU_ASSERT(item->frame->syn_stream.hd.flags & SPDYLAY_FLAG_FIN);
|
||||||
|
|
||||||
|
spdylay_session_del(session);
|
||||||
|
}
|
||||||
|
|
||||||
void test_spdylay_session_reply_fail()
|
void test_spdylay_session_reply_fail()
|
||||||
{
|
{
|
||||||
spdylay_session *session;
|
spdylay_session *session;
|
||||||
|
|
|
@ -35,6 +35,7 @@ void test_spdylay_session_send_syn_stream();
|
||||||
void test_spdylay_session_send_syn_reply();
|
void test_spdylay_session_send_syn_reply();
|
||||||
void test_spdylay_submit_response();
|
void test_spdylay_submit_response();
|
||||||
void test_spdylay_submit_request_with_data();
|
void test_spdylay_submit_request_with_data();
|
||||||
|
void test_spdylay_submit_request_with_null_data_read_callback();
|
||||||
void test_spdylay_session_reply_fail();
|
void test_spdylay_session_reply_fail();
|
||||||
void test_spdylay_session_on_headers_received();
|
void test_spdylay_session_on_headers_received();
|
||||||
void test_spdylay_session_on_ping_received();
|
void test_spdylay_session_on_ping_received();
|
||||||
|
|
Loading…
Reference in New Issue