summaryrefslogtreecommitdiffstats
path: root/debian/tests/uwsgi
blob: 3350144806717d5ee8785791dc6f2817bcd704f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
set -eux

RC=0
fail () {
	echo "FAIL: $@" >&2
	RC=1
}


function exit_handler()
{
    systemctl stop apache2 || true
    if test -f /run/uwsgi/uwsgi.pid; then
	kill -TERM $(cat /run/uwsgi/uwsgi.pid)
    fi
    cat $AUTOPKGTEST_ARTIFACTS/apache2/error.log || true
    cat $AUTOPKGTEST_ARTIFACTS/apache2/access.log || true
    cat $AUTOPKGTEST_ARTIFACTS/apache2/uwsgi.log || true
    cat $AUTOPKGTEST_ARTIFACTS/apache2/uwsgi.error.log || true
}
trap exit_handler EXIT


a2enmod proxy
a2enmod proxy_uwsgi

rsync -a /var/log/apache2 "$AUTOPKGTEST_ARTIFACTS"
rm /var/log/apache2/*
mount -o bind "$AUTOPKGTEST_ARTIFACTS/apache2" /var/log/apache2

tee /etc/apache2/sites-available/000-default.conf <<'EOF'
<VirtualHost *:80>
	# The ServerName directive sets the request scheme, hostname and port that
	# the server uses to identify itself. This is used when creating
	# redirection URLs. In the context of virtual hosts, the ServerName
	# specifies what hostname must appear in the request's Host: header to
	# match this virtual host. For the default virtual host (this file) this
	# value is not decisive as it is used as a last resort host regardless.
	# However, you must set it for any further virtual host explicitly.
	#ServerName www.example.com

	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html

	# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
	# error, crit, alert, emerg.
	# It is also possible to configure the loglevel for particular
	# modules, e.g.
	#LogLevel info ssl:warn

	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

	# For most configuration files from conf-available/, which are
	# enabled or disabled at a global level, it is possible to
	# include a line for only one particular virtual host. For example the
	# following line enables the CGI configuration for this host only
	# after it has been globally disabled with "a2disconf".
	#Include conf-available/serve-cgi-bin.conf
	ProxyPass "/uwsgi" "unix:/run/uwsgi/test.socket|uwsgi://localhost"
</VirtualHost>
EOF

systemctl restart apache2

test -d /etc/uwsgi/ || mkdir /etc/uwsgi



tee /etc/systemd/system/uwsgi-app@.socket <<EOF
[Unit]
Description=Socket for uWSGI app %i

[Socket]
ListenStream=/run/uwsgi/%i.socket
SocketUser=www-%i
SocketGroup=www-data
SocketMode=0660

[Install]
WantedBy=sockets.target
EOF

tee /etc/systemd/system/uwsgi-app@.service <<EOF
[Unit]
Description=%i uWSGI app
After=syslog.target

[Service]
ExecStart=/usr/bin/uwsgi \
        --ini /etc/uwsgi/apps-available/%i.ini \
        --socket /run/uwsgi/%i.socket
User=www-%i
Group=www-data
Restart=on-failure
KillSignal=SIGQUIT
Type=notify
StandardError=file:/var/log/apache2/uwsgi.error.log
StandardOutput=file:/var/log/apache2/uwsgi.log
NotifyAccess=all

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload

useradd uwsgi_test
useradd www-test

tee /etc/uwsgi/apps-available/test.ini <<EOF
[uwsgi]
chdir=/tmp
master=True
cheap=True
die-on-idle=True
manage-script-name=True
plugin=python3
wsgi-file=/tmp/uwsgi.py
EOF


tee /tmp/uwsgi.py <<'EOF'
import wsgiref.headers as h
def application(env, start_response):
    buggy_header=('buggy','buggy#\r\nbuggy2:buggy2')
    start_response('200 OK', [('Content-Type','text/html'),buggy_header])
    ret = "Hello World Headers {}".format(env).encode()
    return [ret]
EOF
chown 'www-test:www-test' /tmp/uwsgi.py
chmod +x /tmp/uwsgi.py

systemctl enable uwsgi-app@test.socket
systemctl enable uwsgi-app@test.service
systemctl start uwsgi-app@test.socket
systemctl restart apache2


wget -S -q --output-document - http://localhost/uwsgi
wget -q --output-document - http://localhost/uwsgi | grep "^Hello World"

exit $RC
-