Skip to content

Commit fd811c6

Browse files
authored
Add SFTPGo login automation test scripts (#122)
* Add test script for SFTPGo admin login automation * Add SFTPGo login automation test script * Update webserver tests for SFTPGo configuration and PHP versions
1 parent 528ed39 commit fd811c6

File tree

3 files changed

+142
-9
lines changed

3 files changed

+142
-9
lines changed

tests/test-sftpgo-admin-login.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
# Temporary file to store cookies
4+
COOKIE_FILE=$(mktemp)
5+
6+
# Fetch the login page and extract CSRF token
7+
TOKEN=$(curl -k -s -c "$COOKIE_FILE" https://127.0.0.1/sftpgo/web/admin/login \
8+
| grep -Po '(?<=name="_form_token" value=")[^"]*')
9+
10+
#echo "Token retrieved: $TOKEN"
11+
12+
# Log in with username/password + token
13+
curl -k -s -b "$COOKIE_FILE" -c "$COOKIE_FILE" \
14+
-d "username=admin" \
15+
-d "password=admin" \
16+
-d "_form_token=$TOKEN" \
17+
-X POST https://127.0.0.1/sftpgo/web/admin/login -D headers.txt
18+
19+
# Clean up
20+
rm "$COOKIE_FILE"
21+
rm headers.txt

tests/test-sftpgo-login.sh

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/bin/bash
2+
3+
# Temporary file to store cookies
4+
COOKIE_FILE=$(mktemp)
5+
6+
# Fetch the login page and extract CSRF token
7+
TOKEN=$(curl -k -s -c "$COOKIE_FILE" https://127.0.0.1/sftpgo/web/client/login \
8+
| grep -Po '(?<=name="_form_token" value=")[^"]*')
9+
10+
#echo "Token retrieved: $TOKEN"
11+
12+
# Log in with username/password + token
13+
curl -k -s -b "$COOKIE_FILE" -c "$COOKIE_FILE" \
14+
-d "username=9001" \
15+
-d "password=9001" \
16+
-d "_form_token=$TOKEN" \
17+
-X POST https://127.0.0.1/sftpgo/web/client/login -D headers.txt
18+
19+
# Clean up
20+
rm "$COOKIE_FILE"
21+
rm headers.txt

tests/webserver.robot

Lines changed: 100 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ Check if webserver is installed correctly
3131
Set Suite Variable ${module_id} ${output.module_id}
3232

3333
Check if webserver can be configured
34-
${rc} = Execute Command api-cli run module/${module_id}/configure-module --data '{"path":"/sftpgo","http2https": true,"sftp_tcp_port": 2092,"sftpgo_service": true}'
34+
${rc} = Execute Command api-cli run module/${module_id}/configure-module --data '{"path":"/sftpgo","http2https": true,"sftp_tcp_port": 3092,"sftpgo_service": true}'
3535
... return_rc=True return_stdout=False
3636
Should Be Equal As Integers ${rc} 0
3737

@@ -44,12 +44,12 @@ Check if webserver works as expected
4444
Retry test Backend URL is reachable
4545

4646
Check if vhost 9001 can be created
47-
${rc} = Execute Command api-cli run module/${module_id}/create-vhost --data '{"PhpVersion":"8.2","ServerNames":["foo.com"],"MemoryLimit":512,"AllowUrlfOpen":"disabled","UploadMaxFilesize":4,"PostMaxSize":8,"MaxExecutionTime":0,"MaxFileUploads":20,"lets_encrypt":false,"http2https":false,"Indexes":"disabled","status":"enabled"}'
47+
${rc} = Execute Command api-cli run module/${module_id}/create-vhost --data '{"PhpVersion":"","ServerNames":["foo.com"],"MemoryLimit":512,"AllowUrlfOpen":"disabled","UploadMaxFilesize":4,"PostMaxSize":8,"MaxExecutionTime":0,"MaxFileUploads":20,"lets_encrypt":false,"http2https":false,"Indexes":"disabled","status":"enabled"}'
4848
... return_rc=True return_stdout=False
4949
Should Be Equal As Integers ${rc} 0
5050

5151
Check if vhost 9001 can be updated
52-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.2","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
52+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":false,"http2https": false,"Indexes":"enabled","status":"enabled"}'
5353
... return_rc=True return_stdout=False
5454
Should Be Equal As Integers ${rc} 0
5555

@@ -69,54 +69,145 @@ Retrieve virtualhost john.com backend URL
6969
Check if virtualhost john.com works as expected
7070
Retry test VirtualHost john.com URL is reachable
7171

72+
Create a phpinfo to the 9001 vhost
73+
${output} ${rc} = Execute Command echo '<?php phpinfo();?>' > /home/${module_id}/.local/share/containers/storage/volumes/websites/_data/9001/phpinfo.php
74+
... return_rc=True
75+
Should Be Equal As Integers ${rc} 0
76+
7277
Check if vhost 9001 can use PHP74
73-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"7.4","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
78+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"7.4","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":2000,"AllowUrlfOpen":"enabled","UploadMaxFilesize":2000,"PostMaxSize":2000,"MaxExecutionTime":3600,"MaxFileUploads":20000,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
7479
... return_rc=True return_stdout=False
7580
Should Be Equal As Integers ${rc} 0
7681

7782
Check if virtualhost john.com works as expected after PHP74 update
7883
Retry test VirtualHost john.com URL is reachable
7984

85+
Check if phpinfo.php uses PHP 7.4 with the custom settings
86+
${output} = Execute Command curl -H "Host: john.com" ${backend_url}/phpinfo.php
87+
Should Contain ${output} PHP 7.4
88+
Should Contain ${output} <tr><td class="e">memory_limit</td><td class="v">2000M</td><td class="v">2000M</td></tr>
89+
Should Contain ${output} <tr><td class="e">allow_url_fopen</td><td class="v">On</td><td class="v">On</td></tr>
90+
Should Contain ${output} <tr><td class="e">upload_max_filesize</td><td class="v">2000M</td><td class="v">2000M</td></tr>
91+
Should Contain ${output} <tr><td class="e">post_max_size</td><td class="v">2000M</td><td class="v">2000M</td></tr>
92+
Should Contain ${output} <tr><td class="e">max_execution_time</td><td class="v">3600</td><td class="v">3600</td></tr>
93+
Should Contain ${output} <tr><td class="e">max_file_uploads</td><td class="v">20000</td><td class="v">20000</td></tr>
94+
8095
Check if vhost 9001 can use PHP80
81-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.0","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
96+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.0","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":2000,"AllowUrlfOpen":"enabled","UploadMaxFilesize":2000,"PostMaxSize":2000,"MaxExecutionTime":3600,"MaxFileUploads":20000,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
8297
... return_rc=True return_stdout=False
8398
Should Be Equal As Integers ${rc} 0
8499

85100
Check if virtualhost john.com works as expected after PHP80 update
86101
Retry test VirtualHost john.com URL is reachable
87102

103+
Check if phpinfo.php uses PHP 8.0 with the custom settings
104+
${output} = Execute Command curl -H "Host: john.com" ${backend_url}/phpinfo.php
105+
Should Contain ${output} PHP 8.0
106+
Should Contain ${output} <tr><td class="e">memory_limit</td><td class="v">2000M</td><td class="v">2000M</td></tr>
107+
Should Contain ${output} <tr><td class="e">allow_url_fopen</td><td class="v">On</td><td class="v">On</td></tr>
108+
Should Contain ${output} <tr><td class="e">upload_max_filesize</td><td class="v">2000M</td><td class="v">2000M</td></tr>
109+
Should Contain ${output} <tr><td class="e">post_max_size</td><td class="v">2000M</td><td class="v">2000M</td></tr>
110+
Should Contain ${output} <tr><td class="e">max_execution_time</td><td class="v">3600</td><td class="v">3600</td></tr>
111+
Should Contain ${output} <tr><td class="e">max_file_uploads</td><td class="v">20000</td><td class="v">20000</td></tr>
112+
88113
Check if vhost 9001 can use PHP81
89-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.1","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
114+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.1","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":2000,"AllowUrlfOpen":"enabled","UploadMaxFilesize":2000,"PostMaxSize":2000,"MaxExecutionTime":3600,"MaxFileUploads":20000,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
90115
... return_rc=True return_stdout=False
91116
Should Be Equal As Integers ${rc} 0
92117

93118
Check if virtualhost john.com works as expected after PHP81 update
94119
Retry test VirtualHost john.com URL is reachable
95120

121+
Check if phpinfo.php uses PHP 8.1 with the custom settings
122+
${output} = Execute Command curl -H "Host: john.com" ${backend_url}/phpinfo.php
123+
Should Contain ${output} PHP 8.1
124+
Should Contain ${output} <tr><td class="e">memory_limit</td><td class="v">2000M</td><td class="v">2000M</td></tr>
125+
Should Contain ${output} <tr><td class="e">allow_url_fopen</td><td class="v">On</td><td class="v">On</td></tr>
126+
Should Contain ${output} <tr><td class="e">upload_max_filesize</td><td class="v">2000M</td><td class="v">2000M</td></tr>
127+
Should Contain ${output} <tr><td class="e">post_max_size</td><td class="v">2000M</td><td class="v">2000M</td></tr>
128+
Should Contain ${output} <tr><td class="e">max_execution_time</td><td class="v">3600</td><td class="v">3600</td></tr>
129+
Should Contain ${output} <tr><td class="e">max_file_uploads</td><td class="v">20000</td><td class="v">20000</td></tr>
130+
96131
Check if vhost 9001 can use PHP82
97-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.2","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
132+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.2","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":2000,"AllowUrlfOpen":"enabled","UploadMaxFilesize":2000,"PostMaxSize":2000,"MaxExecutionTime":3600,"MaxFileUploads":20000,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
98133
... return_rc=True return_stdout=False
99134
Should Be Equal As Integers ${rc} 0
100135

101136
Check if virtualhost john.com works as expected after PHP82 update
102137
Retry test VirtualHost john.com URL is reachable
103138

139+
Check if phpinfo.php uses PHP 8.2 with the custom settings
140+
${output} = Execute Command curl -H "Host: john.com" ${backend_url}/phpinfo.php
141+
Should Contain ${output} PHP 8.2
142+
Should Contain ${output} <tr><td class="e">memory_limit</td><td class="v">2000M</td><td class="v">2000M</td></tr>
143+
Should Contain ${output} <tr><td class="e">allow_url_fopen</td><td class="v">On</td><td class="v">On</td></tr>
144+
Should Contain ${output} <tr><td class="e">upload_max_filesize</td><td class="v">2000M</td><td class="v">2000M</td></tr>
145+
Should Contain ${output} <tr><td class="e">post_max_size</td><td class="v">2000M</td><td class="v">2000M</td></tr>
146+
Should Contain ${output} <tr><td class="e">max_execution_time</td><td class="v">3600</td><td class="v">3600</td></tr>
147+
Should Contain ${output} <tr><td class="e">max_file_uploads</td><td class="v">20000</td><td class="v">20000</td></tr>
148+
104149
Check if vhost 9001 can use PHP83
105-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.3","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
150+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.3","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":2000,"AllowUrlfOpen":"enabled","UploadMaxFilesize":2000,"PostMaxSize":2000,"MaxExecutionTime":3600,"MaxFileUploads":20000,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
106151
... return_rc=True return_stdout=False
107152
Should Be Equal As Integers ${rc} 0
108153

109154
Check if virtualhost john.com works as expected after PHP83 update
110155
Retry test VirtualHost john.com URL is reachable
111156

157+
Check if phpinfo.php uses PHP 8.3 with the custom settings
158+
${output} = Execute Command curl -H "Host: john.com" ${backend_url}/phpinfo.php
159+
Should Contain ${output} PHP 8.3
160+
Should Contain ${output} <tr><td class="e">memory_limit</td><td class="v">2000M</td><td class="v">2000M</td></tr>
161+
Should Contain ${output} <tr><td class="e">allow_url_fopen</td><td class="v">On</td><td class="v">On</td></tr>
162+
Should Contain ${output} <tr><td class="e">upload_max_filesize</td><td class="v">2000M</td><td class="v">2000M</td></tr>
163+
Should Contain ${output} <tr><td class="e">post_max_size</td><td class="v">2000M</td><td class="v">2000M</td></tr>
164+
Should Contain ${output} <tr><td class="e">max_execution_time</td><td class="v">3600</td><td class="v">3600</td></tr>
165+
Should Contain ${output} <tr><td class="e">max_file_uploads</td><td class="v">20000</td><td class="v">20000</td></tr>
166+
112167
Check if vhost 9001 can use PHP84
113-
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.4","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":1024,"AllowUrlfOpen":"enabled","UploadMaxFilesize":8,"PostMaxSize":16,"MaxExecutionTime":100,"MaxFileUploads":40,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
168+
${rc} = Execute Command api-cli run module/${module_id}/update-vhost --data '{"PhpVersion":"8.4","ServerNames":["foo.com","john.com"],"Port":9001,"MemoryLimit":2000,"AllowUrlfOpen":"enabled","UploadMaxFilesize":2000,"PostMaxSize":2000,"MaxExecutionTime":3600,"MaxFileUploads":20000,"lets_encrypt":true,"http2https":true,"Indexes":"enabled","status":"enabled"}'
114169
... return_rc=True return_stdout=False
115170
Should Be Equal As Integers ${rc} 0
116171

117172
Check if virtualhost john.com works as expected after PHP84 update
118173
Retry test VirtualHost john.com URL is reachable
119174

175+
Check if phpinfo.php uses PHP 8.4 with the custom settings
176+
${output} = Execute Command curl -H "Host: john.com" ${backend_url}/phpinfo.php
177+
Should Contain ${output} PHP 8.4
178+
Should Contain ${output} <tr><td class="e">memory_limit</td><td class="v">2000M</td><td class="v">2000M</td></tr>
179+
Should Contain ${output} <tr><td class="e">allow_url_fopen</td><td class="v">On</td><td class="v">On</td></tr>
180+
Should Contain ${output} <tr><td class="e">upload_max_filesize</td><td class="v">2000M</td><td class="v">2000M</td></tr>
181+
Should Contain ${output} <tr><td class="e">post_max_size</td><td class="v">2000M</td><td class="v">2000M</td></tr>
182+
Should Contain ${output} <tr><td class="e">max_execution_time</td><td class="v">3600</td><td class="v">3600</td></tr>
183+
Should Contain ${output} <tr><td class="e">max_file_uploads</td><td class="v">20000</td><td class="v">20000</td></tr>
184+
185+
Login to sftpgo as user 9001 password 9001
186+
Put File ${CURDIR}/test-sftpgo-login.sh /tmp/test-sftpgo-login.sh
187+
${user} = Set Variable [email protected]
188+
${out} ${err} ${rc} = Execute Command
189+
... bash /tmp/test-sftpgo-login.sh
190+
... return_rc=True return_stderr=True
191+
Log Login helper stdout: ${out}
192+
Log Login helper stderr: ${err}
193+
Log Login helper stderr: ${rc}
194+
Should Be Equal As Integers ${rc} 0
195+
should Be Empty ${err}
196+
should Be Empty ${out}
197+
198+
Login to sftpgo as user admin password admin
199+
Put File ${CURDIR}/test-sftpgo-admin-login.sh /tmp/test-sftpgo-admin-login.sh
200+
${user} = Set Variable [email protected]
201+
${out} ${err} ${rc} = Execute Command
202+
... bash /tmp/test-sftpgo-admin-login.sh
203+
... return_rc=True return_stderr=True
204+
Log Login helper stdout: ${out}
205+
Log Login helper stderr: ${err}
206+
Log Login helper stderr: ${rc}
207+
Should Be Equal As Integers ${rc} 0
208+
should Be Empty ${err}
209+
should Be Empty ${out}
210+
120211
Check if vhost can be destroyed
121212
${rc} = Execute Command api-cli run module/${module_id}/destroy-vhost --data '{"ServerNames": ["foo.com","john.com"],"port": 9001}'
122213
... return_rc=True return_stdout=False

0 commit comments

Comments
 (0)