cloudcmd/server/distribute/import.spec.mjs
2024-03-18 17:59:45 +02:00

285 lines
6.9 KiB
JavaScript

import process from 'node:process';
import test from 'supertape';
import {promisify} from 'node:util';
import tryToCatch from 'try-to-catch';
import {connect} from '../../test/before.mjs';
import {createConfigManager} from '../cloudcmd.mjs';
import distributeImport from './import.js';
const distribute = {
import: promisify(distributeImport),
};
const config = createConfigManager();
process.on('unhandledRejection', console.log);
test('distribute: import: canceled', async (t) => {
const {done} = await connect({
config: {
export: false,
import: false,
importListen: false,
log: false,
},
});
const {status} = await distribute.import(config);
await done();
t.equal(status, 'canceled');
t.end();
});
test('distribute: import: received: no error', async (t) => {
const {done, port} = await connect({
config: {
import: true,
importListen: false,
export: true,
log: false,
},
});
config('importUrl', `http://localhost:${port}`);
const [e] = await tryToCatch(distribute.import, config);
await done();
t.notOk(e, 'should not be error');
t.end();
});
test('distribute: import: received', async (t) => {
const configManager = createConfigManager();
const {done, port} = await connect({
configManager,
config: {
name: 'bill',
import: true,
importToken: 'a',
exportToken: 'a',
export: true,
importListen: false,
log: false,
},
});
configManager('importUrl', `http://localhost:${port}`);
const {status} = await distribute.import(configManager);
await done();
t.equal(status, 'received');
t.end();
});
test('distribute: import: received: auth: reject', async (t) => {
const configManager = createConfigManager();
const {done, port} = await connect({
configManager,
config: {
name: 'bill',
import: true,
importToken: 'xxxxx',
exportToken: 'bbbbb',
export: true,
importListen: false,
log: false,
},
});
configManager('importUrl', `http://localhost:${port}`);
const {status} = await distribute.import(configManager);
await done();
t.equal(status, 'reject');
t.end();
});
test('distribute: import: received: auth: accept', async (t) => {
const configManager = createConfigManager();
const {done, port} = await connect({
configManager,
config: {
name: 'bill',
import: true,
importToken: 'xxxxx',
exportToken: 'xxxxx',
export: true,
importListen: false,
log: false,
},
});
configManager('importUrl', `http://localhost:${port}`);
const {status} = await distribute.import(configManager);
await done();
t.equal(status, 'received');
t.end();
});
test('distribute: import: received: no name', async (t) => {
const configManager = createConfigManager();
const {done, port} = await connect({
configManager,
config: {
name: '',
import: true,
export: true,
importListen: false,
log: false,
},
});
configManager('importUrl', `http://localhost:${port}`);
const {status} = await distribute.import(configManager);
await done();
t.equal(status, 'received');
t.end();
});
test('distribute: import: error', async (t) => {
const configManager = createConfigManager();
const {done} = await connect({
configManager,
config: {
import: true,
export: false,
importListen: false,
log: false,
},
});
configManager('importUrl', `http://localhost:0`);
const {status} = await distribute.import(configManager, {
reconnection: false,
});
await done();
t.equal(status, 'connect_error');
t.end();
});
test('distribute: import: config:change: no export', async (t) => {
const configManager = createConfigManager();
const {done} = await connect({
configManager,
config: {
import: true,
export: false,
importListen: true,
log: false,
},
});
const {status} = await distribute.import(configManager, {
reconnection: false,
});
await done();
t.equal(status, 'connect_error');
t.end();
});
test('distribute: import: env', async (t) => {
const configManager = createConfigManager();
const configManagerImport = createConfigManager();
const exporter = await connect({
configManager,
config: {
name: 'bill',
import: false,
importListen: false,
export: true,
exportToken: 'a',
log: false,
editor: 'edward',
},
});
const importer = await connect({
configManager: configManagerImport,
config: {
name: 'jack',
import: true,
importToken: 'a',
export: false,
importListen: false,
log: false,
editor: 'deepword',
},
});
process.env.cloudcmd_editor = 'some editor';
configManagerImport('importUrl', `http://localhost:${exporter.port}`);
await distribute.import(configManagerImport);
await importer.done();
await exporter.done();
delete process.env.cloudcmd_editor;
const result = configManagerImport('editor');
const expected = 'deepword';
t.equal(result, expected);
t.end();
});
test('distribute: import: no env', async (t) => {
const configManager = createConfigManager();
const configManagerImport = createConfigManager();
const exporter = await connect({
configManager,
config: {
name: 'bill',
import: false,
importListen: false,
export: true,
exportToken: 'a',
log: false,
editor: 'edward',
},
});
const importer = await connect({
configManager: configManagerImport,
config: {
name: 'jack',
import: true,
importToken: 'a',
export: false,
importListen: false,
log: false,
editor: 'deepword',
},
});
configManagerImport('importUrl', `http://localhost:${exporter.port}`);
await distribute.import(configManagerImport);
await importer.done();
await exporter.done();
const result = configManagerImport('editor');
const expected = 'edward';
t.equal(result, expected);
t.end();
});