InfluxTest.cs 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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 InfluxTest
  11. {
  12. [Fact, Trait("Category", "integration")]
  13. public async void CanInsertIntoInflux()
  14. {
  15. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  16. .WithImage("influxdb:1.8-alpine")
  17. .WithEnvironment("INFLUXDB_DB", "mydb")
  18. .WithEnvironment("INFLUXDB_USER", "my_user")
  19. .WithEnvironment("INFLUXDB_USER_PASSWORD", "my_pass")
  20. .WithPortBinding(8086, assignRandomHostPort: true)
  21. .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(8086));
  22. await using var container = testContainersBuilder.Build();
  23. await container.StartAsync();
  24. var baseUrl = $"http://{container.Hostname}:{container.GetMappedPublicPort(8086)}";
  25. var config = new InfluxConfig(new Uri(baseUrl), "mydb", "my_user", "my_pass");
  26. using var writer = new InfluxWriter(config, "my-pc");
  27. using var client = new HttpClient();
  28. for (int attempts = 0; ; attempts++)
  29. {
  30. try
  31. {
  32. await writer.ReportMetrics(DateTime.Now, TestSensorCreator.Values());
  33. var resp = await client.GetAsync(
  34. $"{baseUrl}/query?pretty=true&db=mydb&q=SELECT%20*%20FROM%20Temperature");
  35. Assert.True(resp.IsSuccessStatusCode);
  36. var content = await resp.Content.ReadAsStringAsync();
  37. Assert.Contains("/intelcpu/0/temperature/0", content);
  38. break;
  39. }
  40. catch (Exception)
  41. {
  42. if (attempts >= 10)
  43. {
  44. throw;
  45. }
  46. Thread.Sleep(TimeSpan.FromSeconds(1));
  47. }
  48. }
  49. }
  50. [Fact, Trait("Category", "integration")]
  51. public async void CanInsertIntoPasswordLessInfluxdb()
  52. {
  53. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  54. .WithImage("influxdb:1.8-alpine")
  55. .WithEnvironment("INFLUXDB_DB", "mydb")
  56. .WithEnvironment("INFLUXDB_USER", "my_user")
  57. .WithEnvironment("INFLUXDB_HTTP_AUTH_ENABLED", "false")
  58. .WithPortBinding(8086, assignRandomHostPort: true)
  59. .WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(8086));
  60. await using var container = testContainersBuilder.Build();
  61. await container.StartAsync();
  62. var baseUrl = $"http://{container.Hostname}:{container.GetMappedPublicPort(8086)}";
  63. var config = new InfluxConfig(new Uri(baseUrl), "mydb", "my_user", null);
  64. using var writer = new InfluxWriter(config, "my-pc");
  65. using var client = new HttpClient();
  66. for (int attempts = 0; ; attempts++)
  67. {
  68. try
  69. {
  70. await writer.ReportMetrics(DateTime.Now, TestSensorCreator.Values());
  71. var resp = await client.GetAsync(
  72. $"{baseUrl}/query?pretty=true&db=mydb&q=SELECT%20*%20FROM%20Temperature");
  73. Assert.True(resp.IsSuccessStatusCode);
  74. var content = await resp.Content.ReadAsStringAsync();
  75. Assert.Contains("/intelcpu/0/temperature/0", content);
  76. break;
  77. }
  78. catch (Exception)
  79. {
  80. if (attempts >= 10)
  81. {
  82. throw;
  83. }
  84. Thread.Sleep(TimeSpan.FromSeconds(1));
  85. }
  86. }
  87. }
  88. }
  89. }