Skip to content

Commit 9be8707

Browse files
Added test for GET request (#13)
* Added test for GET request * replace print with write for errors * added error stop 1 Co-authored-by: Milan Curcic <caomaco@gmail.com> --------- Co-authored-by: Milan Curcic <caomaco@gmail.com>
1 parent 2bee99b commit 9be8707

File tree

5 files changed

+76
-14
lines changed

5 files changed

+76
-14
lines changed

example/response_header.f90

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ program response_header
99
type(response_type) :: response
1010
character(:), allocatable :: val
1111

12-
response = request(url='http://jsonplaceholder.typicode.com/todos/1')
12+
response = request(url='https://gorest.co.in/public/v2/todos')
1313
if(.not. response%ok) then
1414
print *,"Error message : ", response%err_msg
1515
else

example/simple_get.f90

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ program simple_get
33
implicit none
44
type(response_type) :: response
55

6-
response = request(url='http://jsonplaceholder.typicode.com/todos/1')
6+
response = request(url='https://jsonplaceholder.typicode.com/todos/1')
77
if(.not. response%ok) then
8-
print *,"Error message : ", response%err_msg
8+
print *,'Error message : ', response%err_msg
99
else
10-
print *, "Response Code : ", response%status_code
11-
print *, "Response Length : ", response%content_length
12-
print *, "Response Method : ", response%method
13-
print *, "Response Content : ", response%content
10+
print *, 'Response Code : ', response%status_code
11+
print *, 'Response Length : ', response%content_length
12+
print *, 'Response Method : ', response%method
13+
print *, 'Response Content : ', response%content
1414
end if
1515

16-
end program simple_get
16+
end program simple_get

src/http/http_client.f90

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,12 +179,15 @@ function client_header_callback(ptr, size, nmemb, client_data) bind(c)
179179
! Convert C pointer to Fortran allocatable character.
180180
call c_f_str_ptr(ptr, buf, nmemb)
181181
if (.not. allocated(buf)) return
182+
! Parsing Header, and storing in hashmap
182183
if(len(response%header_string) /= 0 .and. len(buf) > 2) then
183184
i = index(buf, ':')
184185
h_key = trim(buf(:i-1))
185186
h_value = buf(i+2 : )
186187
h_value = h_value( : len(h_value)-2)
187-
call response%header%set(key(h_key), value=h_value)
188+
if(len(h_value) > 0 .and. len(h_key) > 0) then
189+
call response%header%set(key(h_key), value=h_value)
190+
end if
188191
end if
189192
response%header_string = response%header_string // buf
190193
deallocate (buf)

test/check.f90

Lines changed: 0 additions & 5 deletions
This file was deleted.

test/test_get.f90

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
program test_get
2+
use iso_fortran_env, only: stderr => error_unit
3+
use fhash, only: key => fhash_key, fhash_iter_t, fhash_key_t
4+
use http, only : response_type, request
5+
implicit none
6+
type(response_type) :: res
7+
character(:), allocatable :: msg, original_content
8+
logical :: ok = .true.
9+
10+
type(fhash_iter_t) :: iter
11+
class(fhash_key_t), allocatable :: ikey
12+
class(*), allocatable :: idata
13+
integer :: header_counter = 0, original_header_count = 19
14+
15+
original_content = '{"id":15726,"user_id":2382773,&
16+
&"title":"Somnus ventosus theatrum delinquo spargo.",&
17+
&"due_on":"2023-06-09T00:00:00.000+05:30",&
18+
&"status":"completed"}'
19+
20+
res = request(url='https://gorest.co.in/public/v2/todos/15726')
21+
22+
msg = 'test_get: '
23+
if (.not. res%ok) then
24+
ok = .false.
25+
msg = msg // res%err_msg
26+
write(stderr, *) msg
27+
error stop 1
28+
end if
29+
30+
if (res%status_code /= 200) then
31+
ok = .false.
32+
msg = msg // 'test case 1, '
33+
end if
34+
35+
if (res%content_length /= len(original_content) .or. len(res%content) /= len(original_content)) then
36+
ok = .false.
37+
msg = msg // 'test case 2, '
38+
print *, res%content_length, " ", len(original_content), " ", len(res%content)
39+
end if
40+
41+
if (res%content /= original_content) then
42+
ok = .false.
43+
msg = msg // 'test case 3, '
44+
end if
45+
46+
iter = fhash_iter_t(res%header)
47+
do while(iter%next(ikey,idata))
48+
header_counter = header_counter + 1
49+
end do
50+
51+
if (header_counter /= original_header_count) then
52+
ok = .false.
53+
msg = msg // 'test case 4, '
54+
end if
55+
56+
if (.not. ok) then
57+
msg = msg // 'Failed.'
58+
write(stderr, *) msg
59+
error stop 1
60+
else
61+
msg = msg // 'All Test case Passed.'
62+
print '(a)', msg
63+
end if
64+
end program test_get

0 commit comments

Comments
 (0)