balena-supervisor/test/integration/config/odmdata.spec.ts

76 lines
2.2 KiB
TypeScript
Raw Permalink Normal View History

import { promises as fs } from 'fs';
import { expect } from 'chai';
import { testfs } from 'mocha-pod';
import * as hostUtils from '~/lib/host-utils';
import log from '~/lib/supervisor-console';
import { Odmdata } from '~/src/config/backends/odmdata';
describe('config/odmdata', () => {
const backend = new Odmdata();
it('logs error when unable to open boot config file', async () => {
await expect(
fs.access(hostUtils.pathOnRoot('/dev/mmcblk0boot0')),
'file does not exist before the test',
).to.be.rejected;
await expect(backend.getBootConfig()).to.be.rejected;
expect(log.error).to.have.been.calledWith(
`File not found at: ${hostUtils.pathOnRoot('/dev/mmcblk0boot0')}`,
);
});
it('logs error for malformed configuration mode', async () => {
// Logs when configuration mode is unknown
// @ts-expect-error accessing private value
expect(() => backend.parseOptions(Buffer.from([0x9, 0x9, 0x9]))).to.throw();
expect(log.error).to.have.been.calledWith(
'ODMDATA is set with an unsupported byte: 0x9',
);
// @ts-expect-error accessing private value
expect(() => backend.parseOptions(Buffer.from([0x1, 0x0, 0x0]))).to.throw();
expect(log.error).to.have.been.calledWith(
'Unable to parse ODMDATA configuration. Data at offsets do not match.',
);
});
it('should parse configuration options from bootConfigPath', async () => {
const tfs = await testfs({
[hostUtils.pathOnRoot('/dev/mmcblk0boot0')]: testfs.from(
'test/data/boot0.img',
),
}).enable();
// Restore openFile so test actually uses testConfigPath
await expect(backend.getBootConfig()).to.eventually.deep.equal({
configuration: '2',
});
await tfs.restore();
});
it('sets new config values', async () => {
const tfs = await testfs({
[hostUtils.pathOnRoot('/dev/mmcblk0boot0')]: testfs.from(
'test/data/boot0.img',
),
[hostUtils.pathOnRoot('/sys/block/mmcblk0boot0/force_ro')]: '0',
}).enable();
// Sets a new configuration
await backend.setBootConfig({
configuration: '4',
});
// Check that new configuration was set correctly
await expect(backend.getBootConfig()).to.eventually.deep.equal({
configuration: '4',
});
await tfs.restore();
});
});