You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

rspamd_rrd_test.c 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /* Copyright (c) 2012, Vsevolod Stakhov
  2. * All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions are met:
  6. * * Redistributions of source code must retain the above copyright
  7. * notice, this list of conditions and the following disclaimer.
  8. * * Redistributions in binary form must reproduce the above copyright
  9. * notice, this list of conditions and the following disclaimer in the
  10. * documentation and/or other materials provided with the distribution.
  11. *
  12. * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY
  13. * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  14. * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  15. * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
  16. * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  17. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  18. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  19. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  20. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  21. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  22. */
  23. #include "config.h"
  24. #include "tests.h"
  25. #include "rrd.h"
  26. #include "rspamd.h"
  27. #include "ottery.h"
  28. const int rows_cnt = 20;
  29. const int pdp_per_cdp = 60;
  30. void
  31. rspamd_rrd_test_func ()
  32. {
  33. gchar tmpfile[PATH_MAX];
  34. struct rrd_rra_def rra[4];
  35. struct rrd_ds_def ds[2];
  36. GArray ar;
  37. GError *err = NULL;
  38. struct rspamd_rrd_file *rrd;
  39. gdouble ticks;
  40. gint i;
  41. gdouble t[2], cnt = 0.0;
  42. rspamd_snprintf (tmpfile, sizeof (tmpfile), "/tmp/rspamd_rrd.rrd");
  43. unlink (tmpfile);
  44. /* Create sample rrd */
  45. ticks = rspamd_get_calendar_ticks ();
  46. g_assert ((rrd = rspamd_rrd_create (tmpfile, 2, 4, 1, ticks, &err)) != NULL);
  47. /* Add RRA */
  48. rrd_make_default_rra ("AVERAGE", pdp_per_cdp, rows_cnt, &rra[0]);
  49. rrd_make_default_rra ("AVERAGE", pdp_per_cdp / 2, rows_cnt, &rra[1]);
  50. rrd_make_default_rra ("AVERAGE", pdp_per_cdp / 4, rows_cnt, &rra[2]);
  51. rrd_make_default_rra ("AVERAGE", pdp_per_cdp / 10, rows_cnt, &rra[3]);
  52. ar.data = rra;
  53. ar.len = sizeof (rra);
  54. g_assert (rspamd_rrd_add_rra (rrd, &ar, &err));
  55. /* Add DS */
  56. rrd_make_default_ds ("test", "COUNTER", 1, &ds[0]);
  57. rrd_make_default_ds ("test1", "COUNTER", 1, &ds[1]);
  58. ar.data = ds;
  59. ar.len = sizeof (ds);
  60. g_assert (rspamd_rrd_add_ds (rrd, &ar, &err));
  61. /* Finalize */
  62. g_assert (rspamd_rrd_finalize (rrd, &err));
  63. /* Close */
  64. rspamd_rrd_close (rrd);
  65. /* Reopen */
  66. g_assert ((rrd = rspamd_rrd_open (tmpfile, &err)) != NULL);
  67. /* Add some points */
  68. for (i = 0; i < pdp_per_cdp * rows_cnt / 2; i ++) {
  69. t[0] = i;
  70. t[1] = cnt ++;
  71. ar.data = t;
  72. ar.len = sizeof (t);
  73. ticks += 1.0;
  74. g_assert (rspamd_rrd_add_record (rrd, &ar, ticks, &err));
  75. }
  76. /* Add some more points */
  77. for (i = 0; i < pdp_per_cdp * rows_cnt / 4; i ++) {
  78. t[0] = i + rspamd_time_jitter (1.0, 0.0);
  79. t[1] = cnt ++;
  80. ar.data = t;
  81. ar.len = sizeof (t);
  82. ticks += 1.0;
  83. g_assert (rspamd_rrd_add_record (rrd, &ar, ticks, &err));
  84. }
  85. /* Add undefined interval */
  86. ticks += 200;
  87. /* Add some more points */
  88. for (i = 0; i < pdp_per_cdp * rows_cnt / 8; i ++) {
  89. t[0] = i;
  90. t[1] = cnt ++;
  91. ar.data = t;
  92. ar.len = sizeof (t);
  93. ticks += 1.0;
  94. g_assert (rspamd_rrd_add_record (rrd, &ar, ticks, &err));
  95. }
  96. /* Finish */
  97. rspamd_rrd_close (rrd);
  98. /* unlink (tmpfile); */
  99. }