@@ -240,7 +240,7 @@ public async Task AContextLostBeforeASiloRestartIsSentAgainOnceTheDeviceIsActiva
240240 var soil = node . SensorId ( 0 , Quantity . SoilMoisture ) ;
241241 var alertId = AlertIds . Uncalibrated ( soil , 1 ) ;
242242
243- identity . SensorFaults . FailNextContexts ( int . MaxValue ) ;
243+ identity . SensorFaults . FailContexts ( SensorsOf ( node ) ) ;
244244
245245 try
246246 {
@@ -249,7 +249,7 @@ public async Task AContextLostBeforeASiloRestartIsSentAgainOnceTheDeviceIsActiva
249249 }
250250 finally
251251 {
252- identity . SensorFaults . FailNextContexts ( 0 ) ;
252+ identity . SensorFaults . RestoreContexts ( ) ;
253253 }
254254
255255 // Which Sensor confirmed the context was only in memory. The new silo activates the Device with a read
@@ -615,21 +615,21 @@ public async Task AContextThatDidNotReachTheSensorsIsSentAgainWithTheNextWake()
615615 var nodeId = node . DeviceId . ToString ( ) ;
616616 var soil = node . SensorId ( 0 , Quantity . SoilMoisture ) ;
617617 var alertId = AlertIds . Uncalibrated ( soil , 1 ) ;
618- var failedBefore = identity . SensorFaults . FailedContexts ;
618+ var failedBefore = identity . SensorFaults . FailedContexts ( SensorsOf ( node ) ) ;
619619
620620 // No Sensor can be reached while the Node is unassigned: the unassignment answers as it always did.
621- identity . SensorFaults . FailNextContexts ( int . MaxValue ) ;
621+ identity . SensorFaults . FailContexts ( SensorsOf ( node ) ) ;
622622
623623 try
624624 {
625625 Assert . Equal ( DeviceAssignmentOutcome . Unassigned , ( await identity . Device ( nodeId ) . Unassign ( site . SiteId , Ct ) ) . Outcome ) ;
626- Assert . Equal ( 4 , identity . SensorFaults . FailedContexts - failedBefore ) ;
626+ Assert . Equal ( 4 , identity . SensorFaults . FailedContexts ( SensorsOf ( node ) ) - failedBefore ) ;
627627 Assert . Null ( ( await identity . DeviceStateAsync ( nodeId ) ) . LotId ) ;
628628 Assert . Equal ( AlertLifecycle . Open , ( await identity . Alert ( alertId ) . Describe ( Ct ) ) ! . Lifecycle ) ;
629629 }
630630 finally
631631 {
632- identity . SensorFaults . FailNextContexts ( 0 ) ;
632+ identity . SensorFaults . RestoreContexts ( ) ;
633633 }
634634
635635 // No Reading follows an unassignment: the Device sends the context again when it is next woken.
@@ -641,9 +641,9 @@ public async Task AContextThatDidNotReachTheSensorsIsSentAgainWithTheNextWake()
641641
642642 // Confirmed: another wake sends nothing. No Sensor is called, which its journal alone would not show.
643643 var journaled = await identity . AliasesAsync ( $ "sensor/{ soil } ") ;
644- var sentBefore = identity . SensorFaults . PassedContexts ;
644+ var sentBefore = identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) ;
645645 await identity . WakeDeviceAsync ( nodeId ) ;
646- Assert . Equal ( sentBefore , identity . SensorFaults . PassedContexts ) ;
646+ Assert . Equal ( sentBefore , identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) ) ;
647647 Assert . Equal ( journaled , await identity . AliasesAsync ( $ "sensor/{ soil } ") ) ;
648648 }
649649
@@ -656,7 +656,7 @@ public async Task AContextThatDidNotReachTheSensorsIsSentAgainWithTheNodesNextRe
656656 var soil = node . SensorId ( 0 , Quantity . SoilMoisture ) ;
657657 var alertId = AlertIds . Uncalibrated ( soil , 1 ) ;
658658
659- identity . SensorFaults . FailNextContexts ( int . MaxValue ) ;
659+ identity . SensorFaults . FailContexts ( SensorsOf ( node ) ) ;
660660
661661 try
662662 {
@@ -665,23 +665,23 @@ public async Task AContextThatDidNotReachTheSensorsIsSentAgainWithTheNodesNextRe
665665 }
666666 finally
667667 {
668- identity . SensorFaults . FailNextContexts ( 0 ) ;
668+ identity . SensorFaults . RestoreContexts ( ) ;
669669 }
670670
671671 // Nobody wakes the Device and no silo restarts: the Node reports. On no Lot its Readings are not
672672 // evaluated, so only the context the frame sends again can end the episode.
673- var sentBefore = identity . SensorFaults . PassedContexts ;
673+ var sentBefore = identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) ;
674674 await ReadAsync ( node ) ;
675675
676- Assert . Equal ( 4 , identity . SensorFaults . PassedContexts - sentBefore ) ;
676+ Assert . Equal ( 4 , identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) - sentBefore ) ;
677677 var closed = ( await identity . Alert ( alertId ) . Describe ( Ct ) ) ! ;
678678 Assert . Equal ( ( AlertLifecycle . Closed , AlertCloseReason . Unassigned ) , ( closed . Lifecycle , closed . Reason ) ) ;
679679 Assert . Empty ( await identity . Site ( site . SiteId ) . OpenAlerts ( Ct ) ) ;
680680 Assert . Equal ( new SensorContext ( site . SiteId , null , false , 2 ) , ( await SensorStateAsync ( soil ) ) . Context ) ;
681681
682682 // Confirmed: the next report sends nothing.
683683 await ReadAsync ( node ) ;
684- Assert . Equal ( 4 , identity . SensorFaults . PassedContexts - sentBefore ) ;
684+ Assert . Equal ( 4 , identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) - sentBefore ) ;
685685 }
686686
687687 [ Fact ]
@@ -694,22 +694,22 @@ public async Task ASensorThatHoldsNoContextTakesItsFirstOneFromAReading()
694694
695695 // No context the Device sends reaches the Sensors, from the frame that declares them on: the Sensor is
696696 // as one journaled before Story 7.4, declared and without a context, when that frame's Reading arrives.
697- var failedBefore = identity . SensorFaults . FailedContexts ;
698- var sentBefore = identity . SensorFaults . PassedContexts ;
699- identity . SensorFaults . FailNextContexts ( int . MaxValue ) ;
697+ var failedBefore = identity . SensorFaults . FailedContexts ( SensorsOf ( node ) ) ;
698+ var sentBefore = identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) ;
699+ identity . SensorFaults . FailContexts ( SensorsOf ( node ) ) ;
700700
701701 try
702702 {
703703 await DeclareAsync ( node ) ;
704704 }
705705 finally
706706 {
707- identity . SensorFaults . FailNextContexts ( 0 ) ;
707+ identity . SensorFaults . RestoreContexts ( ) ;
708708 }
709709
710710 // The Reading said the Site, the Lot and the epoch.
711- Assert . Equal ( 4 , identity . SensorFaults . FailedContexts - failedBefore ) ;
712- Assert . Equal ( sentBefore , identity . SensorFaults . PassedContexts ) ;
711+ Assert . Equal ( 4 , identity . SensorFaults . FailedContexts ( SensorsOf ( node ) ) - failedBefore ) ;
712+ Assert . Equal ( sentBefore , identity . SensorFaults . PassedContexts ( SensorsOf ( node ) ) ) ;
713713 Assert . Equal ( new SensorContext ( site . SiteId , lotId , false , 1 ) , ( await SensorStateAsync ( soil ) ) . Context ) ;
714714 var open = Assert . Single ( await identity . Site ( site . SiteId ) . OpenAlerts ( Ct ) ) ;
715715 Assert . Equal ( ( AlertIds . Uncalibrated ( soil , 1 ) , AlertKind . Uncalibrated , lotId ) , ( open . AlertId , open . Kind , open . LotId ) ) ;
@@ -727,7 +727,7 @@ public async Task AMoveWhoseContextWasLostHealsWithTheNextReadingBecauseReadings
727727 var soil = node . SensorId ( 0 , Quantity . SoilMoisture ) ;
728728 var peppers = await SeedLotAsync ( site . SiteId , "Peppers" ) ;
729729
730- identity . SensorFaults . FailNextContexts ( int . MaxValue ) ;
730+ identity . SensorFaults . FailContexts ( SensorsOf ( node ) ) ;
731731
732732 try
733733 {
@@ -739,7 +739,7 @@ public async Task AMoveWhoseContextWasLostHealsWithTheNextReadingBecauseReadings
739739 }
740740 finally
741741 {
742- identity . SensorFaults . FailNextContexts ( 0 ) ;
742+ identity . SensorFaults . RestoreContexts ( ) ;
743743 }
744744
745745 var open = Assert . Single ( await identity . Site ( site . SiteId ) . OpenAlerts ( Ct ) ) ;
@@ -957,6 +957,15 @@ private static SpecificationSet Specifications(bool calibration)
957957 }
958958
959959 // An Active Site created by its Owner, whose User grain therefore holds the Site and is told of its Alerts.
960+ // The Node's four Sensors, whose evaluation contexts the Device sends.
961+ private static Guid [ ] SensorsOf ( SimulatedDevice node ) =>
962+ [
963+ node . SensorId ( 0 , Quantity . SoilMoisture ) ,
964+ node . SensorId ( 1 , Quantity . AirTemperature ) ,
965+ node . SensorId ( 2 , Quantity . RelativeHumidity ) ,
966+ node . SensorId ( 3 , Quantity . GasResistance ) ,
967+ ] ;
968+
960969 private async Task < ( string SiteId , string OwnerId ) > SiteAsync ( )
961970 {
962971 var ownerId = Guid . NewGuid ( ) . ToString ( ) ;
0 commit comments