diff options
Diffstat (limited to 'clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FeedBlockUtil.java')
-rw-r--r-- | clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FeedBlockUtil.java | 58 |
1 files changed, 45 insertions, 13 deletions
diff --git a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FeedBlockUtil.java b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FeedBlockUtil.java index e2894705352..a26f8791cda 100644 --- a/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FeedBlockUtil.java +++ b/clustercontroller-core/src/test/java/com/yahoo/vespa/clustercontroller/core/FeedBlockUtil.java @@ -2,46 +2,78 @@ package com.yahoo.vespa.clustercontroller.core; import java.util.Arrays; +import java.util.LinkedHashSet; import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; public class FeedBlockUtil { static class NodeAndUsages { public final int index; - public final Map<String, Double> usages; + public final Set<UsageDetails> usages; - public NodeAndUsages(int index, Map<String, Double> usages) { + public NodeAndUsages(int index, Set<UsageDetails> usages) { this.index = index; this.usages = usages; } } - static class NameAndUsage { + static class UsageDetails { + public final String type; public final String name; public final double usage; - public NameAndUsage(String name, double usage) { + public UsageDetails(String type, String name, double usage) { + this.type = type; this.name = name; this.usage = usage; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + UsageDetails that = (UsageDetails) o; + return Double.compare(that.usage, usage) == 0 && + Objects.equals(type, that.type) && + Objects.equals(name, that.name); + } + + @Override + public int hashCode() { + return Objects.hash(type, name, usage); + } + } + + static UsageDetails usage(String type, double usage) { + return new UsageDetails(type, null, usage); + } + + static UsageDetails usage(String type, String name, double usage) { + return new UsageDetails(type, name, usage); } - static NameAndUsage usage(String name, double usage) { - return new NameAndUsage(name, usage); + static Map<String, Double> mapOf(UsageDetails... usages) { + return Arrays.stream(usages).collect(Collectors.toMap(u -> u.type, u -> u.usage)); } - static Map<String, Double> mapOf(NameAndUsage... usages) { - return Arrays.stream(usages).collect(Collectors.toMap(u -> u.name, u -> u.usage)); + static Set<UsageDetails> setOf(UsageDetails... usages) { + // Preserve input order to make stringification tests deterministic + return Arrays.stream(usages).collect(Collectors.toCollection(LinkedHashSet::new)); } - static NodeAndUsages forNode(int index, NameAndUsage... usages) { - return new NodeAndUsages(index, mapOf(usages)); + static NodeAndUsages forNode(int index, UsageDetails... usages) { + return new NodeAndUsages(index, setOf(usages)); } - static String createResourceUsageJson(Map<String, Double> usages) { - String usageInnerJson = usages.entrySet().stream() - .map(kv -> String.format("\"%s\":{\"usage\": %.3g}", kv.getKey(), kv.getValue())) + static String createResourceUsageJson(Set<UsageDetails> usages) { + // We deal only in the finest of manual JSON string building technologies(tm). + String usageInnerJson = usages.stream() + .map(u -> String.format("\"%s\":{\"usage\": %.3g%s}", + u.type, u.usage, + (u.name != null ? String.format(",\"name\":\"%s\"", u.name) : ""))) .collect(Collectors.joining(",")); return String.format("{\"content-node\":{\"resource-usage\":{%s}}}", usageInnerJson); } |