aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Crypto/Macaroon/Serializer/Base64.hs16
-rw-r--r--test/Crypto/Macaroon/Serializer/Base64/Tests.hs83
-rw-r--r--test/Crypto/Macaroon/Tests.hs49
-rw-r--r--test/tests.hs2
4 files changed, 103 insertions, 47 deletions
diff --git a/src/Crypto/Macaroon/Serializer/Base64.hs b/src/Crypto/Macaroon/Serializer/Base64.hs
index 6fc8fcb..f6527c2 100644
--- a/src/Crypto/Macaroon/Serializer/Base64.hs
+++ b/src/Crypto/Macaroon/Serializer/Base64.hs
@@ -16,22 +16,22 @@ module Crypto.Macaroon.Serializer.Base64 (
16 , deserialize 16 , deserialize
17 ) where 17 ) where
18 18
19import Control.Applicative 19import Control.Applicative
20import Control.Monad 20import Control.Monad
21import qualified Data.ByteString as BS 21import Crypto.Macaroon.Internal
22import qualified Data.ByteString.Base64.URL as B64 22import Data.Attoparsec.ByteString
23import qualified Data.ByteString.Char8 as B8
24import Data.Attoparsec.ByteString
25import qualified Data.Attoparsec.ByteString.Char8 as A8 23import qualified Data.Attoparsec.ByteString.Char8 as A8
26import Data.Bits 24import Data.Bits
25import qualified Data.ByteString as BS
26import qualified Data.ByteString.Base64.URL as B64
27import qualified Data.ByteString.Char8 as B8
27import Data.Char 28import Data.Char
28import Data.Hex 29import Data.Hex
29import Data.Int 30import Data.Int
30import Data.List 31import Data.List
31import Data.Maybe 32import Data.Maybe
32import Data.Word
33import Data.Serialize 33import Data.Serialize
34import Crypto.Macaroon.Internal 34import Data.Word
35 35
36 36
37-- | Serialize a macaroon in an URL-safe Base64 encoding 37-- | Serialize a macaroon in an URL-safe Base64 encoding
diff --git a/test/Crypto/Macaroon/Serializer/Base64/Tests.hs b/test/Crypto/Macaroon/Serializer/Base64/Tests.hs
new file mode 100644
index 0000000..9c49e96
--- /dev/null
+++ b/test/Crypto/Macaroon/Serializer/Base64/Tests.hs
@@ -0,0 +1,83 @@
1{-# LANGUAGE OverloadedStrings #-}
2{-|
3Copyright : (c) 2015 Julien Tanguy
4License : BSD3
5
6Maintainer : julien.tanguy@jhome.fr
7
8
9This test suite is based on the pymacaroons test suite:
10<https://github.com/ecordell/pymacaroons>
11-}
12module Crypto.Macaroon.Serializer.Base64.Tests where
13
14
15import qualified Data.ByteString.Char8 as B8
16import Test.Tasty
17import Test.Tasty.HUnit
18
19import Crypto.Macaroon
20import Crypto.Macaroon.Serializer.Base64
21
22tests :: TestTree
23tests = testGroup "Crypto.Macaroon.Serializer.Base64" [ basic
24 , minted
25 , minted2
26 -- , minted3
27 ]
28
29
30m :: Macaroon
31m = create secret key loc
32 where
33 secret = B8.pack "this is our super secret key; only we should know it"
34 key = B8.pack "we used our secret key"
35 loc = B8.pack "http://mybank/"
36
37basic :: TestTree
38basic = testGroup "Basic macaroon" [ basicSerialize
39 , basicDeserialize
40 ]
41
42basicSerialize = testCase "Serialization" $
43 "MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudG\
44 \lmaWVyIHdlIHVzZWQgb3VyIHNlY3JldCBrZXkKMDAyZnNpZ25h\
45 \dHVyZSDj2eApCFJsTAA5rhURQRXZf91ovyujebNCqvD2F9BVLwo" @=? serialize m
46
47basicDeserialize = testCase "Deserialization" $
48 Right m @=? (deserialize . serialize) m
49
50m2 :: Macaroon
51m2 = addFirstPartyCaveat "test = caveat" m
52
53minted :: TestTree
54minted = testGroup "Macaroon with first party caveat" [ mintSerialize
55 , mintDeserialize
56 ]
57
58
59mintSerialize = testCase "Serialization" $
60 "MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudGlmaWVyIHdlIHVzZ\
61 \WQgb3VyIHNlY3JldCBrZXkKMDAxNmNpZCB0ZXN0ID0gY2F2ZWF0CjAwMmZzaWduYXR1cmUgGXusegR\
62 \K8zMyhluSZuJtSTvdZopmDkTYjOGpmMI9vWcK" @=? serialize m2
63
64mintDeserialize = testCase "Deserialization" $
65 Right m2 @=? (deserialize . serialize) m2
66
67
68m3 :: Macaroon
69m3 = addFirstPartyCaveat "test = acaveat" m
70
71minted2 :: TestTree
72minted2 = testGroup "Macaroon with first party caveats" [ mint2Trimmed
73 , mint2Des
74 ]
75
76mint2Trimmed = testCase "Serialization" $
77 "MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudGlmaWVyIHdlIHVz\
78 \ZWQgb3VyIHNlY3JldCBrZXkKMDAxN2NpZCB0ZXN0ID0gYWNhdmVhdAowMDJmc2ln\
79 \bmF0dXJlIJRJ_V3WNJQnqlVq5eez7spnltwU_AXs8NIRY739sHooCg" @=? serialize m3
80
81mint2Des = testCase "Deserialization" $
82 Right m3 @=? (deserialize . serialize) m3
83
diff --git a/test/Crypto/Macaroon/Tests.hs b/test/Crypto/Macaroon/Tests.hs
index 244ec50..25d77c8 100644
--- a/test/Crypto/Macaroon/Tests.hs
+++ b/test/Crypto/Macaroon/Tests.hs
@@ -23,8 +23,6 @@ import Crypto.Macaroon.Serializer.Base64
23tests :: TestTree 23tests :: TestTree
24tests = testGroup "Crypto.Macaroon" [ basic 24tests = testGroup "Crypto.Macaroon" [ basic
25 , minted 25 , minted
26 , minted2
27 -- , minted3
28 ] 26 ]
29 27
30 28
@@ -36,29 +34,24 @@ m = create secret key loc
36 loc = B8.pack "http://mybank/" 34 loc = B8.pack "http://mybank/"
37 35
38basic :: TestTree 36basic :: TestTree
39basic = testGroup "Basic macaroon" [ basicSignature 37basic = testGroup "Basic macaroon" [ basicInspect
40 , basicSerialize 38 , basicSignature
41 , basicDeserialize
42 ] 39 ]
43 40
41basicInspect = testCase "Inspect" $
42 "location http://mybank/\nidentifier we used\
43 \ our secret key\n\nsignature E3D9E02908526C4C\
44 \0039AE15114115D97FDD68BF2BA379B342AAF0F617D0552F" @=? inspect m
45
44basicSignature = testCase "Signature" $ 46basicSignature = testCase "Signature" $
45 "E3D9E02908526C4C0039AE15114115D97FDD68BF2BA379B342AAF0F617D0552F" @=? (hex . signature) m 47 "E3D9E02908526C4C0039AE15114115D97FDD68BF2BA379B342AAF0F617D0552F" @=? (hex . signature) m
46 48
47basicSerialize = testCase "Serialization" $
48 "MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudG\
49 \lmaWVyIHdlIHVzZWQgb3VyIHNlY3JldCBrZXkKMDAyZnNpZ25h\
50 \dHVyZSDj2eApCFJsTAA5rhURQRXZf91ovyujebNCqvD2F9BVLwo" @=? serialize m
51
52basicDeserialize = testCase "Deserialization" $
53 Right m @=? (deserialize . serialize) m
54
55m2 :: Macaroon 49m2 :: Macaroon
56m2 = addFirstPartyCaveat "test = caveat" m 50m2 = addFirstPartyCaveat "test = caveat" m
57 51
58minted :: TestTree 52minted :: TestTree
59minted = testGroup "Macaroon with first party caveat" [ mintInspect 53minted = testGroup "Macaroon with first party caveat" [ mintInspect
60 , mintSerialize 54 , mintSignature
61 , mintDeserialize
62 ] 55 ]
63 56
64mintInspect = testCase "Inspect" $ 57mintInspect = testCase "Inspect" $
@@ -68,30 +61,8 @@ mintInspect = testCase "Inspect" $
68 \3BDD668A660E44D88CE1A998C23DBD67" @=? inspect m2 61 \3BDD668A660E44D88CE1A998C23DBD67" @=? inspect m2
69 62
70 63
71mintSerialize = testCase "Serialization" $ 64mintSignature = testCase "Signature" $
72 "MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudGlmaWVyIHdlIHVzZ\ 65 "197BAC7A044AF33332865B9266E26D493BDD668A660E44D88CE1A998C23DBD67" @=? (hex . signature) m2
73 \WQgb3VyIHNlY3JldCBrZXkKMDAxNmNpZCB0ZXN0ID0gY2F2ZWF0CjAwMmZzaWduYXR1cmUgGXusegR\
74 \K8zMyhluSZuJtSTvdZopmDkTYjOGpmMI9vWcK" @=? serialize m2
75
76mintDeserialize = testCase "Deserialization" $
77 Right m2 @=? (deserialize . serialize) m2
78
79
80m3 :: Macaroon
81m3 = addFirstPartyCaveat "test = acaveat" m
82
83minted2 :: TestTree
84minted2 = testGroup "Macaroon with first party caveats" [ mint2Trimmed
85 , mint2Des
86 ]
87
88mint2Trimmed = testCase "Serialization" $
89 "MDAxY2xvY2F0aW9uIGh0dHA6Ly9teWJhbmsvCjAwMjZpZGVudGlmaWVyIHdlIHVz\
90 \ZWQgb3VyIHNlY3JldCBrZXkKMDAxN2NpZCB0ZXN0ID0gYWNhdmVhdAowMDJmc2ln\
91 \bmF0dXJlIJRJ_V3WNJQnqlVq5eez7spnltwU_AXs8NIRY739sHooCg" @=? serialize m3
92
93mint2Des = testCase "Deserialization" $
94 Right m3 @=? (deserialize . serialize) m3
95 66
96-- m4 :: Macaroon 67-- m4 :: Macaroon
97-- m4 = addThirdPartyCaveat caveat_key caveat_id caveat_loc n 68-- m4 = addThirdPartyCaveat caveat_key caveat_id caveat_loc n
diff --git a/test/tests.hs b/test/tests.hs
index ba5dafd..85564f0 100644
--- a/test/tests.hs
+++ b/test/tests.hs
@@ -10,12 +10,14 @@ import Test.Tasty
10import Test.Tasty.HUnit 10import Test.Tasty.HUnit
11 11
12import qualified Crypto.Macaroon.Tests 12import qualified Crypto.Macaroon.Tests
13import qualified Crypto.Macaroon.Serializer.Base64.Tests
13 14
14main = defaultMain tests 15main = defaultMain tests
15 16
16tests :: TestTree 17tests :: TestTree
17tests = testGroup "Tests" [ sanityCheck 18tests = testGroup "Tests" [ sanityCheck
18 , Crypto.Macaroon.Tests.tests 19 , Crypto.Macaroon.Tests.tests
20 , Crypto.Macaroon.Serializer.Base64.Tests.tests
19 ] 21 ]
20 22
21sanityCheck :: TestTree 23sanityCheck :: TestTree