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(); 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; } } }