diff --git a/.gitignore b/.gitignore
index df496ce..02ff00c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,3 +12,4 @@ cgitrc.5.xml
*.d
.idea
result
+test_utils
diff --git a/test.sh b/test.sh
new file mode 100755
index 0000000..2dd3214
--- /dev/null
+++ b/test.sh
@@ -0,0 +1,13 @@
+#! /usr/bin/env nix-shell
+#! nix-shell -i bash -p
+
+make all || exit 1
+#bozohttpd -c ./cgit -I 9000 . -f -V -C '' cgit -p .
+mkdir test_utils
+nix build nixpkgs#nginx --out-link test_utils/nginx
+nix build nixpkgs#fcgiwrap --out-link test_utils/fcgiwrap
+nix build nixpkgs#git --out-link test_utils/git
+
+
+test_utils/fcgiwrap/bin/fcgiwrap -s unix:test_utils/fcgiwrap.sock -c 4 &
+test_utils/nginx/bin/nginx -c $(pwd)/tests/nginx.conf -p $(pwd)/test_utils
diff --git a/tests/nginx.conf b/tests/nginx.conf
new file mode 100644
index 0000000..283362a
--- /dev/null
+++ b/tests/nginx.conf
@@ -0,0 +1,113 @@
+error_log stderr;
+events {
+ #use kqueue;
+ worker_connections 512;
+}
+http {
+ # Load mime types and configure maximum size of the types hash tables.
+ include ../test_utils/nginx/conf/fastcgi.conf;
+ include ../test_utils/nginx/conf/uwsgi_params;
+ default_type application/octet-stream;
+
+ # optimisation
+ sendfile on;
+ tcp_nopush on;
+ tcp_nodelay on;
+ keepalive_timeout 65;
+ proxy_redirect off;
+ proxy_connect_timeout 60s;
+ proxy_send_timeout 60s;
+ proxy_read_timeout 60s;
+ proxy_http_version 1.1;
+ # don't let clients close the keep-alive connection to upstream. See the nginx blog for details:
+ # https://www.nginx.com/blog/avoiding-top-10-nginx-configuration-mistakes/#no-keepalives
+ proxy_set_header "Connection" "";
+
+
+ server {
+ listen 127.0.0.1:9001 ;
+ server_name localhost ;
+ http2 on;
+ root ../;
+
+ location / {
+ #fastcgi_param CGIT_CONFIG "/nix/store/jn11qwy9fccfv28fj44i68qj5qwp4m0y-cgitrc";
+ fastcgi_param CONTENT_LENGTH "$content_length";
+ fastcgi_param CONTENT_TYPE "$content_type";
+ fastcgi_param DOCUMENT_ROOT "$document_root";
+ fastcgi_param DOCUMENT_URI "$document_uri";
+ fastcgi_param GATEWAY_INTERFACE "CGI/1.1";
+ fastcgi_param HTTPS "$https if_not_empty";
+ fastcgi_param HTTP_HOST "$server_name";
+ fastcgi_param QUERY_STRING "$args";
+ fastcgi_param REDIRECT_STATUS "200";
+ fastcgi_param REMOTE_ADDR "$remote_addr";
+ fastcgi_param REMOTE_PORT "$remote_port";
+ fastcgi_param REQUEST_METHOD "$request_method";
+ fastcgi_param REQUEST_SCHEME "$scheme";
+ fastcgi_param REQUEST_URI "$request_uri";
+ fastcgi_param SCRIPT_FILENAME "./cgit";
+ fastcgi_param SCRIPT_NAME "$fastcgi_script_name";
+ fastcgi_param SERVER_ADDR "$server_addr";
+ fastcgi_param SERVER_NAME "$server_name";
+ fastcgi_param SERVER_PORT "$server_port";
+ fastcgi_param SERVER_PROTOCOL "$server_protocol";
+ fastcgi_param SERVER_SOFTWARE "nginx/$nginx_version";
+ fastcgi_param PATH_INFO $uri;
+ fastcgi_pass unix:test_utils/fcgiwrap.sock;
+ }
+ #location = /cgit.css {
+ # alias ./cgit.css;
+ #}
+ #location = /cgit.png {
+ # alias ./cgit.png;
+ #}
+ #location = /favicon.ico {
+ # alias ./favicon.ico;
+ #}
+ #location = /robots.txt {
+ # alias ./robots.txt;
+ #}
+ location ~ /.+/(info/refs|git-upload-pack) {
+ fastcgi_param CONTENT_LENGTH "$content_length";
+ fastcgi_param CONTENT_TYPE "$content_type";
+ fastcgi_param DOCUMENT_ROOT "$document_root";
+ fastcgi_param DOCUMENT_URI "$document_uri";
+ fastcgi_param GATEWAY_INTERFACE "CGI/1.1";
+ fastcgi_param GIT_HTTP_EXPORT_ALL "1";
+ fastcgi_param GIT_PROJECT_ROOT "/data/git";
+ fastcgi_param HOME "/data/git";
+ fastcgi_param HTTPS "$https if_not_empty";
+ fastcgi_param QUERY_STRING "$query_string";
+ fastcgi_param REDIRECT_STATUS "200";
+ fastcgi_param REMOTE_ADDR "$remote_addr";
+ fastcgi_param REMOTE_PORT "$remote_port";
+ fastcgi_param REQUEST_METHOD "$request_method";
+ fastcgi_param REQUEST_SCHEME "$scheme";
+ fastcgi_param REQUEST_URI "$request_uri";
+ fastcgi_param SCRIPT_FILENAME "./test_utils/git/libexec/git-core/git-http-backend";
+ fastcgi_param SCRIPT_NAME "$fastcgi_script_name";
+ fastcgi_param SERVER_ADDR "$server_addr";
+ fastcgi_param SERVER_NAME "$server_name";
+ fastcgi_param SERVER_PORT "$server_port";
+ fastcgi_param SERVER_PROTOCOL "$server_protocol";
+ fastcgi_param SERVER_SOFTWARE "nginx/$nginx_version";
+ fastcgi_param PATH_INFO $uri;
+ fastcgi_pass unix:/run/fcgiwrap-cgit-main.sock;
+ }
+ autoindex on;
+ more_set_headers 'Access-Control-Allow-Origin: *';
+ more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS';
+ more_set_headers 'Access-Control-Allow-Headers: DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
+ more_set_headers 'Access-Control-Expose-Headers: Content-Length,Content-Range';
+ more_set_headers 'Access-Control-Allow-Credentials: true';
+ }
+
+ disable_symlinks off;
+ log_format combined_vhosts '$remote_addr - $remote_user [$time_local] {host="$host",server_name="$server_name",upstream=$upstream_addr,t=$request_time[u_conn=$upstream_connect_time,u_hdr=$upstream_header_time,u_resp=$upstream_response_time]} "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
+ access_log nginx-access.log combined_vhosts;
+}
+pid nginx.pid;
+error_log nginx-error.log;
+daemon off;
+master_process off;
\ No newline at end of file
|