test(opcuaclient.browser): unit + opc-plc live coverage
This commit is contained in:
+52
@@ -0,0 +1,52 @@
|
||||
using Shouldly;
|
||||
using Xunit;
|
||||
using ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser;
|
||||
|
||||
namespace ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser.Tests;
|
||||
|
||||
/// <summary>
|
||||
/// Unit-only coverage of <see cref="OpcUaClientDriverBrowser"/>'s pre-connect
|
||||
/// validation. These tests do not require a live OPC UA endpoint and are safe to
|
||||
/// run without the opc-plc Docker fixture.
|
||||
/// </summary>
|
||||
[Trait("Category", "Unit")]
|
||||
public sealed class OpcUaClientDriverBrowserTests
|
||||
{
|
||||
private readonly OpcUaClientDriverBrowser _sut = new();
|
||||
|
||||
/// <summary>The DriverType key must match the AdminUI's persisted value.</summary>
|
||||
[Fact]
|
||||
public void DriverType_is_OpcUaClient() => _sut.DriverType.ShouldBe("OpcUaClient");
|
||||
|
||||
/// <summary>An empty endpoint must fail fast with a clear EndpointUrl-mentioning message.</summary>
|
||||
[Fact]
|
||||
public async Task OpenAsync_with_empty_endpoint_throws()
|
||||
{
|
||||
var json = """{"EndpointUrl":"","EndpointUrls":[]}""";
|
||||
var ex = await Should.ThrowAsync<InvalidOperationException>(
|
||||
() => _sut.OpenAsync(json, TestContext.Current.CancellationToken));
|
||||
ex.Message.ShouldContain("EndpointUrl");
|
||||
}
|
||||
|
||||
/// <summary>A JSON literal that deserializes to null must fail fast.</summary>
|
||||
[Fact]
|
||||
public async Task OpenAsync_with_null_json_throws()
|
||||
{
|
||||
var ex = await Should.ThrowAsync<InvalidOperationException>(
|
||||
() => _sut.OpenAsync("null", TestContext.Current.CancellationToken));
|
||||
ex.Message.ShouldContain("null");
|
||||
}
|
||||
|
||||
/// <summary>Certificate auth is not supported by the browser; the failure message
|
||||
/// must say so explicitly rather than surfacing a downstream COM/SDK error.
|
||||
/// <c>OpcUaAuthType.Certificate</c> serializes as the numeric value 2 under the
|
||||
/// browser's default System.Text.Json options (no string-enum converter).</summary>
|
||||
[Fact]
|
||||
public async Task OpenAsync_with_certificate_auth_throws_clear_message()
|
||||
{
|
||||
var json = """{"EndpointUrl":"opc.tcp://127.0.0.1:1","AuthType":2}""";
|
||||
var ex = await Should.ThrowAsync<InvalidOperationException>(
|
||||
() => _sut.OpenAsync(json, TestContext.Current.CancellationToken));
|
||||
ex.Message.ShouldContain("Certificate");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user