Change histogram meter validate function (#26)
* Change histogram meter validate function
* Change exception reason
Co-authored-by: Mrproliu <mrproliu@lagou.com>
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Meter.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Meter.java
index ee9e467..cbf247f 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Meter.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/entity/Meter.java
@@ -31,25 +31,8 @@
public class Meter {
private MeterId meterId;
private Double singleValue;
- private List<BucketAndValue> histogram;
-
- public static class BucketAndValue {
- private double bucket;
- private long count;
-
- public BucketAndValue(double bucket, long count) {
- this.bucket = bucket;
- this.count = count;
- }
-
- public double getBucket() {
- return bucket;
- }
-
- public long getCount() {
- return count;
- }
- }
+ private List<Double> histogramBuckets;
+ private List<Long> histogramValues;
public MeterId getMeterId() {
return meterId;
@@ -59,7 +42,11 @@
return singleValue;
}
- public List<BucketAndValue> getHistogram() {
- return histogram;
+ public List<Double> getHistogramBuckets() {
+ return histogramBuckets;
+ }
+
+ public List<Long> getHistogramValues() {
+ return histogramValues;
}
}
diff --git a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/MeterHandler.java b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/MeterHandler.java
index a99389a..b78ad9f 100644
--- a/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/MeterHandler.java
+++ b/mock-collector/src/main/java/org/apache/skywalking/plugin/test/mockcollector/util/MeterHandler.java
@@ -18,6 +18,7 @@
package org.apache.skywalking.plugin.test.mockcollector.util;
import org.apache.skywalking.apm.network.language.agent.v3.Label;
+import org.apache.skywalking.apm.network.language.agent.v3.MeterBucketValue;
import org.apache.skywalking.apm.network.language.agent.v3.MeterData;
import org.apache.skywalking.apm.network.language.agent.v3.MeterHistogram;
import org.apache.skywalking.apm.network.language.agent.v3.MeterSingleValue;
@@ -55,8 +56,10 @@
.name(histogram.getName())
.tags(parseTags(histogram.getLabelsList()))
.build());
- builder.histogram(histogram.getValuesList().stream()
- .map(b -> new Meter.BucketAndValue(b.getBucket(), b.getCount())).collect(Collectors.toList()));
+ builder.histogramBuckets(histogram.getValuesList().stream()
+ .map(MeterBucketValue::getBucket).collect(Collectors.toList()));
+ builder.histogramValues(histogram.getValuesList().stream()
+ .map(MeterBucketValue::getCount).collect(Collectors.toList()));
break;
case METRIC_NOT_SET:
return;
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/MeterAssert.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/MeterAssert.java
index d510905..280599e 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/MeterAssert.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/MeterAssert.java
@@ -19,8 +19,9 @@
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.HistogramSizeNotEqualsException;
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.MeterAssertFailedException;
+import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.MeterHistogramValueInvalidException;
import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.MeterNotFoundException;
-import org.apache.skywalking.plugin.test.agent.tool.validator.entity.BucketAndValue;
+import org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception.ValueAssertFailedException;
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.Meter;
import org.apache.skywalking.plugin.test.agent.tool.validator.entity.MeterItem;
import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
@@ -60,17 +61,30 @@
} else {
// histogram
// check size
- if (excepted.getHistogram().size() != actual.getHistogram().size()) {
- throw new HistogramSizeNotEqualsException(excepted, actual.getHistogram().size());
+ if (excepted.getHistogramBuckets().size() != actual.getHistogramBuckets().size()) {
+ throw new HistogramSizeNotEqualsException(excepted, actual.getHistogramBuckets().size());
}
// check buckets
- for (int bucketIndex = 0; bucketIndex < excepted.getHistogram().size(); bucketIndex++) {
- final BucketAndValue exceptedBucket = excepted.getHistogram().get(bucketIndex);
- final BucketAndValue actualBucket = actual.getHistogram().get(bucketIndex);
+ for (int bucketIndex = 0; bucketIndex < excepted.getHistogramBuckets().size(); bucketIndex++) {
+ final String exceptedBucket = excepted.getHistogramBuckets().get(bucketIndex);
+ final String actualBucket = actual.getHistogramBuckets().get(bucketIndex);
- ExpressParser.parse(exceptedBucket.getBucket()).assertValue("histogram bucket", actualBucket.getBucket());
- ExpressParser.parse(exceptedBucket.getCount()).assertValue("histogram count[" + actualBucket.getBucket() + "]", actualBucket.getCount());
+ if (!Objects.equals(exceptedBucket, actualBucket)) {
+ throw new ValueAssertFailedException("histogram bucket", exceptedBucket, actualBucket);
+ }
+ }
+
+ // check values
+ boolean valueContainValid = false;
+ for (String histogramValue : actual.getHistogramValues()) {
+ if (Long.parseLong(histogramValue) > 0) {
+ valueContainValid = true;
+ break;
+ }
+ }
+ if (!valueContainValid) {
+ throw new MeterHistogramValueInvalidException(actual.getMeterId());
}
}
}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/HistogramSizeNotEqualsException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/HistogramSizeNotEqualsException.java
index 55ad439..b234e03 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/HistogramSizeNotEqualsException.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/HistogramSizeNotEqualsException.java
@@ -33,7 +33,7 @@
public String getCauseMessage() {
return String.format("HistogramSizeNotEqualsException:\nmeter id:%s\nexpected:%s\nactual:%s\n",
exceptedMeter.getMeterId(),
- exceptedMeter.getHistogram().size(),
+ exceptedMeter.getHistogramBuckets().size(),
actualSize);
}
}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/MeterHistogramValueInvalidException.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/MeterHistogramValueInvalidException.java
new file mode 100644
index 0000000..7bc76aa
--- /dev/null
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/assertor/exception/MeterHistogramValueInvalidException.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.skywalking.plugin.test.agent.tool.validator.assertor.exception;
+
+import org.apache.skywalking.plugin.test.agent.tool.validator.entity.MeterId;
+import org.apache.skywalking.plugin.test.agent.tool.validator.exception.AssertFailedException;
+
+public class MeterHistogramValueInvalidException extends AssertFailedException {
+ private final MeterId meterId;
+
+ public MeterHistogramValueInvalidException(MeterId meterId) {
+ this.meterId = meterId;
+ }
+
+ @Override
+ public String getCauseMessage() {
+ return String.format("MeterHistogramValueInvalidException:\nmeter id:%s\nreason:%s\n",
+ meterId,
+ "One of the histogram bucket value must bigger than 0");
+ }
+}
diff --git a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Meter.java b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Meter.java
index 63c97f3..78840e2 100644
--- a/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Meter.java
+++ b/validator/src/main/java/org/apache/skywalking/plugin/test/agent/tool/validator/entity/Meter.java
@@ -22,7 +22,8 @@
public class Meter {
private MeterId meterId;
private String singleValue;
- private List<BucketAndValue> histogram;
+ private List<String> histogramBuckets;
+ private List<String> histogramValues;
public MeterId getMeterId() {
return meterId;
@@ -40,11 +41,19 @@
this.singleValue = singleValue;
}
- public List<BucketAndValue> getHistogram() {
- return histogram;
+ public List<String> getHistogramBuckets() {
+ return histogramBuckets;
}
- public void setHistogram(List<BucketAndValue> histogram) {
- this.histogram = histogram;
+ public void setHistogramBuckets(List<String> histogramBuckets) {
+ this.histogramBuckets = histogramBuckets;
+ }
+
+ public List<String> getHistogramValues() {
+ return histogramValues;
+ }
+
+ public void setHistogramValues(List<String> histogramValues) {
+ this.histogramValues = histogramValues;
}
}