1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
| | #!/bin/sh
. ./test-lib.sh
test -r random_blob || die "random_blob required, run with 'make $0'"
t_plan 10 "rack.input read tests"
t_begin "setup and startup" && {
rtmpfiles curl_out curl_err
unicorn_setup
unicorn -E none -D rack-input-tests.ru -c $unicorn_config
blob_sha1=$(rsha1 < random_blob)
blob_size=$(wc -c < random_blob)
t_info "blob_sha1=$blob_sha1"
unicorn_wait_start
}
t_begin "corked identity request" && {
rm -f $tmp
(
cat $fifo > $tmp &
printf 'PUT / HTTP/1.0\r\n'
printf 'Content-Length: %d\r\n\r\n' $blob_size
cat random_blob
wait
echo ok > $ok
) | ( sleep 1 && socat - TCP4:$listen > $fifo )
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test x"$(cat $ok)" = xok
}
t_begin "corked chunked request" && {
rm -f $tmp
(
cat $fifo > $tmp &
content-md5-put < random_blob
wait
echo ok > $ok
) | ( sleep 1 && socat - TCP4:$listen > $fifo )
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test x"$(cat $ok)" = xok
}
t_begin "corked identity request (input#size first)" && {
rm -f $tmp
(
cat $fifo > $tmp &
printf 'PUT /size_first HTTP/1.0\r\n'
printf 'Content-Length: %d\r\n\r\n' $blob_size
cat random_blob
wait
echo ok > $ok
) | ( sleep 1 && socat - TCP4:$listen > $fifo )
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test x"$(cat $ok)" = xok
}
t_begin "corked identity request (input#rewind first)" && {
rm -f $tmp
(
cat $fifo > $tmp &
printf 'PUT /rewind_first HTTP/1.0\r\n'
printf 'Content-Length: %d\r\n\r\n' $blob_size
cat random_blob
wait
echo ok > $ok
) | ( sleep 1 && socat - TCP4:$listen > $fifo )
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test x"$(cat $ok)" = xok
}
t_begin "corked chunked request (input#size first)" && {
rm -f $tmp
(
cat $fifo > $tmp &
printf 'PUT /size_first HTTP/1.1\r\n'
printf 'Host: example.com\r\n'
printf 'Transfer-Encoding: chunked\r\n'
printf 'Trailer: Content-MD5\r\n'
printf '\r\n'
content-md5-put --no-headers < random_blob
wait
echo ok > $ok
) | ( sleep 1 && socat - TCP4:$listen > $fifo )
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test x"$(cat $ok)" = xok
}
t_begin "corked chunked request (input#rewind first)" && {
rm -f $tmp
(
cat $fifo > $tmp &
printf 'PUT /rewind_first HTTP/1.1\r\n'
printf 'Host: example.com\r\n'
printf 'Transfer-Encoding: chunked\r\n'
printf 'Trailer: Content-MD5\r\n'
printf '\r\n'
content-md5-put --no-headers < random_blob
wait
echo ok > $ok
) | ( sleep 1 && socat - TCP4:$listen > $fifo )
test 1 -eq $(grep $blob_sha1 $tmp |wc -l)
test x"$(cat $ok)" = xok
}
t_begin "regular request" && {
curl -sSf -T random_blob http://$listen/ > $curl_out 2> $curl_err
test x$blob_sha1 = x$(cat $curl_out)
test ! -s $curl_err
}
t_begin "chunked request" && {
curl -sSf -T- < random_blob http://$listen/ > $curl_out 2> $curl_err
test x$blob_sha1 = x$(cat $curl_out)
test ! -s $curl_err
}
dbgcat r_err
t_begin "shutdown" && {
kill $unicorn_pid
}
t_done
|