Chromium Code Reviews| Index: remoting/webapp/browser_test/update_pin_browser_test.js |
| diff --git a/remoting/webapp/browser_test/update_pin_browser_test.js b/remoting/webapp/browser_test/update_pin_browser_test.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..28006434c99a6332cdab8b19ad70e6bb65bdfaa9 |
| --- /dev/null |
| +++ b/remoting/webapp/browser_test/update_pin_browser_test.js |
| @@ -0,0 +1,114 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +/** |
| + * @fileoverview |
| + * @suppress {checkTypes} |
| + * Browser test for the scenario below: |
| + * 1. Change the PIN. |
| + * 2. Connect with the new PIN. |
| + * 3. Verify the connection succeeded. |
| + * 4. Disconnect and reconnect with the old PIN. |
| + * 5. Verify the connection failed. |
| + */ |
| + |
| +'use strict'; |
| + |
| +/** @constructor */ |
| +browserTest.Update_PIN = function(data) { |
| + browserTest.assert(typeof data.pin != undefined); |
|
Jamie
2014/05/09 01:02:18
Copy/paste bug from the other tests?
kelvinp
2014/05/12 21:08:34
Done.
|
| + this.old_pin_ = data.old_pin; |
| + this.new_pin_ = data.new_pin; |
| + |
| + browserTest.assert(this.new_pin_ != this.old_pin_, |
| + 'The new PIN and the old PIN cannot be the same'); |
| + |
| + this.bound_ = { |
| + onPINSetup: this.onPINSetup_.bind(this), |
| + onPINChanged: this.onPINChanged_.bind(this), |
| + onPINPromptOldPIN: this.onPINPromptOldPIN_.bind(this), |
| + onInvalidPIN: this.onInvalidPIN_.bind(this), |
| + onPINPromptNewPIN: this.onPINPromptNewPIN_.bind(this), |
| + onSessionConnected: this.onSessionConnected_.bind(this), |
| + onSessionDisconnected: this.onSessionDisconnected_.bind(this) |
| + }; |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.run = function() { |
| + browserTest.waitForUIMode( |
| + remoting.AppMode.HOST_SETUP_ASK_PIN, |
| + this.bound_.onPINSetup); |
| + browserTest.clickOnControl('change-daemon-pin'); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.clickOnMe2MeHost_ = function() { |
| + browserTest.clickOnControl('this-host-connect'); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onPINSetup_ = function() { |
| + browserTest.waitForUIMode( |
| + remoting.AppMode.HOST_SETUP_DONE, this.bound_.onPINChanged); |
| + |
| + document.getElementById('daemon-pin-entry').value = this.new_pin_; |
| + document.getElementById('daemon-pin-confirm').value = this.new_pin_; |
| + browserTest.clickOnControl('daemon-pin-ok'); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onPINChanged_ = function() { |
| + browserTest.clickOnControl('host-config-done-dismiss'); |
| + |
| + // On Linux, we restart the host when the PIN is changed. Sleep for five |
|
Jamie
2014/05/09 01:02:18
You're actually sleeping for 30s.
kelvinp
2014/05/12 21:08:34
Done.
|
| + // seconds so that the host can be ready for new connections again. |
| + // TODO(kelvinp): Is there a better way to detect whether the host is ready |
| + // for new incoming connections? |
|
Jamie
2014/05/09 01:02:18
You could poll the daemon state. Better still, add
kelvinp
2014/05/12 21:08:34
Discussed offline. Will follow up with a differen
|
| + window.setTimeout(this.connectWithNewPIN_.bind(this), 30000); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.connectWithNewPIN_ = function() { |
| + // Need to test for the success case first because connecting with an |
| + // invalid PIN temporarily blocks future logins. |
|
Jamie
2014/05/09 01:02:18
Actually, this is worse because you're temporarily
kelvinp
2014/05/12 21:08:34
Done. In practice, it should be fine because the
|
| + browserTest.waitForUIMode( |
| + remoting.AppMode.CLIENT_PIN_PROMPT, this.bound_.onPINPromptNewPIN); |
| + |
| + this.clickOnMe2MeHost_(); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onPINPromptNewPIN_ = function() { |
| + browserTest.waitForUIMode( |
| + remoting.AppMode.IN_SESSION, this.bound_.onSessionConnected); |
| + document.getElementById('pin-entry').value = this.new_pin_; |
| + browserTest.clickOnControl('pin-connect-button'); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onSessionConnected_ = function() { |
| + // disconnect the session |
| + browserTest.waitForUIMode( |
| + remoting.AppMode.CLIENT_SESSION_FINISHED_ME2ME, |
| + this.bound_.onSessionDisconnected); |
| + browserTest.clickOnControl('toolbar-disconnect'); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onSessionDisconnected_ = function() { |
| + browserTest.waitForUIMode( |
| + remoting.AppMode.CLIENT_PIN_PROMPT, this.bound_.onPINPromptOldPIN); |
| + browserTest.clickOnControl('client-finished-me2me-button'); |
| + this.clickOnMe2MeHost_(); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onPINPromptOldPIN_ = function() { |
| + browserTest.waitForUIMode( |
| + remoting.AppMode.CLIENT_CONNECT_FAILED_ME2ME, |
| + this.bound_.onInvalidPIN); |
| + |
| + document.getElementById('pin-entry').value = this.old_pin_; |
| + browserTest.clickOnControl('pin-connect-button'); |
| +}; |
| + |
| +browserTest.Update_PIN.prototype.onInvalidPIN_ = function() { |
| + var errorDiv = document.getElementById('connect-error-message'); |
| + var actual = errorDiv.innerText; |
| + var expected = l10n.getTranslationOrError(remoting.Error.INVALID_ACCESS_CODE); |
| + browserTest.assert(actual == expected); |
| + browserTest.pass(); |
| +}; |