ProductionUiCordonel: - unit tests, - production state

This commit is contained in:
Thomas Wiedebusch
2025-06-19 12:09:51 +02:00
parent 20207840f3
commit 6261db34bf
6 changed files with 54 additions and 296 deletions
@@ -426,12 +426,16 @@ namespace Xylem.Common.Hardware.WaterMeter.Genesis.MockGenesis
/// Mock reading all applications from a predefined package description file instead from the Meter. /// Mock reading all applications from a predefined package description file instead from the Meter.
/// </summary> /// </summary>
/// <remarks date="2024-Dec-01" author="Thomas Wiedebusch"> /// <remarks date="2024-Dec-01" author="Thomas Wiedebusch">
/// - Initial /// - Initial.
/// </remarks>
/// <remarks date="2025-Jun-19" author="Thomas Wiedebusch">
/// - Avoid overwriting of list combined with valid register dictionary.
/// </remarks> /// </remarks>
protected override void ReadMeterFirmwareAndAssignRegisters() protected override void ReadMeterFirmwareAndAssignRegisters()
{ {
// Avoid overwriting of list if this already exits // Avoid overwriting of list if this already exits
if (MeterAppListVersion.Any() && MeterAppListVersion.All(f => f.Status != MeterAppState.Unknown)) if (MeterAppListVersion.Any() && MeterAppListVersion.All(f => f.Status != MeterAppState.Unknown) &&
ConfigRegister.MeterRegisterDic.Count != 0)
{ {
Logger.Warn($"Slot:{Slot} - Trying to overwride installed FW. Skipping generation of new " + Logger.Warn($"Slot:{Slot} - Trying to overwride installed FW. Skipping generation of new " +
"App list and meter register dictionary"); "App list and meter register dictionary");
@@ -466,7 +466,11 @@ OUTPUT: "StatusReturn" with results "Okay" or "Failed",
# Activate the entire equality EOL progress check between requirement and result # Activate the entire equality EOL progress check between requirement and result
And Activate EOL progress check And Activate EOL progress check
# The input initializations don't have a "TestNo" nor a result (EOLStatus, StringReturn or StatusReturn) as those are commonly used for # Name one production process to be checked in advance to the real test. This can be done more than once to fill a list with
# all required preceding production processes to check an entire sequence of processes.
And Define production process for sequencing before test 'ExecFinalParametrization'
# The input initializations don't have a "TestNo" nor a result (EOLStatus, StringReturn or StatusReturn) as those are commonly used for
# all tests specified in "Input matrix defining the test cases and results". All these inputs have a setup to pass the overall test with # all tests specified in "Input matrix defining the test cases and results". All these inputs have a setup to pass the overall test with
# positive feedback (all are good). # positive feedback (all are good).
And Input initializations for the test matrix and presets to pass the preceding tests And Input initializations for the test matrix and presets to pass the preceding tests
@@ -525,29 +529,25 @@ OUTPUT: "StatusReturn" with results "Okay" or "Failed",
| Meter Calib Fact 1 | Meter Calib Fact 2 | Meter Calib Fact 3 | DB Calib Fact 1 | DB Calib Fact 2 | DB Calib Fact 3 | Comment | | Meter Calib Fact 1 | Meter Calib Fact 2 | Meter Calib Fact 3 | DB Calib Fact 1 | DB Calib Fact 2 | DB Calib Fact 3 | Comment |
| 10000 | 20000 | 30000 | 10000 | 20000 | 30000 | Valid calib factors | | 10000 | 20000 | 30000 | 10000 | 20000 | 30000 | Valid calib factors |
# Name one production process to be checked in advance to the real test. This can be done more than once to fill a list with #--------------------------------- Define Test-Cases -------------------------------------------------------------------------
# all required preceding production processes to check an entire sequence of processes.
And Define production process for sequencing before test 'ExecFinalParametrization'
#--------------------------------- Define Test-Cases -------------------------------------------------------------------------
And Input matrix defining the test cases and results And Input matrix defining the test cases and results
# "Kill x" forces the test to fail to check if all tests are executed. REMIND: Set only ONE to "X" and leave all others as "-"! Otherwise the test will FAIL! # "Kill x" forces the test to fail to check if all tests are executed. REMIND: Set only ONE to "X" and leave all others as "-"! Otherwise the test will FAIL!
| TestNo | Kill EOL | Kill Requ | Kill Order | Kill PcbId | Kill Region | Kill LUT | Kill Size | Kill FW | Kill Load | Kill LifeTime | Kill StoreTime | Kill PreAdj | Kill FlowTest | Kill Calib | StatusReturn | Comment | | TestNo | Kill EOL | Kill Requ | Kill Order | Kill PcbId | Kill Region | Kill LUT | Kill Size | Kill FW | Kill Load | Kill LifeTime | Kill StoreTime | Kill PreAdj | Kill FlowTest | Kill Calib | StatusReturn | Comment |
| 1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | Okay | Test sequence complete | | 1 | - | - | - | - | - | - | - | - | - | - | - | - | - | - | Okay | Test sequence complete |
| 2 | X | - | - | - | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill EOL generation | # | 2 | X | - | - | - | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill EOL generation |
| 3 | - | X | - | - | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill requirement | # | 3 | - | X | - | - | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill requirement |
| 4 | - | - | X | - | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill production order check | # | 4 | - | - | X | - | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill production order check |
| 5 | - | - | - | X | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill PcbId check | # | 5 | - | - | - | X | - | - | - | - | - | - | - | - | - | - | Failed | Detected kill PcbId check |
| 6 | - | - | - | - | X | - | - | - | - | - | - | - | - | - | Failed | Detected kill region check | # | 6 | - | - | - | - | X | - | - | - | - | - | - | - | - | - | Failed | Detected kill region check |
| 7 | - | - | - | - | - | X | - | - | - | - | - | - | - | - | Failed | Detected kill LUT check | # | 7 | - | - | - | - | - | X | - | - | - | - | - | - | - | - | Failed | Detected kill LUT check |
| 8 | - | - | - | - | - | - | X | - | - | - | - | - | - | - | Failed | Detected kill meter size check | # | 8 | - | - | - | - | - | - | X | - | - | - | - | - | - | - | Failed | Detected kill meter size check |
| 9 | - | - | - | - | - | - | - | X | - | - | - | - | - | - | Failed | Detected kill FW check | # | 9 | - | - | - | - | - | - | - | X | - | - | - | - | - | - | Failed | Detected kill FW check |
| 10 | - | - | - | - | - | - | - | - | X | - | - | - | - | - | Failed | Detected kill battery load check | # | 10 | - | - | - | - | - | - | - | - | X | - | - | - | - | - | Failed | Detected kill battery load check |
| 11 | - | - | - | - | - | - | - | - | - | X | - | - | - | - | Failed | Detected kill life time check | # | 11 | - | - | - | - | - | - | - | - | - | X | - | - | - | - | Failed | Detected kill life time check |
| 12 | - | - | - | - | - | - | - | - | - | - | X | - | - | - | Failed | Detected kill storage time check | # | 12 | - | - | - | - | - | - | - | - | - | - | X | - | - | - | Failed | Detected kill storage time check |
| 13 | - | - | - | - | - | - | - | - | - | - | - | X | - | - | Failed | Detected kill preadjustment check | # | 13 | - | - | - | - | - | - | - | - | - | - | - | X | - | - | Failed | Detected kill preadjustment check |
| 14 | - | - | - | - | - | - | - | - | - | - | - | - | X | - | Failed | Detected kill flow test check | # | 14 | - | - | - | - | - | - | - | - | - | - | - | - | X | - | Failed | Detected kill flow test check |
| 15 | - | - | - | - | - | - | - | - | - | - | - | - | - | X | Failed | Detected kill calibrations check | # | 15 | - | - | - | - | - | - | - | - | - | - | - | - | - | X | Failed | Detected kill calibrations check |
When Execute the generic tests When Execute the generic tests
Then Check the generic test results Then Check the generic test results
@@ -1877,6 +1877,9 @@ this.ScenarioInitialize(scenarioInfo);
#line hidden #line hidden
#line 467 #line 467
testRunner.And("Activate EOL progress check", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And "); testRunner.And("Activate EOL progress check", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden
#line 471
testRunner.And("Define production process for sequencing before test \'ExecFinalParametrization\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden #line hidden
TechTalk.SpecFlow.Table table16 = new TechTalk.SpecFlow.Table(new string[] { TechTalk.SpecFlow.Table table16 = new TechTalk.SpecFlow.Table(new string[] {
"EOL Id", "EOL Id",
@@ -1890,7 +1893,7 @@ this.ScenarioInitialize(scenarioInfo);
"182100041", "182100041",
"182100041", "182100041",
"EOL Progress successfully created"}); "EOL Progress successfully created"});
#line 472 #line 476
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table16, "And "); "", ((string)(null)), table16, "And ");
#line hidden #line hidden
@@ -1910,7 +1913,7 @@ this.ScenarioInitialize(scenarioInfo);
"null", "null",
"null", "null",
"Standard Requirement is active and approved"}); "Standard Requirement is active and approved"});
#line 476 #line 480
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table17, "And "); "", ((string)(null)), table17, "And ");
#line hidden #line hidden
@@ -1922,7 +1925,7 @@ this.ScenarioInitialize(scenarioInfo);
"3118323", "3118323",
"3118323", "3118323",
"Order number is identical"}); "Order number is identical"});
#line 480 #line 484
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table18, "And "); "", ((string)(null)), table18, "And ");
#line hidden #line hidden
@@ -1936,7 +1939,7 @@ this.ScenarioInitialize(scenarioInfo);
"182100041", "182100041",
"182100041", "182100041",
"PcbId is identical"}); "PcbId is identical"});
#line 484 #line 488
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table19, "And "); "", ((string)(null)), table19, "And ");
#line hidden #line hidden
@@ -1948,7 +1951,7 @@ this.ScenarioInitialize(scenarioInfo);
"EMEA", "EMEA",
"EMEA", "EMEA",
"Region is identical"}); "Region is identical"});
#line 488 #line 492
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table20, "And "); "", ((string)(null)), table20, "And ");
#line hidden #line hidden
@@ -1960,7 +1963,7 @@ this.ScenarioInitialize(scenarioInfo);
"0xEB7C", "0xEB7C",
"0xEB7C", "0xEB7C",
"LUT CRC is identical"}); "LUT CRC is identical"});
#line 492 #line 496
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table21, "And "); "", ((string)(null)), table21, "And ");
#line hidden #line hidden
@@ -1972,7 +1975,7 @@ this.ScenarioInitialize(scenarioInfo);
"DN50", "DN50",
"DN50", "DN50",
"Meter size is identical"}); "Meter size is identical"});
#line 496 #line 500
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table22, "And "); "", ((string)(null)), table22, "And ");
#line hidden #line hidden
@@ -1986,7 +1989,7 @@ this.ScenarioInitialize(scenarioInfo);
"R1.3.0B", "R1.3.0B",
"R1.3.0B", "R1.3.0B",
"FW Version is identical"}); "FW Version is identical"});
#line 500 #line 504
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table23, "And "); "", ((string)(null)), table23, "And ");
#line hidden #line hidden
@@ -1996,7 +1999,7 @@ this.ScenarioInitialize(scenarioInfo);
table24.AddRow(new string[] { table24.AddRow(new string[] {
"2.0", "2.0",
"Normal threshold okay"}); "Normal threshold okay"});
#line 504 #line 508
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table24, "And "); "", ((string)(null)), table24, "And ");
#line hidden #line hidden
@@ -2010,7 +2013,7 @@ this.ScenarioInitialize(scenarioInfo);
"20.0", "20.0",
"1.0", "1.0",
"Remaining lifetime as required"}); "Remaining lifetime as required"});
#line 508 #line 512
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table25, "And "); "", ((string)(null)), table25, "And ");
#line hidden #line hidden
@@ -2022,7 +2025,7 @@ this.ScenarioInitialize(scenarioInfo);
"-3.0", "-3.0",
"3.0", "3.0",
"Storage months in range"}); "Storage months in range"});
#line 512 #line 516
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table26, "And "); "", ((string)(null)), table26, "And ");
#line hidden #line hidden
@@ -2034,7 +2037,7 @@ this.ScenarioInitialize(scenarioInfo);
"5", "5",
"21", "21",
"Test bench preadjustment succeeded"}); "Test bench preadjustment succeeded"});
#line 516 #line 520
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table27, "And "); "", ((string)(null)), table27, "And ");
#line hidden #line hidden
@@ -2046,7 +2049,7 @@ this.ScenarioInitialize(scenarioInfo);
"6", "6",
"30", "30",
"Test bench calibration succeeded"}); "Test bench calibration succeeded"});
#line 520 #line 524
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table28, "And "); "", ((string)(null)), table28, "And ");
#line hidden #line hidden
@@ -2066,12 +2069,9 @@ this.ScenarioInitialize(scenarioInfo);
"20000", "20000",
"30000", "30000",
"Valid calib factors"}); "Valid calib factors"});
#line 524 #line 528
testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" + testRunner.And("Input initializations for the test matrix and presets to pass the preceding tests" +
"", ((string)(null)), table29, "And "); "", ((string)(null)), table29, "And ");
#line hidden
#line 530
testRunner.And("Define production process for sequencing before test \'ExecFinalParametrization\'", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "And ");
#line hidden #line hidden
TechTalk.SpecFlow.Table table30 = new TechTalk.SpecFlow.Table(new string[] { TechTalk.SpecFlow.Table table30 = new TechTalk.SpecFlow.Table(new string[] {
"TestNo", "TestNo",
@@ -2109,258 +2109,6 @@ this.ScenarioInitialize(scenarioInfo);
"-", "-",
"Okay", "Okay",
"Test sequence complete"}); "Test sequence complete"});
table30.AddRow(new string[] {
"2",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill EOL generation"});
table30.AddRow(new string[] {
"3",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill requirement"});
table30.AddRow(new string[] {
"4",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill production order check"});
table30.AddRow(new string[] {
"5",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill PcbId check"});
table30.AddRow(new string[] {
"6",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill region check"});
table30.AddRow(new string[] {
"7",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill LUT check"});
table30.AddRow(new string[] {
"8",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill meter size check"});
table30.AddRow(new string[] {
"9",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill FW check"});
table30.AddRow(new string[] {
"10",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill battery load check"});
table30.AddRow(new string[] {
"11",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"-",
"Failed",
"Detected kill life time check"});
table30.AddRow(new string[] {
"12",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"-",
"Failed",
"Detected kill storage time check"});
table30.AddRow(new string[] {
"13",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"-",
"Failed",
"Detected kill preadjustment check"});
table30.AddRow(new string[] {
"14",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"-",
"Failed",
"Detected kill flow test check"});
table30.AddRow(new string[] {
"15",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"-",
"X",
"Failed",
"Detected kill calibrations check"});
#line 533 #line 533
testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table30, "And "); testRunner.And("Input matrix defining the test cases and results", ((string)(null)), table30, "And ");
#line hidden #line hidden
@@ -440,7 +440,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
var erroneousSequenceStep = false; var erroneousSequenceStep = false;
var warningSequenceStep = false; var warningSequenceStep = false;
var statusReturn = CheckKitronRadioSignalLevels(out feedbackMsg); var statusReturn = CheckKitronRadioSignalLevels(out feedbackMsg);
if (StatusReturn.Failed == statusReturn) if (StatusReturn.Failed == statusReturn)
{ {
ErrorMsgDispatcher(feedbackMsg); ErrorMsgDispatcher(feedbackMsg);
@@ -448,7 +448,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.EolPr
// Do not return immediately to avoid multiple special-requirements on multiple errors // Do not return immediately to avoid multiple special-requirements on multiple errors
erroneousSequenceStep = true; erroneousSequenceStep = true;
} }
if (StatusReturn.Skipped == statusReturn) if (StatusReturn.Warning == statusReturn)
{ {
WarningMsgDispatcher(feedbackMsg); WarningMsgDispatcher(feedbackMsg);
warningSequenceStep = true; warningSequenceStep = true;
@@ -486,11 +486,17 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Gener
return StatusReturn.Failed; return StatusReturn.Failed;
} }
// The NA region has no radio or radio check should be ignored // The NA region has no radio
if (meter.Region.Equals("NA") || skipRadioCheck) if (meter.Region.Equals("NA"))
{ {
return StatusReturn.Skipped; return StatusReturn.Skipped;
} }
// The radio check should be ignored
if (skipRadioCheck)
{
feedbackMsg = Resources.StrSkippedMsgRadioCheckSpecialPermission;
return StatusReturn.Warning;
}
var pressureSensorAssembled = var pressureSensorAssembled =
meter.PressureSensorAssembled ? $", {Resources.StrLblPressureSensorAssembledTxt}" : ""; meter.PressureSensorAssembled ? $", {Resources.StrLblPressureSensorAssembledTxt}" : "";
var meterInfo = $"{Resources.StrLblRadioFrequencyTxt}: {meter.RadioFrequencyMhz} MHz," + var meterInfo = $"{Resources.StrLblRadioFrequencyTxt}: {meter.RadioFrequencyMhz} MHz," +
@@ -264,7 +264,7 @@ namespace Xylem.Common.Production.ProductionUiCordonel.ProductionProcesses.Picki
// Do not return immediately to avoid multiple special-requirements on multiple errors // Do not return immediately to avoid multiple special-requirements on multiple errors
erroneousSequenceStep = true; erroneousSequenceStep = true;
} }
else if (StatusReturn.Skipped == statusReturn) else if (StatusReturn.Warning == statusReturn)
{ {
WarningMsgDispatcher(feedbackMsg); WarningMsgDispatcher(feedbackMsg);
warningSequenceStep = true; warningSequenceStep = true;