mirror of
https://github.com/whyour/qinglong.git
synced 2026-09-21 01:32:44 +08:00
50 lines
1.4 KiB
JavaScript
50 lines
1.4 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('node:assert/strict');
|
|
const { spawnSync } = require('node:child_process');
|
|
const path = require('node:path');
|
|
const { test } = require('node:test');
|
|
const {
|
|
parseArguments,
|
|
} = require('../../scripts/ql3-cluster-admin-product-live-contract.cjs');
|
|
|
|
const script = path.resolve(
|
|
__dirname,
|
|
'../../scripts/ql3-cluster-admin-product-live-contract.cjs',
|
|
);
|
|
|
|
test('accepts one bounded image reference', () => {
|
|
assert.equal(
|
|
parseArguments(['--image=registry.example.com/qinglong/admin@sha256:abc']),
|
|
'registry.example.com/qinglong/admin@sha256:abc',
|
|
);
|
|
});
|
|
|
|
test('rejects missing, duplicate, unknown, empty or unsafe image arguments', () => {
|
|
for (const argv of [
|
|
[],
|
|
['--image=one', '--image=two'],
|
|
['--profile=admin'],
|
|
['--image='],
|
|
['--image=admin image'],
|
|
[`--image=${'a'.repeat(257)}`],
|
|
]) {
|
|
assert.throws(() => parseArguments(argv), /live contract failed/);
|
|
}
|
|
});
|
|
|
|
test('fails closed before Docker without explicit opt-in', () => {
|
|
const result = spawnSync(
|
|
process.execPath,
|
|
[script, '--image=missing:latest'],
|
|
{
|
|
encoding: 'utf8',
|
|
env: { ...process.env, QL3_CLUSTER_ADMIN_PRODUCT_LIVE: '0' },
|
|
},
|
|
);
|
|
assert.equal(result.status, 1);
|
|
assert.equal(result.stdout, '');
|
|
assert.match(result.stderr, /QL3_CLUSTER_ADMIN_PRODUCT_LIVE=1 is required/);
|
|
assert.equal(result.stderr.includes('spawn'), false);
|
|
});
|