254 lines
5.6 KiB
Plaintext
254 lines
5.6 KiB
Plaintext
note
|
|
description: "[
|
|
Enter class description here!
|
|
]"
|
|
|
|
class
|
|
TEST_APP
|
|
|
|
inherit
|
|
SHARED_EXECUTION_ENVIRONMENT
|
|
|
|
create
|
|
make
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
make
|
|
-- Instantiate Current object.
|
|
local
|
|
h, res: STRING
|
|
i: INTEGER
|
|
l_test_name: detachable READABLE_STRING_GENERAL
|
|
choices: HASH_TABLE [READABLE_STRING_GENERAL, INTEGER]
|
|
do
|
|
create h.make_empty
|
|
h.append_character ((0).to_character_8)
|
|
h.append_character ((0).to_character_8)
|
|
h.append_character ((255).to_character_8)
|
|
h.append_character ((255).to_character_8)
|
|
|
|
i := 0
|
|
if attached execution_environment.arguments.argument (1) as tn then
|
|
l_test_name := tn
|
|
else
|
|
create choices.make (tests.count)
|
|
across
|
|
tests as ic
|
|
loop
|
|
i := i + 1
|
|
choices.force (ic.key, i)
|
|
print (i.out + " - " + ic.key.out + "%N")
|
|
end
|
|
print (" > ")
|
|
io.read_line
|
|
res := io.last_string
|
|
res.adjust
|
|
if
|
|
res.is_integer and then
|
|
attached choices [res.to_integer] as tn
|
|
then
|
|
l_test_name := tn
|
|
end
|
|
end
|
|
if
|
|
l_test_name /= Void and then
|
|
attached tests [l_test_name] as proc
|
|
then
|
|
proc.call ()
|
|
else
|
|
print ("Quit...%N")
|
|
end
|
|
end
|
|
|
|
port_number: INTEGER = 9090
|
|
|
|
hostname: STRING = "localhost"
|
|
|
|
has_error: BOOLEAN
|
|
|
|
tests: STRING_TABLE [PROCEDURE]
|
|
once
|
|
create Result.make (10)
|
|
Result.force (agent cli_execute_get_request, "get_request")
|
|
Result.force (agent execute_get_request (1, 0), "get_request (1,0)")
|
|
Result.force (agent execute_get_request (10, 0), "get_request (10,0)")
|
|
Result.force (agent execute_get_request (1, 10_000), "get_request (1, 10000)")
|
|
Result.force (agent execute_get_request (10, 10_000), "get_request (10, 10000)")
|
|
Result.force (agent execute_wait_for_ever, "wait_for_ever")
|
|
end
|
|
|
|
feature -- Execution
|
|
|
|
wait_ms (a_delay_ms: INTEGER; m: detachable READABLE_STRING_8)
|
|
local
|
|
i64: INTEGER_64
|
|
do
|
|
if a_delay_ms > 0 then
|
|
if has_error then
|
|
print ("[ERROR/WAIT] Skipped due to previous error%N")
|
|
else
|
|
|
|
i64 := a_delay_ms.as_integer_64 * {INTEGER_64} 1_000_000
|
|
if m /= Void then
|
|
print ("[WAIT] " + i64.out + " nanoseconds -> " + m + "%N")
|
|
else
|
|
print ("[WAIT] " + i64.out + " nanoseconds.%N")
|
|
end
|
|
execution_environment.sleep (i64) -- nanoseconds
|
|
print ("[WAIT] done.%N")
|
|
end
|
|
end
|
|
end
|
|
|
|
cli_execute_get_request
|
|
local
|
|
i,n: INTEGER
|
|
rq_nb: INTEGER
|
|
sl_val: INTEGER
|
|
do
|
|
if attached execution_environment.arguments as args then
|
|
n := args.argument_count
|
|
rq_nb := 1
|
|
sl_val := 0
|
|
i := 1
|
|
if n > i then
|
|
if args.argument (i).is_case_insensitive_equal_general ("get_request") then
|
|
if n >= i + 1 then
|
|
rq_nb := args.argument (i + 1).to_integer
|
|
if n >= i + 2 then
|
|
sl_val := args.argument (i + 2).to_integer
|
|
end
|
|
end
|
|
execute_get_request (rq_nb, sl_val)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
execute_get_request (rq_nb: INTEGER; a_delay_ms: INTEGER)
|
|
require
|
|
rq_nb > 0
|
|
local
|
|
l_socket: NETWORK_STREAM_SOCKET
|
|
l_packet: PACKET
|
|
l_header_done, l_done: BOOLEAN
|
|
line, txt: READABLE_STRING_8
|
|
h: STRING
|
|
len: INTEGER
|
|
i: INTEGER
|
|
do
|
|
create l_socket.make_client_by_port (port_number, hostname)
|
|
l_socket.connect
|
|
|
|
from
|
|
i := rq_nb
|
|
until
|
|
i <= 0
|
|
loop
|
|
i := i - 1
|
|
|
|
print ("GET /test/"+ i.out +" HTTP/1.1%N")
|
|
-- socket_put_string (l_socket, "GET /test/"+ i.out +" HTTP/1.1%R%N")
|
|
|
|
socket_put_string (l_socket, "GET /test/"+ i.out)
|
|
wait_ms (a_delay_ms, "inside GET request line")
|
|
socket_put_string (l_socket, " HTTP/1.1%R%N")
|
|
wait_ms (a_delay_ms, "before Host")
|
|
socket_put_string (l_socket, "Host: localhost:9090%R%N")
|
|
wait_ms (a_delay_ms, "before Accept")
|
|
socket_put_string (l_socket, "Accept: */*%R%N")
|
|
wait_ms (a_delay_ms, "before CRNL")
|
|
socket_put_string (l_socket, "%R%N")
|
|
wait_ms (a_delay_ms, "before reading!")
|
|
|
|
if not has_error then
|
|
from
|
|
l_done := False
|
|
l_header_done := False
|
|
create h.make_empty
|
|
until
|
|
l_done
|
|
loop
|
|
if l_header_done then
|
|
l_socket.read_stream (len)
|
|
txt := l_socket.last_string
|
|
print ("BODY:%N")
|
|
print (txt)
|
|
print ("%N")
|
|
if txt.count /= len then
|
|
print ("BAD len: " + txt.count.out + " /= " + len.out + "%N")
|
|
end
|
|
l_done := True
|
|
else
|
|
l_socket.read_line
|
|
line := l_socket.last_string
|
|
if l_socket.was_error then
|
|
l_done := True
|
|
elseif line.is_empty or (line.count = 1 and line[1] = '%R') then
|
|
l_header_done := True
|
|
else
|
|
if line.starts_with_general ("Content-Length:") then
|
|
len := line.substring (16, line.count).to_integer
|
|
end
|
|
h.append (line)
|
|
h.append ("%R%N")
|
|
|
|
print ("HEADER:")
|
|
print (line)
|
|
print ("%N")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
execute_wait_for_ever
|
|
local
|
|
l_socket: NETWORK_STREAM_SOCKET
|
|
l_packet: PACKET
|
|
do
|
|
create l_socket.make_client_by_port(9090, "localhost")
|
|
l_socket.connect
|
|
|
|
create l_packet.make(1)
|
|
l_packet.put_element('a', 0)
|
|
|
|
l_socket.send(l_packet, 0)
|
|
|
|
from
|
|
|
|
until
|
|
not l_socket.is_connected
|
|
loop
|
|
|
|
end
|
|
end
|
|
|
|
socket_put_string (a_socket: NETWORK_STREAM_SOCKET; s: STRING_8)
|
|
local
|
|
retried: BOOLEAN
|
|
t: STRING
|
|
i: INTEGER
|
|
do
|
|
if has_error then
|
|
create t.make_from_string (s)
|
|
i := t.index_of ('%N', 1)
|
|
if i > 0 then
|
|
t.keep_head (i - 1)
|
|
end
|
|
t.adjust
|
|
print ("[ERROR] Skip put_string ("+ s +"..)%N")
|
|
elseif retried then
|
|
has_error := True
|
|
else
|
|
a_socket.put_string (s)
|
|
end
|
|
rescue
|
|
retried := True
|
|
retry
|
|
end
|
|
|
|
end
|