[Fleet] Fix verify test package test (#207006)

This commit is contained in:
Nicolas Chaulet 2025-01-17 09:03:37 -05:00 committed by GitHub
parent 64f872e617
commit d7513a1ed1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 83 additions and 38 deletions

View file

@ -12,7 +12,12 @@ import type { Logger } from '@kbn/core/server';
import { appContextService } from '../../server/services/app_context';
import { verifyAllTestPackages } from './verify_test_packages';
import {
getAllTestPackagesPaths,
getAllTestPackagesZip,
verifyTestPackage,
verifyTestPackageFromPath,
} from './verify_test_packages';
jest.mock('../../server/services/app_context');
@ -23,15 +28,21 @@ mockedAppContextService.getSecuritySetup.mockImplementation(() => ({
let mockedLogger: jest.Mocked<Logger>;
// FLAKY: https://github.com/elastic/kibana/issues/200787
describe.skip('Test packages', () => {
describe('Test packages', () => {
beforeEach(() => {
mockedLogger = loggerMock.create();
mockedAppContextService.getLogger.mockReturnValue(mockedLogger);
});
test('All test packages should be valid (node scripts/verify_test_packages) ', async () => {
const { errors } = await verifyAllTestPackages();
expect(errors).toEqual([]);
});
for (const zip of getAllTestPackagesZip()) {
test(`${zip} should be a valid package`, async () => {
await verifyTestPackage(zip);
});
}
for (const { topLevelDir, paths } of getAllTestPackagesPaths()) {
test(`${topLevelDir} should be a valid package`, async () => {
await verifyTestPackageFromPath(paths, topLevelDir);
});
}
});

View file

@ -15,13 +15,13 @@ import type { Logger } from '@kbn/core/server';
import { ToolingLog } from '@kbn/tooling-log';
import {
_generatePackageInfoFromPaths,
generatePackageInfoFromArchiveBuffer,
_generatePackageInfoFromPaths,
} from '../../server/services/epm/archive/parse';
const readFileAsync = promisify(readFile);
const TEST_PACKAGE_DIRECTORIES = [
export const TEST_PACKAGE_DIRECTORIES = [
'../../../../../../test/fleet_api_integration/apis/fixtures/bundled_packages',
'../../../../../../test/fleet_api_integration/apis/fixtures/test_packages',
'../../../../../../test/fleet_api_integration/apis/fixtures/package_verification/packages',
@ -62,43 +62,77 @@ export const run = async () => {
}
};
export async function verifyTestPackage(zipPath: string, logger?: ToolingLog | Logger) {
const buffer = await readFileAsync(zipPath);
try {
const { packageInfo } = await generatePackageInfoFromArchiveBuffer(buffer, 'application/zip');
logger?.info(`Successfully parsed zip pkg ${packageInfo.name}-${packageInfo.version}`);
} catch (e) {
logger?.error(`Error parsing ${zipPath} : ${e}`);
throw e;
}
}
export async function verifyTestPackageFromPath(
packagePaths: string[],
topLevelDir: string,
logger?: ToolingLog | Logger
) {
try {
const packageInfo = await _generatePackageInfoFromPaths(packagePaths, topLevelDir);
logger?.info(`Successfully parsed zip pkg ${packageInfo.name}-${packageInfo.version}`);
} catch (e) {
logger?.error(`Error parsing ${topLevelDir} : ${e}`);
throw e;
}
}
export function getAllTestPackagesZip() {
return TEST_PACKAGE_DIRECTORIES.reduce((acc, dir) => {
const packageVersionPaths = getAllPackagesFromDir(path.join(__dirname, dir));
const [zips] = partition(packageVersionPaths, (p) => p.endsWith('.zip'));
return [...acc, ...zips];
}, [] as string[]);
}
export function getAllTestPackagesPaths() {
return TEST_PACKAGE_DIRECTORIES.reduce((acc, dir) => {
const packageVersionPaths = getAllPackagesFromDir(path.join(__dirname, dir));
const [_, dirs] = partition(packageVersionPaths, (p) => p.endsWith('.zip'));
const allPackageDirPaths = dirs.map(getAllPathsFromDir);
return [
...acc,
...[...allPackageDirPaths.entries()].map(([i, paths]) => ({
topLevelDir: packageVersionPaths[i],
paths,
})),
];
}, [] as Array<{ topLevelDir: string; paths: string[] }>);
}
export const verifyAllTestPackages = async (
logger?: ToolingLog | Logger
): Promise<{ successCount: number; errors: Error[] }> => {
const errors = [];
let successCount = 0;
for (const dir of TEST_PACKAGE_DIRECTORIES) {
const packageVersionPaths = getAllPackagesFromDir(path.join(__dirname, dir));
const [zips, dirs] = partition(packageVersionPaths, (p) => p.endsWith('.zip'));
for (const zipPath of zips) {
const buffer = await readFileAsync(zipPath);
try {
const { packageInfo } = await generatePackageInfoFromArchiveBuffer(
buffer,
'application/zip'
);
logger?.info(`Successfully parsed zip pkg ${packageInfo.name}-${packageInfo.version}`);
successCount++;
} catch (e) {
logger?.error(`Error parsing ${zipPath} : ${e}`);
errors.push(e);
}
for (const zipPath of getAllTestPackagesZip()) {
try {
await verifyTestPackage(zipPath, logger);
successCount++;
} catch (e) {
errors.push(e);
}
}
const allPackageDirPaths = dirs.map(getAllPathsFromDir);
for (const [i, packagePaths] of allPackageDirPaths.entries()) {
const topLevelDir = packageVersionPaths[i];
try {
const packageInfo = await _generatePackageInfoFromPaths(packagePaths, topLevelDir);
logger?.info(`Successfully parsed ${packageInfo.name}-${packageInfo.version}`);
successCount++;
} catch (e) {
logger?.error(`Error parsing ${topLevelDir} : ${e}`);
errors.push(e);
}
for (const { topLevelDir, paths } of getAllTestPackagesPaths()) {
try {
await verifyTestPackageFromPath(paths, topLevelDir, logger);
successCount++;
} catch (e) {
errors.push(e);
}
}