1# vi:filetype= 2 3use lib 'lib'; 4use Test::Nginx::Socket; 5 6repeat_each(1); 7 8plan tests => repeat_each() * 2 * blocks(); 9 10no_long_string(); 11 12run_tests(); 13 14#no_diff(); 15 16__DATA__ 17 18=== TEST 1: rds in a single buf (empty result set) 19--- config 20location = /single { 21 default_type 'application/x-resty-dbd-stream'; 22 set_unescape_uri $rds $arg_rds; 23 echo_duplicate 1 $rds; 24 rds_csv on; 25} 26--- request eval 27my $rds = "\x{00}". # endian 28"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 29"\x{00}". # result type 30"\x{00}\x{00}". # std errcode 31"\x{00}\x{00}" . # driver errcode 32"\x{00}\x{00}". # driver errstr len 33"". # driver errstr data 34"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected 35"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id 36"\x{02}\x{00}". # col count 37"\x{01}\x{00}". # std col type (bigint/int) 38"\x{03}\x{00}". # drizzle col type 39"\x{02}\x{00}". # col name len 40"id". # col name data 41"\x{13}\x{80}". # std col type (blob/str) 42"\x{fc}\x{00}". # drizzle col type 43"\x{04}\x{00}". # col name len 44"name". # col name data 45"\x{00}"; # row list terminator 46 47use URI::Escape; 48$rds = uri_escape($rds); 49"GET /single?rds=$rds" 50--- response_body eval 51"id,name\r 52" 53 54 55 56=== TEST 2: rds in a single buf (non-empty result set) 57--- config 58location = /single { 59 default_type 'application/x-resty-dbd-stream'; 60 set_unescape_uri $rds $arg_rds; 61 echo_duplicate 1 $rds; 62 rds_csv on; 63} 64--- request eval 65my $rds = 66"\x{00}". # endian 67"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 68"\x{00}". # result type 69"\x{00}\x{00}". # std errcode 70"\x{00}\x{00}" . # driver errcode 71"\x{00}\x{00}". # driver errstr len 72"". # driver errstr data 73"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected 74"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id 75"\x{02}\x{00}". # col count 76"\x{01}\x{00}". # std col type (bigint/int) 77"\x{03}\x{00}". # drizzle col type 78"\x{02}\x{00}". # col name len 79"id". # col name data 80"\x{13}\x{80}". # std col type (blob/str) 81"\x{fc}\x{00}". # drizzle col type 82"\x{04}\x{00}". # col name len 83"name". # col name data 84"\x{01}". # valid row flag 85"\x{01}\x{00}\x{00}\x{00}". # field len 86"2". # field data 87"\x{ff}\x{ff}\x{ff}\x{ff}". # field len 88"". # field data 89"\x{01}". # valid row flag 90"\x{01}\x{00}\x{00}\x{00}". # field len 91"3". # field data 92"\x{03}\x{00}\x{00}\x{00}". # field len 93"bob". # field data 94"\x{00}"; # row list terminator 95 96use URI::Escape; 97$rds = uri_escape($rds); 98"GET /single?rds=$rds" 99--- response_body eval 100"id,name\r 1012,\r 1023,bob\r 103" 104 105 106 107=== TEST 3: rds in a single buf (non-empty result set, and each row in a single buf) 108--- config 109location = /single { 110 default_type 'application/x-resty-dbd-stream'; 111 112 set_unescape_uri $a $arg_a; 113 set_unescape_uri $b $arg_b; 114 set_unescape_uri $c $arg_c; 115 set_unescape_uri $d $arg_d; 116 117 echo_duplicate 1 $a; 118 echo_duplicate 1 $b; 119 echo_duplicate 1 $c; 120 echo_duplicate 1 $d; 121 122 rds_csv on; 123} 124--- request eval 125my $a = 126"\x{00}". # endian 127"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 128"\x{00}". # result type 129"\x{00}\x{00}". # std errcode 130"\x{00}\x{00}" . # driver errcode 131"\x{00}\x{00}". # driver errstr len 132"". # driver errstr data 133"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected 134"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id 135"\x{02}\x{00}". # col count 136"\x{01}\x{00}". # std col type (bigint/int) 137"\x{03}\x{00}". # drizzle col type 138"\x{02}\x{00}". # col name len 139"id". # col name data 140"\x{13}\x{80}". # std col type (blob/str) 141"\x{fc}\x{00}". # drizzle col type 142"\x{04}\x{00}". # col name len 143"name"; # col name data 144 145my $b = 146"\x{01}". # valid row flag 147"\x{01}\x{00}\x{00}\x{00}". # field len 148"2". # field data 149"\x{ff}\x{ff}\x{ff}\x{ff}". # field len 150""; # field data 151 152my $c = 153"\x{01}". # valid row flag 154"\x{01}\x{00}\x{00}\x{00}". # field len 155"3". # field data 156"\x{03}\x{00}\x{00}\x{00}". # field len 157"bob"; # field data 158 159my $d = 160"\x{00}"; # row list terminator 161 162use URI::Escape; 163 164$a = uri_escape($a); 165$b = uri_escape($b); 166$c = uri_escape($c); 167$d = uri_escape($d); 168 169"GET /single?a=$a&b=$b&c=$c&d=$d" 170--- response_body eval 171"id,name\r 1722,\r 1733,bob\r 174" 175 176 177 178=== TEST 4: rds in a single buf (non-empty result set, and each row in a single buf) 179--- config 180location = /single { 181 default_type 'application/x-resty-dbd-stream'; 182 183 set_unescape_uri $a $arg_a; 184 set_unescape_uri $b $arg_b; 185 set_unescape_uri $c $arg_c; 186 187 echo -n $a; 188 echo -n $b; 189 echo -n $c; 190 191 rds_csv on; 192} 193--- request eval 194my $a = 195"\x{00}". # endian 196"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 197"\x{00}". # result type 198"\x{00}\x{00}". # std errcode 199"\x{00}\x{00}" . # driver errcode 200"\x{00}\x{00}". # driver errstr len 201"". # driver errstr data 202"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected 203"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id 204"\x{02}\x{00}". # col count 205"\x{01}\x{00}". # std col type (bigint/int) 206"\x{03}\x{00}". # drizzle col type 207"\x{02}\x{00}". # col name len 208"id". # col name data 209"\x{13}\x{80}". # std col type (blob/str) 210"\x{fc}\x{00}". # drizzle col type 211"\x{04}\x{00}". # col name len 212"name"; # col name data 213 214my $b = 215"\x{01}". # valid row flag 216"\x{01}\x{00}\x{00}\x{00}". # field len 217"2". # field data 218"\x{ff}\x{ff}\x{ff}\x{ff}". # field len 219""; # field data 220 221my $c = 222"\x{01}". # valid row flag 223"\x{01}\x{00}\x{00}\x{00}". # field len 224"3". # field data 225"\x{03}\x{00}\x{00}\x{00}". # field len 226"bob". # field data 227"\x{00}"; # row list terminator 228 229use URI::Escape; 230 231$a = uri_escape($a); 232$b = uri_escape($b); 233$c = uri_escape($c); 234 235"GET /single?a=$a&b=$b&c=$c" 236--- response_body eval 237"id,name\r 2382,\r 2393,bob\r 240" 241 242