Skip to content

Commit

Permalink
[Fleet] Improve Fleet preconfiguration tests (#130300)
Browse files Browse the repository at this point in the history
  • Loading branch information
nchaulet authored Apr 15, 2022
1 parent 3627b86 commit b4bd924
Show file tree
Hide file tree
Showing 5 changed files with 435 additions and 58 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,11 @@ import type { PackagePolicySOAttributes } from '../../common';
import type { AgentPolicySOAttributes } from '../types';

import { useDockerRegistry, waitForFleetSetup } from './helpers';
import { CLOUD_KIBANA_CONFIG } from './fixtures/cloud_kibana_config';
import {
CLOUD_KIBANA_CONFIG,
CLOUD_KIBANA_CONFIG_WITHOUT_APM,
CLOUD_KIBANA_WITHOUT_PACKAGE_POLICY_ID_CONFIG,
} from './fixtures';

const logFilePath = Path.join(__dirname, 'logs.log');

Expand All @@ -24,7 +28,7 @@ describe('Fleet preconfiguration reset', () => {

const registryUrl = useDockerRegistry();

const startServers = async () => {
const startServers = async (defaultKbnConfig: any = CLOUD_KIBANA_CONFIG) => {
const { startES } = kbnTestServer.createTestServers({
adjustTimeout: (t) => jest.setTimeout(t),
settings: {
Expand All @@ -36,13 +40,17 @@ describe('Fleet preconfiguration reset', () => {
});

esServer = await startES();
const startKibana = async () => {
const startOrRestartKibana = async (kbnConfig: any = defaultKbnConfig) => {
if (kbnServer) {
await kbnServer.stop();
}

const root = kbnTestServer.createRootWithCorePlugins(
{
xpack: {
...CLOUD_KIBANA_CONFIG.xpack,
...kbnConfig.xpack,
fleet: {
...CLOUD_KIBANA_CONFIG.xpack.fleet,
...kbnConfig.xpack.fleet,
registryUrl,
},
},
Expand Down Expand Up @@ -75,15 +83,19 @@ describe('Fleet preconfiguration reset', () => {
const coreSetup = await root.setup();
const coreStart = await root.start();

return {
kbnServer = {
root,
coreSetup,
coreStart,
stop: async () => await root.shutdown(),
};
await waitForFleetSetup(kbnServer.root);
};
await startOrRestartKibana();

return {
startOrRestartKibana,
};
kbnServer = await startKibana();
await waitForFleetSetup(kbnServer.root);
};

const stopServers = async () => {
Expand All @@ -98,63 +110,65 @@ describe('Fleet preconfiguration reset', () => {
await new Promise((res) => setTimeout(res, 10000));
};

// Share the same servers for all the test to make test a lot faster (but test are not isolated anymore)
beforeAll(async () => {
await startServers();
});
describe('Preconfigured cloud policy', () => {
describe('With a full preconfigured cloud policy', () => {
beforeAll(async () => {
await startServers();
});

afterAll(async () => {
await stopServers();
});
afterAll(async () => {
await stopServers();
});

describe('Preconfigred cloud policy', () => {
it('Works and preconfigure correctly agent policies', async () => {
const agentPolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<AgentPolicySOAttributes>({
type: 'ingest-agent-policies',
perPage: 10000,
});
it('Works and preconfigure correctly agent policies', async () => {
const agentPolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<AgentPolicySOAttributes>({
type: 'ingest-agent-policies',
perPage: 10000,
});

expect(agentPolicies.total).toBe(2);
expect(
agentPolicies.saved_objects.find((so) => so.id === 'policy-elastic-agent-on-cloud')
).toBeDefined();
expect(agentPolicies.saved_objects.find((so) => so.id === 'default-policy')).toBeDefined();
});
expect(agentPolicies.total).toBe(2);
expect(
agentPolicies.saved_objects.find((so) => so.id === 'policy-elastic-agent-on-cloud')
).toBeDefined();
expect(agentPolicies.saved_objects.find((so) => so.id === 'default-policy')).toBeDefined();
});

it('Create correct .fleet-policies', async () => {
const res = await kbnServer.coreStart.elasticsearch.client.asInternalUser.search({
index: AGENT_POLICY_INDEX,
q: `policy_id:policy-elastic-agent-on-cloud`,
sort: 'revision_idx:desc',
});

it('Create correct .fleet-policies', async () => {
const res = await kbnServer.coreStart.elasticsearch.client.asInternalUser.search({
index: AGENT_POLICY_INDEX,
q: `policy_id:policy-elastic-agent-on-cloud`,
sort: 'revision_idx:desc',
expect((res.hits.hits[0]._source as any)!.data).toMatchSnapshot();
});

expect((res.hits.hits[0]._source as any)!.data).toMatchSnapshot();
});
it('Create correct package policies', async () => {
const packagePolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<PackagePolicySOAttributes>({
type: 'ingest-package-policies',
perPage: 10000,
});

it('Create correct package policies', async () => {
const packagePolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<PackagePolicySOAttributes>({
type: 'ingest-package-policies',
perPage: 10000,
});
expect(packagePolicies.total).toBe(3);
expect(
packagePolicies.saved_objects.find((so) => so.id === 'elastic-cloud-fleet-server')
).toBeDefined();
expect(
packagePolicies.saved_objects.find((so) => so.id === 'elastic-cloud-apm')
).toBeDefined();
expect(
packagePolicies.saved_objects.find((so) => so.id === 'default-system')
).toBeDefined();

expect(packagePolicies.total).toBe(3);
expect(
packagePolicies.saved_objects.find((so) => so.id === 'elastic-cloud-fleet-server')
).toBeDefined();
expect(
packagePolicies.saved_objects.find((so) => so.id === 'elastic-cloud-apm')
).toBeDefined();
expect(packagePolicies.saved_objects.find((so) => so.id === 'default-system')).toBeDefined();

const fleetServerPackagePolicy = packagePolicies.saved_objects.find(
(so) => so.id === 'elastic-cloud-fleet-server'
);
expect(fleetServerPackagePolicy?.attributes.vars).toMatchInlineSnapshot(`undefined`);
expect(fleetServerPackagePolicy?.attributes.inputs).toMatchInlineSnapshot(`
const fleetServerPackagePolicy = packagePolicies.saved_objects.find(
(so) => so.id === 'elastic-cloud-fleet-server'
);
expect(fleetServerPackagePolicy?.attributes.vars).toMatchInlineSnapshot(`undefined`);
expect(fleetServerPackagePolicy?.attributes.inputs).toMatchInlineSnapshot(`
Array [
Object {
"compiled_input": Object {
Expand Down Expand Up @@ -195,6 +209,117 @@ describe('Fleet preconfiguration reset', () => {
},
]
`);
});
});
describe('Adding APM to a preconfigured agent policy after first setup', () => {
beforeAll(async () => {
// 1. Start with a preconfigured policy withtout APM
const { startOrRestartKibana } = await startServers(CLOUD_KIBANA_CONFIG_WITHOUT_APM);

// 2. Add APM to the preconfigured policy
await startOrRestartKibana(CLOUD_KIBANA_CONFIG);
});

afterAll(async () => {
await stopServers();
});

it('Works and preconfigure correctly agent policies', async () => {
const agentPolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<AgentPolicySOAttributes>({
type: 'ingest-agent-policies',
perPage: 10000,
});

expect(agentPolicies.total).toBe(2);
expect(
agentPolicies.saved_objects.find((so) => so.id === 'policy-elastic-agent-on-cloud')
).toBeDefined();
expect(agentPolicies.saved_objects.find((so) => so.id === 'default-policy')).toBeDefined();
});

it('Create a .fleet-policies document with the APM package policy', async () => {
const res = await kbnServer.coreStart.elasticsearch.client.asInternalUser.search({
index: AGENT_POLICY_INDEX,
q: `policy_id:policy-elastic-agent-on-cloud`,
sort: 'revision_idx:desc',
});

expect(
(res.hits.hits[0]._source as any)!.data.inputs.find(
(input: any) => input.meta.package.name === 'apm'
)
).toBeDefined();
});

it('Create correct package policies', async () => {
const packagePolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<PackagePolicySOAttributes>({
type: 'ingest-package-policies',
perPage: 10000,
});

expect(packagePolicies.total).toBe(3);
expect(
packagePolicies.saved_objects.find((so) => so.id === 'elastic-cloud-fleet-server')
).toBeDefined();
expect(
packagePolicies.saved_objects.find((so) => so.id === 'elastic-cloud-apm')
).toBeDefined();
expect(
packagePolicies.saved_objects.find((so) => so.id === 'default-system')
).toBeDefined();
});
});

describe('Adding package policy id to a preconfigured package policy after first setup', () => {
beforeAll(async () => {
// 1. Start with a preconfigured policy withtout APM
const { startOrRestartKibana } = await startServers(
CLOUD_KIBANA_WITHOUT_PACKAGE_POLICY_ID_CONFIG
);

// 2. Add pacakge policy ids to the preconfigured policy
await startOrRestartKibana(CLOUD_KIBANA_CONFIG);
});

afterAll(async () => {
await stopServers();
});

it('Works and preconfigure correctly agent policies', async () => {
const agentPolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<AgentPolicySOAttributes>({
type: 'ingest-agent-policies',
perPage: 10000,
});

expect(agentPolicies.total).toBe(2);
expect(
agentPolicies.saved_objects.find((so) => so.id === 'policy-elastic-agent-on-cloud')
).toBeDefined();
expect(agentPolicies.saved_objects.find((so) => so.id === 'default-policy')).toBeDefined();
});

it('Create correct package policies and use the name of package policies instead of id', async () => {
const packagePolicies = await kbnServer.coreStart.savedObjects
.createInternalRepository()
.find<PackagePolicySOAttributes>({
type: 'ingest-package-policies',
perPage: 10000,
});

expect(packagePolicies.total).toBe(3);
expect(
packagePolicies.saved_objects.find((so) => so.attributes.name === 'Fleet Server')
).toBeDefined();
expect(
packagePolicies.saved_objects.find((so) => so.attributes.name === 'Elastic APM')
).toBeDefined();
});
});
});
});
Loading

0 comments on commit b4bd924

Please sign in to comment.