balena-supervisor/test/integration/config/odmdata.spec.ts
pipex 827f892c13 Migrate all device config tests to integration.
This means that configuration backend tests no longer use stubs and
(mostly) avoid internal dependencies in the tests. Instead of stubs and
mock-fs, the tests use [testfs](https://github.com/balena-io-modules/mocha-pod#working-with-the-filesystem)
which allows working with a real filesystem and ensuring everything is
re-set between tests.

This is the last change needed in order to be able to merge #1971. Here is the list of changes

- [x] Migrate splash image backend tests
- [x] Migrate extlinux backend tests
- [x] Migrate config.txt backend tests
- [x] Migrate extra-uenv config tests
- [x] Migrate odmdata config tests
- [x] Migrate config utils tests
- [x] Migrate device-config tests

Change-type: patch
2022-11-14 11:12:52 -03:00

76 lines
2.2 KiB
TypeScript

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();
});
});