151 lines
4.3 KiB
C#
151 lines
4.3 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using System.Reflection;
|
|
using Common;
|
|
using JetBrains.Annotations;
|
|
using Microsoft.VisualStudio.TestTools.UnitTesting;
|
|
using TBF.Rig.BridgeComponents.GciBridge;
|
|
using TBF.Rig.RegisterReaders.GenesisRegReader;
|
|
using TBF.Rig.RegisterReaders.GenesisRegReader.communication;
|
|
using TBF.Rig.RegisterReaders.GenesisRegReader.implementations;
|
|
using Factory = TBF.Rig.RegisterReaders.GenesisRegReader.Factory;
|
|
|
|
namespace TBFTests.Rig.RegisterReaders.GenesisRegReader.communication
|
|
{
|
|
[TestClass]
|
|
[TestSubject(typeof(GenesisSmartReader))]
|
|
public class OptoHeadTest_Test
|
|
{
|
|
private const string BridgeName = "GciBridge_Test";
|
|
|
|
private static GenesisCfg CreateConnectionCfg()
|
|
{
|
|
var factory = new Factory();
|
|
var cfg = new GenesisCfg(factory);
|
|
|
|
SetPrivateFieldByNames(cfg, 1,
|
|
"slotNr",
|
|
"_slotNr");
|
|
|
|
SetPrivateFieldByNames(cfg, 1,
|
|
"rfidComPortNr",
|
|
"_rfidComPortNr");
|
|
|
|
SetPrivateFieldByNames(cfg, 2,
|
|
"optoComPortNr",
|
|
"_optoComPortNr");
|
|
|
|
SetPrivateFieldByNames(cfg, BridgeName,
|
|
"communicationInterfaceBridge",
|
|
"_communicationInterfaceBridge");
|
|
|
|
return cfg;
|
|
}
|
|
|
|
private static GenesisSmartReader CreateSimulatedGenesisReader()
|
|
{
|
|
var cfg = CreateConnectionCfg();
|
|
|
|
var reader = new GenesisSmartReader(cfg);
|
|
|
|
SetPrivateFieldByNames(reader,
|
|
"Genesis1",
|
|
"name",
|
|
"_name");
|
|
|
|
SetPrivateFieldByNames(reader,
|
|
DebugMode.Simulate,
|
|
"debugLevel",
|
|
"_debugLevel");
|
|
|
|
var bridge = new GciBridge();
|
|
|
|
SetPrivateFieldByNames(bridge,
|
|
BridgeName,
|
|
"name",
|
|
"_name");
|
|
|
|
InjectBridge(reader, bridge);
|
|
|
|
return reader;
|
|
}
|
|
|
|
private static void InjectBridge(
|
|
GenesisSmartReader reader,
|
|
GciBridge bridge)
|
|
{
|
|
SetPrivateFieldByNames(reader,
|
|
bridge,
|
|
"commInterfaceBridge",
|
|
"_commInterfaceBridge");
|
|
}
|
|
|
|
private static void SetPrivateFieldByNames(
|
|
object target,
|
|
object value,
|
|
params string[] fieldNames)
|
|
{
|
|
foreach (var fieldName in fieldNames)
|
|
{
|
|
var field = target.GetType().GetField(
|
|
fieldName,
|
|
BindingFlags.Instance |
|
|
BindingFlags.NonPublic |
|
|
BindingFlags.Public);
|
|
|
|
if (field != null)
|
|
{
|
|
field.SetValue(target, value);
|
|
return;
|
|
}
|
|
}
|
|
|
|
throw new MissingFieldException(
|
|
target.GetType().FullName,
|
|
string.Join(" or ", fieldNames));
|
|
}
|
|
|
|
[TestMethod]
|
|
public void BuildConnection_Simulation_ShouldWaitForInitAndUpdate_AndFinishWithin1500ms()
|
|
{
|
|
// Arrange
|
|
var reader = CreateSimulatedGenesisReader();
|
|
|
|
var optoHeadTest = new OptoHeadTest(reader);
|
|
|
|
var stopwatch = Stopwatch.StartNew();
|
|
|
|
// Act
|
|
optoHeadTest.BuildConnection(reader);
|
|
|
|
stopwatch.Stop();
|
|
|
|
// Assert
|
|
Assert.IsTrue(
|
|
stopwatch.ElapsedMilliseconds >= 950,
|
|
$"BuildConnection finished too fast. " +
|
|
$"InitSlotAsync + UpdateSlotAsync were probably not awaited. " +
|
|
$"Elapsed={stopwatch.ElapsedMilliseconds}ms");
|
|
|
|
Assert.IsTrue(
|
|
stopwatch.ElapsedMilliseconds <= 1500,
|
|
$"BuildConnection took too long. " +
|
|
$"Elapsed={stopwatch.ElapsedMilliseconds}ms");
|
|
}
|
|
|
|
[TestMethod]
|
|
public void BuildConnection_NullGenesisHead_ShouldThrowArgumentNullException()
|
|
{
|
|
// Arrange
|
|
var reader = CreateSimulatedGenesisReader();
|
|
|
|
var optoHeadTest = new OptoHeadTest(reader);
|
|
|
|
// Act + Assert
|
|
Assert.ThrowsException<ArgumentNullException>(() =>
|
|
{
|
|
optoHeadTest.BuildConnection(null);
|
|
});
|
|
}
|
|
}
|
|
} |