forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathupdate_pin_browser_test.js
109 lines (94 loc) · 3.52 KB
/
update_pin_browser_test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
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();
}
});
};