diff --git a/gbs-downloader.cabal b/gbs-downloader.cabal index ab7a6bcd49b43a16929d22be87c92ebf69eea0d1..f320b64710049e5ad6fb10640f9664c4c1799911 100644 --- a/gbs-downloader.cabal +++ b/gbs-downloader.cabal @@ -95,6 +95,7 @@ library , bytestring , connection , containers + , data-default-class , exceptions , http-client , http-client-tls @@ -102,7 +103,7 @@ library , servant-client , servant-client-core , tahoe-chk - , tahoe-great-black-swamp >=0.2 && <0.3 + , tahoe-great-black-swamp >=0.2 && <0.3 , text , yaml @@ -174,6 +175,7 @@ test-suite gbs-downloader-test , bytestring , containers , crypto-api + , data-default-class , gbs-downloader , hedgehog , tahoe-chk diff --git a/src/Tahoe/Announcement.hs b/src/Tahoe/Announcement.hs index 1729bbabf179856f81f47ae343dbcbd812441c0f..7fbf4f7af5c0ea1dca49041def8c19cba0fa0c9a 100644 --- a/src/Tahoe/Announcement.hs +++ b/src/Tahoe/Announcement.hs @@ -11,6 +11,7 @@ module Tahoe.Announcement ( import Data.Aeson (FromJSON (parseJSON), ToJSON (toJSON), object, withObject, (.:), (.:?), (.=)) import qualified Data.ByteString as B import Data.ByteString.Base32 (decodeBase32Unpadded, encodeBase32Unpadded) +import Data.Default.Class (Default (def)) import qualified Data.Map.Strict as Map import Data.Maybe (fromMaybe) import qualified Data.Text @@ -44,6 +45,14 @@ data StorageServerAnnouncement = StorageServerAnnouncement } deriving (Eq, Ord, Show) +instance Default StorageServerAnnouncement where + def = + StorageServerAnnouncement + { storageServerAnnouncementFURL = Nothing + , storageServerAnnouncementNick = Nothing + , storageServerAnnouncementPermutationSeed = Nothing + } + -- Support deserialization of a StorageServerAnnouncement from the -- ``servers.yaml`` format supported by Tahoe-LAFS. instance FromJSON StorageServerAnnouncement where diff --git a/test/Spec.hs b/test/Spec.hs index 3fbcda4c744ea1d528ed7b57fc9d18724112bd89..cf7bcce1bb5f79cf77f18ff4990dc853823e1463 100644 --- a/test/Spec.hs +++ b/test/Spec.hs @@ -8,6 +8,7 @@ import qualified Data.Binary as Binary import qualified Data.ByteString as B import Data.ByteString.Base32 (encodeBase32Unpadded) import qualified Data.ByteString.Lazy as BL +import Data.Default.Class (Default (def)) import qualified Data.Map.Strict as Map import qualified Data.Set as Set import qualified Data.Text as T @@ -109,12 +110,7 @@ tests = , testCase "no reachable servers" $ do -- If we can't contact any configured server then we can't -- possibly get enough shares to recover the application data. - let ann = - StorageServerAnnouncement - { storageServerAnnouncementFURL = Nothing - , storageServerAnnouncementNick = Just "unreachable" - , storageServerAnnouncementPermutationSeed = Nothing - } + let ann = def{storageServerAnnouncementNick = Just "unreachable"} anns = Map.fromList [ @@ -136,10 +132,9 @@ tests = Map.fromList [ ( "v0-abc123" - , StorageServerAnnouncement + , def { storageServerAnnouncementFURL = Just "somewhere" , storageServerAnnouncementNick = Just "abc123" - , storageServerAnnouncementPermutationSeed = Nothing } ) ] @@ -170,18 +165,16 @@ tests = Map.fromList [ ( "v0-abc123" - , StorageServerAnnouncement + , def { storageServerAnnouncementFURL = Just "somewhere" , storageServerAnnouncementNick = Just "abc123" - , storageServerAnnouncementPermutationSeed = Nothing } ) , ( "v0-abc456" - , StorageServerAnnouncement + , def { storageServerAnnouncementFURL = Just "elsewhere" , storageServerAnnouncementNick = Just "abc123" - , storageServerAnnouncementPermutationSeed = Nothing } ) ] @@ -217,10 +210,9 @@ tests = Map.fromList [ ( "v0-abc123" - , StorageServerAnnouncement + , def { storageServerAnnouncementFURL = Just "somewhere" , storageServerAnnouncementNick = Just "abc123" - , storageServerAnnouncementPermutationSeed = Nothing } ) ] @@ -248,10 +240,9 @@ tests = Map.fromList [ ( "v0-abc123" - , StorageServerAnnouncement + , def { storageServerAnnouncementFURL = Just "somewhere" , storageServerAnnouncementNick = Just "abc123" - , storageServerAnnouncementPermutationSeed = Nothing } ) ] @@ -395,10 +386,9 @@ tests = -- server identifier. makeAnn :: StorageServerID -> StorageServerAnnouncement makeAnn sid = - StorageServerAnnouncement + def { storageServerAnnouncementFURL = Just $ "pb://" <> sid <> "/" <> sid , storageServerAnnouncementNick = Just . encodeBase32Unpadded . encodeUtf8 $ sid - , storageServerAnnouncementPermutationSeed = Nothing } -- Generate lists of ints that sum to a given total.