Files
DP44/DataPRO/UnitTest/DatabaseUnitTesting/DbAPITestsDAS.cs
2026-04-17 14:55:32 -04:00

210 lines
11 KiB
C#

using DTS.Common.Classes.Hardware;
using DTS.Common.Interface.DataRecorders;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
namespace DatabaseUnitTesting
{
[TestFixture]
public partial class DBAPITests
{
[Test]
public void TestDASGetPrototypesShouldFail()
{
if (!_setup) { Setup(); }
TestLogin();
var connections = DbAPI.DbAPI.Connections.GetActiveConnections();
var hr = DbAPI.DbAPI.DAS.DASGet(null, connections.First(), clientDbVersion, null, "Prototype", out var dbDAS);
Assert.AreNotEqual(0, hr, "DASGet with no user should not return 0");
Assert.IsTrue(null == dbDAS || dbDAS.Length == 0, "No das should be returned when calling DASGet with no user");
hr = DbAPI.DbAPI.DAS.DASGet(_user, null, clientDbVersion, null, "Prototype", out dbDAS);
Assert.AreNotEqual(0, hr, "DASGet with no connection should not return 0");
Assert.IsTrue(null == dbDAS || dbDAS.Length == 0, "No das should be returned when calling DASGet with no connection");
}
[Test]
public void TestDASGetPrototypes()
{
if (!_setup) { Setup(); }
TestLogin();
var connections = DbAPI.DbAPI.Connections.GetActiveConnections();
var hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, null, "Prototype", out var das);
Assert.AreEqual(0, hr, "DASGet Executed");
Assert.IsNotNull(das, "DAS not null");
Assert.IsTrue(das.Length > 0, "DAS prototypes in db");
}
[Test]
public void TestDASInsertAndDeleteShouldFail()
{
if (!_setup) { Setup(); }
TestLogin();
var connections = DbAPI.DbAPI.Connections.GetActiveConnections();
var das = CreateFakeDAS();
//test that insert fails properly
var hr = DbAPI.DbAPI.DAS.DASInsert(null, connections.First(), das);
Assert.AreNotEqual(0, hr, "DASInsert should not return 0 with no user");
hr = DbAPI.DbAPI.DAS.DASInsert(_user, null, das);
Assert.AreNotEqual(0, hr, "DASInsert should not return 0 with no connection");
hr = DbAPI.DbAPI.DAS.DASInsert(_user, connections.First(), null);
Assert.AreNotEqual(0, hr, "DASInsert should not return 0 with no DAS");
//insert so that we can test that delete fails properly
hr = DbAPI.DbAPI.DAS.DASInsert(_user, connections.First(), das);
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, das.SerialNumber, null, out var dbRecord);
//test that delete fails properly
hr = DbAPI.DbAPI.DAS.DASDelete(null, connections.First(), dbRecord[0].DASId, dbRecord[0].SerialNumber, false);
Assert.AreNotEqual(0, hr, "DAS delete without a user should not return 0");
hr = DbAPI.DbAPI.DAS.DASDelete(_user, null, dbRecord[0].DASId, dbRecord[0].SerialNumber, false);
Assert.AreNotEqual(0, hr, "DAS delete without a connection should not return 0");
hr = DbAPI.DbAPI.DAS.DASDelete(_user, connections.First(), -1, null, false);
Assert.AreNotEqual(0, hr, "DAS delete without a DAS should not return 0");
//now finally cleanup
hr = DbAPI.DbAPI.DAS.DASDelete(_user, connections.First(), dbRecord[0].DASId, dbRecord[0].SerialNumber, false);
}
[Test]
public void TestDASInsertAndDelete()
{
if (!_setup) { Setup(); }
TestLogin();
var connections = DbAPI.DbAPI.Connections.GetActiveConnections();
var das = CreateFakeDAS();
var hr = DbAPI.DbAPI.DAS.DASInsert(_user, connections.First(), das);
Assert.AreEqual(0, hr, "DASInsert Executed");
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, das.SerialNumber, null, out var dbRecord);
Assert.AreEqual(0, hr, "DASGet Inserted DAS");
Assert.IsNotNull(dbRecord, "Retrieved das not null");
Assert.AreEqual(1, dbRecord.Length, "1 das was retrieved");
hr = DbAPI.DbAPI.DAS.DASDelete(_user, connections.First(), das.DASId, dbRecord[0].SerialNumber, false);
Assert.AreEqual(0, hr, "DASDelete executed");
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, dbRecord[0].SerialNumber, null, out var dbDAS);
Assert.AreEqual(0, hr, "DASGet executed after delete");
Assert.IsTrue(null == dbDAS || dbDAS.Length < 1, "DAS no longer in db afer delete");
}
[Test]
public void TestDASChannelInsertAndDASDelete()
{
if (!_setup) { Setup(); }
TestLogin();
var connections = DbAPI.DbAPI.Connections.GetActiveConnections();
var das = CreateFakeDAS();
var hr = DbAPI.DbAPI.DAS.DASInsert(_user, connections.First(), das);
Assert.AreEqual(0, hr, "DASInsert Executed");
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, das.SerialNumber, null, out var dbRecord);
Assert.AreEqual(0, hr, "DASGet Inserted DAS");
Assert.IsNotNull(dbRecord, "Retrieved das not null");
Assert.AreEqual(1, dbRecord.Length, "1 das was retrieved");
var channels = CreateFakeChannels(das);
foreach (var channel in channels)
{
IDASChannelDBRecord iCh = channel;
hr = DbAPI.DbAPI.DAS.DASChannelsInsert(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}", ref iCh);
Assert.AreEqual(0, hr, "DASChannelsInsert executed");
}
hr = DbAPI.DbAPI.DAS.DASChannelsGet(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}", out var dbChannels);
Assert.AreEqual(0, hr, "DASChannelsGet executed");
Assert.IsNotNull(dbChannels, "Channels retrieved after insertion");
Assert.AreEqual(dbChannels.Length, channels.Length, "Same # of channels retrieved as inserted");
hr = DbAPI.DbAPI.DAS.DASDelete(_user, connections.First(), das.DASId, dbRecord[0].SerialNumber, false);
Assert.AreEqual(0, hr, "DASDelete executed");
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, dbRecord[0].SerialNumber, null, out var dbDAS);
Assert.AreEqual(0, hr, "DASGet executed after delete");
Assert.IsTrue(null == dbDAS || dbDAS.Length < 1, "DAS no longer in db after delete");
hr = DbAPI.DbAPI.DAS.DASChannelsGet(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}", out var dbChannelsAfterDelete);
Assert.AreEqual(0, hr, "DASChannelsGet after delete das executes");
Assert.IsTrue(null == dbChannelsAfterDelete || 0 == dbChannelsAfterDelete.Length, "No channels remain after das delete");
}
[Test]
public void TestDASChannelsDelete()
{
if (!_setup) { Setup(); }
TestLogin();
var connections = DbAPI.DbAPI.Connections.GetActiveConnections();
var das = CreateFakeDAS();
var hr = DbAPI.DbAPI.DAS.DASInsert(_user, connections.First(), das);
Assert.AreEqual(0, hr, "DASInsert Executed");
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, das.SerialNumber, null, out var dbRecord);
Assert.AreEqual(0, hr, "DASGet Inserted DAS");
Assert.IsNotNull(dbRecord, "Retrieved das not null");
Assert.AreEqual(1, dbRecord.Length, "1 das was retrieved");
var channels = CreateFakeChannels(das);
foreach (var channel in channels)
{
IDASChannelDBRecord iCh = channel;
hr = DbAPI.DbAPI.DAS.DASChannelsInsert(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}", ref iCh);
Assert.AreEqual(0, hr, "DASChannelsInsert executed");
}
hr = DbAPI.DbAPI.DAS.DASChannelsGet(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}", out var dbChannels);
Assert.AreEqual(0, hr, "DASChannelsGet executed");
Assert.IsNotNull(dbChannels, "Channels retrieved after insertion");
Assert.AreEqual(dbChannels.Length, channels.Length, "Same # of channels retrieved as inserted");
hr = DbAPI.DbAPI.DAS.DASChannelsDelete(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}");
Assert.AreEqual(0, hr, "DASChannelsDelete executes");
hr = DbAPI.DbAPI.DAS.DASChannelsGet(_user, connections.First(), $"{das.SerialNumber}_{das.DASType}", out var dbChannelsAfterDelete);
Assert.AreEqual(0, hr, "DASChannelsGet after daschannelsdelete executes");
Assert.IsTrue(null == dbChannelsAfterDelete || 0 == dbChannelsAfterDelete.Length, "No channels remain after daschannelsdelete");
hr = DbAPI.DbAPI.DAS.DASDelete(_user, connections.First(), das.DASId, dbRecord[0].SerialNumber, false);
Assert.AreEqual(0, hr, "DASDelete executed");
hr = DbAPI.DbAPI.DAS.DASGet(_user, connections.First(), clientDbVersion, dbRecord[0].SerialNumber, null, out var dbDAS);
Assert.AreEqual(0, hr, "DASGet executed after delete");
Assert.IsTrue(null == dbDAS || dbDAS.Length < 1, "DAS no longer in db after delete");
}
private DASChannelDBRecord[] CreateFakeChannels(DASDBRecord das)
{
var list = new List<DASChannelDBRecord>();
for (var i = 0; i < das.Channels; i++)
{
var channel = new DASChannelDBRecord();
channel.ChannelIdx = i;
channel.DaschannelId = i;
channel.DASDisplayOrder = i;
channel.Dasid = das.DASId;
channel.HardwareId = $"{das.SerialNumber}_{das.DASType}";
channel.LocalOnly = false;
channel.ModuleArrayIndex = 0;
channel.ModuleSerialNumber = "FakeMod0";
list.Add(channel);
}
return list.ToArray();
}
private DASDBRecord CreateFakeDAS()
{
var das = new DASDBRecord();
das.SerialNumber = Guid.NewGuid().ToString().Substring(0, 10);
das.Position = "";
das.LastModifiedBy = "";
das.LastModified = DateTime.Now;
das.LastUsed = DateTime.Now;
das.LastUsedBy = "NUNIT";
das.DASType = 18;
das.ChannelTypes = new[] { 1, 2, 3 };
das.Channels = 3;
das.Position = "";
return das;
}
}
}