TimescaleTest.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. using System;
  2. using DotNet.Testcontainers.Containers.Builders;
  3. using DotNet.Testcontainers.Containers.Modules;
  4. using DotNet.Testcontainers.Containers.WaitStrategies;
  5. using DotNet.Testcontainers.Images.Builders;
  6. using Npgsql;
  7. using Xunit;
  8. namespace OhmGraphite.Test
  9. {
  10. public class TimescaleTest
  11. {
  12. [Fact, Trait("Category", "integration")]
  13. public async void CanSetupTimescale()
  14. {
  15. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  16. .WithImage("timescale/timescaledb:latest-pg12")
  17. .WithEnvironment("POSTGRES_PASSWORD", "123456")
  18. .WithPortBinding(5432, assignRandomHostPort: true)
  19. .WithWaitStrategy(Wait.ForUnixContainer()
  20. .UntilCommandIsCompleted($"pg_isready -h 'localhost' -p '5432'"));
  21. await using var container = testContainersBuilder.Build();
  22. await container.StartAsync();
  23. string connStr = $"Host={container.Hostname};Username=postgres;Password=123456;Port={container.GetMappedPublicPort(5432)}";
  24. var epoch = new DateTime(2001, 1, 13);
  25. using var writer = new TimescaleWriter(connStr, true, "my-pc");
  26. await using var conn = new NpgsqlConnection(connStr);
  27. await writer.ReportMetrics(epoch, TestSensorCreator.Values());
  28. conn.Open();
  29. await using var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM ohm_stats", conn);
  30. Assert.Equal(3, Convert.ToInt32(cmd.ExecuteScalar()));
  31. }
  32. [Fact, Trait("Category", "integration")]
  33. public async void InsertOnlyTimescale()
  34. {
  35. var image = await new ImageFromDockerfileBuilder()
  36. .WithDockerfile("timescale.dockerfile")
  37. .WithDockerfileDirectory("docker")
  38. .WithDeleteIfExists(true)
  39. .WithName("ohm-graphite-insert-only-timescale")
  40. .Build();
  41. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  42. .WithImage(image)
  43. .WithEnvironment("POSTGRES_PASSWORD", "123456")
  44. .WithPortBinding(5432, assignRandomHostPort: true)
  45. .WithWaitStrategy(Wait.ForUnixContainer()
  46. .UntilCommandIsCompleted($"pg_isready -h 'localhost' -p '5432'"));
  47. await using var container = testContainersBuilder.Build();
  48. await container.StartAsync();
  49. string selectStr =$"Host={container.Hostname};Username=postgres;Password=123456;Port={container.GetMappedPublicPort(5432)};Database=timescale_built";
  50. var epoch = new DateTime(2001, 1, 13);
  51. string connStr = $"Host={container.Hostname};Username=ohm;Password=itsohm;Port={container.GetMappedPublicPort(5432)};Database=timescale_built";
  52. using var writer = new TimescaleWriter(connStr, false, "my-pc");
  53. await using var conn = new NpgsqlConnection(selectStr);
  54. await writer.ReportMetrics(epoch, TestSensorCreator.Values());
  55. conn.Open();
  56. await using var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM ohm_stats", conn);
  57. Assert.Equal(3, Convert.ToInt32(cmd.ExecuteScalar()));
  58. }
  59. }
  60. }