Repository URL to install this package:
Version:
0.6.0 ▾
|
'use strict';
const assert = require('assert');
const { inspect } = require('util');
const {
mustCall,
mustCallAtLeast,
setupSimple,
} = require('./common.js');
const DEBUG = false;
const setup = setupSimple.bind(undefined, DEBUG);
{
const { client, server } = setup('Simple shell()');
const OUTPUT = 'shell output!\n';
server.on('connection', mustCall((conn) => {
conn.on('ready', mustCall(() => {
conn.on('session', mustCall((accept, reject) => {
const session = accept();
session.on('pty', mustCall((accept, reject, info) => {
accept();
session.on('shell', mustCall((accept, reject) => {
let input = '';
const stream = accept();
stream.write(OUTPUT);
stream.on('data', mustCallAtLeast((data) => {
input += data;
if (input === 'exit\n') {
stream.end();
conn.end();
}
}));
}));
}));
}));
}));
}));
client.on('ready', mustCall(() => {
let output = '';
client.on('close', mustCall(() => {
assert(output === OUTPUT, `Wrong shell output: ${inspect(output)}`);
})).shell(mustCall((err, stream) => {
assert(!err, `Unexpected shell error: ${err}`);
stream.write('exit\n');
stream.on('data', mustCallAtLeast((d) => {
output += d;
})).on('close', mustCall(() => {}));
}));
}));
}
{
const { client, server } = setup('Shell with environment set');
const OUTPUT = 'shell output!\n';
const clientEnv = { SSH2NODETEST: 'foo' };
server.on('connection', mustCall((conn) => {
conn.on('ready', mustCall(() => {
conn.on('session', mustCall((accept, reject) => {
let pty = false;
let env = false;
accept().on('pty', mustCall((accept, reject, info) => {
accept();
pty = true;
})).on('env', mustCall((accept, reject, info) => {
accept && accept();
env = true;
assert(info.key === Object.keys(clientEnv)[0],
`Wrong env key: ${inspect(info.key)}`);
assert(info.val === Object.values(clientEnv)[0],
`Wrong env value: ${inspect(info.val)}`);
})).on('shell', mustCall((accept, reject) => {
assert(pty, 'Expected pty before shell');
assert(env, 'Expected env before shell');
let input = '';
const stream = accept();
stream.write(OUTPUT);
stream.on('data', mustCallAtLeast((data) => {
input += data;
if (input === 'exit\n') {
stream.end();
conn.end();
}
}));
}));
}));
}));
}));
client.on('ready', mustCall(() => {
let output = '';
client.on('close', mustCall(() => {
assert(output === OUTPUT, `Wrong shell output: ${inspect(output)}`);
})).shell({ env: clientEnv }, mustCall((err, stream) => {
assert(!err, `Unexpected shell error: ${err}`);
stream.write('exit\n');
stream.on('data', mustCallAtLeast((d) => {
output += d;
})).on('close', mustCall(() => {}));
}));
}));
}