balena-supervisor/test/unit/config/append-directive.spec.ts

118 lines
2.3 KiB
TypeScript
Raw Normal View History

import { expect } from 'chai';
import { AppendDirective } from '~/src/config/backends/extlinux-file';
describe('APPEND directive', () => {
const supportedConfigValues = ['isolcpus'];
const directive = new AppendDirective(supportedConfigValues);
it('parses valid APPEND value', () => {
VALID_VALUES.forEach(({ input, output }) =>
expect(directive.parse(input)).to.deep.equal(output),
);
});
it('errors when parsing invalid APPEND value', () => {
INVALID_VALUES.forEach(({ input, reason }) =>
// @ts-expect-error
expect(() => directive.parse(input)).to.throw(reason),
);
});
it('generates new string from existing string', () => {
expect(
directive.generate(
{
isolcpus: '2',
},
'ro rootwait',
),
).to.deep.equal('ro rootwait isolcpus=2');
});
it('generates string from existing string (replaces values)', () => {
expect(
directive.generate(
{
isolcpus: '2,4',
},
'ro rootwait isolcpus=2',
),
).to.deep.equal('ro rootwait isolcpus=2,4');
});
it('generates string from nothing', () => {
expect(
directive.generate({
isolcpus: '2,4',
}),
).to.deep.equal('isolcpus=2,4');
});
it('generates string from nothing', () => {
expect(
directive.generate({
rootwait: '',
ro: '',
isolcpus: '2,4',
}),
).to.deep.equal('rootwait ro isolcpus=2,4');
});
it('errors when generating with invalid ConfigOptions', () => {
INVALID_CONFIGS_OPTIONS.forEach(({ input, reason }) =>
expect(() => directive.generate(input)).to.throw(reason),
);
});
});
const VALID_VALUES = [
{
input: {
APPEND: '${cbootargs} ${resin_kernel_root} ro rootwait isolcpus=2',
},
output: {
'${cbootargs}': '',
'${resin_kernel_root}': '',
ro: '',
rootwait: '',
isolcpus: '2',
},
},
{
input: {
APPEND: '',
},
output: {},
},
{
input: {
APPEND: 'isolcpus=2,4',
},
output: { isolcpus: '2,4' },
},
];
const INVALID_VALUES = [
{
input: {},
reason:
'Could not find APPEND directive in default extlinux.conf boot entry',
},
{
input: {
APPEND: 'isolcpus=2=4',
},
reason: 'Unable to parse invalid value: isolcpus=2=4',
},
];
const INVALID_CONFIGS_OPTIONS = [
{
input: {
isolcpus: '2,4=',
},
reason:
'One of the values being set contains an invalid character: [ value: 2,4=, key: isolcpus ]',
},
];