Permalink
Fetching contributors…
Cannot retrieve contributors at this time
344 lines (303 sloc) 6.77 KB
# vi:filetype=
use lib 'lib';
use Test::Nginx::Socket;
repeat_each(2);
plan tests => repeat_each() * 3 * blocks();
$ENV{TEST_NGINX_MYSQL_PORT} ||= 3306;
our $http_config = <<'_EOC_';
upstream backend {
drizzle_server 127.0.0.1:$TEST_NGINX_MYSQL_PORT protocol=mysql
dbname=ngx_test user=ngx_test password=ngx_test;
}
_EOC_
#no_diff();
no_long_string();
run_tests();
__DATA__
=== TEST 1: sanity
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=presence
--- response_body eval
qq{male,name,height\r
0,"\rkay",0.005\r
0,ab;c,0.005\r
0,foo\tbar,21\r
0,"hello ""tom",3.14\r
0,"hey
dad",7\r
1,"hi,ya",-3\r
}
=== TEST 2: using ; as the field separator
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator ';';
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=presence
--- response_body eval
qq{male;name;height\r
0;"\rkay";0.005\r
0;"ab;c";0.005\r
0;foo\tbar;21\r
0;"hello ""tom";3.14\r
0;"hey
dad";7\r
1;hi,ya;-3\r
}
=== TEST 3: using tab as the field separator
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=presence
--- response_body eval
qq{male\tname\theight\r
0\t"\rkay"\t0.005\r
0\tab;c\t0.005\r
0\t"foo\tbar"\t21\r
0\t"hello ""tom"\t3.14\r
0\t"hey
dad"\t7\r
1\thi,ya\t-3\r
}
=== TEST 4: explicitly using \r\n as the row terminator
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\r\n';
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=presence
--- response_body eval
qq{male\tname\theight\r
0\t"\rkay"\t0.005\r
0\tab;c\t0.005\r
0\t"foo\tbar"\t21\r
0\t"hello ""tom"\t3.14\r
0\t"hey
dad"\t7\r
1\thi,ya\t-3\r
}
=== TEST 5: using \n as the row terminator
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\n';
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=presence
--- response_body eval
qq{male\tname\theight
0\t"\rkay"\t0.005
0\tab;c\t0.005
0\t"foo\tbar"\t21
0\t"hello ""tom"\t3.14
0\t"hey
dad"\t7
1\thi,ya\t-3
}
=== TEST 6: explicitly field name header on
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\n';
rds_csv_field_name_header on;
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=presence
--- response_body eval
qq{male\tname\theight
0\t"\rkay"\t0.005
0\tab;c\t0.005
0\t"foo\tbar"\t21
0\t"hello ""tom"\t3.14
0\t"hey
dad"\t7
1\thi,ya\t-3
}
=== TEST 7: explicitly field name header off
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\n';
rds_csv_field_name_header off;
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=absence
--- response_body eval
qq{0\t"\rkay"\t0.005
0\tab;c\t0.005
0\t"foo\tbar"\t21
0\t"hello ""tom"\t3.14
0\t"hey
dad"\t7
1\thi,ya\t-3
}
=== TEST 8: the "charset" directive does not affect us
--- http_config eval: $::http_config
--- config
location /mysql {
charset "gbk";
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\n';
rds_csv_field_name_header off;
rds_csv on;
}
--- request
POST /mysql
sql=select%20*%20from%20cats;
--- response_headers
Content-Type: text/csv; header=absence
--- response_body eval
qq{0\t"\rkay"\t0.005
0\tab;c\t0.005
0\t"foo\tbar"\t21
0\t"hello ""tom"\t3.14
0\t"hey
dad"\t7
1\thi,ya\t-3
}
=== TEST 9: set content type
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\n';
rds_csv_field_name_header off;
rds_csv_content_type "text/tab-separated-values";
rds_csv on;
}
--- request
GET /mysql
--- response_headers
Content-Type: text/tab-separated-values
--- response_body eval
qq{0\t"\rkay"\t0.005
0\tab;c\t0.005
0\t"foo\tbar"\t21
0\t"hello ""tom"\t3.14
0\t"hey
dad"\t7
1\thi,ya\t-3
}
=== TEST 10: set content type (bigger buffer size)
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select * from dogs order by name asc;
";
drizzle_pass backend;
rds_csv_field_separator '\t';
rds_csv_row_terminator '\n';
rds_csv_field_name_header off;
rds_csv_content_type "text/tab-separated-values";
rds_csv on;
rds_csv_buffer_size 8k;
}
--- request
GET /mysql
--- response_headers
Content-Type: text/tab-separated-values
--- response_body eval
qq{0\t"\rkay"\t0.005
0\tab;c\t0.005
0\t"foo\tbar"\t21
0\t"hello ""tom"\t3.14
0\t"hey
dad"\t7
1\thi,ya\t-3
}
=== TEST 11: escaping column names
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_query "
select `\"name\"`, height from birds order by height limit 1;
";
drizzle_pass backend;
rds_csv on;
rds_csv_row_terminator "\n";
}
--- request
GET /mysql
--- response_headers
Content-Type: text/csv; header=presence
--- response_body
"""name""",height
"hi,ya",-3