11b703708c
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
80 lines
2.5 KiB
C#
80 lines
2.5 KiB
C#
using Shouldly;
|
|
using Xunit;
|
|
|
|
namespace ZB.MOM.WW.OtOpcUa.Driver.Historian.QuestDb.Tests;
|
|
|
|
public sealed class QuestDbHistorianOptionsTests
|
|
{
|
|
private static QuestDbHistorianOptions Valid() => new() { ConnectionString = "Host=h;Port=8812" };
|
|
|
|
[Fact]
|
|
public void Defaults_are_the_documented_ones()
|
|
{
|
|
var o = new QuestDbHistorianOptions();
|
|
o.ConnectionString.ShouldBe("");
|
|
o.TablePrefix.ShouldBe("hist_");
|
|
o.RetentionDays.ShouldBeNull();
|
|
o.CommandTimeout.ShouldBe(TimeSpan.FromSeconds(30));
|
|
o.AutoCreateSchema.ShouldBeTrue();
|
|
o.VisibilityTimeout.ShouldBe(TimeSpan.FromSeconds(5));
|
|
}
|
|
|
|
[Fact]
|
|
public void A_valid_configuration_has_no_errors() => Valid().Validate().ShouldBeEmpty();
|
|
|
|
[Fact]
|
|
public void Missing_connection_string_names_the_key()
|
|
{
|
|
var o = Valid(); o.ConnectionString = " ";
|
|
o.Validate().ShouldHaveSingleItem().ShouldContain("ServerHistorian:QuestDb:ConnectionString");
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("")]
|
|
[InlineData("hist-")]
|
|
[InlineData("hist.")]
|
|
[InlineData("hist_; DROP")]
|
|
public void Bad_prefix_names_the_key(string prefix)
|
|
{
|
|
var o = Valid(); o.TablePrefix = prefix;
|
|
o.Validate().ShouldHaveSingleItem().ShouldContain("ServerHistorian:QuestDb:TablePrefix");
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData("t0123456789ab_")]
|
|
[InlineData("A_9")]
|
|
public void Good_prefixes_pass(string prefix)
|
|
{
|
|
var o = Valid(); o.TablePrefix = prefix;
|
|
o.Validate().ShouldBeEmpty();
|
|
}
|
|
|
|
[Theory]
|
|
[InlineData(0)]
|
|
[InlineData(-3)]
|
|
public void Retention_below_one_names_the_key(int days)
|
|
{
|
|
var o = Valid(); o.RetentionDays = days;
|
|
o.Validate().ShouldHaveSingleItem().ShouldContain("ServerHistorian:QuestDb:RetentionDays");
|
|
}
|
|
|
|
[Fact]
|
|
public void Retention_of_one_is_valid() { var o = Valid(); o.RetentionDays = 1; o.Validate().ShouldBeEmpty(); }
|
|
|
|
[Fact]
|
|
public void Non_positive_command_timeout_names_the_key()
|
|
{
|
|
var o = Valid(); o.CommandTimeout = TimeSpan.Zero;
|
|
o.Validate().ShouldHaveSingleItem().ShouldContain("ServerHistorian:QuestDb:CommandTimeout");
|
|
}
|
|
|
|
[Fact]
|
|
public void Negative_visibility_timeout_names_the_key_and_zero_is_valid()
|
|
{
|
|
var o = Valid(); o.VisibilityTimeout = TimeSpan.FromMilliseconds(-1);
|
|
o.Validate().ShouldHaveSingleItem().ShouldContain("ServerHistorian:QuestDb:VisibilityTimeout");
|
|
o.VisibilityTimeout = TimeSpan.Zero;
|
|
o.Validate().ShouldBeEmpty();
|
|
}
|
|
}
|