1
0

GraphiteTest.cs 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using System.Net.Http;
  3. using System.Threading;
  4. using DotNet.Testcontainers.Containers.Builders;
  5. using DotNet.Testcontainers.Containers.Modules;
  6. using DotNet.Testcontainers.Containers.WaitStrategies;
  7. using Xunit;
  8. namespace OhmGraphite.Test
  9. {
  10. public class GraphiteTest
  11. {
  12. [Fact, Trait("Category", "integration")]
  13. public async void InsertGraphiteTest()
  14. {
  15. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  16. .WithImage("graphiteapp/graphite-statsd")
  17. .WithEnvironment("REDIS_TAGDB", "y")
  18. .WithPortBinding(2003, assignRandomHostPort: true)
  19. .WithPortBinding(80, assignRandomHostPort: true)
  20. .WithPortBinding(8080, assignRandomHostPort: true)
  21. .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(8080));
  22. await using var container = testContainersBuilder.Build();
  23. await container.StartAsync();
  24. var port = container.GetMappedPublicPort(2003);
  25. using var writer = new GraphiteWriter(container.Hostname, port, "my-pc", tags: false);
  26. using var client = new HttpClient();
  27. for (int attempts = 0; ; attempts++)
  28. {
  29. try
  30. {
  31. await writer.ReportMetrics(DateTime.Now, TestSensorCreator.Values());
  32. var resp = await client.GetAsync(
  33. $"http://{container.Hostname}:{container.GetMappedPublicPort(80)}/render?format=csv&target=ohm.my-pc.intelcpu.0.temperature.cpucore.1");
  34. var content = await resp.Content.ReadAsStringAsync();
  35. Assert.Contains("ohm.my-pc.intelcpu.0.temperature.cpucore.1", content);
  36. break;
  37. }
  38. catch (Exception)
  39. {
  40. if (attempts >= 10)
  41. {
  42. throw;
  43. }
  44. Thread.Sleep(TimeSpan.FromSeconds(1));
  45. }
  46. }
  47. }
  48. [Fact, Trait("Category", "integration")]
  49. public async void InsertTagGraphiteTest()
  50. {
  51. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  52. .WithImage("graphiteapp/graphite-statsd")
  53. .WithEnvironment("REDIS_TAGDB", "y")
  54. .WithPortBinding(2003, assignRandomHostPort: true)
  55. .WithPortBinding(80, assignRandomHostPort: true)
  56. .WithPortBinding(8080, assignRandomHostPort: true)
  57. .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(8080));
  58. await using var container = testContainersBuilder.Build();
  59. await container.StartAsync();
  60. var port = container.GetMappedPublicPort(2003);
  61. using var writer = new GraphiteWriter(container.Hostname, port, "my-pc", tags: true);
  62. using var client = new HttpClient();
  63. for (int attempts = 0;; attempts++)
  64. {
  65. try
  66. {
  67. await writer.ReportMetrics(DateTime.Now, TestSensorCreator.Values());
  68. var resp = await client.GetAsync(
  69. $"http://{container.Hostname}:{container.GetMappedPublicPort(80)}/render?format=csv&target=seriesByTag('sensor_type=Temperature','hardware_type=CPU')");
  70. var content = await resp.Content.ReadAsStringAsync();
  71. Assert.Contains("host=my-pc", content);
  72. Assert.Contains("app=ohm", content);
  73. Assert.Contains("sensor_type=Temperature", content);
  74. break;
  75. }
  76. catch (Exception)
  77. {
  78. if (attempts >= 10)
  79. {
  80. throw;
  81. }
  82. Thread.Sleep(TimeSpan.FromSeconds(1));
  83. }
  84. }
  85. }
  86. }
  87. }