public async Task StopPath1() { var dbConnection = new UnitTestDbConnection(); Database.SetInitializer(new CreateFreshDbInitializer()); //Arrange LogEntry logEntry = null; var log = new StubIFeedback <LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return(Task.FromResult(0)); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), dbConnection); //Act await tm.StartAsync(cts.Token); await tm.StopAsync(cts.Token); //Assert Assert.IsTrue(logEntry.Level == LogEntryLevel.Info); Assert.IsTrue(logEntry.Message.Contains("stopped"), "Manger not started or word started not in the log."); }
public async Task StopPath2() { var dbConnection = new UnitTestDbConnection(); Database.SetInitializer(new CreateFreshDbInitializer()); //Arrange LogEntry logEntry = null; var log = new StubIFeedback <LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return(Task.FromResult(0)); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), dbConnection); //Act await tm.StopAsync(cts.Token); //Assert Assert.AreEqual(logEntry.Level, LogEntryLevel.Warn); }
public void ConstructorNoNullArgsTest() { //arrange, act var tm = new TriggerRunner(new StubIFeedback <LogEntry>(), new StubICommandProcessor(), new UnitTestDbConnection()); //Assert Assert.IsNotNull(tm); }
public void ConstructorNoNullArgsTest() { //arrange, act var tm = new TriggerRunner(new StubIFeedback<LogEntry>(), new StubICommandProcessor(), new ZvsEntityContextConnection()); //Assert Assert.IsNotNull(tm); }
public void ConstructorNullArg6Test() { //arrange var fb = new StubIFeedback <LogEntry>(); var am = new StubIAdapterManager(); var pm = new StubIPluginManager(); var connection = new UnitTestDbConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); //act new ZvsEngine(fb, am, pm, connection, tr, null); //assert - throws exception }
public void ConstructorNullArg3Test() { //arrange var fb = new StubIFeedback <LogEntry>(); var am = new StubIAdapterManager(); var connection = new UnitTestDbConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); var st = new StubScheduledTaskRunner(fb, new StubICommandProcessor(), connection, new StubITimeProvider()); //act new ZvsEngine(fb, am, null, connection, tr, st); //assert - throws exception }
public void ConstructorNullArg3Test() { //arrange var fb = new StubIFeedback<LogEntry>(); var am = new StubIAdapterManager(); var connection = new StubIEntityContextConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); var st = new StubScheduledTaskRunner(fb, new StubICommandProcessor(), connection, new StubITimeProvider()); //act new ZvsEngine(fb, am, null, connection, tr, st); //assert - throws exception }
public void ConstructorNullArg2Test() { //arrange var fb = new StubIFeedback<LogEntry>(); var pm = new StubIPluginManager(); var connection = new UnitTestDbConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); var st = new StubScheduledTaskRunner(fb, new StubICommandProcessor(), connection, new StubITimeProvider()); //act new ZvsEngine(fb, null, pm, connection, tr, st); //assert - throws exception }
public void ConstructorTest() { //arrange var fb = new StubIFeedback <LogEntry>(); var am = new StubIAdapterManager(); var pm = new StubIPluginManager(); var connection = new UnitTestDbConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); var st = new StubScheduledTaskRunner(fb, new StubICommandProcessor(), connection, new StubITimeProvider()); //act var engine = new ZvsEngine(fb, am, pm, connection, tr, st); //assert Assert.IsNotNull(engine); }
public async Task StartAsyncTest() { //arrange var dbConnection = new UnitTestDbConnection(); Database.SetInitializer(new CreateFreshDbInitializer()); var logEntries = new List <LogEntry>(); var log = new StubIFeedback <LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntries.Add(e); return(Task.FromResult(0)); } }; var isAdapterManagerInitialized = false; var isPluginManagerInitialized = false; var am = new StubIAdapterManager { StartAsyncCancellationToken = async ct => isAdapterManagerInitialized = true }; var pm = new StubIPluginManager { StartAsyncCancellationToken = async ct => isPluginManagerInitialized = true }; var tr = new TriggerRunner(log, new StubICommandProcessor(), dbConnection); var st = new ScheduledTaskRunner(log, new StubICommandProcessor(), dbConnection, new CurrentTimeProvider()); var engine = new ZvsEngine(log, am, pm, dbConnection, tr, st); //Act await engine.StartAsync(CancellationToken.None); //assert Assert.IsNotNull(engine); Assert.IsTrue(isAdapterManagerInitialized, "Adapter manager was not started!"); Assert.IsTrue(isPluginManagerInitialized, "Plugin manager was not started!"); Assert.IsTrue(engine.ScheduledTaskRunner.IsRunning, "Scheduled Task Runner was not started!"); Assert.IsTrue(engine.TriggerRunner.IsRunning, "Trigger Runner was not started!"); }
public async Task ActivateTriggerAsyncTest() { //Arrange LogEntry logEntry = null; var log = new StubIFeedback <LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return(Task.FromResult(0)); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), new UnitTestDbConnection()); //Act await tm.ActivateTriggerAsync(0, cts.Token); //Assert Assert.IsTrue(logEntry == null); }
public async Task StartPath1() { //Arrange LogEntry logEntry = null; var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return Task.FromResult(0); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), new ZvsEntityContextConnection()); //Act await tm.StartAsync(cts.Token); //Assert Assert.IsTrue(logEntry.Level == LogEntryLevel.Info); Assert.IsTrue(logEntry.Message.Contains("started"), "Manger not started or word started not in the log."); }
public async Task StartPath2() { //Arrange LogEntry logEntry = null; var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return Task.FromResult(0); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), new UnitTestDbConnection()); //Act await tm.StartAsync(cts.Token); await tm.StartAsync(cts.Token); //Assert Assert.IsTrue(logEntry.Level == LogEntryLevel.Warn); }
public async Task StartAsyncTest() { //arrange var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "engine-StartAsyncTest" }; Database.SetInitializer(new CreateFreshDbInitializer()); var logEntries = new List<LogEntry>(); var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntries.Add(e); return Task.FromResult(0); } }; var isAdapterManagerInitialized = false; var isPluginManagerInitialized = false; var am = new StubIAdapterManager { StartAsyncCancellationToken = async (ct) =>isAdapterManagerInitialized = true }; var pm = new StubIPluginManager { StartAsyncCancellationToken = async (ct) => isPluginManagerInitialized = true }; var tr = new TriggerRunner(log, new StubICommandProcessor(), dbConnection); var st = new ScheduledTaskRunner(log, new StubICommandProcessor(), dbConnection,new CurrentTimeProvider()); var engine = new ZvsEngine(log, am, pm, dbConnection, tr, st); //Act await engine.StartAsync(CancellationToken.None); //assert Assert.IsNotNull(engine); Assert.IsTrue(isAdapterManagerInitialized, "Adapter manager was not started!"); Assert.IsTrue(isPluginManagerInitialized, "Plugin manager was not started!"); Assert.IsTrue(engine.ScheduledTaskRunner.IsRunning, "Scheduled Task Runner was not started!"); Assert.IsTrue(engine.TriggerRunner.IsRunning, "Trigger Runner was not started!"); }
public void ConstructorTest() { //arrange var fb = new StubIFeedback<LogEntry>(); var am = new StubIAdapterManager(); var pm = new StubIPluginManager(); var connection = new StubIEntityContextConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); var st = new StubScheduledTaskRunner(fb, new StubICommandProcessor(), connection, new StubITimeProvider()); //act var engine = new ZvsEngine(fb, am, pm, connection, tr, st); //assert Assert.IsNotNull(engine); }
public void ConstructorNullArg6Test() { //arrange var fb = new StubIFeedback<LogEntry>(); var am = new StubIAdapterManager(); var pm = new StubIPluginManager(); var connection = new StubIEntityContextConnection(); var tr = new TriggerRunner(fb, new StubICommandProcessor(), connection); //act new ZvsEngine(fb, am, pm, connection, tr, null); //assert - throws exception }
public async Task LessThanInvalidValuesTest() { //Arrange var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "Trigger-LessThanInvalidValuesTest" }; Database.SetInitializer(new CreateFreshDbInitializer()); var logEntries = new List<LogEntry>(); var ranstoredCommands = new List<int>(); var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntries.Add(e); return Task.FromResult(0); } }; var commandProcessor = new StubICommandProcessor { RunCommandAsyncNullableOfInt32StringStringCancellationToken = ( commandId, argument, argument2, cancellationToken) => { if (commandId.HasValue) ranstoredCommands.Add(commandId.Value); return Task.FromResult(Result.ReportSuccess()); } }; Database.SetInitializer(new CreateFreshDbInitializer()); var cts = new CancellationTokenSource(); var triggerManager = new TriggerRunner(log, commandProcessor, dbConnection); await triggerManager.StartAsync(cts.Token); var cmd = new Command(); var dv = new DeviceValue { Value = "first value", ValueType = DataType.STRING, Triggers = new ObservableCollection<DeviceValueTrigger> { new DeviceValueTrigger { Name = "trigger1", IsEnabled = true, Operator = TriggerOperator.LessThan, Value = "a", Command = cmd } } }; var device = UnitTesting.CreateFakeDevice(); device.Values.Add(dv); using (var context = new ZvsContext(dbConnection)) { context.Devices.Add(device); var r = await context.TrySaveChangesAsync(cts.Token); Assert.IsFalse(r.HasError, r.Message); dv.Value = "3"; //Act var r2 = await context.TrySaveChangesAsync(cts.Token); Assert.IsFalse(r2.HasError, r2.Message); } await Task.Delay(700, cts.Token); await triggerManager.StopAsync(cts.Token); //Assert Assert.IsTrue(logEntries.Any(o => o.Level == LogEntryLevel.Warn), "Expected some warning log entries"); Assert.IsTrue(ranstoredCommands.Count == 0, "Trigger runner did not run the correct amount of commands."); }
public async Task StopPath2() { var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "TriggerStopPath2" }; Database.SetInitializer(new CreateFreshDbInitializer()); //Arrange LogEntry logEntry = null; var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return Task.FromResult(0); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), dbConnection); //Act await tm.StopAsync(cts.Token); //Assert Assert.AreEqual(logEntry.Level, LogEntryLevel.Warn); }
public async Task StopPath1() { var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "TriggerStopPath1" }; Database.SetInitializer(new CreateFreshDbInitializer()); //Arrange LogEntry logEntry = null; var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return Task.FromResult(0); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), dbConnection); //Act await tm.StartAsync(cts.Token); await tm.StopAsync(cts.Token); //Assert Assert.IsTrue(logEntry.Level == LogEntryLevel.Info); Assert.IsTrue(logEntry.Message.Contains("stopped"), "Manger not started or word started not in the log."); }
public async Task QuickFireTriggerTest() { var dbConnection = new StubIEntityContextConnection { NameOrConnectionStringGet = () => "Trigger-QuickFireTriggerTest" }; Database.SetInitializer(new CreateFreshDbInitializer()); var logEntries = new List<LogEntry>(); var ranstoredCommands = new List<int>(); //Arrange var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntries.Add(e); return Task.FromResult(0); } }; var commandProcessor = new StubICommandProcessor { RunCommandAsyncNullableOfInt32StringStringCancellationToken = ( commandId, argument, argument2, cancellationToken) => { if (commandId.HasValue) ranstoredCommands.Add(commandId.Value); return Task.FromResult(Result.ReportSuccess()); } }; var cts = new CancellationTokenSource(); var triggerManager = new TriggerRunner(log, commandProcessor, dbConnection); await triggerManager.StartAsync(cts.Token); var cmd = new Command(); var dv = new DeviceValue { Value = "first value", ValueType = DataType.STRING, Triggers = new ObservableCollection<DeviceValueTrigger> { new DeviceValueTrigger { Name = "trigger1", IsEnabled = true, Operator = TriggerOperator.EqualTo, Value = "some unique value", Command = cmd } } }; var device = UnitTesting.CreateFakeDevice(); device.Values.Add(dv); //Act using (var context = new ZvsContext(dbConnection)) { context.Devices.Add(device); await context.TrySaveChangesAsync(cts.Token); dv.Value = "Not It!"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "not this one"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "some unique value"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "not it"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "some unique value"; await context.TrySaveChangesAsync(cts.Token); Console.WriteLine(context.DeviceValueTriggers.Count()); } await Task.Delay(700, cts.Token); await triggerManager.StopAsync(cts.Token); //Assert Assert.IsTrue(logEntries.All(o => o.Level == LogEntryLevel.Info), "Expected only info type log entries"); Assert.IsTrue(ranstoredCommands.Count == 2, "Trigger runner did not run the correct amount of commands."); Assert.IsTrue(ranstoredCommands.All(o => o == cmd.Id), "Scheduled task runner did not run the correct command."); }
public async Task ActivateTriggerAsyncTest() { //Arrange LogEntry logEntry = null; var log = new StubIFeedback<LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntry = e; return Task.FromResult(0); } }; var cts = new CancellationTokenSource(); var tm = new TriggerRunner(log, new StubICommandProcessor(), new ZvsEntityContextConnection()); //Act await tm.ActivateTriggerAsync(0, cts.Token); //Assert Assert.IsTrue(logEntry == null); }
protected async override void OnStartup(StartupEventArgs e) { var adapterLoader = new AdapterLoader(); var result = await adapterLoader.FindAdaptersAsync("Adapters", Cts.Token); if (result.HasError) { await Log.ReportErrorAsync(result.Message, Cts.Token); } var adapterManager = new Processor.AdapterManager(result.Adapters, EntityContextConnection, new DatabaseFeedback(EntityContextConnection)); var pluginLoader = new PluginLoader(); var pluginFindResult = await pluginLoader.FindPluginsAsync("plugins", Cts.Token); if (pluginFindResult.HasError) { await Log.ReportErrorAsync(pluginFindResult.Message, Cts.Token); } var pluginManager = new Processor.PluginManager(pluginFindResult.Plugins, EntityContextConnection, new DatabaseFeedback(EntityContextConnection), adapterManager); var triggerRunner = new TriggerRunner(new DatabaseFeedback(EntityContextConnection), new CommandProcessor(adapterManager, EntityContextConnection, new DatabaseFeedback(EntityContextConnection)), EntityContextConnection); var scheduledTaskRunner = new ScheduledTaskRunner(new DatabaseFeedback(EntityContextConnection), new CommandProcessor(adapterManager, EntityContextConnection, new DatabaseFeedback(EntityContextConnection)), EntityContextConnection, new CurrentTimeProvider()); ZvsEngine = new ZvsEngine(new DatabaseFeedback(EntityContextConnection), adapterManager, pluginManager, EntityContextConnection, triggerRunner, scheduledTaskRunner); var splashscreen = new SplashScreen(); splashscreen.SetLoadingTextFormat("Starting {0}", Utils.ApplicationNameAndVersion); splashscreen.Show(); await Task.Delay(10); #if DEBUG var sw = new Stopwatch(); sw.Start(); #endif #if (RELEASE) AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); #endif using (var context = new ZvsContext(new ZvsEntityContextConnection())) { //Install Program Options var option = await context.ProgramOptions.FirstOrDefaultAsync(o => o.UniqueIdentifier == "LOGDIRECTION", Cts.Token); if (option == null) { var registerLogDirectionResult = await ProgramOption.TryAddOrEditAsync(context, new ProgramOption { UniqueIdentifier = "LOGDIRECTION", Value = "Descending" }, Cts.Token); if (registerLogDirectionResult.HasError) { await Log.ReportErrorAsync(registerLogDirectionResult.Message, Cts.Token); } } } //using (var context = new ZvsContext(new ZvsEntityContextConnection())) //{ // var adapter = CreateFakeAdapter(); // context.Devices.Add(new Device // { // Name = "Light Switch", // Location = "Living Room", // Type = new DeviceType // { // Name = "Switch Device Type", // UniqueIdentifier = "Switch", // Adapter = adapter // } // }); // context.Devices.Add(new Device // { // Name = "Main Controller", // Location = "Utility", // Type = new DeviceType // { // Name = "Controller Type", // UniqueIdentifier = "Controller", // Adapter = adapter // } // }); // context.Devices.Add(new Device // { // Name = "Can Lights", // Location = "Kitchen", // Type = new DeviceType // { // Name = "Dimmer Type", // UniqueIdentifier = "Dimmer", // Adapter = adapter // } // }); // context.Devices.Add(new Device // { // Name = "Thermostat", // Location = "Kitchen", // Type = new DeviceType // { // Name = "Thermostat Type", // UniqueIdentifier = "Thermostat", // Adapter = adapter // } // }); // context.Devices.Add(new Device // { // Name = "Front Door", // Location = "Entry", // Type = new DeviceType // { // Name = "Doorlock Type", // UniqueIdentifier = "Doorlock", // Adapter = adapter // } // }); // var sensorDt = new DeviceType // { // Name = "Sensor Type", // UniqueIdentifier = "Sensor", // Adapter = adapter // }; // var device = new Device // { // Name = "Motion Sensor", // Location = "Entry", // Type = sensorDt, // }; // var value = new DeviceValue // { // Name = "Level", // ValueType = DataType.BYTE, // Value = "255" // }; // device.Values.Add(value); // context.Devices.Add(device); // //context.SaveChanges(); //} #region Create Logger await Log.ReportInfoFormatAsync(Cts.Token, "Init Complete ({0})", (Utils.DebugMode ? "Debug Mode" : "Release Mode")); #if DEBUG await Log.ReportInfoAsync("--------------DUMPING ENVIRONMENT--------------", Cts.Token); await Log.ReportInfoFormatAsync(Cts.Token, "AppDataPath:{0}", Utils.AppDataPath); await Log.ReportInfoFormatAsync(Cts.Token, "AppPath:{0}", Utils.AppPath); await Log.ReportInfoFormatAsync(Cts.Token, "ApplicationNameAndVersion:{0}", Utils.ApplicationNameAndVersion); await Log.ReportInfoFormatAsync(Cts.Token, "ApplicationVersionLong:{0}", Utils.ApplicationVersionLong); await Log.ReportInfoFormatAsync(Cts.Token, "HasDotNet45:{0}", Utils.HasDotNet45()); await Log.ReportInfoFormatAsync(Cts.Token, "HasSQLCE4:{0}", Utils.HasSQLCE4()); await Log.ReportInfoFormatAsync(Cts.Token, "CommandLine:{0}", Environment.CommandLine); await Log.ReportInfoFormatAsync(Cts.Token, "CurrentDirectory:{0}", Environment.CurrentDirectory); await Log.ReportInfoFormatAsync(Cts.Token, "Is64BitOperatingSystem:{0}", Environment.Is64BitOperatingSystem); await Log.ReportInfoFormatAsync(Cts.Token, "Is64BitProcess:{0}", Environment.Is64BitProcess); await Log.ReportInfoFormatAsync(Cts.Token, "MachineName:{0}", Environment.MachineName); await Log.ReportInfoFormatAsync(Cts.Token, "OSVersion:{0}", Environment.OSVersion); await Log.ReportInfoFormatAsync(Cts.Token, "ProcessorCount:{0}", Environment.ProcessorCount); await Log.ReportInfoFormatAsync(Cts.Token, "UserDomainName:{0}", Environment.UserDomainName); await Log.ReportInfoFormatAsync(Cts.Token, "UserInteractive:{0}", Environment.UserInteractive); await Log.ReportInfoFormatAsync(Cts.Token, "UserName:{0}", Environment.UserName); await Log.ReportInfoFormatAsync(Cts.Token, "Version:{0}", Environment.Version); await Log.ReportInfoFormatAsync(Cts.Token, "WorkingSet:{0}", Environment.WorkingSet); await Log.ReportInfoAsync("--------------/DUMPING ENVIRONMENT--------------", Cts.Token); #endif AppDomain.CurrentDomain.SetData("DataDirectory", Utils.AppDataPath); #endregion #region Checking for other running instances await Task.Delay(10); splashscreen.SetLoadingTextFormat("Checking for other running instances"); await Task.Delay(10); try { _zvsMutex = Mutex.OpenExisting("zVirtualScenesGUIMutex"); ProgramHasToClosePrompt(Utils.ApplicationName + " can't start because it is already running"); } catch { //the specified mutex doesn't exist, we should create it _zvsMutex = new Mutex(true, "zVirtualScenesGUIMutex"); //these names need to match. } #endregion #region Check for .Net Framework 4.5 await Task.Delay(10); splashscreen.SetLoadingTextFormat("Checking for .Net framework 4.5"); await Task.Delay(10); if (!Utils.HasDotNet45()) { ProgramHasToClosePrompt( $"Microsoft .NET Framework 4.5 Full/Extended is required to run {Utils.ApplicationName}. \r\n\r\nPlease install Microsoft .NET Framework 4.5 and re-launch the application."); } #endregion #region Checking for Microsoft® SQL Server® Compact 4.0 SP1 await Task.Delay(10); splashscreen.SetLoadingTextFormat("Checking for Microsoft® SQL Server® Compact 4.0 SP1"); await Task.Delay(10); if (!Utils.HasSQLCE4()) { ProgramHasToClosePrompt( $"Microsoft® SQL Server® Compact 4.0 SP1 is required to run {Utils.ApplicationName}. \r\n\r\nPlease install Microsoft® SQL Server® Compact 4.0 SP1 and re-launch the application."); } #endregion #region Initializing and upgrading local database await Task.Delay(10); splashscreen.SetLoadingTextFormat("Initializing and migrating database"); await Task.Delay(10); await Task.Run(() => { using (var context = new ZvsContext()) { var configuration = new Configuration(); var migrator = new DbMigrator(configuration); migrator.Update(); context.Database.Initialize(true); } }); #endregion //TODO: Check for VCRedist #region Start zvsEngine Services await Task.Delay(10); splashscreen.SetLoadingTextFormat("Starting zvsEngine services"); await Task.Delay(10); //Initialize the zvsEngine try { await Task.Run(() => ZvsEngine.StartAsync(Cts.Token)); } catch (Exception ex) { ProgramHasToClosePrompt(ex.Message); } #endregion //Create taskbar Icon TaskbarIcon = new ZVSTaskbarIcon(); TaskbarIcon.ShowBalloonTip(Utils.ApplicationName, Utils.ApplicationNameAndVersion + " started", 3000, ToolTipIcon.Info); //close Splash Screen splashscreen.Close(); #if DEBUG sw.Stop(); Debug.WriteLine("App Startup initialized in {0}", sw.Elapsed.ToString() as object); #endif base.OnStartup(e); }
public async Task ContraLessThanTest() { //Arrange var dbConnection = new UnitTestDbConnection(); Database.SetInitializer(new CreateFreshDbInitializer()); var logEntries = new List <LogEntry>(); var ranstoredCommands = new List <int>(); var log = new StubIFeedback <LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntries.Add(e); return(Task.FromResult(0)); } }; var commandProcessor = new StubICommandProcessor { RunCommandAsyncNullableOfInt32StringStringCancellationToken = (commandId, argument, argument2, cancellationToken) => { if (commandId.HasValue) { ranstoredCommands.Add(commandId.Value); } return(Task.FromResult(Result.ReportSuccess())); } }; Database.SetInitializer(new CreateFreshDbInitializer()); var cts = new CancellationTokenSource(); var triggerManager = new TriggerRunner(log, commandProcessor, dbConnection); await triggerManager.StartAsync(cts.Token); var cmd = new Command(); var dv = new DeviceValue { Value = "first value", ValueType = DataType.STRING, Triggers = new ObservableCollection <DeviceValueTrigger> { new DeviceValueTrigger { Name = "trigger1", IsEnabled = true, Operator = TriggerOperator.LessThan, Value = "1", Command = cmd } } }; var device = UnitTesting.CreateFakeDevice(); device.Values.Add(dv); using (var context = new ZvsContext(dbConnection)) { context.Devices.Add(device); var r = await context.TrySaveChangesAsync(cts.Token); Assert.IsFalse(r.HasError, r.Message); dv.Value = "3"; //Act var r2 = await context.TrySaveChangesAsync(cts.Token); Assert.IsFalse(r2.HasError, r2.Message); } await Task.Delay(700, cts.Token); await triggerManager.StopAsync(cts.Token); //Assert Assert.IsTrue(logEntries.All(o => o.Level != LogEntryLevel.Error), "Expected no error log entries"); Assert.IsTrue(ranstoredCommands.Count == 0, "Trigger runner did not run the correct amount of commands."); }
public async Task QuickFireTriggerTest() { var dbConnection = new UnitTestDbConnection(); Database.SetInitializer(new CreateFreshDbInitializer()); var logEntries = new List <LogEntry>(); var ranstoredCommands = new List <int>(); //Arrange var log = new StubIFeedback <LogEntry> { ReportAsyncT0CancellationToken = (e, c) => { Console.WriteLine(e.ToString()); logEntries.Add(e); return(Task.FromResult(0)); } }; var commandProcessor = new StubICommandProcessor { RunCommandAsyncNullableOfInt32StringStringCancellationToken = (commandId, argument, argument2, cancellationToken) => { if (commandId.HasValue) { ranstoredCommands.Add(commandId.Value); } return(Task.FromResult(Result.ReportSuccess())); } }; var cts = new CancellationTokenSource(); var triggerManager = new TriggerRunner(log, commandProcessor, dbConnection); await triggerManager.StartAsync(cts.Token); var cmd = new Command(); var dv = new DeviceValue { Value = "first value", ValueType = DataType.STRING, Triggers = new ObservableCollection <DeviceValueTrigger> { new DeviceValueTrigger { Name = "trigger1", IsEnabled = true, Operator = TriggerOperator.EqualTo, Value = "some unique value", Command = cmd } } }; var device = UnitTesting.CreateFakeDevice(); device.Values.Add(dv); //Act using (var context = new ZvsContext(dbConnection)) { context.Devices.Add(device); await context.TrySaveChangesAsync(cts.Token); dv.Value = "Not It!"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "not this one"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "some unique value"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "not it"; await context.TrySaveChangesAsync(cts.Token); dv.Value = "some unique value"; await context.TrySaveChangesAsync(cts.Token); Console.WriteLine(context.DeviceValueTriggers.Count()); } await Task.Delay(700, cts.Token); await triggerManager.StopAsync(cts.Token); //Assert Assert.IsTrue(logEntries.All(o => o.Level == LogEntryLevel.Info), "Expected only info type log entries"); Assert.IsTrue(ranstoredCommands.Count == 2, "Trigger runner did not run the correct amount of commands."); Assert.IsTrue(ranstoredCommands.All(o => o == cmd.Id), "Scheduled task runner did not run the correct command."); }