1
0
Fork 0

Adding upstream version 0.1.10+dfsg.

Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
Daniel Baumann 2025-04-22 16:48:36 +02:00
parent 157f539082
commit 4d3e0bf859
Signed by: daniel
GPG key ID: FBB4F0E80A80222F
42 changed files with 10556 additions and 0 deletions

248
tests/zsession_send.js Executable file
View file

@ -0,0 +1,248 @@
#!/usr/bin/env node
"use strict";
const fs = require('fs');
const tape = require('blue-tape');
const RZ_PATH = require('which').sync('rz', {nothrow: true});
if (!RZ_PATH) {
tape.only('SKIP: no “rz” in PATH!', (t) => {
t.end();
});
}
Object.assign(
global,
{
Zmodem: require('./lib/zmodem'),
}
);
var helper = require('./lib/testhelp');
var dir_before = process.cwd();
tape.onFinish( () => process.chdir( dir_before ) );
let TEST_STRINGS = [
"",
"0",
"123",
"\x00",
"\x18",
"\x18\x18\x18\x18\x18", //invalid as UTF-8
"\x8a\x9a\xff\xfe", //invalid as UTF-8
"épée",
"Hi diddle-ee, dee! A sailors life for me!",
];
var text_encoder = require('text-encoding').TextEncoder;
text_encoder = new text_encoder();
function _send_batch(t, batch, on_offer) {
batch = batch.slice(0);
return helper.exec_lrzsz_steps( t, RZ_PATH, [], [
(zsession, child) => {
function offer_sender() {
if (!batch.length) {
zsession.close();
return; //batch finished
}
return zsession.send_offer(
batch[0][0]
).then( (xfer) => {
if (on_offer) {
on_offer(xfer, batch[0]);
}
let file_contents = batch.shift()[1];
var octets;
if ("string" === typeof file_contents) {
octets = text_encoder.encode(file_contents);
}
else {
octets = file_contents; // Buffer
}
return xfer && xfer.end( Array.from(octets) );
} ).then( offer_sender );
}
return offer_sender();
},
(zsession, child) => {
return zsession.has_ended();
},
] );
}
function _do_in_temp_dir( todo ) {
var ret;
process.chdir( helper.make_temp_dir() );
try {
ret = todo();
}
catch(e) {
throw e;
}
finally {
if (!ret) {
process.chdir( dir_before );
}
}
if (ret) {
ret = ret.then( () => process.chdir( dir_before ) );
}
return ret;
}
tape("rz accepts one, then skips next", (t) => {
return _do_in_temp_dir( () => {
let filename = "no-clobberage";
var batch = [
[
{ name: filename },
"the first",
],
[
{ name: filename },
"the second",
],
];
var offers = [];
function offer_cb(xfer, batch_item) {
offers.push( xfer );
}
return _send_batch(t, batch, offer_cb).then( () => {
var got_contents = fs.readFileSync(filename, "utf-8");
t.equals( got_contents, "the first", 'second offer was rejected' );
t.notEquals( offers[0], undefined, 'got an offer at first' );
t.equals( offers[1], undefined, '… but no offer second' );
} );
} );
});
tape("send batch", (t) => {
return _do_in_temp_dir( () => {
var string_num = 0;
var base = "batch_";
var mtime_1990 = new Date("1990-01-01T00:00:00Z");
var batch = TEST_STRINGS.map( (str, i) => {
return [
{
name: base + i,
mtime: mtime_1990,
},
str,
];
} );
return _send_batch(t, batch).then( () => {
for (var sn=0; sn < TEST_STRINGS.length; sn++) {
var got_contents = fs.readFileSync(base + sn, "utf-8");
t.equals( got_contents, TEST_STRINGS[sn], `rz wrote out the file: ` + JSON.stringify(TEST_STRINGS[sn]) );
t.equals( 0 + fs.statSync(base + sn).mtime, 0 + mtime_1990, `... and observed the sent mtime` );
}
} );
} );
});
tape("send one at a time", (t) => {
return _do_in_temp_dir( () => {
var xfer;
let test_strings = TEST_STRINGS.slice(0);
function doer() {
var file_contents = test_strings.shift();
if (typeof(file_contents) !== "string") return; //were done
return helper.exec_lrzsz_steps( t, RZ_PATH, ["--overwrite"], [
(zsession, child) => {
zsession.send_offer( { name: "single" } ).then( (xf) => {
t.ok( !!xf, 'rz accepted offer' );
xfer = xf;
} ).then(
() => xfer.end( Array.from( text_encoder.encode(file_contents) ) )
).then(
() => zsession.close()
);
return true;
},
(zsession, child) => {
return zsession.has_ended();
},
] ).then( () => {
var got_contents = fs.readFileSync("single", "utf-8");
t.equals( got_contents, file_contents, `rz wrote out the file: ` + JSON.stringify(file_contents) );
} ).then( doer );
}
return doer();
} );
});
tape("send single large file", (t) => {
return _do_in_temp_dir( () => {
var string_num = 0;
var mtime_1990 = new Date("1990-01-01T00:00:00Z");
var big_string = Array(30 * 1024 * 1024).fill('x').join("");
var batch = [
[
{
name: "big_kahuna",
},
big_string,
],
];
return _send_batch(t, batch).then( () => {
var got_contents = fs.readFileSync("big_kahuna", "utf-8");
t.equals( got_contents, big_string, 'rz wrote out the file');
} );
} );
});
tape("send single random file", (t) => {
return _do_in_temp_dir( () => {
var string_num = 0;
var mtime_1990 = new Date("1990-01-01T00:00:00Z");
var big_buffer = new Buffer(1024 * 1024);
for (var i=0; i<big_buffer.length; i++) {
big_buffer[i] = Math.floor( Math.random(256) );
}
var batch = [
[
{
name: "big_kahuna",
},
big_buffer,
],
];
return _send_batch(t, batch).then( () => {
var got_contents = fs.readFileSync("big_kahuna");
t.equals( got_contents.join(), big_buffer.join(), 'rz wrote out the file');
} );
} );
});