github.com/iqoqo/nomad@v0.11.3-0.20200911112621-d7021c74d101/ui/tests/integration/util/exec-socket-xterm-adapter-test.js (about) 1 import ExecSocketXtermAdapter from 'nomad-ui/utils/classes/exec-socket-xterm-adapter'; 2 import { setupRenderingTest } from 'ember-qunit'; 3 import { module, test } from 'qunit'; 4 import { render, settled } from '@ember/test-helpers'; 5 import hbs from 'htmlbars-inline-precompile'; 6 import { Terminal } from 'xterm-vendor'; 7 8 module('Integration | Utility | exec-socket-xterm-adapter', function(hooks) { 9 setupRenderingTest(hooks); 10 11 test('initiating socket sends authentication handshake', async function(assert) { 12 let done = assert.async(); 13 14 let terminal = new Terminal(); 15 this.set('terminal', terminal); 16 17 await render(hbs` 18 {{exec-terminal terminal=terminal}} 19 `); 20 21 await settled(); 22 23 let firstMessage = true; 24 let mockSocket = new Object({ 25 send(message) { 26 if (firstMessage) { 27 firstMessage = false; 28 assert.deepEqual(message, JSON.stringify({ version: 1, auth_token: 'mysecrettoken' })); 29 done(); 30 } 31 }, 32 }); 33 34 new ExecSocketXtermAdapter(terminal, mockSocket, 'mysecrettoken'); 35 36 mockSocket.onopen(); 37 38 await settled(); 39 }); 40 41 test('initiating socket sends authentication handshake even if unauthenticated', async function(assert) { 42 let done = assert.async(); 43 44 let terminal = new Terminal(); 45 this.set('terminal', terminal); 46 47 await render(hbs` 48 {{exec-terminal terminal=terminal}} 49 `); 50 51 await settled(); 52 53 let firstMessage = true; 54 let mockSocket = new Object({ 55 send(message) { 56 if (firstMessage) { 57 firstMessage = false; 58 assert.deepEqual(message, JSON.stringify({ version: 1, auth_token: '' })); 59 done(); 60 } 61 }, 62 }); 63 64 new ExecSocketXtermAdapter(terminal, mockSocket, null); 65 66 mockSocket.onopen(); 67 68 await settled(); 69 }); 70 71 test('resizing the window passes a resize message through the socket', async function(assert) { 72 let done = assert.async(); 73 74 let terminal = new Terminal(); 75 this.set('terminal', terminal); 76 77 await render(hbs` 78 {{exec-terminal terminal=terminal}} 79 `); 80 81 await settled(); 82 83 let mockSocket = new Object({ 84 send(message) { 85 assert.deepEqual( 86 message, 87 JSON.stringify({ tty_size: { width: terminal.cols, height: terminal.rows } }) 88 ); 89 done(); 90 }, 91 }); 92 93 new ExecSocketXtermAdapter(terminal, mockSocket, ''); 94 95 window.dispatchEvent(new Event('resize')); 96 97 await settled(); 98 }); 99 100 test('stdout frames without data are ignored', async function(assert) { 101 assert.expect(0); 102 103 let terminal = new Terminal(); 104 this.set('terminal', terminal); 105 106 await render(hbs` 107 {{exec-terminal terminal=terminal}} 108 `); 109 110 await settled(); 111 112 let mockSocket = new Object({ 113 send() {}, 114 }); 115 116 new ExecSocketXtermAdapter(terminal, mockSocket, ''); 117 118 mockSocket.onmessage({ 119 data: '{"stdout":{"exited":"true"}}', 120 }); 121 122 await settled(); 123 }); 124 125 test('stderr frames are ignored', async function(assert) { 126 let terminal = new Terminal(); 127 this.set('terminal', terminal); 128 129 await render(hbs` 130 {{exec-terminal terminal=terminal}} 131 `); 132 133 await settled(); 134 135 let mockSocket = new Object({ 136 send() {}, 137 }); 138 139 new ExecSocketXtermAdapter(terminal, mockSocket, ''); 140 141 mockSocket.onmessage({ 142 data: '{"stdout":{"data":"c2gtMy4yIPCfpbMk"}}', 143 }); 144 145 mockSocket.onmessage({ 146 data: '{"stderr":{"data":"c2gtMy4yIPCfpbMk"}}', 147 }); 148 149 await settled(); 150 151 assert.equal( 152 terminal.buffer 153 .getLine(0) 154 .translateToString() 155 .trim(), 156 'sh-3.2 🥳$' 157 ); 158 }); 159 });