diff options
Diffstat (limited to 'ngx_postgres-1.0/t/restful.t')
-rw-r--r-- | ngx_postgres-1.0/t/restful.t | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/ngx_postgres-1.0/t/restful.t b/ngx_postgres-1.0/t/restful.t new file mode 100644 index 0000000..74b111b --- /dev/null +++ b/ngx_postgres-1.0/t/restful.t @@ -0,0 +1,338 @@ +# vi:filetype=perl + +use lib 'lib'; +use Test::Nginx::Socket; + +repeat_each(1); + +plan tests => repeat_each() * (blocks() * 3); + +$ENV{TEST_NGINX_POSTGRESQL_HOST} ||= '127.0.0.1'; +$ENV{TEST_NGINX_POSTGRESQL_PORT} ||= 5432; + +our $http_config = <<'_EOC_'; + upstream database { + postgres_server $TEST_NGINX_POSTGRESQL_HOST:$TEST_NGINX_POSTGRESQL_PORT + dbname=ngx_test user=ngx_test password=ngx_test; + } +_EOC_ + +our $config = <<'_EOC_'; + set $random 123; + + location = /auth { + internal; + + postgres_escape $user $remote_user; + postgres_escape $pass $remote_passwd; + + postgres_pass database; + postgres_query "SELECT login FROM users WHERE login=$user AND pass=$pass"; + postgres_rewrite no_rows 403; + postgres_output none; + } + + location = /numbers/ { + auth_request /auth; + postgres_pass database; + + postgres_query HEAD GET "SELECT * FROM numbers"; + + postgres_query POST "INSERT INTO numbers VALUES('$random') RETURNING *"; + postgres_rewrite POST changes 201; + + postgres_query DELETE "DELETE FROM numbers"; + postgres_rewrite DELETE no_changes 204; + postgres_rewrite DELETE changes 204; + } + + location ~ /numbers/(\d+) { + auth_request /auth; + postgres_pass database; + + postgres_query HEAD GET "SELECT * FROM numbers WHERE number='$1'"; + postgres_rewrite HEAD GET no_rows 410; + + postgres_query PUT "UPDATE numbers SET number='$1' WHERE number='$1' RETURNING *"; + postgres_rewrite PUT no_changes 410; + + postgres_query DELETE "DELETE FROM numbers WHERE number='$1'"; + postgres_rewrite DELETE no_changes 410; + postgres_rewrite DELETE changes 204; + } +_EOC_ + +our $request_headers = <<'_EOC_'; +Authorization: Basic bmd4X3Rlc3Q6bmd4X3Rlc3Q= +_EOC_ + +no_shuffle(); +run_tests(); + +__DATA__ + +=== TEST 1: clean collection +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +DELETE /numbers/ +--- error_code: 204 +--- response_headers +! Content-Type +--- response_body eval +"" +--- timeout: 10 + + + +=== TEST 2: list empty collection +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +GET /numbers/ +--- error_code: 200 +--- response_headers +Content-Type: application/x-resty-dbd-stream +--- response_body eval +"\x{00}". # endian +"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 +"\x{00}". # result type +"\x{00}\x{00}". # std errcode +"\x{02}\x{00}". # driver errcode +"\x{00}\x{00}". # driver errstr len +"". # driver errstr data +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id +"\x{01}\x{00}". # col count +"\x{09}\x{00}". # std col type (integer/int) +"\x{17}\x{00}". # driver col type +"\x{06}\x{00}". # col name len +"number". # col name data +"\x{00}" # row list terminator +--- timeout: 10 + + + +=== TEST 3: insert resource into collection +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +POST /numbers/ +--- error_code: 201 +--- response_headers +Content-Type: application/x-resty-dbd-stream +--- response_body eval +"\x{00}". # endian +"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 +"\x{00}". # result type +"\x{00}\x{00}". # std errcode +"\x{02}\x{00}". # driver errcode +"\x{00}\x{00}". # driver errstr len +"". # driver errstr data +"\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id +"\x{01}\x{00}". # col count +"\x{09}\x{00}". # std col type (integer/int) +"\x{17}\x{00}". # driver col type +"\x{06}\x{00}". # col name len +"number". # col name data +"\x{01}". # valid row flag +"\x{03}\x{00}\x{00}\x{00}". # field len +"123". # field data +"\x{00}" # row list terminator +--- timeout: 10 +--- skip_slave: 3: CentOS + + + +=== TEST 4: list collection +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +GET /numbers/ +--- error_code: 200 +--- response_headers +Content-Type: application/x-resty-dbd-stream +--- response_body eval +"\x{00}". # endian +"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 +"\x{00}". # result type +"\x{00}\x{00}". # std errcode +"\x{02}\x{00}". # driver errcode +"\x{00}\x{00}". # driver errstr len +"". # driver errstr data +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id +"\x{01}\x{00}". # col count +"\x{09}\x{00}". # std col type (integer/int) +"\x{17}\x{00}". # driver col type +"\x{06}\x{00}". # col name len +"number". # col name data +"\x{01}". # valid row flag +"\x{03}\x{00}\x{00}\x{00}". # field len +"123". # field data +"\x{00}" # row list terminator +--- timeout: 10 +--- skip_slave: 3: CentOS + + + +=== TEST 5: get resource +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +GET /numbers/123 +--- error_code: 200 +--- response_headers +Content-Type: application/x-resty-dbd-stream +--- response_body eval +"\x{00}". # endian +"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 +"\x{00}". # result type +"\x{00}\x{00}". # std errcode +"\x{02}\x{00}". # driver errcode +"\x{00}\x{00}". # driver errstr len +"". # driver errstr data +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id +"\x{01}\x{00}". # col count +"\x{09}\x{00}". # std col type (integer/int) +"\x{17}\x{00}". # driver col type +"\x{06}\x{00}". # col name len +"number". # col name data +"\x{01}". # valid row flag +"\x{03}\x{00}\x{00}\x{00}". # field len +"123". # field data +"\x{00}" # row list terminator +--- timeout: 10 +--- skip_slave: 3: CentOS + + + +=== TEST 6: update resource +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers +Authorization: Basic bmd4X3Rlc3Q6bmd4X3Rlc3Q= +Content-Length: 0 +--- request +PUT /numbers/123 +--- error_code: 200 +--- response_headers +Content-Type: application/x-resty-dbd-stream +--- response_body eval +"\x{00}". # endian +"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 +"\x{00}". # result type +"\x{00}\x{00}". # std errcode +"\x{02}\x{00}". # driver errcode +"\x{00}\x{00}". # driver errstr len +"". # driver errstr data +"\x{01}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id +"\x{01}\x{00}". # col count +"\x{09}\x{00}". # std col type (integer/int) +"\x{17}\x{00}". # driver col type +"\x{06}\x{00}". # col name len +"number". # col name data +"\x{01}". # valid row flag +"\x{03}\x{00}\x{00}\x{00}". # field len +"123". # field data +"\x{00}" # row list terminator +--- timeout: 10 +--- skip_slave: 3: CentOS + + + +=== TEST 7: remove resource +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +DELETE /numbers/123 +--- error_code: 204 +--- response_headers +! Content-Type +--- response_body eval +"" +--- timeout: 10 +--- skip_slave: 3: CentOS + + + +=== TEST 8: update non-existing resource +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers +Authorization: Basic bmd4X3Rlc3Q6bmd4X3Rlc3Q= +Content-Length: 0 +--- request +PUT /numbers/123 +--- error_code: 410 +--- response_headers +Content-Type: text/html +--- response_body_like: 410 Gone +--- timeout: 10 +--- skip_slave: 3: CentOS + + + +=== TEST 9: get non-existing resource +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +GET /numbers/123 +--- error_code: 410 +--- response_headers +Content-Type: text/html +--- response_body_like: 410 Gone +--- timeout: 10 + + + +=== TEST 10: remove non-existing resource +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +DELETE /numbers/123 +--- error_code: 410 +--- response_headers +Content-Type: text/html +--- response_body_like: 410 Gone +--- timeout: 10 + + + +=== TEST 11: list empty collection (done) +--- http_config eval: $::http_config +--- config eval: $::config +--- more_headers eval: $::request_headers +--- request +GET /numbers/ +--- error_code: 200 +--- response_headers +Content-Type: application/x-resty-dbd-stream +--- response_body eval +"\x{00}". # endian +"\x{03}\x{00}\x{00}\x{00}". # format version 0.0.3 +"\x{00}". # result type +"\x{00}\x{00}". # std errcode +"\x{02}\x{00}". # driver errcode +"\x{00}\x{00}". # driver errstr len +"". # driver errstr data +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # rows affected +"\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}\x{00}". # insert id +"\x{01}\x{00}". # col count +"\x{09}\x{00}". # std col type (integer/int) +"\x{17}\x{00}". # driver col type +"\x{06}\x{00}". # col name len +"number". # col name data +"\x{00}" # row list terminator +--- timeout: 10 |