diff --git a/Dockerfile.alpine b/Dockerfile.alpine index d06daa5dd..39b2ce382 100755 --- a/Dockerfile.alpine +++ b/Dockerfile.alpine @@ -4,6 +4,7 @@ RUN apk add --quiet --no-cache \ apache2 \ php-apache2 \ php-ctype \ + php-phar \ php-gd \ php-openssl \ php-pdo \ diff --git a/docker/test/README.md b/docker/test/README.md new file mode 100644 index 000000000..cafd486ee --- /dev/null +++ b/docker/test/README.md @@ -0,0 +1,4 @@ +The files in this folder represent a simple end to end test. +At the moment it is interactive, so you need to run `docker compose up` in the folder and watch the output for errors. +Sometimes the mysql container needs more than 15 seconds, so the test_script fails. +Just try it again. \ No newline at end of file diff --git a/docker/test/docker-compose.yml b/docker/test/docker-compose.yml index b04e18f18..4040485ac 100644 --- a/docker/test/docker-compose.yml +++ b/docker/test/docker-compose.yml @@ -1,5 +1,14 @@ ## this is a docker compose file used to test all scenarios ## do not use it in production +x-shared: + speedtest-service: &speedtest-service + environment: + - PASSWORD=gimmeTheStats1337 + - EMAIL=test@example.com + - ENABLE_ID_OBFUSCATION=true + - MODE=standalone + - REDACT_IP_ADDRESSES=true + - TELEMETRY=true services: ###################### POSTGRESQL ################################ @@ -104,9 +113,27 @@ services: ports: - 9128:8080 + speedtest-alpine-sqlite-dual: + <<: *speedtest-service + build: + context: ../.. + dockerfile: Dockerfile.alpine + environment: + - MODE=dual + + volumes: + - ./servers.json:/servers.json:ro + ports: + - 9129:8080 + ############## TEST CONTAINER ############################################################### test-container: image: alpine + depends_on: + - pg + - mysql + - speedtest-alpine-mysql + - speedtest-alpine-pg volumes: - ./test-script.sh:/test-script.sh command: diff --git a/docker/test/servers.json b/docker/test/servers.json new file mode 100644 index 000000000..f067463a0 --- /dev/null +++ b/docker/test/servers.json @@ -0,0 +1,409 @@ +[ + { + "name": "Amsterdam, Netherlands (Clouvider)", + "server": "//ams.speedtest.clouvider.net/backend", + "id": 51, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Clouvider", + "sponsorURL": "https://www.clouvider.co.uk/" + }, + { + "name": "Amsterdam, Netherlands (Sharktech)", + "server": "https://amsspeed.sharktech.net", + "id": 94, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Sharktech", + "sponsorURL": "https://sharktech.net" + }, + { + "name": "Atlanta, United States (Clouvider)", + "server": "//atl.speedtest.clouvider.net/backend", + "id": 53, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Clouvider", + "sponsorURL": "https://www.clouvider.co.uk/" + }, + { + "name": "Bangalore, India (DigitalOcean)", + "server": "//in1.backend.librespeed.org/", + "id": 75, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "DigitalOcean", + "sponsorURL": "https://www.digitalocean.com" + }, + { + "name": "Bari, Italy (GARR)", + "server": "https://st-be-ba1.infra.garr.it", + "id": 33, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Consortium GARR", + "sponsorURL": "//garr.it" + }, + { + "name": "Bologna, Italy (GARR)", + "server": "https://st-be-bo1.infra.garr.it", + "id": 34, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Consortium GARR", + "sponsorURL": "//garr.it" + }, + { + "name": "Chicago, USA (Sharktech)", + "server": "https://chispeed.sharktech.net", + "id": 93, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Sharktech", + "sponsorURL": "https://sharktech.net" + }, + { + "name": "Denver, USA (Sharktech)", + "server": "https://denspeed.sharktech.net", + "id": 92, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Sharktech", + "sponsorURL": "https://sharktech.net" + }, + { + "name": "Frankfurt, Germany (Clouvider)", + "server": "//fra.speedtest.clouvider.net/backend", + "id": 50, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Clouvider", + "sponsorURL": "https://www.clouvider.co.uk/" + }, + { + "name": "Frankfurt, Germany (FRA01)", + "server": "https://speedtest.lumischvps.cloud/", + "id": 86, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "LumischVPS", + "sponsorURL": "https://discord.gg/GxYzPwJmA2" + }, + { + "name": "Ghom, Iran (Amin IDC)", + "server": "https://fastme.ir/", + "id": 77, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Bardia Moshiri", + "sponsorURL": "https://bardia.tech/" + }, + { + "name": "Helsinki, Finland (3) (Hetzner)", + "server": "//finew.openspeed.org/", + "id": 22, + "dlURL": "backend437/garbage.php", + "ulURL": "backend437/empty.php", + "pingURL": "backend437/empty.php", + "getIpURL": "backend437/getIP.php", + "sponsorName": "Daily Health Insurance Group", + "sponsorURL": "//dhig.net/" + }, + { + "name": "Helsinki, Finland (5) (Hetzner)", + "server": "//fast.kabi.tk/", + "id": 24, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "KABI.tk", + "sponsorURL": "//kabi.tk" + }, + { + "name": "Johannesburg, South Africa (Host Africa)", + "server": "//za1.backend.librespeed.org/", + "id": 70, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "HOSTAFRICA", + "sponsorURL": "https://www.hostafrica.co.za" + }, + { + "name": "Las Vegas, USA (Sharktech)", + "server": "https://lasspeed.sharktech.net", + "id": 90, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Sharktech", + "sponsorURL": "https://sharktech.net" + }, + { + "name": "London, England (Clouvider)", + "server": "//lon.speedtest.clouvider.net/backend", + "id": 49, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Clouvider", + "sponsorURL": "https://www.clouvider.co.uk/" + }, + { + "name": "Los Angeles, United States (1) (Clouvider)", + "server": "//la.speedtest.clouvider.net/backend", + "id": 54, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Clouvider", + "sponsorURL": "https://www.clouvider.co.uk/" + }, + { + "name": "Los Angeles, USA (Sharktech)", + "server": "https://laxspeed.sharktech.net", + "id": 91, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Sharktech", + "sponsorURL": "https://sharktech.net" + }, + { + "name": "New York, United States (2) (Clouvider)", + "server": "//nyc.speedtest.clouvider.net/backend", + "id": 52, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Clouvider", + "sponsorURL": "https://www.clouvider.co.uk/" + }, + { + "name": "Nottingham, England (LayerIP)", + "server": "https://uk1.backend.librespeed.org", + "id": 43, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "fosshost.org", + "sponsorURL": "https://fosshost.org" + }, + { + "name": "Nuremberg, Germany (1) (Hetzner)", + "server": "//de1.backend.librespeed.org", + "id": 28, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Snopyta", + "sponsorURL": "https://snopyta.org" + }, + { + "name": "Nuremberg, Germany (2) (Hetzner)", + "server": "//de4.backend.librespeed.org", + "id": 27, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "LibreSpeed", + "sponsorURL": "https://librespeed.org" + }, + { + "name": "Nuremberg, Germany (3) (Hetzner)", + "server": "//de3.backend.librespeed.org", + "id": 30, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "LibreSpeed", + "sponsorURL": "https://librespeed.org" + }, + { + "name": "Nuremberg, Germany (4) (Hetzner)", + "server": "//de5.backend.librespeed.org", + "id": 31, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "LibreSpeed", + "sponsorURL": "https://librespeed.org" + }, + { + "name": "Nuremberg, Germany (6) (Hetzner)", + "server": "//librespeed.lukas-heinrich.com/", + "id": 46, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "luki9100", + "sponsorURL": "https://lukas-heinrich.com/" + }, + { + "name": "Ohio, USA (Rust backend)", + "server": "https://librespeed-rs.ir/", + "id": 95, + "dlURL": "backend/garbage", + "ulURL": "backend/empty", + "pingURL": "backend/empty", + "getIpURL": "backend/getIP", + "sponsorName": "Sudo Dios", + "sponsorURL": "https://github.com/SudoDios" + }, + { + "name": "Poznan, Poland (INEA)", + "server": "https://speedtest.kamilszczepanski.com", + "id": 74, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Kamil SzczepaƄski", + "sponsorURL": "https://kamilszczepanski.com" + }, + { + "name": "Prague, Czech Republic (CESNET)", + "server": "//speedtest.cesnet.cz", + "id": 79, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "CESNET", + "sponsorURL": "https://www.cesnet.cz" + }, + { + "name": "Prague, Czech Republic (Turris)", + "server": "//librespeed.turris.cz", + "id": 85, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Turris", + "sponsorURL": "https://www.turris.com" + }, + { + "name": "Roma, Italy (GARR)", + "server": "https://st-be-rm2.infra.garr.it", + "id": 35, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Consortium GARR", + "sponsorURL": "//garr.it" + }, + { + "name": "Serbia (SOX)", + "server": "https://speedtest2.sox.rs", + "id": 87, + "dlURL": "libre/backend/garbage.php", + "ulURL": "libre/backend/empty.php", + "pingURL": "libre/backend/empty.php", + "getIpURL": "libre/backend/getIP.php", + "sponsorName": "Serbian Open eXchange (SOX)", + "sponsorURL": "https://sox.rs" + }, + { + "name": "Singapore (Salvatore Cahyo)", + "server": "https://speedtest.dsgroupmedia.com", + "id": 68, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Salvatore Cahyo", + "sponsorURL": "https://salvatorecahyo.my.id" + }, + { + "name": "Tehran, Iran (Fanava)", + "server": "https://speedme.ir/", + "id": 76, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Bardia Moshiri", + "sponsorURL": "https://bardia.tech" + }, + { + "name": "Tehran, Iran (Faraso)", + "server": "https://st.bardia.tech", + "id": 80, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "Bardia Moshiri", + "sponsorURL": "https://bardia.tech/" + }, + { + "name": "Tokyo, Japan (A573)", + "server": "https://librespeed.a573.net/", + "id": 82, + "dlURL": "backend/garbage.php", + "ulURL": "backend/empty.php", + "pingURL": "backend/empty.php", + "getIpURL": "backend/getIP.php", + "sponsorName": "A573", + "sponsorURL": "https://mirror.a573.net/" + }, + { + "name": "Vilnius, Lithuania (RackRay)", + "server": "//lt1.backend.librespeed.org/", + "id": 69, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Time4VPS", + "sponsorURL": "https://www.time4vps.com" + }, + { + "name": "Virginia, United States, OVH", + "server": "https://speed.riverside.rocks/", + "id": 78, + "dlURL": "garbage.php", + "ulURL": "empty.php", + "pingURL": "empty.php", + "getIpURL": "getIP.php", + "sponsorName": "Riverside Rocks", + "sponsorURL": "https://riverside.rocks" + } +] diff --git a/docker/test/test-script.sh b/docker/test/test-script.sh index 27d236014..1e8661bd6 100644 --- a/docker/test/test-script.sh +++ b/docker/test/test-script.sh @@ -1,9 +1,16 @@ +#!/bin/sh + +## simple script to call sanitycheck on all containers + PORT=8080 -apk add w3m +if ! apk add w3m; then + echo "Failed to install w3m package" + exit 1 +fi echo sleeping a little to get things setteled... -sleep 10 +sleep 15 for db in sqlite pg mysql; do for distro in alpine debian; do diff --git a/docker/ui.php b/docker/ui.php index 2d0723540..4f2d6972d 100755 --- a/docker/ui.php +++ b/docker/ui.php @@ -11,12 +11,24 @@ function I(i){return document.getElementById(i);} //LIST OF TEST SERVERS. See documentation for details if needed +if($mode=="standalone" || $mode=="backend"){ ?> var SPEEDTEST_SERVERS=[]; var SPEEDTEST_SERVERS= ; + +// add own server in dual mode +SPEEDTEST_SERVERS.unshift({ + "name":"This Server", + "server":document.location.href+"backend/", + "id":1, + "dlURL":"garbage.php", + "ulURL":"empty.php", + "pingURL":"empty.php", + "getIpURL":"getIP.php", + "pingT":-1 +}) - //INITIALIZE SPEED TEST var s=new Speedtest(); //create speed test object