Skip to content

Commit 8567b14

Browse files
Add ClusterBalanceStats Serialization Tests
Adds serialization tests for `ClusterBalanceStats.MetricStats` and `ClusterBalanceStats.TierBalanceStats`
1 parent decf222 commit 8567b14

File tree

2 files changed

+192
-0
lines changed

2 files changed

+192
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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+
// Given
48+
double total = randomDouble();
49+
double min = randomDouble();
50+
double max = randomDouble();
51+
double average = randomDouble();
52+
double stdDev = randomDouble();
53+
ClusterBalanceStats.MetricStats stats = new ClusterBalanceStats.MetricStats(total, min, max, average, stdDev);
54+
55+
XContentBuilder builder = XContentFactory.jsonBuilder();
56+
builder = stats.toXContent(builder, ToXContent.EMPTY_PARAMS);
57+
// Convert to map for easy assertions
58+
Map<String, Object> map = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
59+
60+
// Then
61+
assertThat(map.get("total"), equalTo(total));
62+
assertThat(map.get("min"), equalTo(min));
63+
assertThat(map.get("max"), equalTo(max));
64+
assertThat(map.get("average"), equalTo(average));
65+
assertThat(map.get("std_dev"), equalTo(stdDev));
66+
}
67+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
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+
// Given
56+
ClusterBalanceStats.MetricStats shardCount = createRandomMetricStats();
57+
ClusterBalanceStats.MetricStats undesiredShardAllocations = createRandomMetricStats();
58+
ClusterBalanceStats.MetricStats forecastWriteLoad = createRandomMetricStats();
59+
ClusterBalanceStats.MetricStats forecastDiskUsage = createRandomMetricStats();
60+
ClusterBalanceStats.MetricStats actualDiskUsage = createRandomMetricStats();
61+
ClusterBalanceStats.TierBalanceStats tierBalanceStats = new ClusterBalanceStats.TierBalanceStats(
62+
shardCount,
63+
undesiredShardAllocations,
64+
forecastWriteLoad,
65+
forecastDiskUsage,
66+
actualDiskUsage
67+
);
68+
69+
XContentBuilder builder = XContentFactory.jsonBuilder();
70+
builder = tierBalanceStats.toXContent(builder, ToXContent.EMPTY_PARAMS);
71+
// Convert to map for easy assertions
72+
Map<String, Object> map = XContentHelper.convertToMap(BytesReference.bytes(builder), false, builder.contentType()).v2();
73+
74+
assertThat(
75+
map.keySet(),
76+
containsInAnyOrder(
77+
"shard_count",
78+
"undesired_shard_allocation_count",
79+
"forecast_write_load",
80+
"forecast_disk_usage",
81+
"actual_disk_usage"
82+
)
83+
);
84+
85+
Map<String, Object> shardCountStats = (Map<String, Object>) map.get("shard_count");
86+
assertThat(shardCountStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
87+
assertEquals(shardCountStats.get("total"), shardCount.total());
88+
assertEquals(shardCountStats.get("average"), shardCount.average());
89+
assertEquals(shardCountStats.get("min"), shardCount.min());
90+
assertEquals(shardCountStats.get("max"), shardCount.max());
91+
assertEquals(shardCountStats.get("std_dev"), shardCount.stdDev());
92+
93+
Map<String, Object> undesiredShardAllocationCountStats = (Map<String, Object>) map.get("undesired_shard_allocation_count");
94+
assertThat(undesiredShardAllocationCountStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
95+
assertEquals(undesiredShardAllocationCountStats.get("total"), undesiredShardAllocations.total());
96+
assertEquals(undesiredShardAllocationCountStats.get("average"), undesiredShardAllocations.average());
97+
assertEquals(undesiredShardAllocationCountStats.get("min"), undesiredShardAllocations.min());
98+
assertEquals(undesiredShardAllocationCountStats.get("max"), undesiredShardAllocations.max());
99+
assertEquals(undesiredShardAllocationCountStats.get("std_dev"), undesiredShardAllocations.stdDev());
100+
101+
Map<String, Object> forecastWriteLoadStats = (Map<String, Object>) map.get("forecast_write_load");
102+
assertThat(forecastWriteLoadStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
103+
assertEquals(forecastWriteLoadStats.get("total"), forecastWriteLoad.total());
104+
assertEquals(forecastWriteLoadStats.get("average"), forecastWriteLoad.average());
105+
assertEquals(forecastWriteLoadStats.get("min"), forecastWriteLoad.min());
106+
assertEquals(forecastWriteLoadStats.get("max"), forecastWriteLoad.max());
107+
assertEquals(forecastWriteLoadStats.get("std_dev"), forecastWriteLoad.stdDev());
108+
109+
Map<String, Object> forecastDiskUsageStats = (Map<String, Object>) map.get("forecast_disk_usage");
110+
assertThat(forecastDiskUsageStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
111+
assertEquals(forecastDiskUsageStats.get("total"), forecastDiskUsage.total());
112+
assertEquals(forecastDiskUsageStats.get("average"), forecastDiskUsage.average());
113+
assertEquals(forecastDiskUsageStats.get("min"), forecastDiskUsage.min());
114+
assertEquals(forecastDiskUsageStats.get("max"), forecastDiskUsage.max());
115+
assertEquals(forecastDiskUsageStats.get("std_dev"), forecastDiskUsage.stdDev());
116+
117+
Map<String, Object> actualDiskUsageStats = (Map<String, Object>) map.get("actual_disk_usage");
118+
assertThat(actualDiskUsageStats.keySet(), containsInAnyOrder("total", "average", "min", "max", "std_dev"));
119+
assertEquals(actualDiskUsageStats.get("total"), actualDiskUsage.total());
120+
assertEquals(actualDiskUsageStats.get("average"), actualDiskUsage.average());
121+
assertEquals(actualDiskUsageStats.get("min"), actualDiskUsage.min());
122+
assertEquals(actualDiskUsageStats.get("max"), actualDiskUsage.max());
123+
assertEquals(actualDiskUsageStats.get("std_dev"), actualDiskUsage.stdDev());
124+
}
125+
}

0 commit comments

Comments
 (0)