···
certs = pkgs.runCommand "cryptpadSelfSignedCerts" { buildInputs = [ pkgs.openssl ]; } ''
···
test_write_data = pkgs.writeText "cryptpadTestData" ''
{"command":"WRITE_BLOCK","content":{"publicKey":"O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik=","signature":"aXcM9SMO59lwA7q7HbYB+AnzymmxSyy/KhkG/cXIBVzl8v+kkPWXmFuWhcuKfRF8yt3Zc3ktIsHoFyuyDSAwAA==","ciphertext":"AFwCIfBHKdFzDKjMg4cu66qlJLpP+6Yxogbl3o9neiQou5P8h8yJB8qgnQ=="},"publicKey":"O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik=","nonce":"bitSbJMNSzOsg98nEzN80a231PCkBQeH"}
16
+
pkgs.writers.writePython3Bin "selenium-script"
18
+
libraries = with pkgs.python3Packages; [ selenium ];
21
+
from sys import stderr
22
+
from time import time
23
+
from selenium import webdriver
24
+
from selenium.webdriver.common.by import By
25
+
from selenium.webdriver.firefox.options import Options
26
+
from selenium.webdriver.support.ui import WebDriverWait
27
+
from selenium.webdriver.support import expected_conditions as EC
30
+
options.add_argument("--headless")
31
+
service = webdriver.FirefoxService(executable_path="${lib.getExe pkgs.geckodriver}") # noqa: E501
33
+
driver = webdriver.Firefox(options=options, service=service)
34
+
driver.implicitly_wait(10)
35
+
driver.get("https://cryptpad.localhost")
37
+
WebDriverWait(driver, 10).until(
38
+
EC.text_to_be_present_in_element(
39
+
(By.TAG_NAME, "body"), "CryptPad")
42
+
driver.find_element(By.PARTIAL_LINK_TEXT, "Sheet").click()
44
+
# Title changes once the sheet is rendered, which can take
45
+
# a lot of time on first run (browser generates keypair etc)
47
+
WebDriverWait(driver, 60).until(
48
+
EC.title_contains('Sheet')
50
+
print(f"Sheets done loading in {time() - start}", file=stderr)
52
+
# check screen looks sane...
53
+
# driver.print_page() and dump pdf somewhere through pdftotext? OCR?
···
65
+
environment.systemPackages = [
66
+
pkgs.firefox-unwrapped
···
# test some API (e.g. check cryptpad main process)
machine.succeed("curl --fail -d @${test_write_data} -H 'Content-Type: application/json' https://cryptpad.localhost/api/auth")
111
+
machine.succeed("${lib.getExe seleniumScript}")
# test telemetry has been disabled
machine.fail("journalctl -u cryptpad | grep TELEMETRY");