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..0d0eba5fa40a164de3480ce57240d798514e1f7e |
--- /dev/null |
+++ b/remoting/webapp/browser_test/update_pin_browser_test.js |
@@ -0,0 +1,109 @@ |
+// 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() {}; |
+ |
+browserTest.Update_PIN.prototype.run = function(data) { |
+ var LOGIN_BACKOFF_WAIT = 2000; |
+ // Input validation |
+ browserTest.expect(typeof data.new_pin == 'string'); |
+ browserTest.expect(typeof data.old_pin == 'string'); |
+ browserTest.expect(data.new_pin != data.old_pin, |
+ 'The new PIN and the old PIN cannot be the same'); |
+ |
+ this.changePIN_(data.new_pin).then( |
+ this.connect_.bind(this) |
+ ).then( |
+ this.enterPIN_.bind(this, data.old_pin, true /* expectError*/) |
+ ).then( |
+ // Sleep for two seconds to allow for the login backoff logic to reset. |
+ base.Promise.sleep.bind(null, LOGIN_BACKOFF_WAIT) |
+ ).then( |
+ this.connect_.bind(this) |
+ ).then( |
+ this.enterPIN_.bind(this, data.new_pin, false /* expectError*/) |
+ ).then( |
+ // Clean up the test by disconnecting and changing the PIN back |
+ this.disconnect_.bind(this) |
+ ).then( |
+ // The PIN must be restored regardless of success or failure. |
+ this.changePIN_.bind(this, data.old_pin), |
+ this.changePIN_.bind(this, data.old_pin) |
+ ).then( |
+ // On fulfilled. |
+ browserTest.pass, |
+ // On rejected. |
+ browserTest.fail |
+ ); |
+}; |
+ |
+browserTest.Update_PIN.prototype.changePIN_ = function(newPin) { |
+ var AppMode = remoting.AppMode; |
+ var HOST_RESTART_WAIT = 10000; |
+ |
+ browserTest.clickOnControl('change-daemon-pin'); |
+ |
+ return browserTest.onUIMode(AppMode.HOST_SETUP_ASK_PIN).then(function() { |
+ var onSetupDone = browserTest.onUIMode(AppMode.HOST_SETUP_DONE); |
+ document.getElementById('daemon-pin-entry').value = newPin; |
+ document.getElementById('daemon-pin-confirm').value = newPin; |
+ browserTest.clickOnControl('daemon-pin-ok'); |
+ return onSetupDone; |
+ }).then(function() { |
+ browserTest.clickOnControl('host-config-done-dismiss'); |
+ // On Linux, we restart the host after changing the PIN, need to sleep |
+ // for ten seconds before the host is ready for connection. |
+ return base.Promise.sleep(HOST_RESTART_WAIT); |
+ }); |
+}; |
+ |
+browserTest.Update_PIN.prototype.connect_ = function() { |
+ browserTest.clickOnControl('this-host-connect'); |
+ return browserTest.onUIMode(remoting.AppMode.CLIENT_PIN_PROMPT); |
+}; |
+ |
+browserTest.Update_PIN.prototype.disconnect_ = function() { |
+ var AppMode = remoting.AppMode; |
+ |
+ remoting.disconnect(); |
+ |
+ return browserTest.onUIMode(AppMode.CLIENT_SESSION_FINISHED_ME2ME) |
+ .then(function() { |
+ var onHome = browserTest.onUIMode(AppMode.HOME); |
+ browserTest.clickOnControl('client-finished-me2me-button'); |
+ return onHome; |
+ }); |
+}; |
+ |
+browserTest.Update_PIN.prototype.enterPIN_ = function(pin, expectError) { |
+ // Wait for 500ms before hitting the PIN button. From experiment, sometimes |
+ // the PIN prompt does not dismiss without the timeout. |
+ var CONNECT_PIN_WAIT = 500; |
+ |
+ document.getElementById('pin-entry').value = pin; |
+ |
+ return base.Promise.sleep(CONNECT_PIN_WAIT).then(function() { |
+ browserTest.clickOnControl('pin-connect-button'); |
+ }).then(function() { |
+ if (expectError) { |
+ return browserTest.expectMe2MeError(remoting.Error.INVALID_ACCESS_CODE); |
+ } else { |
+ return browserTest.expectMe2MeConnected(); |
+ } |
+ }); |
+}; |