Skip to content

Commit

Permalink
fixed tests
Browse files Browse the repository at this point in the history
  • Loading branch information
juliaElastic committed Feb 22, 2022
1 parent 98dcb58 commit a1eb081
Show file tree
Hide file tree
Showing 5 changed files with 161 additions and 62 deletions.
3 changes: 0 additions & 3 deletions x-pack/plugins/fleet/server/mocks/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,14 +97,11 @@ export const xpackMocks = {
createRequestHandlerContext: createCoreRequestHandlerContextMock,
};

// TODO PackagePolicyServiceInterface should not include private methods
export const createPackagePolicyServiceMock = (): jest.Mocked<
Partial<PackagePolicyServiceInterface>
> => {
return {
_compilePackagePolicyInputs: jest.fn(),
buildPackagePolicyFromPackage: jest.fn(),
buildPackagePolicyFromPackageWithVersion: jest.fn(),
bulkCreate: jest.fn(),
create: jest.fn(),
delete: jest.fn(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,17 +28,12 @@ import type { PackagePolicy } from '../../types';

import { registerRoutes } from './index';

type PackagePolicyServicePublicInterface = Omit<
PackagePolicyServiceInterface,
'getUpgradePackagePolicyInfo'
>;

const packagePolicyServiceMock = packagePolicyService as jest.Mocked<PackagePolicyServiceInterface>;

jest.mock(
'../../services/package_policy',
(): {
packagePolicyService: jest.Mocked<PackagePolicyServicePublicInterface>;
packagePolicyService: jest.Mocked<PackagePolicyServiceInterface>;
} => {
return {
packagePolicyService: {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,25 +45,24 @@ describe('upgradeManagedPackagePolicies', () => {
it('should upgrade policies for managed package', async () => {
const esClient = elasticsearchServiceMock.createClusterClient().asInternalUser;
const soClient = savedObjectsClientMock.create();
const packagePolicy = {
id: 'managed-package-id',
inputs: {},
version: '',
revision: 1,
updated_at: '',
updated_by: '',
created_at: '',
created_by: '',
package: {
name: 'managed-package',
title: 'Managed Package',
version: '0.0.1',
},
};

(packagePolicyService.list as jest.Mock).mockResolvedValueOnce({
items: [
{
id: 'managed-package-id',
inputs: {},
version: '',
revision: 1,
updated_at: '',
updated_by: '',
created_at: '',
created_by: '',
package: {
name: 'managed-package',
title: 'Managed Package',
version: '0.0.1',
},
},
],
items: [packagePolicy],
});

(packagePolicyService.getUpgradeDryRunDiff as jest.Mock).mockResolvedValueOnce({
Expand All @@ -89,7 +88,14 @@ describe('upgradeManagedPackagePolicies', () => {
{ packagePolicyId: 'managed-package-id', diff: [{ id: 'foo' }, { id: 'bar' }], errors: [] },
]);

expect(packagePolicyService.upgrade).toBeCalledWith(soClient, esClient, ['managed-package-id']);
expect(packagePolicyService.upgrade).toBeCalledWith(
soClient,
esClient,
['managed-package-id'],
undefined,
packagePolicy,
'1.0.0'
);
});

it('should not upgrade policy if newer than installed package version', async () => {
Expand Down
17 changes: 9 additions & 8 deletions x-pack/plugins/fleet/server/services/package_policy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ import {
updatePackageInputs,
packagePolicyService,
_applyIndexPrivileges,
_compilePackagePolicyInputs,
} from './package_policy';
import { appContextService } from './app_context';

Expand Down Expand Up @@ -171,7 +172,7 @@ type CombinedExternalCallback = PutPackagePolicyUpdateCallback | PostPackagePoli
describe('Package policy service', () => {
describe('_compilePackagePolicyInputs', () => {
it('should work with config variables from the stream', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
data_streams: [
{
Expand Down Expand Up @@ -234,7 +235,7 @@ describe('Package policy service', () => {
});

it('should work with a two level dataset name', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
data_streams: [
{
Expand Down Expand Up @@ -286,7 +287,7 @@ describe('Package policy service', () => {
});

it('should work with config variables at the input level', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
data_streams: [
{
Expand Down Expand Up @@ -349,7 +350,7 @@ describe('Package policy service', () => {
});

it('should work with config variables at the package level', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
data_streams: [
{
Expand Down Expand Up @@ -417,7 +418,7 @@ describe('Package policy service', () => {
});

it('should work with an input with a template and no streams', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
data_streams: [],
policy_templates: [
Expand Down Expand Up @@ -459,7 +460,7 @@ describe('Package policy service', () => {
});

it('should work with an input with a template and streams', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
data_streams: [
{
Expand Down Expand Up @@ -564,7 +565,7 @@ describe('Package policy service', () => {
});

it('should work with a package without input', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
policy_templates: [
{
Expand All @@ -580,7 +581,7 @@ describe('Package policy service', () => {
});

it('should work with a package with a empty inputs array', async () => {
const inputs = await packagePolicyService._compilePackagePolicyInputs(
const inputs = await _compilePackagePolicyInputs(
{
policy_templates: [
{
Expand Down
154 changes: 127 additions & 27 deletions x-pack/plugins/fleet/server/services/package_policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ export const DATA_STREAM_ALLOWED_INDEX_PRIVILEGES = new Set([
'read_cross_cluster',
]);

class PackagePolicyService {
class PackagePolicyService implements PackagePolicyServiceInterface {
public async create(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
Expand Down Expand Up @@ -162,7 +162,7 @@ class PackagePolicyService {
}
validatePackagePolicyOrThrow(packagePolicy, pkgInfo);

inputs = await this._compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs);
inputs = await _compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs);

elasticsearch = pkgInfo.elasticsearch;
}
Expand Down Expand Up @@ -393,7 +393,7 @@ class PackagePolicyService {

validatePackagePolicyOrThrow(packagePolicy, pkgInfo);

inputs = await this._compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs);
inputs = await _compilePackagePolicyInputs(pkgInfo, packagePolicy.vars || {}, inputs);
elasticsearch = pkgInfo.elasticsearch;
}

Expand Down Expand Up @@ -498,7 +498,11 @@ class PackagePolicyService {
return result;
}

public async getUpgradePackagePolicyInfo(soClient: SavedObjectsClientContract, id: string) {
// TODO should move out, public only for unit tests
public async getUpgradePackagePolicyInfo(
soClient: SavedObjectsClientContract,
id: string
): Promise<{ packagePolicy: PackagePolicy; packageInfo: PackageInfo }> {
const packagePolicy = await this.get(soClient, id);
if (!packagePolicy) {
throw new IngestManagerError(
Expand Down Expand Up @@ -622,7 +626,7 @@ class PackagePolicyService {
packageInfo,
packageToPackagePolicyInputs(packageInfo) as InputsOverride[]
);
updatePackagePolicy.inputs = await this._compilePackagePolicyInputs(
updatePackagePolicy.inputs = await _compilePackagePolicyInputs(
packageInfo,
updatePackagePolicy.vars || {},
updatePackagePolicy.inputs as PackagePolicyInput[]
Expand Down Expand Up @@ -688,7 +692,7 @@ class PackagePolicyService {
packageToPackagePolicyInputs(packageInfo) as InputsOverride[],
true
);
updatedPackagePolicy.inputs = await this._compilePackagePolicyInputs(
updatedPackagePolicy.inputs = await _compilePackagePolicyInputs(
packageInfo,
updatedPackagePolicy.vars || {},
updatedPackagePolicy.inputs as PackagePolicyInput[]
Expand Down Expand Up @@ -796,7 +800,7 @@ class PackagePolicyService {
return newPackagePolicy;
}

public async buildPackagePolicyFromPackageWithVersion(
private async buildPackagePolicyFromPackageWithVersion(
soClient: SavedObjectsClientContract,
pkgName: string,
pkgVersion: string
Expand Down Expand Up @@ -834,24 +838,6 @@ class PackagePolicyService {
}
}

public async _compilePackagePolicyInputs(
pkgInfo: PackageInfo,
vars: PackagePolicy['vars'],
inputs: PackagePolicyInput[]
): Promise<PackagePolicyInput[]> {
const inputsPromises = inputs.map(async (input) => {
const compiledInput = await _compilePackagePolicyInput(pkgInfo, vars, input);
const compiledStreams = await _compilePackageStreams(pkgInfo, vars, input);
return {
...input,
compiled_input: compiledInput,
streams: compiledStreams,
};
});

return Promise.all(inputsPromises);
}

public async runExternalCallbacks<A extends ExternalCallback[0]>(
externalCallbackType: A,
packagePolicy: A extends 'postPackagePolicyDelete'
Expand Down Expand Up @@ -951,6 +937,24 @@ function assignStreamIdToInput(packagePolicyId: string, input: NewPackagePolicyI
};
}

export async function _compilePackagePolicyInputs(
pkgInfo: PackageInfo,
vars: PackagePolicy['vars'],
inputs: PackagePolicyInput[]
): Promise<PackagePolicyInput[]> {
const inputsPromises = inputs.map(async (input) => {
const compiledInput = await _compilePackagePolicyInput(pkgInfo, vars, input);
const compiledStreams = await _compilePackageStreams(pkgInfo, vars, input);
return {
...input,
compiled_input: compiledInput,
streams: compiledStreams,
};
});

return Promise.all(inputsPromises);
}

async function _compilePackagePolicyInput(
pkgInfo: PackageInfo,
vars: PackagePolicy['vars'],
Expand Down Expand Up @@ -1147,8 +1151,104 @@ function _enforceFrozenVars(
return resultVars;
}

export type PackagePolicyServiceInterface = PackagePolicyService;
export const packagePolicyService = new PackagePolicyService();
export interface PackagePolicyServiceInterface {
create(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
packagePolicy: NewPackagePolicy,
options?: {
spaceId?: string;
id?: string;
user?: AuthenticatedUser;
bumpRevision?: boolean;
force?: boolean;
skipEnsureInstalled?: boolean;
skipUniqueNameVerification?: boolean;
overwrite?: boolean;
}
): Promise<PackagePolicy>;

bulkCreate(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
packagePolicies: NewPackagePolicy[],
agentPolicyId: string,
options?: { user?: AuthenticatedUser; bumpRevision?: boolean }
): Promise<PackagePolicy[]>;

get(soClient: SavedObjectsClientContract, id: string): Promise<PackagePolicy | null>;

getByIDs(soClient: SavedObjectsClientContract, ids: string[]): Promise<PackagePolicy[] | null>;

list(
soClient: SavedObjectsClientContract,
options: ListWithKuery
): Promise<ListResult<PackagePolicy>>;

listIds(
soClient: SavedObjectsClientContract,
options: ListWithKuery
): Promise<ListResult<string>>;

update(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
id: string,
packagePolicyUpdate: UpdatePackagePolicy,
options?: { user?: AuthenticatedUser },
currentVersion?: string
): Promise<PackagePolicy>;

delete(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
ids: string[],
options?: { user?: AuthenticatedUser; skipUnassignFromAgentPolicies?: boolean; force?: boolean }
): Promise<DeletePackagePoliciesResponse>;

upgrade(
soClient: SavedObjectsClientContract,
esClient: ElasticsearchClient,
ids: string[],
options?: { user?: AuthenticatedUser },
packagePolicy?: PackagePolicy,
pkgVersion?: string
): Promise<UpgradePackagePolicyResponse>;

getUpgradeDryRunDiff(
soClient: SavedObjectsClientContract,
id: string,
packagePolicy?: PackagePolicy,
pkgVersion?: string
): Promise<UpgradePackagePolicyDryRunResponseItem>;

enrichPolicyWithDefaultsFromPackage(
soClient: SavedObjectsClientContract,
newPolicy: NewPackagePolicy
): Promise<NewPackagePolicy>;

buildPackagePolicyFromPackage(
soClient: SavedObjectsClientContract,
pkgName: string
): Promise<NewPackagePolicy | undefined>;

runExternalCallbacks<A extends ExternalCallback[0]>(
externalCallbackType: A,
packagePolicy: A extends 'postPackagePolicyDelete'
? DeletePackagePoliciesResponse
: NewPackagePolicy,
context: RequestHandlerContext,
request: KibanaRequest
): Promise<A extends 'postPackagePolicyDelete' ? void : NewPackagePolicy>;

runDeleteExternalCallbacks(deletedPackagePolicies: DeletePackagePoliciesResponse): Promise<void>;

getUpgradePackagePolicyInfo(
soClient: SavedObjectsClientContract,
id: string
): Promise<{ packagePolicy: PackagePolicy; packageInfo: PackageInfo }>;
}
export const packagePolicyService: PackagePolicyServiceInterface = new PackagePolicyService();

export type { PackagePolicyService };

Expand Down

0 comments on commit a1eb081

Please sign in to comment.