CI: Test registration with element web
This commit is contained in:
		
							parent
							
								
									f924ebf8a6
								
							
						
					
					
						commit
						2babff1e41
					
				
					 3 changed files with 144 additions and 3 deletions
				
			
		|  | @ -1,6 +1,6 @@ | |||
| stages: | ||||
|   - test | ||||
|   - build | ||||
|   - test | ||||
|   - upload artifacts | ||||
| 
 | ||||
| variables: | ||||
|  | @ -8,8 +8,6 @@ variables: | |||
|   FF_USE_FASTZIP: 1 | ||||
|   CACHE_COMPRESSION_LEVEL: fastest | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| test:cargo: | ||||
|   stage: "test" | ||||
|   needs: [] | ||||
|  | @ -34,6 +32,31 @@ test:cargo: | |||
|     - cargo test --workspace --verbose --locked | ||||
|     - 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                         # | ||||
| # --------------------------------------------------------------------- # | ||||
|  | @ -76,6 +99,8 @@ build:cargo:x86_64-unknown-linux-gnu: | |||
|   extends: .build-cargo-shared-settings | ||||
|   variables: | ||||
|     TARGET: "x86_64-unknown-linux-gnu" | ||||
|   rules: | ||||
|     - if: "$CI_COMMIT_BRANCH" | ||||
| 
 | ||||
| build:cargo:armv7-unknown-linux-gnueabihf: | ||||
|   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