Skip to content

Commit aa617d5

Browse files
committed
memory usage functional tests
1 parent b668544 commit aa617d5

File tree

12 files changed

+251
-5
lines changed

12 files changed

+251
-5
lines changed

.buildkite/ftr_platform_stateful_configs.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ enabled:
249249
- x-pack/test/functional/apps/ml/permissions/config.ts
250250
- x-pack/test/functional/apps/ml/short_tests/config.ts
251251
- x-pack/test/functional/apps/ml/stack_management_jobs/config.ts
252+
- x-pack/test/functional/apps/ml/memory_usage/config.ts
252253
- x-pack/test/functional/apps/monitoring/config.ts
253254
- x-pack/test/functional/apps/painless_lab/config.ts
254255
- x-pack/test/functional/apps/remote_clusters/config.ts

x-pack/plugins/ml/public/application/memory_usage/memory_tree_map/tree_map.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ export const JobMemoryTreeMap: FC<Props> = ({ node, type, height }) => {
161161
options={typeOptions}
162162
selectedOptions={selectedOptions ?? []}
163163
onChange={setSelectedOptions}
164-
isClearable={false}
164+
data-test-subj="mlJobTreeMapComboBox"
165165
/>
166166

167167
<EuiSpacer size="s" />

x-pack/plugins/ml/public/application/memory_usage/memory_usage_page.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,18 @@ export const MemoryUsagePage: FC = () => {
5050

5151
{showNodeInfo ? (
5252
<>
53-
<EuiTabs>
53+
<EuiTabs data-test-subj="mlMemoryUsageTabs">
5454
<EuiTab
5555
isSelected={selectedTab === TAB.NODES}
5656
onClick={() => setSelectedTab(TAB.NODES)}
57+
data-test-subj="mlMemoryUsageTab-nodes"
5758
>
5859
<FormattedMessage id="xpack.ml.memoryUsage.nodesTab" defaultMessage="Nodes" />
5960
</EuiTab>
6061
<EuiTab
6162
isSelected={selectedTab === TAB.MEMORY_USAGE}
6263
onClick={() => setSelectedTab(TAB.MEMORY_USAGE)}
64+
data-test-subj="mlMemoryUsageTab-memory-usage"
6365
>
6466
<FormattedMessage id="xpack.ml.memoryUsage.memoryTab" defaultMessage="Memory usage" />
6567
</EuiTab>

x-pack/plugins/ml/public/application/memory_usage/nodes_overview/expanded_row.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export const ExpandedRow: FC<ExpandedRowProps> = ({ item }) => {
6464
<EuiTab
6565
isSelected={selectedTab === TAB.DETAILS}
6666
onClick={() => setSelectedTab(TAB.DETAILS)}
67+
data-test-subj="mlNodesOverviewPanelDetailsTab"
6768
>
6869
<FormattedMessage
6970
id="xpack.ml.trainedModels.nodesList.expandedRow.detailsTabTitle"
@@ -73,6 +74,7 @@ export const ExpandedRow: FC<ExpandedRowProps> = ({ item }) => {
7374
<EuiTab
7475
isSelected={selectedTab === TAB.MEMORY_USAGE}
7576
onClick={() => setSelectedTab(TAB.MEMORY_USAGE)}
77+
data-test-subj="mlNodesOverviewPanelMemoryTab"
7678
>
7779
<FormattedMessage
7880
id="xpack.ml.trainedModels.nodesList.expandedRow.memoryTabTitle"
@@ -85,7 +87,7 @@ export const ExpandedRow: FC<ExpandedRowProps> = ({ item }) => {
8587
<>
8688
<EuiSpacer size="s" />
8789
<EuiFlexGrid columns={2} gutterSize={'s'}>
88-
<EuiFlexItem>
90+
<EuiFlexItem data-test-subj="mlNodesTableRowDetailsPanel">
8991
<EuiPanel hasShadow={false}>
9092
<EuiTitle size={'xs'}>
9193
<h5>
@@ -104,7 +106,7 @@ export const ExpandedRow: FC<ExpandedRowProps> = ({ item }) => {
104106
</EuiPanel>
105107
</EuiFlexItem>
106108

107-
<EuiFlexItem>
109+
<EuiFlexItem data-test-subj="mlNodesTableRowDetailsAttributesPanel">
108110
<EuiPanel hasShadow={false}>
109111
<EuiTitle size={'xs'}>
110112
<h5>

x-pack/plugins/ml/public/application/memory_usage/nodes_overview/nodes_list.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,7 @@ export const NodesList: FC<NodesListProps> = ({ compactView = false }) => {
185185
},
186186
box: {
187187
incremental: true,
188+
'data-test-subj': 'mlNodesTableSearchInput',
188189
},
189190
};
190191

x-pack/plugins/ml/public/application/routing/routes/memory_usage.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export const nodesListRouteFactory = (
3939
},
4040
],
4141
enableDatePicker: true,
42+
'data-test-subj': 'mlPageMemoryUsage',
4243
});
4344

4445
const PageWrapper: FC = () => {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
import { FtrConfigProviderContext } from '@kbn/test';
9+
10+
export default async function ({ readConfigFile }: FtrConfigProviderContext) {
11+
const functionalConfig = await readConfigFile(require.resolve('../../../config.base.js'));
12+
13+
return {
14+
...functionalConfig.getAll(),
15+
testFiles: [require.resolve('.')],
16+
junit: {
17+
reportName: 'Chrome X-Pack UI Functional Tests - ML memory_usage',
18+
},
19+
};
20+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
import { FtrProviderContext } from '../../../ftr_provider_context';
9+
10+
export default function ({ getService, loadTestFile }: FtrProviderContext) {
11+
const ml = getService('ml');
12+
13+
describe('machine learning - overview page', function () {
14+
this.tags(['skipFirefox']);
15+
16+
before(async () => {
17+
await ml.securityCommon.createMlRoles();
18+
await ml.securityCommon.createMlUsers();
19+
await ml.securityUI.loginAsMlPowerUser();
20+
});
21+
22+
after(async () => {
23+
await ml.securityUI.logout();
24+
25+
await ml.securityCommon.cleanMlUsers();
26+
await ml.securityCommon.cleanMlRoles();
27+
28+
await ml.testResources.resetKibanaTimeZone();
29+
});
30+
31+
loadTestFile(require.resolve('./memory_usage_page'));
32+
});
33+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the Elastic License
4+
* 2.0; you may not use this file except in compliance with the Elastic License
5+
* 2.0.
6+
*/
7+
8+
import { FtrProviderContext } from '../../../ftr_provider_context';
9+
10+
export default function ({ getService }: FtrProviderContext) {
11+
const ml = getService('ml');
12+
const esArchiver = getService('esArchiver');
13+
14+
const jobId = 'sample_job';
15+
16+
describe('ML memory usage page', function () {
17+
this.tags(['ml']);
18+
19+
before(async () => {
20+
await esArchiver.loadIfNeeded('x-pack/test/functional/es_archives/ml/farequote');
21+
22+
const jobConfig = ml.commonConfig.getADFqSingleMetricJobConfig(jobId);
23+
24+
// Create and open AD job
25+
await ml.api.createAnomalyDetectionJob(jobConfig);
26+
await ml.api.openAnomalyDetectionJob(jobId);
27+
28+
await ml.navigation.navigateToMl();
29+
await ml.navigation.navigateToMemoryUsage();
30+
});
31+
32+
after(async () => {
33+
await ml.api.closeAnomalyDetectionJob(jobId);
34+
await ml.api.cleanMlIndices();
35+
});
36+
37+
it('opens page with nodes tab selected', async () => {
38+
await ml.memoryUsage.assertMemoryUsageTabIsSelected('nodes');
39+
});
40+
41+
it('allows sorting', async () => {
42+
await ml.memoryUsage.sortColumn('tableHeaderCell_name_1');
43+
await ml.memoryUsage.assertColumnIsSorted('tableHeaderCell_name_1', 'descending');
44+
});
45+
46+
it('allows searching for a node', async () => {
47+
await ml.memoryUsage.searchForNode('ftr');
48+
await ml.memoryUsage.assertRowCount(1);
49+
});
50+
51+
it('expands node details and displays memory usage details', async () => {
52+
await ml.memoryUsage.expandRow();
53+
await ml.memoryUsage.assertNodeExpandedDetailsPanelsExist();
54+
await ml.memoryUsage.selectNodeExpandedRowTab('mlNodesOverviewPanelMemoryTab');
55+
await ml.memoryUsage.assertChartItemsSelectedByDefault();
56+
await ml.memoryUsage.assertTreeChartExists();
57+
});
58+
59+
it('clears selected chart items', async () => {
60+
await ml.memoryUsage.clearSelectedChartItems();
61+
await ml.memoryUsage.assertEmptyTreeChartExists();
62+
});
63+
64+
it('selects memory usage tab and displays chart', async () => {
65+
await ml.memoryUsage.selectTab('memory-usage');
66+
await ml.memoryUsage.assertTreeChartExists();
67+
68+
await ml.memoryUsage.clearSelectedChartItems();
69+
await ml.memoryUsage.assertEmptyTreeChartExists();
70+
});
71+
});
72+
}

x-pack/test/functional/services/ml/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ import { MlTableServiceProvider } from './common_table_service';
6969
import { MachineLearningFieldStatsFlyoutProvider } from './field_stats_flyout';
7070
import { MachineLearningDataDriftProvider } from './data_drift';
7171
import { TrainedModelsFlyoutProvider } from './add_trained_models_flyout';
72+
import { MachineLearningMemoryUsageProvider } from './memory_usage';
73+
7274
export function MachineLearningProvider(context: FtrProviderContext) {
7375
const commonAPI = MachineLearningCommonAPIProvider(context);
7476
const commonUI = MachineLearningCommonUIProvider(context);
@@ -178,7 +180,7 @@ export function MachineLearningProvider(context: FtrProviderContext) {
178180
const deployDFAModelFlyout = DeployDFAModelFlyoutProvider(context, commonUI);
179181
const mlNodesPanel = MlNodesPanelProvider(context);
180182
const notifications = NotificationsProvider(context, commonUI, tableService);
181-
183+
const memoryUsage = MachineLearningMemoryUsageProvider(context);
182184
const cases = MachineLearningCasesProvider(context, swimLane, anomalyCharts);
183185

184186
return {
@@ -244,5 +246,6 @@ export function MachineLearningProvider(context: FtrProviderContext) {
244246
trainedModelsFlyout,
245247
deployDFAModelFlyout,
246248
trainedModelsTable,
249+
memoryUsage,
247250
};
248251
}

0 commit comments

Comments
 (0)