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  });