mirror of
https://github.com/kemko/nomad.git
synced 2026-01-05 01:45:44 +03:00
This updates Xterm.js to 4.6.0, which includes support for reverse-wraparound mode, so we no longer need to use a vendored dependency, which closes #7461. The interface for accessing the buffer that’s used for test assertions changed. With the dependency now accessed conventionally, we can have it load only when it’s needed by an exec popup window, which closes #7516. That saves us ≈60kb compressed in the dependency bundle!
160 lines
3.6 KiB
JavaScript
160 lines
3.6 KiB
JavaScript
import ExecSocketXtermAdapter from 'nomad-ui/utils/classes/exec-socket-xterm-adapter';
|
|
import { setupRenderingTest } from 'ember-qunit';
|
|
import { module, test } from 'qunit';
|
|
import { render, settled } from '@ember/test-helpers';
|
|
import hbs from 'htmlbars-inline-precompile';
|
|
import { Terminal } from 'xterm';
|
|
|
|
module('Integration | Utility | exec-socket-xterm-adapter', function(hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test('initiating socket sends authentication handshake', async function(assert) {
|
|
let done = assert.async();
|
|
|
|
let terminal = new Terminal();
|
|
this.set('terminal', terminal);
|
|
|
|
await render(hbs`
|
|
{{exec-terminal terminal=terminal}}
|
|
`);
|
|
|
|
await settled();
|
|
|
|
let firstMessage = true;
|
|
let mockSocket = new Object({
|
|
send(message) {
|
|
if (firstMessage) {
|
|
firstMessage = false;
|
|
assert.deepEqual(message, JSON.stringify({ version: 1, auth_token: 'mysecrettoken' }));
|
|
done();
|
|
}
|
|
},
|
|
});
|
|
|
|
new ExecSocketXtermAdapter(terminal, mockSocket, 'mysecrettoken');
|
|
|
|
mockSocket.onopen();
|
|
|
|
await settled();
|
|
});
|
|
|
|
test('initiating socket sends authentication handshake even if unauthenticated', async function(assert) {
|
|
let done = assert.async();
|
|
|
|
let terminal = new Terminal();
|
|
this.set('terminal', terminal);
|
|
|
|
await render(hbs`
|
|
{{exec-terminal terminal=terminal}}
|
|
`);
|
|
|
|
await settled();
|
|
|
|
let firstMessage = true;
|
|
let mockSocket = new Object({
|
|
send(message) {
|
|
if (firstMessage) {
|
|
firstMessage = false;
|
|
assert.deepEqual(message, JSON.stringify({ version: 1, auth_token: '' }));
|
|
done();
|
|
}
|
|
},
|
|
});
|
|
|
|
new ExecSocketXtermAdapter(terminal, mockSocket, null);
|
|
|
|
mockSocket.onopen();
|
|
|
|
await settled();
|
|
});
|
|
|
|
test('resizing the window passes a resize message through the socket', async function(assert) {
|
|
let done = assert.async();
|
|
|
|
let terminal = new Terminal();
|
|
this.set('terminal', terminal);
|
|
|
|
await render(hbs`
|
|
{{exec-terminal terminal=terminal}}
|
|
`);
|
|
|
|
await settled();
|
|
|
|
let mockSocket = new Object({
|
|
send(message) {
|
|
assert.deepEqual(
|
|
message,
|
|
JSON.stringify({ tty_size: { width: terminal.cols, height: terminal.rows } })
|
|
);
|
|
done();
|
|
},
|
|
});
|
|
|
|
new ExecSocketXtermAdapter(terminal, mockSocket, '');
|
|
|
|
window.dispatchEvent(new Event('resize'));
|
|
|
|
await settled();
|
|
});
|
|
|
|
test('stdout frames without data are ignored', async function(assert) {
|
|
assert.expect(0);
|
|
|
|
let terminal = new Terminal();
|
|
this.set('terminal', terminal);
|
|
|
|
await render(hbs`
|
|
{{exec-terminal terminal=terminal}}
|
|
`);
|
|
|
|
await settled();
|
|
|
|
let mockSocket = new Object({
|
|
send() {},
|
|
});
|
|
|
|
new ExecSocketXtermAdapter(terminal, mockSocket, '');
|
|
|
|
mockSocket.onmessage({
|
|
data: '{"stdout":{"exited":"true"}}',
|
|
});
|
|
|
|
await settled();
|
|
});
|
|
|
|
test('stderr frames are ignored', async function(assert) {
|
|
let terminal = new Terminal();
|
|
this.set('terminal', terminal);
|
|
|
|
await render(hbs`
|
|
{{exec-terminal terminal=terminal}}
|
|
`);
|
|
|
|
await settled();
|
|
|
|
let mockSocket = new Object({
|
|
send() {},
|
|
});
|
|
|
|
new ExecSocketXtermAdapter(terminal, mockSocket, '');
|
|
|
|
mockSocket.onmessage({
|
|
data: '{"stdout":{"data":"c2gtMy4yIPCfpbMk"}}',
|
|
});
|
|
|
|
mockSocket.onmessage({
|
|
data: '{"stderr":{"data":"c2gtMy4yIPCfpbMk"}}',
|
|
});
|
|
|
|
await settled();
|
|
|
|
assert.equal(
|
|
terminal.buffer.active
|
|
.getLine(0)
|
|
.translateToString()
|
|
.trim(),
|
|
'sh-3.2 🥳$'
|
|
);
|
|
});
|
|
});
|