83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Perl
		
	
	
	
	
	
| 
								 | 
							
								:- module(test_http,
							 | 
						||
| 
								 | 
							
									  [ test_http/0
							 | 
						||
| 
								 | 
							
									  ]).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(foreign, '.')).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(foreign, '../clib')).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(foreign, '../sgml')).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(library, '..')).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(library, '../sgml')).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(library, '../plunit')).
							 | 
						||
| 
								 | 
							
								:- asserta(user:file_search_path(library, '../clib')).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- use_module(library(http/http_open)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(http/http_client)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(http/http_stream)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(plunit)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(readutil)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(socket)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(debug)).
							 | 
						||
| 
								 | 
							
								:- use_module(library(lists)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test_http :-
							 | 
						||
| 
								 | 
							
									run_tests([ http_open,
							 | 
						||
| 
								 | 
							
										    http_get
							 | 
						||
| 
								 | 
							
										  ]).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- begin_tests(http_open).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test(gollem, true) :-
							 | 
						||
| 
								 | 
							
								     http_open('http://gollem.science.uva.nl/', In, []),
							 | 
						||
| 
								 | 
							
								     read_stream_to_codes(In, Codes),
							 | 
						||
| 
								 | 
							
								     close(In),
							 | 
						||
| 
								 | 
							
								     appendchk(_, "http://www.swi-prolog.org/", _, Codes).
							 | 
						||
| 
								 | 
							
								test(gollem_redirect, true) :-
							 | 
						||
| 
								 | 
							
								     http_open('http://gollem.science.uva.nl', In, []),
							 | 
						||
| 
								 | 
							
								     read_stream_to_codes(In, Codes),
							 | 
						||
| 
								 | 
							
								     close(In),
							 | 
						||
| 
								 | 
							
								     appendchk(_, "http://www.swi-prolog.org/", _, Codes).
							 | 
						||
| 
								 | 
							
								test(gollem_chunked, true(Codes == Ref)) :-
							 | 
						||
| 
								 | 
							
								     http_open('http://gollem.science.uva.nl/cgi-bin/chunked', In, []),
							 | 
						||
| 
								 | 
							
								     read_stream_to_codes(In, Codes),
							 | 
						||
| 
								 | 
							
								     close(In),
							 | 
						||
| 
								 | 
							
								     chunked_data(Ref).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_tests(http_open).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- begin_tests(http_get).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test(gollem, true) :-
							 | 
						||
| 
								 | 
							
								     http_get('http://gollem.science.uva.nl/', Data, [to(codes)]),
							 | 
						||
| 
								 | 
							
								     appendchk(_, "http://www.swi-prolog.org/", _, Data).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								test(gollem_chunked, true(Data == Ref)) :-
							 | 
						||
| 
								 | 
							
								     http_get('http://gollem.science.uva.nl/cgi-bin/chunked',
							 | 
						||
| 
								 | 
							
									      Data, [to(codes)]),
							 | 
						||
| 
								 | 
							
								     chunked_data(Ref).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:- end_tests(http_get).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										 /*******************************
							 | 
						||
| 
								 | 
							
										 *	       UTIL		*
							 | 
						||
| 
								 | 
							
										 *******************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								read_file_to_codes(File, Codes) :-
							 | 
						||
| 
								 | 
							
									open(File, read, In),
							 | 
						||
| 
								 | 
							
									call_cleanup(read_stream_to_codes(In, Codes), close(In)).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								appendchk(Pre, Middle, Post, List) :-
							 | 
						||
| 
								 | 
							
									append(Pre, Rest, List),
							 | 
						||
| 
								 | 
							
									append(Middle, Post, Rest), !.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								%%	chunked_data(-String) is det.
							 | 
						||
| 
								 | 
							
								%
							 | 
						||
| 
								 | 
							
								%	Content of the chunked data that is sent by cgi-bin/chunked.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								chunked_data(S) :-
							 | 
						||
| 
								 | 
							
									findall(C,
							 | 
						||
| 
								 | 
							
										(   between(1, 1000, X),
							 | 
						||
| 
								 | 
							
										    C is "a" + X mod 26
							 | 
						||
| 
								 | 
							
										), S).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 |