@@ -83,6 +83,7 @@ import Control.Tracer (Tracer, nullTracer)
8383import Data.Bifunctor (Bifunctor (.. ))
8484import Data.Constraint (Dict (.. ))
8585import Data.Either (partitionEithers )
86+ import Data.Foldable (for_ )
8687import Data.Kind (Type )
8788import Data.List.NonEmpty (NonEmpty (.. ))
8889import qualified Data.List.NonEmpty as NE
@@ -136,7 +137,8 @@ import qualified Test.QuickCheck.StateModel.Lockstep.Defaults as Lockstep.Defaul
136137import qualified Test.QuickCheck.StateModel.Lockstep.Run as Lockstep.Run
137138import Test.Tasty (TestTree , testGroup )
138139import Test.Tasty.QuickCheck (testProperty )
139- import Test.Util.FS (approximateEqStream , noRemoveDirectoryRecursiveE ,
140+ import Test.Util.FS (SilentCorruption (.. ), SilentCorruptions (.. ),
141+ approximateEqStream , noRemoveDirectoryRecursiveE ,
140142 propNoOpenHandles , propNumOpenHandles )
141143import Test.Util.PrettyProxy
142144import qualified Test.Util.QLS as QLS
@@ -636,7 +638,7 @@ instance ( Show (Class.TableConfig h)
636638 -- Snapshots
637639 CreateSnapshot ::
638640 C k v b
639- => Maybe Errors
641+ => Maybe ( Either SilentCorruptions Errors )
640642 -> R. SnapshotLabel -> R. SnapshotName -> Var h (WrapTable h IO k v b )
641643 -> Act h ()
642644 OpenSnapshot ::
@@ -1170,11 +1172,12 @@ runModel lookUp = \case
11701172 RetrieveBlobs blobsVar ->
11711173 wrap (MVector . fmap (MBlob . WrapBlob ))
11721174 . Model. runModelM (Model. retrieveBlobs (getBlobRefs . lookUp $ blobsVar))
1173- CreateSnapshot merrs label name tableVar ->
1174- wrap MUnit
1175- . Model. runModelMWithInjectedErrors merrs
1176- (Model. createSnapshot label name (getTable $ lookUp tableVar))
1177- (pure () )
1175+ CreateSnapshot mcorrsOrErrs label name tableVar ->
1176+ wrap MUnit .
1177+ let mCreateSnapshot = Model. createSnapshot label name (getTable $ lookUp tableVar)
1178+ in case sequence mcorrsOrErrs of
1179+ Left _corrs -> Model. runModelM (mCreateSnapshot >> Model. corruptSnapshot name)
1180+ Right merrs -> Model. runModelMWithInjectedErrors merrs mCreateSnapshot (pure () )
11781181 OpenSnapshot _ merrs label name ->
11791182 wrap MTable
11801183 . Model. runModelMWithInjectedErrors merrs
@@ -1256,10 +1259,18 @@ runIO action lookUp = ReaderT $ \ !env -> do
12561259 Class. mupserts (unwrapTable $ lookUp' tableVar) kmups
12571260 RetrieveBlobs blobRefsVar -> catchErr handlers $
12581261 fmap WrapBlob <$> Class. retrieveBlobs (Proxy @ h ) session (unwrapBlobRef <$> lookUp' blobRefsVar)
1259- CreateSnapshot merrs label name tableVar ->
1260- runRealWithInjectedErrors " CreateSnapshot" env merrs
1261- (Class. createSnapshot label name (unwrapTable $ lookUp' tableVar))
1262- (\ () -> Class. deleteSnapshot session name)
1262+ CreateSnapshot mcorrsOrErrs label name tableVar ->
1263+ let rCreateSnapshot = Class. createSnapshot label name (unwrapTable $ lookUp' tableVar) in
1264+ case sequence mcorrsOrErrs of
1265+ Left (SilentCorruptions corrs) -> do
1266+ rCreateSnapshot
1267+ for_ corrs $ \ corr ->
1268+ Class. corruptSnapshot (bitChoice corr) name (unwrapTable $ lookUp' tableVar)
1269+ pure (Right () )
1270+ Right merrs ->
1271+ runRealWithInjectedErrors " CreateSnapshot" env merrs
1272+ rCreateSnapshot
1273+ (\ () -> Class. deleteSnapshot session name)
12631274 OpenSnapshot _ merrs label name ->
12641275 runRealWithInjectedErrors " OpenSnapshot" env merrs
12651276 (WrapTable <$> Class. openSnapshot session label name)
@@ -1318,10 +1329,18 @@ runIOSim action lookUp = ReaderT $ \ !env -> do
13181329 Class. mupserts (unwrapTable $ lookUp' tableVar) kmups
13191330 RetrieveBlobs blobRefsVar -> catchErr handlers $
13201331 fmap WrapBlob <$> Class. retrieveBlobs (Proxy @ h ) session (unwrapBlobRef <$> lookUp' blobRefsVar)
1321- CreateSnapshot merrs label name tableVar ->
1322- runRealWithInjectedErrors " CreateSnapshot" env merrs
1323- (Class. createSnapshot label name (unwrapTable $ lookUp' tableVar))
1324- (\ () -> Class. deleteSnapshot session name)
1332+ CreateSnapshot mcorrsOrErrs label name tableVar ->
1333+ let rCreateSnapshot = Class. createSnapshot label name (unwrapTable $ lookUp' tableVar) in
1334+ case sequence mcorrsOrErrs of
1335+ Left (SilentCorruptions corrs) -> do
1336+ rCreateSnapshot
1337+ for_ corrs $ \ corr ->
1338+ Class. corruptSnapshot (bitChoice corr) name (unwrapTable $ lookUp' tableVar)
1339+ pure (Right () )
1340+ Right merrs ->
1341+ runRealWithInjectedErrors " CreateSnapshot" env merrs
1342+ rCreateSnapshot
1343+ (\ () -> Class. deleteSnapshot session name)
13251344 OpenSnapshot _ merrs label name ->
13261345 runRealWithInjectedErrors " OpenSnapshot" env merrs
13271346 (WrapTable <$> Class. openSnapshot session label name)
0 commit comments