Merge remote-tracking branch 'origin/main'
This commit is contained in:
commit
b1e134490d
9 changed files with 226 additions and 50 deletions
|
|
@ -15,7 +15,14 @@ namespace PlanTempus.Core.Telemetry
|
|||
}
|
||||
public new void Send(ITelemetry telemetry)
|
||||
{
|
||||
if (telemetry.Context.GlobalProperties["OmitSeqTelemetryChannel"] != "true")
|
||||
|
||||
if (telemetry.Context.GlobalProperties.TryGetValue("OmitSeqTelemetryChannel", out string value))
|
||||
if (value == "true")
|
||||
{
|
||||
base.Send(telemetry);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var writeTask = _messageChannel.Writer.WriteAsync(telemetry).AsTask();
|
||||
|
|
|
|||
|
|
@ -235,3 +235,4 @@ namespace PlanTempus.SetupInfrastructure
|
|||
|
||||
|
||||
}
|
||||
|
||||
190
Tests/ConfigurationSystem/SetupConfigurationTests.cs
Normal file
190
Tests/ConfigurationSystem/SetupConfigurationTests.cs
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
using PlanTempus.Database.ConfigurationManagementSystem;
|
||||
using Insight.Database;
|
||||
using System.Data;
|
||||
using Newtonsoft.Json;
|
||||
using FluentAssertions;
|
||||
using Autofac;
|
||||
using PlanTempus.Database.Core.ConnectionFactory;
|
||||
|
||||
namespace PlanTempus.Tests.ConfigurationSystem;
|
||||
|
||||
[TestClass]
|
||||
public class SetupConfigurationTests : TestFixture
|
||||
{
|
||||
private IDbConnection _connection;
|
||||
private SetupConfiguration _setupConfiguration;
|
||||
|
||||
[TestInitialize]
|
||||
public void Setup()
|
||||
{
|
||||
var connectionFactory = Container.Resolve<IDbConnectionFactory>();
|
||||
_connection = connectionFactory.Create();
|
||||
}
|
||||
|
||||
[TestCleanup]
|
||||
public void Cleanup()
|
||||
{
|
||||
_connection.ExecuteSql(@"
|
||||
TRUNCATE TABLE app_configuration_history;
|
||||
TRUNCATE TABLE app_configuration CASCADE;");
|
||||
|
||||
_connection.Dispose();
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void InsertConfiguration_ShouldCreateHistoryRecord()
|
||||
{
|
||||
// Arrange
|
||||
var configData = new
|
||||
{
|
||||
key = "test.key",
|
||||
value = "test value",
|
||||
label = "Test Label"
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = _connection.QuerySql<dynamic>(@"
|
||||
INSERT INTO app_configuration (key, value, label)
|
||||
VALUES (@key, @value, @label)
|
||||
RETURNING *", configData).Single();
|
||||
|
||||
var history = _connection.QuerySql<dynamic>(@"
|
||||
SELECT key, value, label, action_type
|
||||
FROM app_configuration_history
|
||||
WHERE id = @id AND action_type = 'I'",
|
||||
new { id = (int)result.id })
|
||||
.Single();
|
||||
|
||||
// Assert
|
||||
var expected = JsonConvert.SerializeObject(new
|
||||
{
|
||||
key = configData.key,
|
||||
value = configData.value,
|
||||
label = configData.label,
|
||||
action_type = "I"
|
||||
});
|
||||
var actual = JsonConvert.SerializeObject(history) as string;
|
||||
actual.Should().Be(expected);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void UpdateConfiguration_ShouldUpdateModifiedAt()
|
||||
{
|
||||
// Arrange
|
||||
var configData = new
|
||||
{
|
||||
key = "test.key",
|
||||
value = "original value"
|
||||
};
|
||||
|
||||
var original = _connection.QuerySql<dynamic>(@"
|
||||
INSERT INTO app_configuration (key, value)
|
||||
VALUES (@key, @value)
|
||||
RETURNING modified_at", configData)
|
||||
.Single();
|
||||
|
||||
System.Threading.Thread.Sleep(1000);
|
||||
|
||||
// Act
|
||||
var updated = _connection.QuerySql<dynamic>(@"
|
||||
UPDATE app_configuration
|
||||
SET value = @value
|
||||
WHERE key = @key
|
||||
RETURNING modified_at",
|
||||
new { key = configData.key, value = "updated value" })
|
||||
.Single();
|
||||
|
||||
// Assert
|
||||
((DateTime)updated.modified_at).Should().BeAfter((DateTime)original.modified_at);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void DeleteConfiguration_ShouldCreateHistoryRecord()
|
||||
{
|
||||
// Arrange
|
||||
var configData = new
|
||||
{
|
||||
key = "test.key",
|
||||
value = "test value"
|
||||
};
|
||||
|
||||
var original = _connection.QuerySql<dynamic>(@"
|
||||
INSERT INTO app_configuration (key, value)
|
||||
VALUES (@key, @value)
|
||||
RETURNING id", configData)
|
||||
.Single();
|
||||
|
||||
// Act
|
||||
_connection.ExecuteSql(
|
||||
"DELETE FROM app_configuration WHERE id = @id",
|
||||
new { id = (int)original.id });
|
||||
|
||||
// Assert
|
||||
var history = _connection.QuerySql<dynamic>(@"
|
||||
SELECT key, value, action_type
|
||||
FROM app_configuration_history
|
||||
WHERE id = @id AND action_type = 'D'",
|
||||
new { id = (int)original.id })
|
||||
.Single();
|
||||
|
||||
var expected = JsonConvert.SerializeObject(new
|
||||
{
|
||||
key = configData.key,
|
||||
value = configData.value,
|
||||
action_type = "D"
|
||||
});
|
||||
var actual = JsonConvert.SerializeObject(history) as string;
|
||||
actual.Should().Be(expected);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void InsertConfiguration_ShouldSetAllColumns()
|
||||
{
|
||||
// Arrange
|
||||
var now = DateTime.UtcNow;
|
||||
now = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, 0, DateTimeKind.Utc);
|
||||
var configData = new
|
||||
{
|
||||
key = "test.columns",
|
||||
value = "test value",
|
||||
label = "Test Label",
|
||||
content_type = "application/json",
|
||||
valid_from = now,
|
||||
expires_at = now.AddDays(30)
|
||||
};
|
||||
|
||||
// Act
|
||||
var result = _connection.QuerySql<dynamic>(@"
|
||||
INSERT INTO app_configuration (
|
||||
key,
|
||||
value,
|
||||
label,
|
||||
content_type,
|
||||
valid_from,
|
||||
expires_at)
|
||||
VALUES (
|
||||
@key,
|
||||
@value,
|
||||
@label,
|
||||
@content_type,
|
||||
@valid_from,
|
||||
@expires_at)
|
||||
RETURNING key, value, label, content_type,
|
||||
CAST(EXTRACT(EPOCH FROM date_trunc('minute', valid_from)) AS INTEGER) as valid_from,
|
||||
CAST(EXTRACT(EPOCH FROM date_trunc('minute', expires_at)) AS INTEGER) as expires_at", configData)
|
||||
.Single();
|
||||
|
||||
// Assert
|
||||
var expected = JsonConvert.SerializeObject(new
|
||||
{
|
||||
key = configData.key,
|
||||
value = configData.value,
|
||||
label = configData.label,
|
||||
content_type = configData.content_type,
|
||||
valid_from = ((DateTimeOffset)configData.valid_from).ToUnixTimeSeconds(),
|
||||
expires_at = ((DateTimeOffset)configData.expires_at).ToUnixTimeSeconds()
|
||||
});
|
||||
|
||||
Assert.AreEqual(expected, JsonConvert.SerializeObject(result));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,9 +1,7 @@
|
|||
using Autofac;
|
||||
using Autofac;
|
||||
using Shouldly;
|
||||
using System.Data;
|
||||
using Insight.Database;
|
||||
using Npgsql;
|
||||
using PlanTempus.Tests;
|
||||
using PlanTempus.Core.Configurations;
|
||||
using PlanTempus.Core.Configurations.JsonConfigProvider;
|
||||
using PlanTempus.Core.Configurations.SmartConfigProvider;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,11 @@
|
|||
"ConnectionString": "InstrumentationKey=07d2a2b9-5e8e-4924-836e-264f8438f6c5;IngestionEndpoint=https://northeurope-2.in.applicationinsights.azure.com/;LiveEndpoint=https://northeurope.livediagnostics.monitor.azure.com/;ApplicationId=56748c39-2fa3-4880-a1e2-24068e791548",
|
||||
"UseSeqLoggingTelemetryChannel": true
|
||||
},
|
||||
"SeqConfiguration": {
|
||||
"IngestionEndpoint": "http://localhost:5341",
|
||||
"ApiKey": null,
|
||||
"Environment": "MSTEST"
|
||||
},
|
||||
"Authentication": "SHA256",
|
||||
"Feature": {
|
||||
"Enabled": true,
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ namespace PlanTempus.Tests.Logging
|
|||
// wait for processing
|
||||
await Task.Delay(5000);
|
||||
|
||||
_cts.Cancel();
|
||||
_cts.Cancel(); //not sure about this, we need to analyse more before this is "the way"
|
||||
await _service.StopAsync(CancellationToken.None);
|
||||
|
||||
|
||||
|
|
@ -67,11 +67,5 @@ namespace PlanTempus.Tests.Logging
|
|||
return Task.FromResult(new HttpResponseMessage(System.Net.HttpStatusCode.OK));
|
||||
}
|
||||
}
|
||||
|
||||
[TestCleanup]
|
||||
public void Cleanup()
|
||||
{
|
||||
_cts?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -52,19 +52,10 @@ namespace PlanTempus.Tests.Logging
|
|||
// wait for processing
|
||||
await Task.Delay(5000);
|
||||
|
||||
//_cts.Cancel();
|
||||
await _service.StopAsync(CancellationToken.None);
|
||||
|
||||
|
||||
bool hasMoreMessages = await _messageChannel.Reader.WaitToReadAsync();
|
||||
Assert.IsFalse(hasMoreMessages, "Queue should be empty after 5 seconds");
|
||||
}
|
||||
|
||||
|
||||
[TestCleanup]
|
||||
public void Cleanup()
|
||||
{
|
||||
_cts?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -40,7 +40,7 @@ namespace PlanTempus.Tests
|
|||
|
||||
// Assert
|
||||
Assert.AreEqual(3, parts.Length);
|
||||
Assert.AreEqual("600000", parts[0]);
|
||||
Assert.AreEqual("100000", parts[0]);
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ namespace PlanTempus.Tests
|
|||
catch (Exception ex)
|
||||
{
|
||||
db.Error(ex);
|
||||
throw;
|
||||
}
|
||||
}
|
||||
[TestMethod]
|
||||
|
|
@ -80,15 +79,6 @@ namespace PlanTempus.Tests
|
|||
throw;
|
||||
}
|
||||
}
|
||||
[TestMethod]
|
||||
public async Task TryDbSetup()
|
||||
{
|
||||
//var conn = Container.Resolve<IDbConnection>();
|
||||
|
||||
//var identitySystem = new Database.Core.SetupIdentitySystem(conn);
|
||||
//identitySystem.CreateSystem("swp");
|
||||
}
|
||||
|
||||
[TestMethod]
|
||||
public void SetupPostgresql_LISTEN()
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue