@@ -139,14 +139,14 @@ export async function checkDeviceIsCrossSigned(app: ElementAppPage): Promise<voi
139
139
* Check that the current device is connected to the expected key backup.
140
140
* Also checks that the decryption key is known and cached locally.
141
141
*
142
- * @param page - the page to check
142
+ * @param app -` ElementAppPage` wrapper for the playwright `Page`.
143
143
* @param expectedBackupVersion - the version of the backup we expect to be connected to.
144
- * @param checkBackupKeyInCache - whether to check that the backup key is cached locally.
144
+ * @param checkBackupPrivateKeyInCache - whether to check that the backup decryption key is cached locally
145
145
*/
146
146
export async function checkDeviceIsConnectedKeyBackup (
147
- page : Page ,
147
+ app : ElementAppPage ,
148
148
expectedBackupVersion : string ,
149
- checkBackupKeyInCache : boolean ,
149
+ checkBackupPrivateKeyInCache : boolean ,
150
150
) : Promise < void > {
151
151
// Sanity check the given backup version: if it's null, something went wrong earlier in the test.
152
152
if ( ! expectedBackupVersion ) {
@@ -155,23 +155,48 @@ export async function checkDeviceIsConnectedKeyBackup(
155
155
) ;
156
156
}
157
157
158
- await page . getByRole ( "button" , { name : "User menu" } ) . click ( ) ;
159
- await page . locator ( ".mx_UserMenu_contextMenu" ) . getByRole ( "menuitem" , { name : "Security & Privacy" } ) . click ( ) ;
160
- await expect ( page . locator ( ".mx_Dialog" ) . getByRole ( "button" , { name : "Restore from Backup" } ) ) . toBeVisible ( ) ;
161
-
162
- // expand the advanced section to see the active version in the reports
163
- await page . locator ( ".mx_SecureBackupPanel_advanced" ) . locator ( ".." ) . click ( ) ;
158
+ const backupData = await app . client . evaluate ( async ( client : MatrixClient ) => {
159
+ const crypto = client . getCrypto ( ) ;
160
+ if ( ! crypto ) return ;
161
+
162
+ const backupInfo = await crypto . getKeyBackupInfo ( ) ;
163
+ const backupKeyIn4S = Boolean ( await client . isKeyBackupKeyStored ( ) ) ;
164
+ const backupPrivateKeyFromCache = await crypto . getSessionBackupPrivateKey ( ) ;
165
+ const hasBackupPrivateKeyFromCache = Boolean ( backupPrivateKeyFromCache ) ;
166
+ const backupPrivateKeyWellFormed = backupPrivateKeyFromCache instanceof Uint8Array ;
167
+ const activeBackupVersion = await crypto . getActiveSessionBackupVersion ( ) ;
168
+
169
+ return {
170
+ backupInfo,
171
+ hasBackupPrivateKeyFromCache,
172
+ backupPrivateKeyWellFormed,
173
+ backupKeyIn4S,
174
+ activeBackupVersion,
175
+ } ;
176
+ } ) ;
164
177
165
- if ( checkBackupKeyInCache ) {
166
- const cacheDecryptionKeyStatusElement = page . locator ( ".mx_SecureBackupPanel_statusList tr:nth-child(2) td" ) ;
167
- await expect ( cacheDecryptionKeyStatusElement ) . toHaveText ( "cached locally, well formed" ) ;
178
+ if ( ! backupData ) {
179
+ throw new Error ( "Crypto module is not available" ) ;
168
180
}
169
181
170
- await expect ( page . locator ( ".mx_SecureBackupPanel_statusList tr:nth-child(5) td" ) ) . toHaveText (
171
- expectedBackupVersion + " (Algorithm: m.megolm_backup.v1.curve25519-aes-sha2)" ,
172
- ) ;
173
-
174
- await expect ( page . locator ( ".mx_SecureBackupPanel_statusList tr:nth-child(6) td" ) ) . toHaveText ( expectedBackupVersion ) ;
182
+ const { backupInfo, backupKeyIn4S, hasBackupPrivateKeyFromCache, backupPrivateKeyWellFormed, activeBackupVersion } =
183
+ backupData ;
184
+
185
+ // We have a key backup
186
+ expect ( backupInfo ) . toBeDefined ( ) ;
187
+ // The key backup version is as expected
188
+ expect ( backupInfo . version ) . toBe ( expectedBackupVersion ) ;
189
+ // The active backup version is as expected
190
+ expect ( activeBackupVersion ) . toBe ( expectedBackupVersion ) ;
191
+ // The backup key is stored in 4S
192
+ expect ( backupKeyIn4S ) . toBe ( true ) ;
193
+
194
+ if ( checkBackupPrivateKeyInCache ) {
195
+ // The backup key is available locally
196
+ expect ( hasBackupPrivateKeyFromCache ) . toBe ( true ) ;
197
+ // The backup key is well-formed
198
+ expect ( backupPrivateKeyWellFormed ) . toBe ( true ) ;
199
+ }
175
200
}
176
201
177
202
/**
0 commit comments