TimescaleTest.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  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. .WithDockerEndpoint(DockerUtils.DockerEndpoint())
  17. .WithImage("timescale/timescaledb:latest-pg12")
  18. .WithEnvironment("POSTGRES_PASSWORD", "123456")
  19. .WithPortBinding(5432, assignRandomHostPort: true)
  20. .WithWaitStrategy(Wait.ForUnixContainer()
  21. .UntilCommandIsCompleted("pg_isready -h 'localhost' -p '5432'"));
  22. await using var container = testContainersBuilder.Build();
  23. await container.StartAsync();
  24. string connStr = $"Host={container.Hostname};Username=postgres;Password=123456;Port={container.GetMappedPublicPort(5432)}";
  25. var epoch = new DateTime(2001, 1, 13);
  26. using var writer = new TimescaleWriter(connStr, true, "my-pc");
  27. await using var conn = new NpgsqlConnection(connStr);
  28. await writer.ReportMetrics(epoch, TestSensorCreator.Values());
  29. conn.Open();
  30. await using var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM ohm_stats", conn);
  31. Assert.Equal(3, Convert.ToInt32(cmd.ExecuteScalar()));
  32. }
  33. [IgnoreOnRemoteDockerFact, Trait("Category", "integration")]
  34. public async void InsertOnlyTimescale()
  35. {
  36. var image = await new ImageFromDockerfileBuilder()
  37. .WithDockerfile("timescale.dockerfile")
  38. .WithDockerfileDirectory("docker")
  39. .WithDeleteIfExists(true)
  40. .WithName("ohm-graphite-insert-only-timescale")
  41. .Build();
  42. var testContainersBuilder = new TestcontainersBuilder<TestcontainersContainer>()
  43. .WithImage(image)
  44. .WithEnvironment("POSTGRES_PASSWORD", "123456")
  45. .WithPortBinding(5432, assignRandomHostPort: true)
  46. .WithWaitStrategy(Wait.ForUnixContainer()
  47. .UntilCommandIsCompleted("pg_isready -h 'localhost' -p '5432'"));
  48. await using var container = testContainersBuilder.Build();
  49. await container.StartAsync();
  50. string selectStr =$"Host={container.Hostname};Username=postgres;Password=123456;Port={container.GetMappedPublicPort(5432)};Database=timescale_built";
  51. var epoch = new DateTime(2001, 1, 13);
  52. string connStr = $"Host={container.Hostname};Username=ohm;Password=itsohm;Port={container.GetMappedPublicPort(5432)};Database=timescale_built";
  53. using var writer = new TimescaleWriter(connStr, false, "my-pc");
  54. await using var conn = new NpgsqlConnection(selectStr);
  55. await writer.ReportMetrics(epoch, TestSensorCreator.Values());
  56. conn.Open();
  57. await using var cmd = new NpgsqlCommand("SELECT COUNT(*) FROM ohm_stats", conn);
  58. Assert.Equal(3, Convert.ToInt32(cmd.ExecuteScalar()));
  59. }
  60. }
  61. }