pespin has uploaded this change for review. (
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37979?usp=email )
Change subject: StatsD_Checker: Simplify by getting rid of StatsDExpectPriv
......................................................................
StatsD_Checker: Simplify by getting rid of StatsDExpectPriv
Get rid of extra record, we have plenty of them and we'll have more once
we add new APIs to work without VTY.
While doing so, simplify the expect loop by maintaining a counter.
Change-Id: Ib14c838c5f0647d050249853327671542182636f
---
M library/StatsD_Checker.ttcnpp
1 file changed, 27 insertions(+), 43 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ttcn3-hacks refs/changes/79/37979/1
diff --git a/library/StatsD_Checker.ttcnpp b/library/StatsD_Checker.ttcnpp
index ee299e4..8f0feba 100644
--- a/library/StatsD_Checker.ttcnpp
+++ b/library/StatsD_Checker.ttcnpp
@@ -32,6 +32,7 @@
import from StatsD_CodecPort all;
import from StatsD_CodecPort_CtrlFunct all;
+import from General_Types all;
import from Osmocom_Types all;
#ifdef STATSD_HAVE_VTY
import from Osmocom_VTY_Functions all;
@@ -52,13 +53,6 @@
type set of StatsDExpect StatsDExpects;
-type record StatsDExpectPriv {
- StatsDExpect expect,
- integer seen
-}
-
-type set of StatsDExpectPriv StatsDExpectPrivs;
-
type enumerated StatsDResultType {
e_Matched,
e_Mismatched,
@@ -151,27 +145,27 @@
}
}
-private function f_statsd_checker_metric_expects(StatsDExpectPrivs exp_seen, StatsDMetric
metric)
+private function f_statsd_checker_metric_expects(StatsDExpects expects, StatsDMetric
metric)
return StatsDExpectResult {
var StatsDExpectResult result := {
kind := e_NotFound,
idx := -1
};
- for (var integer i := 0; i < lengthof(exp_seen); i := i + 1) {
- var StatsDExpectPriv exp := exp_seen[i];
- if (exp.expect.name != metric.name) {
+ for (var integer i := 0; i < lengthof(expects); i := i + 1) {
+ var StatsDExpect exp := expects[i];
+ if (exp.name != metric.name) {
continue;
}
- if (not f_compare_expect(metric, exp.expect)) {
- log("EXP mismatch: ", metric, " vs ", exp.expect);
+ if (not f_compare_expect(metric, exp)) {
+ log("EXP mismatch: ", metric, " vs ", exp);
result := {
kind := e_Mismatched,
idx := i
};
break;
} else {
- log("EXP match: ", metric, " vs ", exp.expect);
+ log("EXP match: ", metric, " vs ", exp);
result := {
kind := e_Matched,
idx := i
@@ -182,19 +176,16 @@
return result;
}
-template StatsDExpectPriv t_statsd_expect_priv(template StatsDExpect expect) := {
- expect := expect,
- seen := 0
-}
-
private function f_statsd_checker_expect(StatsDExpects expects) runs on StatsD_Checker_CT
return boolean {
var default t;
var StatsDMessage msg;
var StatsDExpectResult res;
- var StatsDExpectPrivs exp_seen := {};
+ var Booleans matched := {};
+ var integer matched_remain := 0;
for (var integer i := 0; i < lengthof(expects); i := i + 1) {
- exp_seen := exp_seen & {valueof(t_statsd_expect_priv(expects[i]))};
+ matched := matched & {false};
+ matched_remain := matched_remain + 1;
}
/* Dismiss any messages we might have skipped from the last report */
@@ -206,20 +197,19 @@
/* Assume caller knows previous state, eg. gauges may have been 0 due to IUT being reset
*/
#endif
- var boolean seen_all := false;
T_statsd.start;
- while (not seen_all) {
+ while (matched_remain > 0) {
var StatsD_RecvFrom rf;
alt {
[] STATS.receive(tr_StatsD_RecvFrom(?, ?)) -> value rf {
msg := rf.msg;
}
[] T_statsd.timeout {
- for (var integer i := 0; i < lengthof(exp_seen); i := i + 1) {
+ for (var integer i := 0; i < lengthof(expects); i := i + 1) {
/* We're still missing some expects, keep looking */
- if (exp_seen[i].seen == 0) {
- log("Timeout waiting for ", exp_seen[i].expect.name, " (min: ",
exp_seen[i].expect.min,
- ", max: ", exp_seen[i].expect.max, ")");
+ if (not matched[i]) {
+ log("Timeout waiting for ", expects[i].name,
+ " (min: ", expects[i].min, ", max: ", expects[i].max,
")");
}
}
setverdict(fail, "Timeout waiting for metrics");
@@ -230,34 +220,28 @@
for (var integer i := 0; i < lengthof(msg); i := i + 1) {
var StatsDMetric metric := msg[i];
- res := f_statsd_checker_metric_expects(exp_seen, metric);
+ res := f_statsd_checker_metric_expects(expects, metric);
if (res.kind == e_NotFound) {
continue;
}
-
if (res.kind == e_Mismatched) {
log("Metric: ", metric);
- log("Expect: ", exp_seen[res.idx].expect);
- setverdict(fail, "Metric failed expectation ", metric, " vs ",
exp_seen[res.idx].expect);
+ log("Expect: ", expects[res.idx]);
+ setverdict(fail, "Metric failed expectation ", metric, " vs ",
expects[res.idx]);
return false;
- } else if (res.kind == e_Matched) {
- exp_seen[res.idx].seen := exp_seen[res.idx].seen + 1;
}
- }
-
- /* Check if all expected metrics were received */
- seen_all := true;
- for (var integer i := 0; i < lengthof(exp_seen); i := i + 1) {
- /* We're still missing some expects, keep looking */
- if (exp_seen[i].seen == 0) {
- seen_all := false;
- break;
+ if (res.kind == e_Matched) {
+ if (not matched[res.idx]) {
+ matched[res.idx] := true;
+ matched_remain := matched_remain - 1;
+ }
+ continue;
}
}
}
T_statsd.stop;
- return seen_all;
+ return true;
}
function f_init_statsd(charstring id, inout StatsD_Checker_CT vc_STATSD, charstring
local_addr, integer local_port) {
--
To view, visit
https://gerrit.osmocom.org/c/osmo-ttcn3-hacks/+/37979?usp=email
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: osmo-ttcn3-hacks
Gerrit-Branch: master
Gerrit-Change-Id: Ib14c838c5f0647d050249853327671542182636f
Gerrit-Change-Number: 37979
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin(a)sysmocom.de>