summaryrefslogtreecommitdiff
path: root/Types
diff options
context:
space:
mode:
authorGravatar Joey Hess <joey@kitenet.net>2014-08-10 14:52:58 -0400
committerGravatar Joey Hess <joey@kitenet.net>2014-08-10 15:02:59 -0400
commitc88874a89db54402dbf6bdd56f6d0306f4303e53 (patch)
tree35b27c254a39b0674142b7cf313492a705e4874b /Types
parent425730f03a68cfa6a0e43a88c83f3470d8724627 (diff)
testremote: Add testing of behavior when remote is not available
Added a mkUnavailable method, which a Remote can use to generate a version of itself that is not available. Implemented for several, but not yet all remotes. This allows testing that checkPresent properly throws an exceptions when it cannot check if a key is present or not. It also allows testing that the other methods don't throw exceptions in these circumstances. This immediately found several bugs, which this commit also fixes! * git remotes using ssh accidentially had checkPresent return an exception, rather than throwing it * The chunking code accidentially returned False rather than propigating an exception when there were no chunks and checkPresent threw an exception for the non-chunked key. This commit was sponsored by Carlo Matteo Capocasa.
Diffstat (limited to 'Types')
-rw-r--r--Types/Remote.hs5
1 files changed, 4 insertions, 1 deletions
diff --git a/Types/Remote.hs b/Types/Remote.hs
index b657cfcdc..e166d7090 100644
--- a/Types/Remote.hs
+++ b/Types/Remote.hs
@@ -95,7 +95,10 @@ data RemoteA a = Remote {
-- a Remote can be globally available. (Ie, "in the cloud".)
availability :: Availability,
-- the type of the remote
- remotetype :: RemoteTypeA a
+ remotetype :: RemoteTypeA a,
+ -- For testing, makes a version of this remote that is not
+ -- available for use. All its actions should fail.
+ mkUnavailable :: a (Maybe (RemoteA a))
}
instance Show (RemoteA a) where