test_openmetrics.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #include <unity.h>
  2. #include <openmetrics.h>
  3. void test_createMetric()
  4. {
  5. // simple happy path
  6. const char *expected = "# HELP metric_name short description\n# TYPE metric_name gauge\nmetric_name 123.456\n";
  7. std::string result = createMetric("metric_name", "short description", "gauge", "123.456");
  8. TEST_ASSERT_EQUAL_STRING(expected, result.c_str());
  9. }
  10. /**
  11. * test the replaceString function as it's a dependency to sanitize sequence names
  12. */
  13. void test_replaceString()
  14. {
  15. std::string sample = "hello\\world\\";
  16. replaceAll(sample, "\\", "");
  17. TEST_ASSERT_EQUAL_STRING("helloworld", sample.c_str());
  18. sample = "hello\"world\"";
  19. replaceAll(sample, "\"", "");
  20. TEST_ASSERT_EQUAL_STRING("helloworld", sample.c_str());
  21. sample = "hello\nworld\n";
  22. replaceAll(sample, "\n", "");
  23. TEST_ASSERT_EQUAL_STRING("helloworld", sample.c_str());
  24. sample = "\\\\\\\\\\\\\\\\\\hello\\world\\\\\\\\\\\\\\\\\\\\";
  25. replaceAll(sample, "\\", "");
  26. TEST_ASSERT_EQUAL_STRING("helloworld", sample.c_str());
  27. }
  28. void test_createSequenceMetrics()
  29. {
  30. std::vector<NumberPost *> NUMBERS;
  31. NumberPost *number_1 = new NumberPost;
  32. number_1->name = "main";
  33. number_1->ReturnValue = "123.456";
  34. number_1->ReturnRawValue = "N23.456";
  35. number_1->ReturnPreValue = "986.543";
  36. number_1->ErrorMessageText = "";
  37. NUMBERS.push_back(number_1);
  38. const std::string metricNamePrefix = "ai_on_the_edge_device";
  39. const std::string metricName1 = metricNamePrefix + "_flow_value";
  40. const std::string metricName2 = metricNamePrefix + "_flow_raw_value";
  41. const std::string metricName3 = metricNamePrefix + "_flow_pre_value";
  42. const std::string metricName4 = metricNamePrefix + "_flow_error";
  43. std::string expected1 ;
  44. expected1 = "# HELP " + metricName1 + " current value of meter readout\n# TYPE " + metricName1 + " gauge\n" +
  45. metricName1 + "{sequence=\"" + number_1->name + "\"} " + number_1->ReturnValue + "\n";
  46. expected1 += "# HELP " + metricName2 + " current raw value of meter readout\n# TYPE " + metricName2 + " gauge\n" +
  47. metricName2 + "{sequence=\"" + number_1->name + "\"} " + "NaN" + "\n";
  48. expected1 += "# HELP " + metricName3 + " previous value of meter readout\n# TYPE " + metricName3 + " gauge\n" +
  49. metricName3 + "{sequence=\"" + number_1->name + "\"} " + number_1->ReturnPreValue + "\n";
  50. expected1 += "# HELP " + metricName4 + " Error message text != 'no error'\n# TYPE " + metricName4 + " gauge\n" +
  51. metricName4 + "{sequence=\"" + number_1->name + "\"} " + "1" + "\n";
  52. TEST_ASSERT_EQUAL_STRING(expected1.c_str(), createSequenceMetrics(metricNamePrefix, NUMBERS).c_str());
  53. NumberPost *number_2 = new NumberPost;
  54. number_2->name = "secondary";
  55. number_2->ReturnValue = "1.0";
  56. number_2->ReturnRawValue = "01.000";
  57. number_2->ReturnPreValue = "0.987";
  58. number_2->ErrorMessageText = "no error";
  59. NUMBERS.push_back(number_2);
  60. std::string expected2 ;
  61. expected2 = "# HELP " + metricName1 + " current value of meter readout\n# TYPE " + metricName1 + " gauge\n" +
  62. metricName1 + "{sequence=\"" + number_1->name + "\"} " + number_1->ReturnValue + "\n" +
  63. metricName1 + "{sequence=\"" + number_2->name + "\"} " + number_2->ReturnValue + "\n";
  64. expected2 += "# HELP " + metricName2 + " current raw value of meter readout\n# TYPE " + metricName2 + " gauge\n" +
  65. metricName2 + "{sequence=\"" + number_1->name + "\"} " + "NaN" + "\n" +
  66. metricName2 + "{sequence=\"" + number_2->name + "\"} " + number_2->ReturnRawValue + "\n";
  67. expected2 += "# HELP " + metricName3 + " previous value of meter readout\n# TYPE " + metricName3 + " gauge\n" +
  68. metricName3 + "{sequence=\"" + number_1->name + "\"} " + number_1->ReturnPreValue + "\n" +
  69. metricName3 + "{sequence=\"" + number_2->name + "\"} " + number_2->ReturnPreValue + "\n";
  70. expected2 += "# HELP " + metricName4 + " Error message text != 'no error'\n# TYPE " + metricName4 + " gauge\n" +
  71. metricName4 + "{sequence=\"" + number_1->name + "\"} " + "1" + "\n" +
  72. metricName4 + "{sequence=\"" + number_2->name + "\"} " + "0" + "\n";
  73. TEST_ASSERT_EQUAL_STRING(expected2.c_str(), createSequenceMetrics(metricNamePrefix, NUMBERS).c_str());
  74. }
  75. void test_openmetrics()
  76. {
  77. test_createMetric();
  78. test_replaceString();
  79. test_createSequenceMetrics();
  80. }