Skip to content

Commit e308abb

Browse files
Adds Cluster Balance Stats Tests (#132936)
Adds serialization tests for `ClusterBalanceStats.MetricStats` and `ClusterBalanceStats.TierBalanceStats`
1 parent 250d325 commit e308abb

File tree

2 files changed

+173
-0
lines changed

2 files changed

+173
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.cluster.routing.allocation.allocator;
11+
12+
import org.elasticsearch.common.bytes.BytesReference;
13+
import org.elasticsearch.common.io.stream.Writeable;
14+
import org.elasticsearch.common.xcontent.XContentHelper;
15+
import org.elasticsearch.test.AbstractWireSerializingTestCase;
16+
import org.elasticsearch.xcontent.ToXContent;
17+
import org.elasticsearch.xcontent.XContentBuilder;
18+
import org.elasticsearch.xcontent.XContentFactory;
19+
20+
import java.io.IOException;
21+
import java.util.Map;
22+
23+
import static org.hamcrest.Matchers.equalTo;
24+
25+
public class MetricStatsTests extends AbstractWireSerializingTestCase<ClusterBalanceStats.MetricStats> {
26+
27+
@Override
28+
protected Writeable.Reader<ClusterBalanceStats.MetricStats> instanceReader() {
29+
return ClusterBalanceStats.MetricStats::readFrom;
30+
}
31+
32+
@Override
33+
protected ClusterBalanceStats.MetricStats createTestInstance() {
34+
return createRandomMetricStats();
35+
}
36+
37+
public static ClusterBalanceStats.MetricStats createRandomMetricStats() {
38+
return new ClusterBalanceStats.MetricStats(randomDouble(), randomDouble(), randomDouble(), randomDouble(), randomDouble());
39+
}
40+
41+
@Override
42+
protected ClusterBalanceStats.MetricStats mutateInstance(ClusterBalanceStats.MetricStats instance) throws IOException {
43+
return createTestInstance();
44+
}
45+
46+
public void testToXContent() throws IOException {
47+
ClusterBalanceStats.MetricStats stats = createRandomMetricStats();
48+
49+
XContentBuilder builder = XContentFactory.jsonBuilder();
50+
builder = stats.toXContent(builder, ToXContent.EMPTY_PARAMS);
51+
// Convert to map for easy assertions
52+
Map<String, Object> map = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
53+
54+
assertThat(map.get("total"), equalTo(stats.total()));
55+
assertThat(map.get("min"), equalTo(stats.min()));
56+
assertThat(map.get("max"), equalTo(stats.max()));
57+
assertThat(map.get("average"), equalTo(stats.average()));
58+
assertThat(map.get("std_dev"), equalTo(stats.stdDev()));
59+
}
60+
}
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
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", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.cluster.routing.allocation.allocator;
11+
12+
import org.elasticsearch.common.bytes.BytesReference;
13+
import org.elasticsearch.common.io.stream.Writeable;
14+
import org.elasticsearch.common.xcontent.XContentHelper;
15+
import org.elasticsearch.test.AbstractWireSerializingTestCase;
16+
import org.elasticsearch.xcontent.ToXContent;
17+
import org.elasticsearch.xcontent.XContentBuilder;
18+
import org.elasticsearch.xcontent.XContentFactory;
19+
20+
import java.io.IOException;
21+
import java.util.Map;
22+
23+
import static org.elasticsearch.cluster.routing.allocation.allocator.MetricStatsTests.createRandomMetricStats;
24+
import static org.hamcrest.Matchers.containsInAnyOrder;
25+
26+
public class TierBalanceStatsTests extends AbstractWireSerializingTestCase<ClusterBalanceStats.TierBalanceStats> {
27+
28+
@Override
29+
protected Writeable.Reader<ClusterBalanceStats.TierBalanceStats> instanceReader() {
30+
return ClusterBalanceStats.TierBalanceStats::readFrom;
31+
}
32+
33+
@Override
34+
protected ClusterBalanceStats.TierBalanceStats createTestInstance() {
35+
return createRandomTierBalanceStats();
36+
}
37+
38+
private ClusterBalanceStats.TierBalanceStats createRandomTierBalanceStats() {
39+
return new ClusterBalanceStats.TierBalanceStats(
40+
createRandomMetricStats(),
41+
createRandomMetricStats(),
42+
createRandomMetricStats(),
43+
createRandomMetricStats(),
44+
createRandomMetricStats()
45+
);
46+
}
47+
48+
@Override
49+
protected ClusterBalanceStats.TierBalanceStats mutateInstance(ClusterBalanceStats.TierBalanceStats instance) throws IOException {
50+
return createTestInstance();
51+
}
52+
53+
@SuppressWarnings("unchecked")
54+
public void testToXContent() throws IOException {
55+
ClusterBalanceStats.TierBalanceStats tierBalanceStats = createRandomTierBalanceStats();
56+
57+
XContentBuilder builder = XContentFactory.jsonBuilder();
58+
builder = tierBalanceStats.toXContent(builder, ToXContent.EMPTY_PARAMS);
59+
// Convert to map for easy assertions
60+
Map<String, Object> map = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
61+
62+
assertThat(
63+
map.keySet(),
64+
containsInAnyOrder(
65+
"shard_count",
66+
"undesired_shard_allocation_count",
67+
"forecast_write_load",
68+
"forecast_disk_usage",
69+
"actual_disk_usage"
70+
)
71+
);
72+
73+
Map<String, Object> shardCountStats = (Map<String, Object>) map.get("shard_count");
74+
assertThat(shardCountStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
75+
assertEquals(shardCountStats.get("total"), tierBalanceStats.shardCount().total());
76+
assertEquals(shardCountStats.get("average"), tierBalanceStats.shardCount().average());
77+
assertEquals(shardCountStats.get("min"), tierBalanceStats.shardCount().min());
78+
assertEquals(shardCountStats.get("max"), tierBalanceStats.shardCount().max());
79+
assertEquals(shardCountStats.get("std_dev"), tierBalanceStats.shardCount().stdDev());
80+
81+
Map<String, Object> undesiredShardAllocationCountStats = (Map<String, Object>) map.get("undesired_shard_allocation_count");
82+
assertThat(undesiredShardAllocationCountStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
83+
assertEquals(undesiredShardAllocationCountStats.get("total"), tierBalanceStats.undesiredShardAllocations().total());
84+
assertEquals(undesiredShardAllocationCountStats.get("average"), tierBalanceStats.undesiredShardAllocations().average());
85+
assertEquals(undesiredShardAllocationCountStats.get("min"), tierBalanceStats.undesiredShardAllocations().min());
86+
assertEquals(undesiredShardAllocationCountStats.get("max"), tierBalanceStats.undesiredShardAllocations().max());
87+
assertEquals(undesiredShardAllocationCountStats.get("std_dev"), tierBalanceStats.undesiredShardAllocations().stdDev());
88+
89+
Map<String, Object> forecastWriteLoadStats = (Map<String, Object>) map.get("forecast_write_load");
90+
assertThat(forecastWriteLoadStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
91+
assertEquals(forecastWriteLoadStats.get("total"), tierBalanceStats.forecastWriteLoad().total());
92+
assertEquals(forecastWriteLoadStats.get("average"), tierBalanceStats.forecastWriteLoad().average());
93+
assertEquals(forecastWriteLoadStats.get("min"), tierBalanceStats.forecastWriteLoad().min());
94+
assertEquals(forecastWriteLoadStats.get("max"), tierBalanceStats.forecastWriteLoad().max());
95+
assertEquals(forecastWriteLoadStats.get("std_dev"), tierBalanceStats.forecastWriteLoad().stdDev());
96+
97+
Map<String, Object> forecastDiskUsageStats = (Map<String, Object>) map.get("forecast_disk_usage");
98+
assertThat(forecastDiskUsageStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
99+
assertEquals(forecastDiskUsageStats.get("total"), tierBalanceStats.forecastShardSize().total());
100+
assertEquals(forecastDiskUsageStats.get("average"), tierBalanceStats.forecastShardSize().average());
101+
assertEquals(forecastDiskUsageStats.get("min"), tierBalanceStats.forecastShardSize().min());
102+
assertEquals(forecastDiskUsageStats.get("max"), tierBalanceStats.forecastShardSize().max());
103+
assertEquals(forecastDiskUsageStats.get("std_dev"), tierBalanceStats.forecastShardSize().stdDev());
104+
105+
Map<String, Object> actualDiskUsageStats = (Map<String, Object>) map.get("actual_disk_usage");
106+
assertThat(actualDiskUsageStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
107+
assertEquals(actualDiskUsageStats.get("total"), tierBalanceStats.actualShardSize().total());
108+
assertEquals(actualDiskUsageStats.get("average"), tierBalanceStats.actualShardSize().average());
109+
assertEquals(actualDiskUsageStats.get("min"), tierBalanceStats.actualShardSize().min());
110+
assertEquals(actualDiskUsageStats.get("max"), tierBalanceStats.actualShardSize().max());
111+
assertEquals(actualDiskUsageStats.get("std_dev"), tierBalanceStats.actualShardSize().stdDev());
112+
}
113+
}

0 commit comments

Comments
 (0)