mirror of
https://git.cloudron.io/cloudron/syncthing-app
synced 2025-09-13 00:15:14 +00:00
Compare commits
22 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
19bdaba65f | ||
|
9805180643 | ||
|
daccdb9237 | ||
|
14fcde4cd4 | ||
|
688e6d53a1 | ||
|
ae4e726aa9 | ||
|
67383ed187 | ||
|
4e734b3323 | ||
|
83578811b0 | ||
|
6da37e33bd | ||
|
e700619300 | ||
|
f7bb7204b6 | ||
|
cae5e00af6 | ||
|
d6be72d813 | ||
|
fc73e5c5b1 | ||
|
b5adb26208 | ||
|
3a5d4f6db9 | ||
|
a528e3875a | ||
|
c5aab1b7a2 | ||
|
f505dd5038 | ||
|
ac3fb1babf | ||
|
4682a67954 |
52
CHANGELOG
52
CHANGELOG
@@ -370,3 +370,55 @@
|
||||
* #7859: Allow sub-second watcher delay (use case: remote development)
|
||||
* #8828: cmd/stdiscosrv: TestDatabaseGetSet flake
|
||||
|
||||
[1.22.4]
|
||||
* Update Syncthing to 1.23.4
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.23.4)
|
||||
* lib/syncthing: Handle successful global migration (fixes #8851) (#8852)
|
||||
* lib/syncthing: Handle successfull global migration (fixes #8851)
|
||||
|
||||
[1.22.5]
|
||||
* Update Syncthing to 1.23.5
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.23.5)
|
||||
* gui: Avoid code generating HTML (#8923)
|
||||
|
||||
[1.22.6]
|
||||
* Update Syncthing to 1.23.6
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.23.6)
|
||||
|
||||
[1.22.7]
|
||||
* Update Syncthing to 1.23.7
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.23.7)
|
||||
* #6597: setLowPriority should not increase process priority when already lower (in Windows)
|
||||
* #7698: ursrv: unrealistic uptime data, likely due to unset RTC (1970-01-01)
|
||||
* #8958: Extended attribute filter editor should be enabled when "send extended attributes" is checked
|
||||
* #8967: Shared With list ends with comma on 1 device
|
||||
* #9001: relaysrv crash after some weeks of operation
|
||||
* #8890: Do not autoexpand tilde sign (~) to an absolute home directory path
|
||||
* #8957: Add environment variables for --home, --conf, and --data
|
||||
* #8968: Error for Windows invalid file names should indicate the invalid character or name part
|
||||
* #8983: Integrate govulncheck
|
||||
|
||||
[1.23.0]
|
||||
* Update Syncthing to 1.24.0
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.25.0)
|
||||
* #8274: Usage report transport type is wrong for QUIC
|
||||
* #8482: Discovery server keeps duplicate entries
|
||||
* #9019: Web GUI loses config changes when doing multiple modifications (e.g. on slow hardware or remotely)
|
||||
* #9112: panic: counter cannot decrease in value
|
||||
* #9123: Hashed passwords via API are hashed again
|
||||
* #141: Use multiple simultaneous TCP connections
|
||||
* #5607: Move footer links to header
|
||||
|
||||
[1.24.0]
|
||||
* Update base image to 4.2.0
|
||||
|
||||
[1.25.0]
|
||||
* Update Syncthing to 1.26.0
|
||||
* [Full changelog](https://github.com/syncthing/syncthing/releases/tag/v1.26.0)
|
||||
* #9106: Posting config with invalid versioner type causes panic
|
||||
* #9120: Deduplicated files on Windows aren't treated as regular files any more (Go 1.21)
|
||||
* #9133: Syncthing Docker container fails to start if underlying filesystem doesn't support chown
|
||||
* #9143: traefik no longer url escape X-Forwarded-Tls-Client-Cert header
|
||||
* #9149: Favicon is stuck in notify state
|
||||
* #4137: Use a real login screen + sessions instead of HTTP basic auth
|
||||
|
||||
|
@@ -5,8 +5,8 @@
|
||||
"description": "file://DESCRIPTION.md",
|
||||
"changelog": "file://CHANGELOG",
|
||||
"tagline": "Decentralized file synchronization",
|
||||
"version": "1.22.3",
|
||||
"upstreamVersion": "1.23.3",
|
||||
"version": "1.25.0",
|
||||
"upstreamVersion": "1.26.0",
|
||||
"healthCheckPath": "/healthcheck",
|
||||
"httpPort": 8000,
|
||||
"addons": {
|
||||
|
@@ -1,9 +1,9 @@
|
||||
FROM cloudron/base:4.0.0@sha256:31b195ed0662bdb06a6e8a5ddbedb6f191ce92e8bee04c03fb02dd4e9d0286df
|
||||
FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4
|
||||
|
||||
RUN mkdir -p /app/code
|
||||
WORKDIR /app/code
|
||||
|
||||
ARG VERSION=1.23.3
|
||||
ARG VERSION=1.26.0
|
||||
|
||||
RUN wget https://github.com/syncthing/syncthing/releases/download/v${VERSION}/syncthing-linux-amd64-v${VERSION}.tar.gz -O - | tar -xz -C /app/code --strip-components=1
|
||||
|
||||
|
156
test/package-lock.json
generated
156
test/package-lock.json
generated
@@ -9,17 +9,17 @@
|
||||
"version": "1.0.0",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chromedriver": "^111.0.0",
|
||||
"chromedriver": "^119.0.1",
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^10.2.0",
|
||||
"selenium-webdriver": "^4.8.2",
|
||||
"superagent": "^8.0.9"
|
||||
"selenium-webdriver": "^4.15.0",
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@testim/chrome-version": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.3.tgz",
|
||||
"integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A=="
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.4.tgz",
|
||||
"integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g=="
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "16.11.6",
|
||||
@@ -105,9 +105,9 @@
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
|
||||
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
|
||||
"integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
@@ -236,24 +236,24 @@
|
||||
}
|
||||
},
|
||||
"node_modules/chromedriver": {
|
||||
"version": "111.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz",
|
||||
"integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==",
|
||||
"version": "119.0.1",
|
||||
"resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-119.0.1.tgz",
|
||||
"integrity": "sha512-lpCFFLaXPpvElTaUOWKdP74pFb/sJhWtWqMjn7Ju1YriWn8dT5JBk84BGXMPvZQs70WfCYWecxdMmwfIu1Mupg==",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@testim/chrome-version": "^1.1.3",
|
||||
"axios": "^1.2.1",
|
||||
"compare-versions": "^5.0.1",
|
||||
"@testim/chrome-version": "^1.1.4",
|
||||
"axios": "^1.6.0",
|
||||
"compare-versions": "^6.1.0",
|
||||
"extract-zip": "^2.0.1",
|
||||
"https-proxy-agent": "^5.0.1",
|
||||
"proxy-from-env": "^1.1.0",
|
||||
"tcp-port-used": "^1.0.1"
|
||||
"tcp-port-used": "^1.0.2"
|
||||
},
|
||||
"bin": {
|
||||
"chromedriver": "bin/chromedriver"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/cliui": {
|
||||
@@ -294,9 +294,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/compare-versions": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz",
|
||||
"integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ=="
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz",
|
||||
"integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg=="
|
||||
},
|
||||
"node_modules/component-emitter": {
|
||||
"version": "1.3.0",
|
||||
@@ -479,9 +479,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
||||
"version": "1.15.3",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
|
||||
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
@@ -797,9 +797,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/jszip": {
|
||||
"version": "3.10.0",
|
||||
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz",
|
||||
"integrity": "sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q==",
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
|
||||
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
|
||||
"dependencies": {
|
||||
"lie": "~3.3.0",
|
||||
"pako": "~1.0.2",
|
||||
@@ -1114,9 +1114,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -1166,13 +1166,13 @@
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"node_modules/selenium-webdriver": {
|
||||
"version": "4.8.2",
|
||||
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.8.2.tgz",
|
||||
"integrity": "sha512-d2dcpDLPcXlBy5qcPtB1B8RYTtj1N+JiHQLViFx3OP+i5hqkAuqTfJEYUh4qNX11S4NvbxjteiwN3OPwK3vPVw==",
|
||||
"version": "4.15.0",
|
||||
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.15.0.tgz",
|
||||
"integrity": "sha512-BNG1bq+KWiBGHcJ/wULi0eKY0yaDqFIbEmtbsYJmfaEghdCkXBsx1akgOorhNwjBipOr0uwpvNXqT6/nzl+zjg==",
|
||||
"dependencies": {
|
||||
"jszip": "^3.10.0",
|
||||
"jszip": "^3.10.1",
|
||||
"tmp": "^0.2.1",
|
||||
"ws": ">=8.11.0"
|
||||
"ws": ">=8.14.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 14.20.0"
|
||||
@@ -1262,9 +1262,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"dependencies": {
|
||||
"component-emitter": "^1.3.0",
|
||||
"cookiejar": "^2.1.4",
|
||||
@@ -1345,7 +1345,7 @@
|
||||
"node_modules/util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"node_modules/workerpool": {
|
||||
"version": "6.2.1",
|
||||
@@ -1374,9 +1374,9 @@
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"node_modules/ws": {
|
||||
"version": "8.12.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz",
|
||||
"integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==",
|
||||
"version": "8.14.2",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
|
||||
"integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
@@ -1468,9 +1468,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@testim/chrome-version": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.3.tgz",
|
||||
"integrity": "sha512-g697J3WxV/Zytemz8aTuKjTGYtta9+02kva3C1xc7KXB8GdbfE1akGJIsZLyY/FSh2QrnE+fiB7vmWU3XNcb6A=="
|
||||
"version": "1.1.4",
|
||||
"resolved": "https://registry.npmjs.org/@testim/chrome-version/-/chrome-version-1.1.4.tgz",
|
||||
"integrity": "sha512-kIhULpw9TrGYnHp/8VfdcneIcxKnLixmADtukQRtJUmsVlMg0niMkwV0xZmi8hqa57xqilIHjWFA0GKvEjVU5g=="
|
||||
},
|
||||
"@types/node": {
|
||||
"version": "16.11.6",
|
||||
@@ -1538,9 +1538,9 @@
|
||||
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
|
||||
},
|
||||
"axios": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
|
||||
"integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
|
||||
"version": "1.6.1",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
|
||||
"integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
|
||||
"requires": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
@@ -1633,17 +1633,17 @@
|
||||
}
|
||||
},
|
||||
"chromedriver": {
|
||||
"version": "111.0.0",
|
||||
"resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-111.0.0.tgz",
|
||||
"integrity": "sha512-XavNYNBBfKIrT8Oi/ywJ0DoOOU+jHF5bQWTkqStFsAXvfCV9VzYN3J+TGAvZdrpXeoixqPRGUxQ2yZhD2iowdQ==",
|
||||
"version": "119.0.1",
|
||||
"resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-119.0.1.tgz",
|
||||
"integrity": "sha512-lpCFFLaXPpvElTaUOWKdP74pFb/sJhWtWqMjn7Ju1YriWn8dT5JBk84BGXMPvZQs70WfCYWecxdMmwfIu1Mupg==",
|
||||
"requires": {
|
||||
"@testim/chrome-version": "^1.1.3",
|
||||
"axios": "^1.2.1",
|
||||
"compare-versions": "^5.0.1",
|
||||
"@testim/chrome-version": "^1.1.4",
|
||||
"axios": "^1.6.0",
|
||||
"compare-versions": "^6.1.0",
|
||||
"extract-zip": "^2.0.1",
|
||||
"https-proxy-agent": "^5.0.1",
|
||||
"proxy-from-env": "^1.1.0",
|
||||
"tcp-port-used": "^1.0.1"
|
||||
"tcp-port-used": "^1.0.2"
|
||||
}
|
||||
},
|
||||
"cliui": {
|
||||
@@ -1678,9 +1678,9 @@
|
||||
}
|
||||
},
|
||||
"compare-versions": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-5.0.1.tgz",
|
||||
"integrity": "sha512-v8Au3l0b+Nwkp4G142JcgJFh1/TUhdxut7wzD1Nq1dyp5oa3tXaqb03EXOAB6jS4gMlalkjAUPZBMiAfKUixHQ=="
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.0.tgz",
|
||||
"integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg=="
|
||||
},
|
||||
"component-emitter": {
|
||||
"version": "1.3.0",
|
||||
@@ -1814,9 +1814,9 @@
|
||||
"integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ=="
|
||||
},
|
||||
"follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
|
||||
"version": "1.15.3",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz",
|
||||
"integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q=="
|
||||
},
|
||||
"form-data": {
|
||||
"version": "4.0.0",
|
||||
@@ -2030,9 +2030,9 @@
|
||||
}
|
||||
},
|
||||
"jszip": {
|
||||
"version": "3.10.0",
|
||||
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.0.tgz",
|
||||
"integrity": "sha512-LDfVtOLtOxb9RXkYOwPyNBTQDL4eUbqahtoY6x07GiDJHwSYvn8sHHIw8wINImV3MqbMNve2gSuM1DDqEKk09Q==",
|
||||
"version": "3.10.1",
|
||||
"resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz",
|
||||
"integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==",
|
||||
"requires": {
|
||||
"lie": "~3.3.0",
|
||||
"pako": "~1.0.2",
|
||||
@@ -2260,9 +2260,9 @@
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "2.3.7",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"requires": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -2300,13 +2300,13 @@
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"selenium-webdriver": {
|
||||
"version": "4.8.2",
|
||||
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.8.2.tgz",
|
||||
"integrity": "sha512-d2dcpDLPcXlBy5qcPtB1B8RYTtj1N+JiHQLViFx3OP+i5hqkAuqTfJEYUh4qNX11S4NvbxjteiwN3OPwK3vPVw==",
|
||||
"version": "4.15.0",
|
||||
"resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.15.0.tgz",
|
||||
"integrity": "sha512-BNG1bq+KWiBGHcJ/wULi0eKY0yaDqFIbEmtbsYJmfaEghdCkXBsx1akgOorhNwjBipOr0uwpvNXqT6/nzl+zjg==",
|
||||
"requires": {
|
||||
"jszip": "^3.10.0",
|
||||
"jszip": "^3.10.1",
|
||||
"tmp": "^0.2.1",
|
||||
"ws": ">=8.11.0"
|
||||
"ws": ">=8.14.2"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
@@ -2372,9 +2372,9 @@
|
||||
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.9",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz",
|
||||
"integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==",
|
||||
"version": "8.1.2",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz",
|
||||
"integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==",
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
"cookiejar": "^2.1.4",
|
||||
@@ -2434,7 +2434,7 @@
|
||||
"util-deprecate": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"workerpool": {
|
||||
"version": "6.2.1",
|
||||
@@ -2457,9 +2457,9 @@
|
||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
|
||||
},
|
||||
"ws": {
|
||||
"version": "8.12.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz",
|
||||
"integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==",
|
||||
"version": "8.14.2",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz",
|
||||
"integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==",
|
||||
"requires": {}
|
||||
},
|
||||
"y18n": {
|
||||
|
@@ -9,10 +9,10 @@
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"chromedriver": "^111.0.0",
|
||||
"chromedriver": "^119.0.1",
|
||||
"expect.js": "^0.3.1",
|
||||
"mocha": "^10.2.0",
|
||||
"selenium-webdriver": "^4.8.2",
|
||||
"superagent": "^8.0.9"
|
||||
"selenium-webdriver": "^4.15.0",
|
||||
"superagent": "^8.1.2"
|
||||
}
|
||||
}
|
||||
|
162
test/test.js
162
test/test.js
@@ -5,6 +5,7 @@
|
||||
/* global before */
|
||||
/* global after */
|
||||
/* global it */
|
||||
/* global xit */
|
||||
|
||||
'use strict';
|
||||
|
||||
@@ -14,21 +15,21 @@ const execSync = require('child_process').execSync,
|
||||
expect = require('expect.js'),
|
||||
superagent = require('superagent'),
|
||||
path = require('path'),
|
||||
{ Builder, By, Key, until } = require('selenium-webdriver'),
|
||||
timers = require('timers/promises'),
|
||||
{ Builder, By, until } = require('selenium-webdriver'),
|
||||
{ Options } = require('selenium-webdriver/chrome');
|
||||
|
||||
describe('Application life cycle test', function () {
|
||||
this.timeout(0);
|
||||
|
||||
var LOCATION = 'test';
|
||||
var TEST_TIMEOUT = 30000;
|
||||
var FOLDER = 'xmf'; // keep this small. long folder names fail in automation, not sure why
|
||||
var SYNC_PORT = 22001;
|
||||
var EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
|
||||
const LOCATION = 'test';
|
||||
const TEST_TIMEOUT = 30000;
|
||||
const FOLDER = 'xmf'; // keep this small. long folder names fail in automation, not sure why
|
||||
const SYNC_PORT = 22001;
|
||||
const EXEC_ARGS = { cwd: path.resolve(__dirname, '..'), stdio: 'inherit' };
|
||||
|
||||
var browser;
|
||||
var app;
|
||||
var username = 'admin', password = 'changeme';
|
||||
let browser, app;
|
||||
const username = 'admin', password = 'changeme';
|
||||
|
||||
before(function () {
|
||||
browser = new Builder().forBrowser('chrome').setChromeOptions(new Options().windowSize({ width: 1280, height: 1024 })).build();
|
||||
@@ -39,138 +40,84 @@ describe('Application life cycle test', function () {
|
||||
});
|
||||
|
||||
function getAppInfo() {
|
||||
var inspect = JSON.parse(execSync('cloudron inspect'));
|
||||
const inspect = JSON.parse(execSync('cloudron inspect'));
|
||||
app = inspect.apps.filter(function (a) { return a.location.indexOf(LOCATION) === 0; })[0];
|
||||
expect(app).to.be.an('object');
|
||||
}
|
||||
|
||||
function waitForElement(elem) {
|
||||
return browser.wait(until.elementLocated(elem), TEST_TIMEOUT).then(function () {
|
||||
return browser.wait(until.elementIsVisible(browser.findElement(elem)), TEST_TIMEOUT);
|
||||
});
|
||||
async function waitForElement(elem) {
|
||||
await browser.wait(until.elementLocated(elem), TEST_TIMEOUT);
|
||||
await browser.wait(until.elementIsVisible(browser.findElement(elem)), TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
function invalidPassword(callback) {
|
||||
superagent.get('https://' + app.fqdn).auth(username, password + 'x').end(function (error, result) {
|
||||
expect(result.status).to.eql(401);
|
||||
|
||||
callback();
|
||||
});
|
||||
async function login() {
|
||||
await browser.manage().deleteAllCookies();
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await waitForElement(By.id('user'));
|
||||
await browser.findElement(By.id('user')).sendKeys(username);
|
||||
await browser.findElement(By.id('password')).sendKeys(password);
|
||||
await browser.findElement(By.xpath('//button[@type="submit"]')).click();
|
||||
await waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}
|
||||
|
||||
function loadPage(callback) {
|
||||
browser.manage().deleteAllCookies().then(function () {
|
||||
return browser.sleep(5000);
|
||||
}).then(function() {
|
||||
return browser.get('https://' + username + ':' + encodeURIComponent(password) + '@' + app.fqdn).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
});
|
||||
}).then(function () {
|
||||
return browser.sleep(5000);
|
||||
}).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
}).then(function () {
|
||||
return waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
async function loadPage() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}
|
||||
|
||||
function addFolder(callback) {
|
||||
browser.get('https://' + app.fqdn).then(function () {
|
||||
return browser.findElement(By.css('[ng-click*=addFolder]')).click();
|
||||
}).then(function () {
|
||||
return waitForElement(By.id('folderPath'));
|
||||
}).then(function () {
|
||||
return browser.sleep(4000); // wait more, not sure why this is needed
|
||||
}).then(function() {
|
||||
return browser.findElement(By.id('folderLabel')).sendKeys(FOLDER);
|
||||
}).then(function () {
|
||||
return browser.sleep(4000); // without this sometimes only part of the folder name gets through
|
||||
}).then(function() {
|
||||
return browser.findElement(By.css('[ng-click*=saveFolder]')).click();
|
||||
}).then(function() {
|
||||
return browser.wait(until.elementLocated(By.css('#folders .panel-status span[ng-switch-when=unshared]')), TEST_TIMEOUT);
|
||||
}).then(function () {
|
||||
return browser.sleep(4000);
|
||||
}).then(function() {
|
||||
callback();
|
||||
});
|
||||
async function addFolder() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await browser.findElement(By.css('[ng-click*=addFolder]')).click();
|
||||
await waitForElement(By.id('folderPath'));
|
||||
await browser.sleep(4000); // wait more, not sure why this is needed
|
||||
await browser.findElement(By.id('folderLabel')).sendKeys(FOLDER);
|
||||
await browser.sleep(4000); // without this sometimes only part of the folder name gets through
|
||||
await browser.findElement(By.css('[ng-click*=saveFolder]')).click();
|
||||
await browser.wait(until.elementLocated(By.css('#folders .panel-status span[ng-switch-when=unshared]')), TEST_TIMEOUT);
|
||||
await browser.sleep(4000);
|
||||
}
|
||||
|
||||
function checkFolder(callback) {
|
||||
browser.get('https://' + app.fqdn).then(function () {
|
||||
return browser.sleep(5000);
|
||||
}).then(function () {
|
||||
return browser.get('https://' + app.fqdn);
|
||||
}).then(function () {
|
||||
return browser.wait(until.elementLocated(By.xpath(`//span[text()="${FOLDER}"]`)), TEST_TIMEOUT);
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function removeFolder(callback) {
|
||||
browser.get('https://' + app.fqdn).then(function () {
|
||||
return waitForElement(By.xpath('//span[text()="Actions"]'));
|
||||
}).then(function() {
|
||||
return browser.findElement(By.css('#folders button')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //No way to check for visibility of angular-js components
|
||||
}).then(function () {
|
||||
return browser.findElement(By.css('#folder-0 button[ng-click*=editFolder]')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //No way to check for visibility of angular-js components
|
||||
}).then(function () {
|
||||
return browser.findElement(By.xpath('//button[@data-target="#remove-folder-confirmation"]')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //No way to check for visibility of angular-js components
|
||||
}).then(function () {
|
||||
return browser.findElement(By.css('[ng-click*=deleteFolder]')).click();
|
||||
}).then(function () {
|
||||
return browser.sleep(3000); //This needs to run for some time
|
||||
}).then(function () {
|
||||
callback();
|
||||
});
|
||||
}
|
||||
|
||||
function wait (done) {
|
||||
setTimeout(done, 10000);
|
||||
async function checkFolder() {
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await browser.sleep(5000);
|
||||
await browser.get('https://' + app.fqdn);
|
||||
await browser.wait(until.elementLocated(By.xpath(`//span[text()="${FOLDER}"]`)), TEST_TIMEOUT);
|
||||
}
|
||||
|
||||
xit('build app', function () { execSync('cloudron build', EXEC_ARGS); });
|
||||
|
||||
it('install app', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --location ' + LOCATION, EXEC_ARGS); });
|
||||
// await timers.setTimeout(30000);
|
||||
it('can get app information', getAppInfo);
|
||||
|
||||
it('wait', wait);
|
||||
|
||||
it('fails with invalid password', invalidPassword);
|
||||
it('can login', login);
|
||||
it('can load page', loadPage);
|
||||
it('can add folder', addFolder);
|
||||
|
||||
it('backup app', function () { execSync('cloudron backup create --app ' + app.id, EXEC_ARGS); });
|
||||
it('backup app', async function () {
|
||||
execSync('cloudron backup create --app ' + app.id, EXEC_ARGS);
|
||||
// await timers.setTimeout(30000);
|
||||
});
|
||||
it('restore app', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync('cloudron restore --app ' + app.id, EXEC_ARGS);
|
||||
await timers.setTimeout(5000);
|
||||
});
|
||||
|
||||
it('wait', wait);
|
||||
|
||||
it('can login', login);
|
||||
it('can load page', loadPage);
|
||||
it('can check folder', checkFolder);
|
||||
|
||||
it('move to different location', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync(`cloudron configure --location ${LOCATION}2 --app ${app.id}`, EXEC_ARGS);
|
||||
await timers.setTimeout(5000);
|
||||
});
|
||||
it('can get app information', getAppInfo);
|
||||
|
||||
it('wait', wait);
|
||||
|
||||
it('can login', login);
|
||||
it('can load page', loadPage);
|
||||
it('can check folder', checkFolder);
|
||||
it('can remove folder', removeFolder);
|
||||
|
||||
it('uninstall app', async function () {
|
||||
await browser.get('about:blank');
|
||||
@@ -178,16 +125,19 @@ describe('Application life cycle test', function () {
|
||||
});
|
||||
|
||||
// test update
|
||||
it('can install app', function () { execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --appstore-id net.syncthing.cloudronapp2 --location ' + LOCATION, EXEC_ARGS); });
|
||||
it('can install app', async function () {
|
||||
execSync('cloudron install --port-bindings SYNC_PORT=' + SYNC_PORT + ' --appstore-id net.syncthing.cloudronapp2 --location ' + LOCATION, EXEC_ARGS);
|
||||
await timers.setTimeout(30000);
|
||||
});
|
||||
it('can get app information', getAppInfo);
|
||||
it('wait', wait);
|
||||
it('can login', login);
|
||||
it('can load page', loadPage);
|
||||
it('can add folder', addFolder);
|
||||
it('can update', async function () {
|
||||
await browser.get('about:blank');
|
||||
execSync('cloudron update --app ' + LOCATION, EXEC_ARGS);
|
||||
await timers.setTimeout(30000);
|
||||
});
|
||||
it('wait', wait);
|
||||
it('can check folder', checkFolder);
|
||||
|
||||
it('uninstall app', async function () {
|
||||
|
Reference in New Issue
Block a user