]> git.ipfire.org Git - thirdparty/collectd.git/commitdiff
Implement tests for uc_get_percentile_by_name function
authorBarbara Kaczorowska <bkjg@google.com>
Tue, 18 Aug 2020 14:52:44 +0000 (14:52 +0000)
committerBarbara Kaczorowska <bkjg@google.com>
Wed, 19 Aug 2020 07:42:08 +0000 (07:42 +0000)
src/daemon/utils_cache_test.c

index 9164a1393faafa12388681c849d9339c8546e3c3..10ee619aadf34de48169961f82365bdd758615e1 100644 (file)
 #include "utils_cache.h"
 
 /* TODO(bkjg): change all fams to pointers */
-static metric_family_t create_metric_family_test1(char *name) {
-  metric_family_t fam = {
-      .name = name,
-      .type = METRIC_TYPE_DISTRIBUTION,
-  };
+static metric_family_t *create_metric_family_test1(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
 
   metric_t m[] = {{
-                      .family = &fam,
+                      .family = fam,
                       .value.distribution = distribution_new_linear(5, 23),
                       .time = cdtime_mock++,
                   },
                   {
-                      .family = &fam,
+                      .family = fam,
                       .value.distribution = distribution_new_linear(5, 23),
                       .time = cdtime_mock++,
                   },
                   {
-                      .family = &fam,
+                      .family = fam,
                       .value.distribution = distribution_new_linear(5, 23),
                       .time = cdtime_mock++,
                   }};
 
   for (int i = 0; i < (sizeof(m) / sizeof(m[0])); ++i) {
-    metric_family_metric_append(&fam, m[i]);
+    metric_family_metric_append(fam, m[i]);
   }
 
   return fam;
@@ -65,7 +65,7 @@ DEF_TEST(uc_update) {
     int want_get;
     double **updates;
     int *num_updates;
-    metric_family_t fam;
+    metric_family_t *fam;
   } cases[] = {
       {
           .want_get = 0,
@@ -86,31 +86,351 @@ DEF_TEST(uc_update) {
                       78.57,      90.467,       89.658,        879.67},
               },
           .num_updates = (int[]){10, 16, 20},
-          .fam = create_metric_family_test1("test1"),
+          .fam = create_metric_family_test1("test1-update"),
       },
   };
+  uc_init();
   for (size_t i = 0; i < (sizeof(cases) / sizeof(cases[0])); ++i) {
     printf("## Case %zu:\n", i);
-    uc_init();
-    for (int k = 0; k < cases[i].fam.metric.num; ++k) {
+
+    for (int k = 0; k < cases[i].fam->metric.num; ++k) {
       for (int j = 0; j < cases[i].num_updates[k]; ++j) {
         CHECK_ZERO(
-            distribution_update(cases[i].fam.metric.ptr[k].value.distribution,
+            distribution_update(cases[i].fam->metric.ptr[k].value.distribution,
                                 cases[i].updates[k][j]));
       }
     }
 
     /* TODO(bkjg): check if it was it updated for sure, for example: check if we
      * can find it in the avl tree or so */
-    EXPECT_EQ_INT(cases[i].want_get, uc_update(&cases[i].fam));
+    EXPECT_EQ_INT(cases[i].want_get, uc_update(cases[i].fam));
 
-    CHECK_ZERO(metric_family_metric_reset(&cases[i].fam));
+    CHECK_ZERO(metric_family_metric_reset(cases[i].fam));
+    free(cases[i].fam);
   }
 
   return 0;
 }
 
-DEF_TEST(uc_get_percentile_by_name) { return 0; }
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test1(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_GAUGE;
+
+  metric_t m = {
+      .value.gauge = 843.43,
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test2(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_COUNTER;
+
+  metric_t m = {
+      .value.counter = 593,
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test3(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_UNTYPED;
+
+  metric_t m = {
+      .value.gauge = 965.67,
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test4(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
+
+  metric_t m = {
+      .value.distribution = NULL,
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test5(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
+
+  metric_t m = {
+      .value.distribution = distribution_new_exponential(104, 1.0012, 8),
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test6(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
+
+  metric_t m = {
+      .value.distribution = distribution_new_custom(
+          98,
+          (double[]){
+              1836.54646,  2590.13251,  11074.53839, 12667.70191, 16493.74399,
+              17201.67548, 19654.09863, 19822.70671, 20219.84235, 20628.6294,
+              21330.3241,  21835.60702, 22005.01013, 23060.45248, 23755.791,
+              24345.93352, 24595.10389, 25076.58155, 27877.29969, 29174.41583,
+              29356.96818, 30235.43401, 31973.82099, 32834.01715, 36895.83728,
+              37756.94675, 38943.5799,  40728.19275, 40968.78746, 41013.32028,
+              41643.66803, 41941.75445, 41968.68699, 42139.98045, 42171.18171,
+              42563.64426, 42707.00144, 44633.4339,  45017.01279, 45030.25685,
+              45341.78369, 46078.46776, 46961.65554, 49016.42988, 49746.57551,
+              50113.49909, 50589.66556, 50693.99199, 51591.89517, 52126.52965,
+              52297.96765, 52811.00834, 52952.61506, 53226.50739, 58331.95697,
+              58763.57321, 59090.41844, 59838.52915, 61566.98641, 63679.9936,
+              64845.77561, 65082.73513, 66327.92101, 66394.5264,  67929.13548,
+              68336.25877, 68548.39663, 68701.53922, 68771.86106, 69873.86819,
+              71036.25018, 74018.27601, 75350.4665,  75355.084,   76614.2913,
+              78877.96414, 79371.25209, 80041.87913, 80321.92699, 81510.64319,
+              82640.81058, 84725.19083, 84789.66383, 85361.16797, 88086.65824,
+              88308.13984, 90015.37417, 91817.05354, 91913.38988, 92477.00628,
+              93033.2967,  94944.94684, 95986.58155, 96384.70299, 96657.04388,
+              98245.02403, 99031.53623, 99147.69204}),
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test7(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
+
+  metric_t m = {
+      .value.distribution = distribution_new_linear(193, 47.97),
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test8(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
+
+  metric_t m = {
+      .value.distribution = distribution_new_exponential(74, 1.065, 45.784),
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+static metric_family_t *
+create_metric_family_for_get_percentile_by_name_test9(char *name) {
+  metric_family_t *fam = calloc(1, sizeof(metric_family_t));
+  fam->name = name;
+  fam->type = METRIC_TYPE_DISTRIBUTION;
+
+  metric_t m = {
+      .value.distribution = distribution_new_custom(
+          26, (double[]){7174.31149,  14377.23879, 19392.54763, 21299.07721,
+                         24435.75879, 34705.8173,  35494.67336, 45019.09439,
+                         48184.06042, 51450.77931, 53363.60859, 55081.31397,
+                         55968.203,   64090.62914, 75022.61352, 79168.79336,
+                         79769.46266, 79982.26847, 82362.20702, 83499.3666,
+                         84368.98886, 86621.73007, 94893.89038, 95883.59771,
+                         96327.48458, 97958.59675}),
+      .family = fam,
+      .time = cdtime_mock++,
+  };
+
+  metric_family_metric_append(fam, m);
+
+  return fam;
+}
+
+DEF_TEST(uc_get_percentile_by_name) {
+  struct {
+    int want_get;
+    double percent;
+    gauge_t ret_value;
+    gauge_t want_ret_value;
+    metric_family_t *fam;
+    double *updates;
+    int num_updates;
+  } cases[] = {
+      {
+          /* TODO(bkjg): maybe change the return value to EINVAL when the
+             argument is wrong instead of setting errno and returning -1 */
+          .fam = create_metric_family_for_get_percentile_by_name_test1(
+              "test1-percentile-by-name"),
+          .want_get = -1,
+          .percent = 57.34,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test2(
+              "test2-percentile-by-name"),
+          .want_get = -1,
+          .percent = 49.23,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test3(
+              "test3-percentile-by-name"),
+          .want_get = -1,
+          .percent = 23.54,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test4(
+              "test4-percentile-by-name"),
+          .percent = 89.73,
+          .want_ret_value = NAN,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test5(
+              "test5-percentile-by-name"),
+          .want_get = -1,
+          .percent = -76,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test6(
+              "test6-percentile-by-name"),
+          .want_get = -1,
+          .percent = 100.4,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test7(
+              "test7-percentile-by-name"),
+          .percent = 0,
+          .num_updates = 71,
+          .updates =
+              (double[]){82359.12294, 68158.41378, 48412.81238, 5904.4289,
+                         34826.95792, 57900.41609, 33671.55587, 24959.94718,
+                         93646.26915, 1520.75565,  14639.69397, 70222.39415,
+                         21981.56962, 16146.0281,  13983.92362, 52167.56135,
+                         27539.19779, 45057.29114, 3319.77024,  34066.56465,
+                         10173.62876, 91667.04402, 98416.81719, 96030.39534,
+                         79983.43468, 77316.03541, 5659.02605,  55984.92588,
+                         77457.94164, 3384.64733,  72593.37989, 66288.34529,
+                         17548.12711, 39080.58183, 70098.8097,  64922.09787,
+                         38622.17965, 63267.44964, 80319.19425, 57421.82315,
+                         54532.87389, 23394.05223, 6053.33071,  81659.40367,
+                         38240.65576, 85423.95662, 54837.08557, 30067.92726,
+                         60829.11685, 5428.52609,  6612.06311,  70475.98393,
+                         85464.98161, 20740.81419, 43986.23893, 70876.29799,
+                         1037.86676,  76031.71462, 53813.00219, 4035.65718,
+                         5811.23089,  58692.27907, 94178.50533, 12500.30161,
+                         81487.15188, 69029.50582, 49662.02744, 73422.53592,
+                         68386.53142, 91320.37996, 91735.92333},
+          .want_ret_value = 47.97,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test8(
+              "test8-percentile-by-name"),
+          .percent = 100,
+          .num_updates = 42,
+          .updates =
+              (double[]){72506.34561, 91418.8635,  80572.52619, 38484.68244,
+                         87877.24226, 57174.59598, 1551.41153,  9145.58047,
+                         72967.20258, 53348.1573,  48132.4808,  39831.68688,
+                         78359.72224, 76905.47862, 5348.62723,  8070.63794,
+                         11716.49737, 29432.91898, 67222.86733, 29114.50366,
+                         67117.86881, 15388.23779, 48933.6252,  74134.36183,
+                         24786.55592, 42282.17781, 87869.09351, 26252.42492,
+                         7323.72669,  47943.4361,  29671.97547, 6225.43339,
+                         44457.12541, 34822.90173, 50059.94181, 26860.86093,
+                         71182.72552, 65944.4019,  21285.09149, 19641.2854,
+                         19254.37358, 61342.40975},
+          .want_ret_value = INFINITY,
+      },
+      {
+          .fam = create_metric_family_for_get_percentile_by_name_test9(
+              "test9-percentile-by-name"),
+          .percent = 42.3,
+          .num_updates = 38,
+          .updates =
+              (double[]){71079.41279, 64378.08534, 58308.74218, 62899.70407,
+                         43084.69866, 59286.43609, 95311.89101, 46082.97057,
+                         21002.88808, 13767.93511, 6832.77194,  9641.53968,
+                         93547.80996, 53104.75652, 30484.31134, 63405.23635,
+                         87195.96601, 91571.10233, 10134.44248, 63686.4723,
+                         323.06071,   48039.79776, 84822.6203,  89630.53538,
+                         15187.56664, 76056.39513, 91604.62264, 47667.05402,
+                         11471.67096, 82920.8644,  57711.02046, 73579.12752,
+                         35093.01442, 95393.57805, 17610.14104, 54931.47418,
+                         19359.63012, 46414.44434},
+          .want_ret_value = 48184.06042,
+      },
+  };
+
+  uc_init();
+  for (size_t i = 0; i < (sizeof(cases) / sizeof(cases[0])); ++i) {
+    printf("## Case %zu:\n", i);
+    for (int j = 0; j < cases[i].num_updates; ++j) {
+      CHECK_ZERO(distribution_update(
+          cases[i].fam->metric.ptr[0].value.distribution, cases[i].updates[j]));
+    }
+
+    CHECK_ZERO(uc_update(cases[i].fam));
+
+    EXPECT_EQ_INT(cases[i].want_get,
+                  uc_get_percentile_by_name(cases[i].fam->name,
+                                            &cases[i].ret_value,
+                                            cases[i].percent));
+
+    if (cases[i].want_get != -1) {
+      EXPECT_EQ_DOUBLE(cases[i].want_ret_value, cases[i].ret_value);
+    }
+
+    CHECK_ZERO(metric_family_metric_reset(cases[i].fam));
+    free(cases[i].fam);
+  }
+
+  return 0;
+}
 
 static metric_family_t *
 create_metric_family_for_get_percentile_test1(char *name) {
@@ -325,7 +645,7 @@ DEF_TEST(uc_get_percentile) {
           .num_updates = 9,
           .updates = (double[]){1.354, 4.2343, 67.543, 7243.2435, 543.2543,
                                 54.43, 543.534, 9023.534, 2358453.534534},
-                                .want_ret_value = 84.543,
+          .want_ret_value = 84.543,
       },
       {
           .fam = create_metric_family_for_get_percentile_test8("test8"),
@@ -338,7 +658,7 @@ DEF_TEST(uc_get_percentile) {
                                 8093.33661, 2796.65101, 1425.40209, 2949.08743,
                                 3074.2948,  9631.15671, 1448.20895, 9843.30987,
                                 5045.33169, 6653.13623},
-                                .want_ret_value = INFINITY,
+          .want_ret_value = INFINITY,
       },
       {
           .fam = create_metric_family_for_get_percentile_test9("test9"),
@@ -357,15 +677,14 @@ DEF_TEST(uc_get_percentile) {
                   2938.24169, 1229.20803, 3995.36776, 2629.81514, 222.9282,
                   321.08365,  958.73825,  393.90684,  7396.77622, 2706.27567,
                   7376.80843, 3028.44747, 8684.45493, 8277.39937},
-                  .want_ret_value = 6154.67381,
+          .want_ret_value = 6154.67381,
       },
   };
 
+  uc_init();
   for (size_t i = 0; i < (sizeof(cases) / sizeof(cases[0])); ++i) {
     printf("## Case %zu:\n", i);
 
-    uc_init();
-
     for (int j = 0; j < cases[i].num_updates; ++j) {
       CHECK_ZERO(distribution_update(
           cases[i].fam->metric.ptr[0].value.distribution, cases[i].updates[j]));
@@ -384,6 +703,8 @@ DEF_TEST(uc_get_percentile) {
     CHECK_ZERO(metric_family_metric_reset(cases[i].fam));
     free(cases[i].fam);
   }
+  // reset_cache_tree();
+
   return 0;
 }