Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
N
nghttp2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
nghttp2
Commits
d9893d01
Commit
d9893d01
authored
9 years ago
by
Tatsuhiro Tsujikawa
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add tests
parent
3785cf07
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
194 additions
and
0 deletions
+194
-0
tests/main.c
tests/main.c
+3
-0
tests/nghttp2_session_test.c
tests/nghttp2_session_test.c
+189
-0
tests/nghttp2_session_test.h
tests/nghttp2_session_test.h
+2
-0
No files found.
tests/main.c
View file @
d9893d01
...
...
@@ -97,6 +97,8 @@ int main(int argc _U_, char *argv[] _U_) {
test_nghttp2_session_recv_settings_header_table_size
)
||
!
CU_add_test
(
pSuite
,
"session_recv_too_large_frame_length"
,
test_nghttp2_session_recv_too_large_frame_length
)
||
!
CU_add_test
(
pSuite
,
"session_recv_extension"
,
test_nghttp2_session_recv_extension
)
||
!
CU_add_test
(
pSuite
,
"session_continue"
,
test_nghttp2_session_continue
)
||
!
CU_add_test
(
pSuite
,
"session_add_frame"
,
test_nghttp2_session_add_frame
)
||
...
...
@@ -186,6 +188,7 @@ int main(int argc _U_, char *argv[] _U_) {
test_nghttp2_submit_shutdown_notice
)
||
!
CU_add_test
(
pSuite
,
"submit_invalid_nv"
,
test_nghttp2_submit_invalid_nv
)
||
!
CU_add_test
(
pSuite
,
"submit_extension"
,
test_nghttp2_submit_extension
)
||
!
CU_add_test
(
pSuite
,
"session_open_stream"
,
test_nghttp2_session_open_stream
)
||
!
CU_add_test
(
pSuite
,
"session_open_stream_with_idle_stream_dep"
,
...
...
This diff is collapsed.
Click to expand it.
tests/nghttp2_session_test.c
View file @
d9893d01
...
...
@@ -58,6 +58,7 @@ typedef struct {
scripted_data_feed
*
df
;
int
frame_recv_cb_called
,
invalid_frame_recv_cb_called
;
uint8_t
recv_frame_type
;
nghttp2_frame_hd
recv_frame_hd
;
int
frame_send_cb_called
;
uint8_t
sent_frame_type
;
int
frame_not_send_cb_called
;
...
...
@@ -77,6 +78,7 @@ typedef struct {
size_t
data_chunk_len
;
size_t
padlen
;
int
begin_frame_cb_called
;
nghttp2_buf
scratchbuf
;
}
my_user_data
;
static
const
nghttp2_nv
reqnv
[]
=
{
...
...
@@ -179,6 +181,8 @@ static int on_frame_recv_callback(nghttp2_session *session _U_,
my_user_data
*
ud
=
(
my_user_data
*
)
user_data
;
++
ud
->
frame_recv_cb_called
;
ud
->
recv_frame_type
=
frame
->
hd
.
type
;
ud
->
recv_frame_hd
=
frame
->
hd
;
return
0
;
}
...
...
@@ -430,6 +434,55 @@ static int on_stream_close_callback(nghttp2_session *session _U_,
return
0
;
}
static
ssize_t
pack_extension_callback
(
nghttp2_session
*
session
_U_
,
uint8_t
*
flags
_U_
,
uint8_t
*
buf
,
size_t
len
_U_
,
const
nghttp2_frame
*
frame
,
void
*
user_data
_U_
)
{
nghttp2_buf
*
p
=
frame
->
ext
.
payload
;
memcpy
(
buf
,
p
->
pos
,
nghttp2_buf_len
(
p
));
return
(
ssize_t
)
nghttp2_buf_len
(
p
);
}
static
int
on_extension_chunk_recv_callback
(
nghttp2_session
*
session
_U_
,
const
nghttp2_frame_hd
*
hd
_U_
,
const
uint8_t
*
data
,
size_t
len
,
void
*
user_data
)
{
my_user_data
*
my_data
=
(
my_user_data
*
)
user_data
;
nghttp2_buf
*
buf
=
&
my_data
->
scratchbuf
;
buf
->
last
=
nghttp2_cpymem
(
buf
->
last
,
data
,
len
);
return
0
;
}
static
int
cancel_on_extension_chunk_recv_callback
(
nghttp2_session
*
session
_U_
,
const
nghttp2_frame_hd
*
hd
_U_
,
const
uint8_t
*
data
_U_
,
size_t
len
_U_
,
void
*
user_data
_U_
)
{
return
NGHTTP2_ERR_CANCEL
;
}
static
int
unpack_extension_callback
(
nghttp2_session
*
session
_U_
,
void
**
payload
,
const
nghttp2_frame_hd
*
hd
_U_
,
void
*
user_data
)
{
my_user_data
*
my_data
=
(
my_user_data
*
)
user_data
;
nghttp2_buf
*
buf
=
&
my_data
->
scratchbuf
;
*
payload
=
buf
;
return
0
;
}
static
int
cancel_unpack_extension_callback
(
nghttp2_session
*
session
_U_
,
void
**
payload
_U_
,
const
nghttp2_frame_hd
*
hd
_U_
,
void
*
user_data
_U_
)
{
return
NGHTTP2_ERR_CANCEL
;
}
static
nghttp2_settings_entry
*
dup_iv
(
const
nghttp2_settings_entry
*
iv
,
size_t
niv
)
{
return
nghttp2_frame_iv_copy
(
iv
,
niv
,
nghttp2_mem_default
());
...
...
@@ -1707,6 +1760,81 @@ void test_nghttp2_session_recv_too_large_frame_length(void) {
nghttp2_session_del
(
session
);
}
void
test_nghttp2_session_recv_extension
(
void
)
{
nghttp2_session
*
session
;
nghttp2_session_callbacks
callbacks
;
my_user_data
ud
;
nghttp2_buf
buf
;
nghttp2_frame_hd
hd
;
nghttp2_mem
*
mem
;
const
char
data
[]
=
"Hello World!"
;
ssize_t
rv
;
mem
=
nghttp2_mem_default
();
memset
(
&
callbacks
,
0
,
sizeof
(
nghttp2_session_callbacks
));
callbacks
.
on_extension_chunk_recv_callback
=
on_extension_chunk_recv_callback
;
callbacks
.
unpack_extension_callback
=
unpack_extension_callback
;
callbacks
.
on_frame_recv_callback
=
on_frame_recv_callback
;
nghttp2_buf_init2
(
&
ud
.
scratchbuf
,
4096
,
mem
);
nghttp2_buf_init2
(
&
buf
,
4096
,
mem
);
nghttp2_frame_hd_init
(
&
hd
,
sizeof
(
data
),
111
,
0xab
,
1000000007
);
nghttp2_frame_pack_frame_hd
(
buf
.
last
,
&
hd
);
buf
.
last
+=
NGHTTP2_FRAME_HDLEN
;
buf
.
last
=
nghttp2_cpymem
(
buf
.
last
,
data
,
sizeof
(
data
));
nghttp2_session_client_new
(
&
session
,
&
callbacks
,
&
ud
);
nghttp2_frame_hd_init
(
&
ud
.
recv_frame_hd
,
0
,
0
,
0
,
0
);
rv
=
nghttp2_session_mem_recv
(
session
,
buf
.
pos
,
nghttp2_buf_len
(
&
buf
));
CU_ASSERT
(
NGHTTP2_FRAME_HDLEN
+
hd
.
length
==
(
size_t
)
rv
);
CU_ASSERT
(
111
==
ud
.
recv_frame_hd
.
type
);
CU_ASSERT
(
0xab
==
ud
.
recv_frame_hd
.
flags
);
CU_ASSERT
(
1000000007
==
ud
.
recv_frame_hd
.
stream_id
);
CU_ASSERT
(
0
==
memcmp
(
data
,
ud
.
scratchbuf
.
pos
,
sizeof
(
data
)));
nghttp2_session_del
(
session
);
/* cancel in on_extension_chunk_recv_callback */
nghttp2_buf_reset
(
&
ud
.
scratchbuf
);
callbacks
.
on_extension_chunk_recv_callback
=
cancel_on_extension_chunk_recv_callback
;
nghttp2_session_server_new
(
&
session
,
&
callbacks
,
&
ud
);
ud
.
frame_recv_cb_called
=
0
;
rv
=
nghttp2_session_mem_recv
(
session
,
buf
.
pos
,
nghttp2_buf_len
(
&
buf
));
CU_ASSERT
(
NGHTTP2_FRAME_HDLEN
+
hd
.
length
==
(
size_t
)
rv
);
CU_ASSERT
(
0
==
ud
.
frame_recv_cb_called
);
nghttp2_session_del
(
session
);
/* cancel in unpack_extension_callback */
nghttp2_buf_reset
(
&
ud
.
scratchbuf
);
callbacks
.
on_extension_chunk_recv_callback
=
on_extension_chunk_recv_callback
;
callbacks
.
unpack_extension_callback
=
cancel_unpack_extension_callback
;
nghttp2_session_server_new
(
&
session
,
&
callbacks
,
&
ud
);
ud
.
frame_recv_cb_called
=
0
;
rv
=
nghttp2_session_mem_recv
(
session
,
buf
.
pos
,
nghttp2_buf_len
(
&
buf
));
CU_ASSERT
(
NGHTTP2_FRAME_HDLEN
+
hd
.
length
==
(
size_t
)
rv
);
CU_ASSERT
(
0
==
ud
.
frame_recv_cb_called
);
nghttp2_session_del
(
session
);
nghttp2_buf_free
(
&
buf
,
mem
);
nghttp2_buf_free
(
&
ud
.
scratchbuf
,
mem
);
}
void
test_nghttp2_session_continue
(
void
)
{
nghttp2_session
*
session
;
nghttp2_session_callbacks
callbacks
;
...
...
@@ -4691,6 +4819,67 @@ void test_nghttp2_submit_invalid_nv(void) {
nghttp2_session_del
(
session
);
}
void
test_nghttp2_submit_extension
(
void
)
{
nghttp2_session
*
session
;
nghttp2_session_callbacks
callbacks
;
my_user_data
ud
;
accumulator
acc
;
nghttp2_mem
*
mem
;
const
char
data
[]
=
"Hello World!"
;
size_t
len
;
int32_t
stream_id
;
int
rv
;
mem
=
nghttp2_mem_default
();
memset
(
&
callbacks
,
0
,
sizeof
(
nghttp2_session_callbacks
));
callbacks
.
pack_extension_callback
=
pack_extension_callback
;
callbacks
.
send_callback
=
accumulator_send_callback
;
nghttp2_buf_init2
(
&
ud
.
scratchbuf
,
4096
,
mem
);
nghttp2_session_client_new
(
&
session
,
&
callbacks
,
&
ud
);
ud
.
scratchbuf
.
last
=
nghttp2_cpymem
(
ud
.
scratchbuf
.
last
,
data
,
sizeof
(
data
));
ud
.
acc
=
&
acc
;
rv
=
nghttp2_submit_extension
(
session
,
211
,
0x01
,
3
,
&
ud
.
scratchbuf
);
CU_ASSERT
(
0
==
rv
);
acc
.
length
=
0
;
rv
=
nghttp2_session_send
(
session
);
CU_ASSERT
(
0
==
rv
);
CU_ASSERT
(
NGHTTP2_FRAME_HDLEN
+
sizeof
(
data
)
==
acc
.
length
);
len
=
nghttp2_get_uint32
(
acc
.
buf
)
>>
8
;
CU_ASSERT
(
sizeof
(
data
)
==
len
);
CU_ASSERT
(
211
==
acc
.
buf
[
3
]);
CU_ASSERT
(
0x01
==
acc
.
buf
[
4
]);
stream_id
=
(
int32_t
)
nghttp2_get_uint32
(
acc
.
buf
+
5
);
CU_ASSERT
(
3
==
stream_id
);
CU_ASSERT
(
0
==
memcmp
(
data
,
&
acc
.
buf
[
NGHTTP2_FRAME_HDLEN
],
sizeof
(
data
)));
nghttp2_session_del
(
session
);
/* submitting standard HTTP/2 frame is error */
nghttp2_session_server_new
(
&
session
,
&
callbacks
,
&
ud
);
rv
=
nghttp2_submit_extension
(
session
,
NGHTTP2_GOAWAY
,
NGHTTP2_FLAG_NONE
,
0
,
NULL
);
CU_ASSERT
(
NGHTTP2_ERR_INVALID_ARGUMENT
==
rv
);
nghttp2_session_del
(
session
);
nghttp2_buf_free
(
&
ud
.
scratchbuf
,
mem
);
}
void
test_nghttp2_session_open_stream
(
void
)
{
nghttp2_session
*
session
;
nghttp2_session_callbacks
callbacks
;
...
...
This diff is collapsed.
Click to expand it.
tests/nghttp2_session_test.h
View file @
d9893d01
...
...
@@ -38,6 +38,7 @@ void test_nghttp2_session_recv_unknown_frame(void);
void
test_nghttp2_session_recv_unexpected_continuation
(
void
);
void
test_nghttp2_session_recv_settings_header_table_size
(
void
);
void
test_nghttp2_session_recv_too_large_frame_length
(
void
);
void
test_nghttp2_session_recv_extension
(
void
);
void
test_nghttp2_session_continue
(
void
);
void
test_nghttp2_session_add_frame
(
void
);
void
test_nghttp2_session_on_request_headers_received
(
void
);
...
...
@@ -85,6 +86,7 @@ void test_nghttp2_submit_window_update(void);
void
test_nghttp2_submit_window_update_local_window_size
(
void
);
void
test_nghttp2_submit_shutdown_notice
(
void
);
void
test_nghttp2_submit_invalid_nv
(
void
);
void
test_nghttp2_submit_extension
(
void
);
void
test_nghttp2_session_open_stream
(
void
);
void
test_nghttp2_session_open_stream_with_idle_stream_dep
(
void
);
void
test_nghttp2_session_get_next_ob_item
(
void
);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment