Merge branch 'test-registering-with-element-web' into 'master'
CI: Test registration with element web See merge request famedly/conduit!128
This commit is contained in:
		
						commit
						124b5484b5
					
				
					 3 changed files with 144 additions and 3 deletions
				
			
		|  | @ -1,6 +1,6 @@ | ||||||
| stages: | stages: | ||||||
|   - test |  | ||||||
|   - build |   - build | ||||||
|  |   - test | ||||||
|   - upload artifacts |   - upload artifacts | ||||||
| 
 | 
 | ||||||
| variables: | variables: | ||||||
|  | @ -8,8 +8,6 @@ variables: | ||||||
|   FF_USE_FASTZIP: 1 |   FF_USE_FASTZIP: 1 | ||||||
|   CACHE_COMPRESSION_LEVEL: fastest |   CACHE_COMPRESSION_LEVEL: fastest | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| test:cargo: | test:cargo: | ||||||
|   stage: "test" |   stage: "test" | ||||||
|   needs: [] |   needs: [] | ||||||
|  | @ -34,6 +32,31 @@ test:cargo: | ||||||
|     - cargo test --workspace --verbose --locked |     - cargo test --workspace --verbose --locked | ||||||
|     - cargo clippy |     - cargo clippy | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | test:register:element-web-stable: | ||||||
|  |   stage: "test" | ||||||
|  |   needs: | ||||||
|  |     - "build:cargo:x86_64-unknown-linux-gnu" | ||||||
|  |   image: "buildkite/puppeteer:latest" | ||||||
|  |   tags: ["docker"] | ||||||
|  |   interruptible: true | ||||||
|  |   script: | ||||||
|  |     - "CONDUIT_CONFIG=tests/test-config.toml ./conduit-x86_64-unknown-linux-gnu > conduit.log &" | ||||||
|  |     - "cd tests/client-element-web/" | ||||||
|  |     - "npm install puppeteer" | ||||||
|  |     - "node test-element-web-registration.js \"https://app.element.io/\" \"http://localhost:6167\"" | ||||||
|  |     - "killall --regexp \"conduit\"" | ||||||
|  |     - "cd ../.." | ||||||
|  |     - "cat conduit.log" | ||||||
|  |   artifacts: | ||||||
|  |     paths: | ||||||
|  |       - "tests/client-element-web/*.png" | ||||||
|  |       - "*.log" | ||||||
|  |     expire_in: 1 week | ||||||
|  |     when: always | ||||||
|  |   retry: 1 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| # --------------------------------------------------------------------- # | # --------------------------------------------------------------------- # | ||||||
| #  Cargo: Compiling for different architectures                         # | #  Cargo: Compiling for different architectures                         # | ||||||
| # --------------------------------------------------------------------- # | # --------------------------------------------------------------------- # | ||||||
|  | @ -76,6 +99,8 @@ build:cargo:x86_64-unknown-linux-gnu: | ||||||
|   extends: .build-cargo-shared-settings |   extends: .build-cargo-shared-settings | ||||||
|   variables: |   variables: | ||||||
|     TARGET: "x86_64-unknown-linux-gnu" |     TARGET: "x86_64-unknown-linux-gnu" | ||||||
|  |   rules: | ||||||
|  |     - if: "$CI_COMMIT_BRANCH" | ||||||
| 
 | 
 | ||||||
| build:cargo:armv7-unknown-linux-gnueabihf: | build:cargo:armv7-unknown-linux-gnueabihf: | ||||||
|   extends: .build-cargo-shared-settings |   extends: .build-cargo-shared-settings | ||||||
|  |  | ||||||
							
								
								
									
										101
									
								
								tests/client-element-web/test-element-web-registration.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								tests/client-element-web/test-element-web-registration.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,101 @@ | ||||||
|  | const puppeteer = require('puppeteer'); | ||||||
|  | 
 | ||||||
|  | run().then(() => console.log('Done')).catch(error => { | ||||||
|  |     console.error("Registration test failed."); | ||||||
|  |     console.error("There might be a screenshot of the failure in the artifacts.\n"); | ||||||
|  |     console.error(error); | ||||||
|  |     process.exit(111); | ||||||
|  | }); | ||||||
|  | 
 | ||||||
|  | async function run() { | ||||||
|  | 
 | ||||||
|  |     const elementUrl = process.argv[process.argv.length - 2]; | ||||||
|  |     console.debug("Testing registration with ElementWeb hosted at "+ elementUrl); | ||||||
|  | 
 | ||||||
|  |     const homeserverUrl = process.argv[process.argv.length - 1]; | ||||||
|  |     console.debug("Homeserver url: "+ homeserverUrl); | ||||||
|  | 
 | ||||||
|  |     const username = "testuser" + String(Math.floor(Math.random() * 100000)); | ||||||
|  |     const password = "testpassword" + String(Math.floor(Math.random() * 100000)); | ||||||
|  |     console.debug("Testuser for this run:\n  User: " + username + "\n  Password: " + password); | ||||||
|  | 
 | ||||||
|  |     const browser = await puppeteer.launch({ | ||||||
|  |         headless: true, args: [ | ||||||
|  |             "--no-sandbox" | ||||||
|  |         ] | ||||||
|  |     }); | ||||||
|  | 
 | ||||||
|  |     const page = await browser.newPage(); | ||||||
|  |     await page.goto(elementUrl); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '01-element-web-opened.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("Click [Create Account] button"); | ||||||
|  |     await page.waitForSelector('a.mx_ButtonCreateAccount'); | ||||||
|  |     await page.click('a.mx_ButtonCreateAccount'); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '02-clicked-create-account-button.png' }); | ||||||
|  | 
 | ||||||
|  |     // The webapp should have loaded right now, if anything takes more than 5 seconds, something probably broke
 | ||||||
|  |     page.setDefaultTimeout(5000); | ||||||
|  | 
 | ||||||
|  |     console.debug("Click [Edit] to switch homeserver"); | ||||||
|  |     await page.waitForSelector('div.mx_ServerPicker_change'); | ||||||
|  |     await page.click('div.mx_ServerPicker_change'); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '03-clicked-edit-homeserver-button.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("Type in local homeserver url"); | ||||||
|  |     await page.waitForSelector('input#mx_homeserverInput'); | ||||||
|  |     await page.click('input#mx_homeserverInput'); | ||||||
|  |     await page.click('input#mx_homeserverInput'); | ||||||
|  |     await page.keyboard.type(homeserverUrl); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '04-typed-in-homeserver.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("[Continue] with changed homeserver"); | ||||||
|  |     await page.waitForSelector("div.mx_ServerPickerDialog_continue"); | ||||||
|  |     await page.click('div.mx_ServerPickerDialog_continue'); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '05-back-to-enter-user-credentials.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("Type in username"); | ||||||
|  |     await page.waitForSelector("input#mx_RegistrationForm_username"); | ||||||
|  |     await page.click('input#mx_RegistrationForm_username'); | ||||||
|  |     await page.keyboard.type(username); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '06-typed-in-username.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("Type in password"); | ||||||
|  |     await page.waitForSelector("input#mx_RegistrationForm_password"); | ||||||
|  |     await page.click('input#mx_RegistrationForm_password'); | ||||||
|  |     await page.keyboard.type(password); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '07-typed-in-password-once.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("Type in password again"); | ||||||
|  |     await page.waitForSelector("input#mx_RegistrationForm_passwordConfirm"); | ||||||
|  |     await page.click('input#mx_RegistrationForm_passwordConfirm'); | ||||||
|  |     await page.keyboard.type(password); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '08-typed-in-password-twice.png' }); | ||||||
|  | 
 | ||||||
|  |     console.debug("Click on [Register] to finish the account creation"); | ||||||
|  |     await page.waitForSelector("input.mx_Login_submit"); | ||||||
|  |     await page.click('input.mx_Login_submit'); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '09-clicked-on-register-button.png' }); | ||||||
|  | 
 | ||||||
|  |     // Waiting for the app to login can take some time, so be patient.
 | ||||||
|  |     page.setDefaultTimeout(10000); | ||||||
|  | 
 | ||||||
|  |     console.debug("Wait for chat window to show up"); | ||||||
|  |     await page.waitForSelector("div.mx_HomePage_default_buttons"); | ||||||
|  |     console.debug("Apparently the registration worked."); | ||||||
|  | 
 | ||||||
|  |     await page.screenshot({ path: '10-logged-in-homescreen.png' }); | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     // Close the browser and exit the script
 | ||||||
|  |     await browser.close(); | ||||||
|  | } | ||||||
							
								
								
									
										15
									
								
								tests/test-config.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								tests/test-config.toml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | ||||||
|  | [global] | ||||||
|  | 
 | ||||||
|  | # Server runs in same container as tests do, so localhost is fine | ||||||
|  | server_name = "localhost" | ||||||
|  | 
 | ||||||
|  | # With a bit of luck /tmp is a RAM disk, so that the file system does not become the bottleneck while testing | ||||||
|  | database_path = "/tmp" | ||||||
|  | 
 | ||||||
|  | # All the other settings are left at their defaults: | ||||||
|  | port = 6167 | ||||||
|  | max_request_size = 20_000_000 | ||||||
|  | allow_registration = true | ||||||
|  | trusted_servers = ["matrix.org"] | ||||||
|  | address = "127.0.0.1" | ||||||
|  | proxy = "none" | ||||||
		Loading…
	
		Reference in a new issue