Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions src/Daqifi.Core.Tests/Device/DeviceCapabilitiesTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
using Daqifi.Core.Device;
using Xunit;

namespace Daqifi.Core.Tests.Device;

/// <summary>
/// Unit tests for the <see cref="DeviceCapabilities"/> class.
/// </summary>
public class DeviceCapabilitiesTests
{
[Fact]
public void Constructor_InitializesWithDefaultValues()
{
// Act
var capabilities = new DeviceCapabilities();

// Assert
Assert.True(capabilities.SupportsStreaming);
Assert.False(capabilities.HasSdCard);
Assert.False(capabilities.HasWiFi);
Assert.False(capabilities.HasUsb);
Assert.Equal(0, capabilities.AnalogInputChannels);
Assert.Equal(0, capabilities.AnalogOutputChannels);
Assert.Equal(0, capabilities.DigitalChannels);
Assert.Equal(1000, capabilities.MaxSamplingRate);
}

[Theory]
[InlineData(DeviceType.Nyquist1)]
[InlineData(DeviceType.Nyquist2)]
[InlineData(DeviceType.Nyquist3)]
public void FromDeviceType_NyquistDevices_SetsCorrectCapabilities(DeviceType deviceType)
{
// Act
var capabilities = DeviceCapabilities.FromDeviceType(deviceType);

// Assert
Assert.True(capabilities.SupportsStreaming);
Assert.True(capabilities.HasSdCard);
Assert.True(capabilities.HasWiFi);
Assert.True(capabilities.HasUsb);
Assert.Equal(1000, capabilities.MaxSamplingRate);
}

[Fact]
public void FromDeviceType_UnknownDevice_ReturnsDefaultCapabilities()
{
// Act
var capabilities = DeviceCapabilities.FromDeviceType(DeviceType.Unknown);

// Assert
Assert.True(capabilities.SupportsStreaming);
Assert.False(capabilities.HasSdCard);
Assert.False(capabilities.HasWiFi);
Assert.False(capabilities.HasUsb);
Assert.Equal(0, capabilities.AnalogInputChannels);
Assert.Equal(0, capabilities.AnalogOutputChannels);
Assert.Equal(0, capabilities.DigitalChannels);
Assert.Equal(1000, capabilities.MaxSamplingRate);
}

[Fact]
public void Properties_CanBeSetAndRetrieved()
{
// Arrange
var capabilities = new DeviceCapabilities();

// Act
capabilities.AnalogInputChannels = 8;
capabilities.AnalogOutputChannels = 2;
capabilities.DigitalChannels = 16;
capabilities.MaxSamplingRate = 2000;

// Assert
Assert.Equal(8, capabilities.AnalogInputChannels);
Assert.Equal(2, capabilities.AnalogOutputChannels);
Assert.Equal(16, capabilities.DigitalChannels);
Assert.Equal(2000, capabilities.MaxSamplingRate);
}
}
194 changes: 194 additions & 0 deletions src/Daqifi.Core.Tests/Device/DeviceMetadataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
using Daqifi.Core.Device;
using Google.Protobuf;
using Xunit;

namespace Daqifi.Core.Tests.Device;

/// <summary>
/// Unit tests for the <see cref="DeviceMetadata"/> class.
/// </summary>
public class DeviceMetadataTests
{
[Fact]
public void Constructor_InitializesWithDefaultValues()
{
// Act
var metadata = new DeviceMetadata();

// Assert
Assert.Equal(string.Empty, metadata.PartNumber);
Assert.Equal(string.Empty, metadata.SerialNumber);
Assert.Equal(string.Empty, metadata.FirmwareVersion);
Assert.Equal(string.Empty, metadata.HardwareRevision);
Assert.Equal(DeviceType.Unknown, metadata.DeviceType);
Assert.NotNull(metadata.Capabilities);
Assert.Equal(string.Empty, metadata.IpAddress);
Assert.Equal(string.Empty, metadata.MacAddress);
Assert.Equal(string.Empty, metadata.Ssid);
Assert.Equal(string.Empty, metadata.HostName);
Assert.Equal(0, metadata.DevicePort);
}

[Fact]
public void UpdateFromProtobuf_UpdatesPartNumberAndDeviceType()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
DevicePn = "Nq3"
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal("Nq3", metadata.PartNumber);
Assert.Equal(DeviceType.Nyquist3, metadata.DeviceType);
Assert.True(metadata.Capabilities.HasSdCard);
Assert.True(metadata.Capabilities.HasWiFi);
}

[Fact]
public void UpdateFromProtobuf_UpdatesSerialNumber()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
DeviceSn = 12345
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal("12345", metadata.SerialNumber);
}

[Fact]
public void UpdateFromProtobuf_UpdatesFirmwareAndHardwareVersions()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
DeviceFwRev = "1.2.3",
DeviceHwRev = "2.0"
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal("1.2.3", metadata.FirmwareVersion);
Assert.Equal("2.0", metadata.HardwareRevision);
}

[Fact]
public void UpdateFromProtobuf_UpdatesNetworkInformation()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
Ssid = "TestNetwork",
HostName = "daqifi-001",
DevicePort = 9760,
WifiSecurityMode = 3,
WifiInfMode = 1
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal("TestNetwork", metadata.Ssid);
Assert.Equal("daqifi-001", metadata.HostName);
Assert.Equal(9760, metadata.DevicePort);
Assert.Equal(3u, metadata.WifiSecurityMode);
Assert.Equal(1u, metadata.WifiInfrastructureMode);
}

[Fact]
public void UpdateFromProtobuf_UpdatesIpAddress()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
IpAddr = ByteString.CopyFrom(new byte[] { 192, 168, 1, 100 })
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal("192.168.1.100", metadata.IpAddress);
}

[Fact]
public void UpdateFromProtobuf_UpdatesMacAddress()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
MacAddr = ByteString.CopyFrom(new byte[] { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF })
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal("AA-BB-CC-DD-EE-FF", metadata.MacAddress);
}

[Fact]
public void UpdateFromProtobuf_UpdatesChannelCounts()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
AnalogInPortNum = 8,
AnalogOutPortNum = 2,
DigitalPortNum = 16
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal(8, metadata.Capabilities.AnalogInputChannels);
Assert.Equal(2, metadata.Capabilities.AnalogOutputChannels);
Assert.Equal(16, metadata.Capabilities.DigitalChannels);
}

[Fact]
public void UpdateFromProtobuf_IgnoresEmptyOrZeroValues()
{
// Arrange
var metadata = new DeviceMetadata();
var message = new DaqifiOutMessage
{
DevicePn = "",
DeviceSn = 0,
DeviceFwRev = "",
Ssid = "",
HostName = "",
DevicePort = 0
};

// Act
metadata.UpdateFromProtobuf(message);

// Assert
Assert.Equal(string.Empty, metadata.PartNumber);
Assert.Equal(string.Empty, metadata.SerialNumber);
Assert.Equal(string.Empty, metadata.FirmwareVersion);
Assert.Equal(string.Empty, metadata.Ssid);
Assert.Equal(string.Empty, metadata.HostName);
Assert.Equal(0, metadata.DevicePort);
}
}
55 changes: 55 additions & 0 deletions src/Daqifi.Core.Tests/Device/DeviceTypeDetectorTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
using Daqifi.Core.Device;
using Xunit;

namespace Daqifi.Core.Tests.Device;

/// <summary>
/// Unit tests for the <see cref="DeviceTypeDetector"/> class.
/// </summary>
public class DeviceTypeDetectorTests
{
[Theory]
[InlineData("nq1", DeviceType.Nyquist1)]
[InlineData("Nq1", DeviceType.Nyquist1)]
[InlineData("NQ1", DeviceType.Nyquist1)]
[InlineData("nq2", DeviceType.Nyquist2)]
[InlineData("Nq2", DeviceType.Nyquist2)]
[InlineData("NQ2", DeviceType.Nyquist2)]
[InlineData("nq3", DeviceType.Nyquist3)]
[InlineData("Nq3", DeviceType.Nyquist3)]
[InlineData("NQ3", DeviceType.Nyquist3)]
public void DetectFromPartNumber_ValidPartNumber_ReturnsCorrectType(string partNumber, DeviceType expected)
{
// Act
var result = DeviceTypeDetector.DetectFromPartNumber(partNumber);

// Assert
Assert.Equal(expected, result);
}

[Theory]
[InlineData("")]
[InlineData(" ")]
[InlineData(null)]
public void DetectFromPartNumber_EmptyOrNull_ReturnsUnknown(string partNumber)
{
// Act
var result = DeviceTypeDetector.DetectFromPartNumber(partNumber);

// Assert
Assert.Equal(DeviceType.Unknown, result);
}

[Theory]
[InlineData("unknown")]
[InlineData("nq4")]
[InlineData("invalid")]
public void DetectFromPartNumber_UnknownPartNumber_ReturnsUnknown(string partNumber)
{
// Act
var result = DeviceTypeDetector.DetectFromPartNumber(partNumber);

// Assert
Assert.Equal(DeviceType.Unknown, result);
}
}
Loading
Loading