Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

460 lines (396 sloc) 10.921 kB
# vi:filetype=
use lib 'lib';
use Test::Nginx::Socket;
#repeat_each(10);
no_shuffle();
repeat_each(2);
plan tests => repeat_each() * (2 * blocks() + 7);
$ENV{TEST_NGINX_MYSQL_HOST} ||= '127.0.0.1';
$ENV{TEST_NGINX_MYSQL_PORT} ||= 3306;
our $http_config = <<'_EOC_';
upstream backend {
drizzle_server $TEST_NGINX_MYSQL_HOST:$TEST_NGINX_MYSQL_PORT protocol=mysql
dbname=ngx_test user=ngx_test password=ngx_test;
}
_EOC_
#no_long_string();
run_tests();
#no_diff();
__DATA__
=== TEST 1: sanity
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_pass backend;
#drizzle_dbname $dbname;
drizzle_query 'select * from cats';
rds_json on;
}
--- request
GET /mysql
--- response_headers_like
X-Resty-DBD-Module: ngx_drizzle \d+\.\d+\.\d+
Content-Type: application/json
--- response_body chomp
[{"id":2,"name":null},{"id":3,"name":"bob"}]
--- timeout: 15
=== TEST 2: keep-alive
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_pass backend;
#drizzle_dbname $dbname;
drizzle_query 'select * from cats';
rds_json on;
}
--- request
GET /mysql
--- response_body chop
[{"id":2,"name":null},{"id":3,"name":"bob"}]
=== TEST 3: update
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_pass backend;
#drizzle_dbname $dbname;
drizzle_query "update cats set name='bob' where name='bob'";
rds_json on;
}
--- request
GET /mysql
--- response_body chop
{"errcode":0,"errstr":"Rows matched: 1 Changed: 0 Warnings: 0"}
=== TEST 4: select empty result
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_pass backend;
drizzle_query "select * from cats where name='tom'";
rds_json on;
}
--- request
GET /mysql
--- response_body chop
[]
=== TEST 5: update & no module header
--- http_config eval: $::http_config
--- config
location /mysql {
if ($arg_name ~ '[^A-Za-z0-9]') {
return 400;
}
drizzle_pass backend;
drizzle_module_header off;
drizzle_query "update cats set name='$arg_name' where name='$arg_name'";
rds_json on;
}
--- request
GET /mysql?name=bob
--- response_headers
X-Resty-DBD-Module:
Content-Type: application/json
--- response_body chop
{"errcode":0,"errstr":"Rows matched: 1 Changed: 0 Warnings: 0"}
=== TEST 6: invalid SQL
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query "select '32";
rds_json on;
}
--- response_headers
X-Resty-DBD-Module:
Content-Type: text/html
--- request
GET /mysql
--- error_code: 500
--- response_body_like: 500 Internal Server Error
=== TEST 7: single row, single col
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists singles";
echo;
echo_location /mysql "create table singles (name varchar(15));";
echo;
echo_location /mysql "insert into singles values ('marry');";
echo;
echo_location /mysql "select * from singles;";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"affected_rows":1}
[{"name":"marry"}]
--- skip_nginx: 2: < 0.7.46
--- timeout: 5
=== TEST 8: floating number and insert id
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial not null, primary key (id), val real);";
echo;
echo_location /mysql "insert into foo (val) values (3.1415926);";
echo;
echo_location /mysql "select * from foo;";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
[{"id":1,"val":3.1415926}]
--- skip_nginx: 2: < 0.7.46
=== TEST 9: text blob field
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, body text);";
echo;
echo_location /mysql "insert into foo (body) values ('hello');";
echo;
echo_location /mysql "select * from foo;";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
[{"id":1,"body":"hello"}]
--- skip_nginx: 2: < 0.7.46
=== TEST 10: bool blob field
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, flag bool);";
echo;
echo_location /mysql "insert into foo (flag) values (true);";
echo;
echo_location /mysql "insert into foo (flag) values (false);";
echo;
echo_location /mysql "select * from foo order by id;";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
{"errcode":0,"insert_id":2,"affected_rows":1}
[{"id":1,"flag":1},{"id":2,"flag":0}]
--- skip_nginx: 2: < 0.7.46
--- timeout: 10
=== TEST 11: bit field
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, flag bit);";
echo;
echo_location /mysql "insert into foo (flag) values (1);";
echo;
echo_location /mysql "insert into foo (flag) values (0);";
echo;
echo_location /mysql "select * from foo order by id;";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
{"errcode":0,"insert_id":2,"affected_rows":1}
[{"id":1,"flag":"\u0001"},{"id":2,"flag":"\u0000"}]
--- skip_nginx: 2: < 0.7.46
--- timeout: 10
=== TEST 12: date type
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, created date);";
echo;
echo_location /mysql "insert into foo (created) values ('2007-05-24');";
echo;
echo_location /mysql "select * from foo";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
[{"id":1,"created":"2007-05-24"}]
=== TEST 13: strings need to be escaped (forcing utf8)
--- http_config
upstream backend {
drizzle_server $TEST_NGINX_MYSQL_HOST:$TEST_NGINX_MYSQL_PORT protocol=mysql
dbname=ngx_test user=ngx_test password=ngx_test
charset=utf8;
}
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, body char(25));";
echo;
echo_location /mysql "insert into foo (body) values ('a\\r\\nb\\b你好\Z');";
echo;
echo_location /mysql "select * from foo";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
[{"id":1,"body":"a\r\nb\b??\u001a"}]
--- timeout: 5
=== TEST 14: strings need to be escaped
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, body char(25));";
echo;
echo_location /mysql "insert into foo (body) values ('a\\r\\nb\\b你好\Z');";
echo;
echo_location /mysql "select * from foo";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
[{"id":1,"body":"a\r\nb\b你好\u001a"}]
=== TEST 15: null values
--- http_config eval: $::http_config
--- config
location /test {
echo_location /mysql "drop table if exists foo";
echo;
echo_location /mysql "create table foo (id serial, name char(10), age integer);";
echo;
echo_location /mysql "insert into foo (name, age) values ('', null);";
echo;
echo_location /mysql "insert into foo (name, age) values (null, 0);";
echo;
echo_location /mysql "select * from foo order by id";
echo;
}
location /mysql {
drizzle_pass backend;
drizzle_module_header off;
drizzle_query $query_string;
rds_json on;
}
--- request
GET /test
--- response_body
{"errcode":0}
{"errcode":0}
{"errcode":0,"insert_id":1,"affected_rows":1}
{"errcode":0,"insert_id":2,"affected_rows":1}
[{"id":1,"name":"","age":null},{"id":2,"name":null,"age":0}]
--- timeout: 10
=== TEST 16: call proc
--- http_config eval: $::http_config
--- config
location /mysql {
drizzle_pass backend;
#drizzle_dbname $dbname;
drizzle_query "call myproc()";
rds_json on;
}
--- request
GET /mysql
--- response_body chop
{"errcode":0,"errstr":"Rows matched: 1 Changed: 0 Warnings: 0"}
--- SKIP
=== TEST 17: bad MIME type
--- http_config eval: $::http_config
--- config
location /mysql {
default_type "text/css";
echo hello;
rds_json on;
}
--- request
GET /mysql
--- response_headers
Content-Type: text/css
--- response_body
hello
--- timeout: 15
Jump to Line
Something went wrong with that request. Please try again.