public void TestRisingEdge() { //Test for A1 on rising edge of 0.5 _test.Reset(); var signal = new Signal() { Name = "A1" }; var statement = new LogialAnalyzerTrigger.Statement.RisingEdge(signal, 0.5); var triggerStateForkedStatement = new TriggerStateForkedState(statement); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); var triggerstate = new TriggerState(); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement); var trigger = new Trigger(); trigger.AddTriggerState(triggerstate); var engine = new TriggerEngine(); engine.AddTrigger(trigger); engine.TriggeredUnitTest += engine_Triggered; engine.LogValueChange(signal, 0, DateTime.Now.Ticks); Assert.IsFalse(_test.WaitOne(10)); engine.LogValueChange(signal, 1, DateTime.Now.Ticks); Assert.IsTrue(_test.WaitOne(10)); }
public async Task TriggerEngineRunsAndOnlyLogsAvailabilityOncePerSystemUponAvailableStateAsync() { var loggerFactory = new TestLoggerFake(); var environment = new Mock <ICromwellOnAzureEnvironment>(); var logger = loggerFactory.CreateLogger <TriggerEngineTests>(); var isStorageAvailable = false; var isCromwellAvailable = false; environment.Setup(x => x.ProcessAndAbortWorkflowsAsync()).Returns(() => { logger.LogInformation("ProcessAndAbortWorkflowsAsync"); return(Task.CompletedTask); }); environment.Setup(x => x.UpdateExistingWorkflowsAsync()).Returns(() => { logger.LogInformation("UpdateExistingWorkflowsAsync"); return(Task.CompletedTask); }); environment.Setup(x => x.IsAzureStorageAvailableAsync()).Returns(() => { logger.LogInformation("IsAzureStorageAvailableAsync"); return(Task.FromResult(isStorageAvailable)); }); environment.Setup(x => x.IsCromwellAvailableAsync()).Returns(() => { logger.LogInformation("IsCromwellAvailableAsync"); return(Task.FromResult(isCromwellAvailable)); }); var engine = new TriggerEngine(loggerFactory, environment.Object, TimeSpan.FromMilliseconds(25), TimeSpan.FromMilliseconds(25)); var task = Task.Run(() => engine.RunAsync()); await Task.Delay(TimeSpan.FromSeconds(2)); isStorageAvailable = true; isCromwellAvailable = true; await Task.Delay(TimeSpan.FromSeconds(2)); isStorageAvailable = false; isCromwellAvailable = false; await Task.Delay(TimeSpan.FromSeconds(2)); isStorageAvailable = true; isCromwellAvailable = true; await Task.Delay(TimeSpan.FromSeconds(2)); var lines = loggerFactory.TestLogger.LogLines; var availableLines = lines.Where(line => line.Contains("is available", StringComparison.OrdinalIgnoreCase)).ToList(); Console.WriteLine($"availableLines.Count: {availableLines.Count}"); foreach (var line in availableLines) { Console.WriteLine(line); } Assert.IsTrue(availableLines.Count == 4); }
public MainForm() { InitializeComponent(); toolbar.Renderer = new ToolStripOverride(); scriptEngine = new ScriptEngine(); scriptBS.DataSource = scriptEngine; ScriptCurrentChanged(null, null); triggerEngine = new TriggerEngine(); triggerBS.DataSource = triggerEngine; }
public void TestStatemetnCollectionWithOneStatementComparingSignals() { //If: A1 == A2 && A2 < 5 Then: Trigger _test.Reset(); var signal = new Signal() { Name = "A1" }; var signal2 = new Signal() { Name = "A2" }; var statement = new LogialAnalyzerTrigger.Statement.Equals(signal, signal2); var statemetn2 = new LogialAnalyzerTrigger.Statement.LessThen(signal2, 5); var statemetnCollection = new LogialAnalyzerTrigger.Statement.StatementCollection(); statemetnCollection.AddStatement(statement, LogialAnalyzerTrigger.Statement.LogicalOperators.First); statemetnCollection.AddStatement(statemetn2, LogialAnalyzerTrigger.Statement.LogicalOperators.And); var triggerStateForkedStatement = new TriggerStateForkedState(statemetnCollection); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); var triggerstate = new TriggerState(); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement); var trigger = new Trigger(); trigger.AddTriggerState(triggerstate); var engine = new TriggerEngine(); engine.AddTrigger(trigger); engine.TriggeredUnitTest += engine_Triggered; engine.LogValueChange(signal, 2, DateTime.Now.Ticks); engine.LogValueChange(signal2, 2, DateTime.Now.Ticks); Assert.IsTrue(_test.WaitOne(10)); }
public void TestForkedState() { //IF: A1 == 1 Then Trigger //ElseIF: A1 == 0 Then Trigger _test.Reset(); var signal = new Signal() { Name = "A1" }; var statement = new LogialAnalyzerTrigger.Statement.Equals(signal, 1); var statemetn2 = new LogialAnalyzerTrigger.Statement.Equals(signal, 0); var triggerStateForkedStatement = new TriggerStateForkedState(statement); var triggerStateForkedStatement2 = new TriggerStateForkedState(statemetn2); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); triggerStateForkedStatement2.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); var triggerstate = new TriggerState(); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement2); var trigger = new Trigger(); trigger.AddTriggerState(triggerstate); var engine = new TriggerEngine(); engine.AddTrigger(trigger); engine.TriggeredUnitTest += engine_Triggered; engine.LogValueChange(signal, 1, DateTime.Now.Ticks); Assert.IsTrue(_test.WaitOne(10)); }
public void TestEqualsToAnotherSignalNotInOrder() { //Test for A1 == 0 _test.Reset(); var signal = new Signal() { Name = "A1" }; var signal2 = new Signal() { Name = "A2" }; var statement = new LogialAnalyzerTrigger.Statement.Equals(signal, signal2); var triggerStateForkedStatement = new TriggerStateForkedState(statement); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); var triggerstate = new TriggerState(); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement); var trigger = new Trigger(); trigger.AddTriggerState(triggerstate); var engine = new TriggerEngine(); engine.AddTrigger(trigger); engine.TriggeredUnitTest += engine_Triggered; engine.LogValueChange(signal2, 0, DateTime.Now.Ticks); engine.LogValueChange(signal, 0, DateTime.Now.Ticks); Assert.IsTrue(_test.WaitOne(10)); }
public void TestTimeStatement3() { /*State1: * IF: Signal1 == 0 * Then: 1. StartTimer 2.GotoNext * * State2: * If: Signal2 == 2 && Timer < 500ms * Then: Trigger * ElseIf: Timer > 500ms * Then: GotoFirst */ _test.Reset(); var signal = new Signal() { Name = "A1" }; var signal2 = new Signal() { Name = "A2" }; var statement = new LogialAnalyzerTrigger.Statement.Equals(signal, 0); var triggerStateForkedStatement = new TriggerStateForkedState(statement); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.StartTimer); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.GotoNextState); var triggerstate = new TriggerState(); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement); var statement2 = new LogialAnalyzerTrigger.Statement.Equals(signal2, 2); var statement3 = new LogialAnalyzerTrigger.Statement.StatementTimeLessThen(500); var statement4 = new LogialAnalyzerTrigger.Statement.StatementCollection(); statement4.AddStatement(statement2, LogialAnalyzerTrigger.Statement.LogicalOperators.First); statement4.AddStatement(statement3, LogialAnalyzerTrigger.Statement.LogicalOperators.And); var statement5 = new LogialAnalyzerTrigger.Statement.StatementTimeLargerThen(500); var foredstatement2 = new TriggerStateForkedState(statement4); foredstatement2.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); var forkedStatemetn3 = new TriggerStateForkedState(statement5); forkedStatemetn3.AddTriggerStateThenOperations(TriggerStateThenOperations.GotoFirsState); var triggerstate2 = new TriggerState(); triggerstate2.AddTriggerStateForkedStatement(foredstatement2); triggerstate2.AddTriggerStateForkedStatement(forkedStatemetn3); var trigger = new Trigger(); trigger.AddTriggerState(triggerstate); trigger.AddTriggerState(triggerstate2); var engine = new TriggerEngine(); engine.AddTrigger(trigger); engine.TriggeredUnitTest += engine_Triggered; //The time the first signal changes var firstSignalTimestamp = DateTime.Now.Ticks; // The trigger will jump to state two! engine.LogValueChange(signal, 0, firstSignalTimestamp); Assert.IsFalse(_test.WaitOne(10)); // Signal 2 will change 600 ms after signal1 engine.LogValueChange(signal2, 1, firstSignalTimestamp + 200); Assert.IsFalse(_test.WaitOne(10)); engine.LogValueChange(signal2, 2, firstSignalTimestamp + 600); Assert.IsFalse(_test.WaitOne(10)); // The trigger will jump back to state1 since the time excseeded 500ms engine.LogValueChange(signal, 2, firstSignalTimestamp); Assert.IsFalse(_test.WaitOne(10)); //New time for the signal1 signalchange firstSignalTimestamp = DateTime.Now.Ticks; engine.LogValueChange(signal, 1, firstSignalTimestamp); Assert.IsFalse(_test.WaitOne(10)); //New time for the signal1 signalchange //Will Jump to state2 firstSignalTimestamp = DateTime.Now.Ticks; engine.LogValueChange(signal, 0, firstSignalTimestamp); Assert.IsFalse(_test.WaitOne(10)); // Signal 2 will change 200 ms after signal1 engine.LogValueChange(signal2, 2, firstSignalTimestamp + 400); Assert.IsTrue(_test.WaitOne(10)); }
public void TestSimpleTwoState() { //State 1: IF: A1 == A2 && A2 < 5 Then Goto Next //State 2: IF: A1 == 0 Then Trigger _test.Reset(); var signal = new Signal() { Name = "A1" }; var signal2 = new Signal() { Name = "A2" }; //TriggerState 1 var statement = new LogialAnalyzerTrigger.Statement.Equals(signal, signal2); var statemetn2 = new LogialAnalyzerTrigger.Statement.LessThen(signal2, 5); var statemetnCollection = new LogialAnalyzerTrigger.Statement.StatementCollection(); statemetnCollection.AddStatement(statement, LogialAnalyzerTrigger.Statement.LogicalOperators.First); statemetnCollection.AddStatement(statemetn2, LogialAnalyzerTrigger.Statement.LogicalOperators.And); var triggerStateForkedStatement = new TriggerStateForkedState(statemetnCollection); triggerStateForkedStatement.AddTriggerStateThenOperations(TriggerStateThenOperations.GotoNextState); var triggerstate = new TriggerState(); triggerstate.AddTriggerStateForkedStatement(triggerStateForkedStatement); //TriggerState 2 var statement3 = new LogialAnalyzerTrigger.Statement.Equals(signal, 0); var triggerStateForkedStatement2 = new TriggerStateForkedState(statement3); triggerStateForkedStatement2.AddTriggerStateThenOperations(TriggerStateThenOperations.Trigger); var triggerstate2 = new TriggerState(); triggerstate2.AddTriggerStateForkedStatement(triggerStateForkedStatement2); var trigger = new Trigger(); trigger.AddTriggerState(triggerstate); trigger.AddTriggerState(triggerstate2); var engine = new TriggerEngine(); engine.AddTrigger(trigger); engine.TriggeredUnitTest += engine_Triggered; engine.LogValueChange(signal, 2, DateTime.Now.Ticks); engine.LogValueChange(signal2, 2, DateTime.Now.Ticks); // Will now jump to state 2 Assert.IsFalse(_test.WaitOne(10)); engine.LogValueChange(signal, 0, DateTime.Now.Ticks); Assert.IsTrue(_test.WaitOne(10)); }
private string BuildInsertQueryV1(Guid itemId, string entityName, List <GroupedColumns> matchingColumns) { //create lower tables... Dictionary <string, string> executedTables = new Dictionary <string, string>(); var query = ""; var tablesWhoHasForeignKeyReference = matchingColumns.Where(t => t.NeedToUpdateColumn != null).ToList(); if (tablesWhoHasForeignKeyReference.Any()) { foreach (var table in tablesWhoHasForeignKeyReference) { query += GetQueryStr(table); StoreExecutedTables(executedTables, table); } } //create item table.. var itemTable = matchingColumns.FirstOrDefault(t => t.EntityFullName.ToLower().Equals(ItemHelper.ItemClassName.ToLower())); if (itemTable != null) { query += GetQueryStr(itemTable); StoreExecutedTables(executedTables, itemTable); } //create other tables.. foreach (var item in matchingColumns) { var clientName = (string.IsNullOrEmpty(item.ClientName)) ? item.EntityFullName : item.ClientName; var isExecuted = executedTables.Where(t => t.Key.Equals(clientName)).ToList(); if (isExecuted.Any()) { continue; } query += GetQueryStr(item); } // add relateions foreach (var table in tablesWhoHasForeignKeyReference) { if (table.NeedToUpdateColumn == null) { continue; } var columnWithValue = new Dictionary <string, string>(); UpdateQueryBuilder updateQuery = new UpdateQueryBuilder(); columnWithValue.Add(table.NeedToUpdateColumn.ColumnName, table.Id.ToString()); updateQuery.AddTable(table.NeedToUpdateColumn.TableName, columnWithValue); var targetRow = matchingColumns.FirstOrDefault(t => t.EntityFullName.ToLower().Equals(table.NeedToUpdateColumn.EntityFullName.ToLower())); if (targetRow == null) { continue; } updateQuery.AddWhere(table.NeedToUpdateColumn.PrimaryKey, Comparison.Equals, targetRow.Id.ToString(), 1); query += updateQuery.BuildQuery(); } IMetadataManager iMetadataManager = new MetadataManager.Contracts.MetadataManager(); var triggers = iMetadataManager.GetTriggerProperties(entityName); if (triggers.Any()) { var singletonTrigger = triggers[0]; var bodyProp = singletonTrigger.GetBody(); var search = matchingColumns.FirstOrDefault(t => t.EntityFullName.ToLower().Equals(entityName.ToLower())); if (search == null) { return(TransactionHelper.BuildQuery(query)); } { var payload = bodyProp.Select(item => search.Columns.FirstOrDefault(t => t.FieldName.ToLower().Equals(item.ToLower()))).Where(matching => matching != null).ToDictionary <ColumnAndField, string, string>(matching => matching.ColumnName, matching => matching.Value); if (!payload.Any()) { return(TransactionHelper.BuildQuery(query)); } var triggerEngine = new TriggerEngine(); var triggerExecutionPayload = new TriggerExecutionPayload { PayloadObj = payload, ConditionalValue = itemId.ToString() }; var triggerQuery = triggerEngine.GetQuery(triggers, triggerExecutionPayload); if (!string.IsNullOrEmpty(triggerQuery)) { query += triggerQuery; } } } //------------ return(TransactionHelper.BuildQuery(query)); }