Files
lmxopcua/tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Historian.SqlServer.Tests/SqlServerHistorianOptionsTests.cs
T

47 lines
1.4 KiB
C#

using Shouldly;
using Xunit;
namespace ZB.MOM.WW.OtOpcUa.Driver.Historian.SqlServer.Tests;
public sealed class SqlServerHistorianOptionsTests
{
private static SqlServerHistorianOptions Valid() => new() { ConnectionString = "Server=x" };
[Fact]
public void Defaults_with_a_connection_string_are_valid() => Valid().Validate().ShouldBeEmpty();
[Fact]
public void Missing_connection_string_is_rejected() =>
new SqlServerHistorianOptions().Validate().ShouldContain(e => e.Contains("ConnectionString"));
[Theory]
[InlineData("hist]; DROP TABLE x;--")]
[InlineData("1abc")]
[InlineData("a b")]
[InlineData("")]
[InlineData("a.b")]
public void Invalid_schema_names_are_rejected_before_any_sql_runs(string schema)
{
var o = Valid();
o.Schema = schema;
o.Validate().ShouldContain(e => e.Contains("Schema"));
Should.Throw<ArgumentException>(() => new SqlHistorianConnection(o));
}
[Fact]
public void Non_positive_timeout_is_rejected()
{
var o = Valid();
o.CommandTimeout = TimeSpan.Zero;
o.Validate().ShouldContain(e => e.Contains("CommandTimeout"));
}
[Fact]
public void Q_schema_qualifies_and_brackets()
{
var o = Valid();
o.Schema = "my_s";
new SqlHistorianConnection(o).Q("Tag").ShouldBe("[my_s].[Tag]");
}
}