TimescaleTest.cs 3.2 KB

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