fixed pedantic warnings and hlint stuff
This commit is contained in:
@@ -41,11 +41,13 @@ import qualified Spec.ValidatePWData as ValidatePWData
|
||||
import qualified Spec.ValidatePWDatabase as ValidatePWDatabase
|
||||
import qualified Spec.ValidatePWPolicy as ValidatePWPolicy
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
counts <- runTestTT tests
|
||||
when (failures counts > 0 || errors counts > 0)
|
||||
exitFailure
|
||||
|
||||
tests :: Test
|
||||
tests = TestList
|
||||
[ NewPWDatabase.tests
|
||||
, NewPWData.tests
|
||||
|
||||
@@ -25,31 +25,41 @@ module Spec.JSON (tests) where
|
||||
import Data.Aeson (eitherDecode, encode, decode)
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import qualified Data.Map as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "JSON" $ TestList [success, failure]
|
||||
|
||||
success :: Test
|
||||
success = TestLabel "succeasful encoding/decoding" $
|
||||
eitherDecode (encode db) ~?= Right db
|
||||
|
||||
failure :: Test
|
||||
failure = TestLabel "decoding failure" $
|
||||
(decode B.empty :: Maybe PWDatabase) ~?= Nothing
|
||||
|
||||
db :: M.Map String PWData
|
||||
db = M.fromList
|
||||
[ ( "foo", foo )
|
||||
, ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
foo :: PWData
|
||||
g' :: StdGen
|
||||
(foo, g') = newPWData g
|
||||
|
||||
bar :: PWData
|
||||
g'' :: StdGen
|
||||
(bar, g'') = newPWData g'
|
||||
|
||||
baz :: PWData
|
||||
(baz, _) = newPWData g''
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -23,23 +23,27 @@ License along with this program. If not, see
|
||||
module Spec.NewPWData (tests) where
|
||||
|
||||
import Control.Lens ((^.))
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "newPData" $ TestList
|
||||
[ testSalt x
|
||||
, testPolicy x
|
||||
] where (x, _) = newPWData g
|
||||
|
||||
testSalt :: PWData -> Test
|
||||
testSalt x = TestLabel "pwSalt" $
|
||||
x^.pwSalt ~?= salt where
|
||||
(salt, _) = newPWSalt g
|
||||
|
||||
testPolicy :: PWData -> Test
|
||||
testPolicy x = TestLabel "pwPolicy" $
|
||||
x^.pwPolicy ~?= newPWPolicy
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -26,6 +26,7 @@ import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "newPWDatabase" $
|
||||
length newPWDatabase ~?= 0
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import Test.HUnit (Test(..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "PWPolicy" $ TestList $ map test'
|
||||
[ ( "pwLength", newPWPolicy^.pwLength ~?= 16 )
|
||||
, ( "pwUpper", newPWPolicy^.pwUpper ~?= 0 )
|
||||
@@ -35,6 +36,7 @@ tests = TestLabel "PWPolicy" $ TestList $ map test'
|
||||
, ( "pwSpecial", newPWPolicy^.pwSpecial ~?= Just 0 )
|
||||
]
|
||||
|
||||
test' :: (String, Test) -> Test
|
||||
test' (label, x) = TestLabel label x
|
||||
|
||||
--jl
|
||||
|
||||
@@ -28,6 +28,7 @@ import Test.HUnit (Test(..), assertBool, (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "newPWSalt" $ TestList
|
||||
[ testLength salt
|
||||
, testDiff salt salt'
|
||||
@@ -36,9 +37,12 @@ tests = TestLabel "newPWSalt" $ TestList
|
||||
(salt', _) = newPWSalt g'
|
||||
g = mkStdGen 1
|
||||
|
||||
testLength x = TestLabel "salt length" $ B.length x ~?= 32
|
||||
testLength :: PWSalt -> Test
|
||||
testLength x = TestLabel "salt length" $
|
||||
B.length (runPWSalt x) ~?= 32
|
||||
|
||||
testDiff x y = TestLabel "different generators" $ TestCase $
|
||||
testDiff :: PWSalt -> PWSalt -> Test
|
||||
testDiff x y = TestLabel "different salts" $ TestCase $
|
||||
assertBool "salts match" $ x /= y
|
||||
|
||||
--jl
|
||||
|
||||
@@ -24,7 +24,7 @@ module Spec.PWGenerate (tests) where
|
||||
|
||||
import Control.Lens (set, (^.))
|
||||
import Data.Maybe (fromJust)
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit
|
||||
(Test (..)
|
||||
, assertBool
|
||||
@@ -35,6 +35,7 @@ import Test.HUnit
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "pwGenerate" $ TestList
|
||||
[ defaultData
|
||||
, invalidPolicy
|
||||
@@ -43,15 +44,18 @@ tests = TestLabel "pwGenerate" $ TestList
|
||||
, differentMaster
|
||||
]
|
||||
|
||||
defaultData :: Test
|
||||
defaultData = TestLabel "default data" $ TestCase $
|
||||
case pwGenerate "foo" validData of
|
||||
Nothing -> assertFailure "no password generated"
|
||||
Just x -> assertEqual "incorrect password length"
|
||||
(validData^.pwPolicy.pwLength) (length x)
|
||||
|
||||
invalidPolicy :: Test
|
||||
invalidPolicy = TestLabel "invalid policy" $
|
||||
pwGenerate "foo" invalidPolicy' ~?= Nothing
|
||||
|
||||
constraints :: Test
|
||||
constraints = TestLabel "strict constraints" $ TestCase $
|
||||
case pwGenerate "foo" constraints' of
|
||||
Nothing -> assertFailure "no password generated"
|
||||
@@ -67,6 +71,7 @@ constraints = TestLabel "strict constraints" $ TestCase $
|
||||
assertEqual "incorrect number of special characters"
|
||||
(fromJust $ constraints'^.pwPolicy.pwSpecial) (pwCountSpecial x)
|
||||
|
||||
noSpecial :: Test
|
||||
noSpecial = TestLabel "no special chars" $ TestCase $
|
||||
case pwGenerate "foo" noSpecial' of
|
||||
Nothing -> assertFailure "no password generated"
|
||||
@@ -75,25 +80,31 @@ noSpecial = TestLabel "no special chars" $ TestCase $
|
||||
(noSpecial'^.pwPolicy.pwLength) (length x)
|
||||
assertEqual "special characters found" 0 $ pwCountSpecial x
|
||||
|
||||
differentMaster :: Test
|
||||
differentMaster = TestLabel "different master passwords" $ TestCase $
|
||||
assertBool "passwords match" $
|
||||
fromJust (pwGenerate "foo" validData) /=
|
||||
fromJust (pwGenerate "bar" validData)
|
||||
|
||||
validData :: PWData
|
||||
(validData, _) = newPWData g
|
||||
|
||||
invalidPolicy' :: PWData
|
||||
invalidPolicy' = set (pwPolicy.pwLength) (-1) validData
|
||||
|
||||
constraints' :: PWData
|
||||
constraints' = set (pwPolicy.pwUpper) 4 $
|
||||
set (pwPolicy.pwLower) 4 $
|
||||
set (pwPolicy.pwDigits) 4 $
|
||||
set (pwPolicy.pwSpecial) (Just 4)
|
||||
validData
|
||||
|
||||
noSpecial' :: PWData
|
||||
noSpecial' = set (pwPolicy.pwLength) 256 $
|
||||
set (pwPolicy.pwSpecial) Nothing
|
||||
validData
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -23,35 +23,46 @@ License along with this program. If not, see
|
||||
module Spec.PWGetService (tests) where
|
||||
|
||||
import qualified Data.Map as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "pwGetService" $ TestList
|
||||
[ empty, found, notFound ]
|
||||
|
||||
empty :: Test
|
||||
empty = TestLabel "empty database" $
|
||||
pwGetService "foo" newPWDatabase ~?= Nothing
|
||||
|
||||
found :: Test
|
||||
found = TestLabel "service found" $
|
||||
pwGetService "foo" db ~?= Just foo
|
||||
|
||||
notFound :: Test
|
||||
notFound = TestLabel "service not found" $
|
||||
pwGetService "quux" db ~?= Nothing
|
||||
|
||||
db :: M.Map String PWData
|
||||
db = M.fromList
|
||||
[ ( "foo", foo )
|
||||
, ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
foo :: PWData
|
||||
g' :: StdGen
|
||||
(foo, g') = newPWData g
|
||||
|
||||
bar :: PWData
|
||||
g'' :: StdGen
|
||||
(bar, g'') = newPWData g'
|
||||
|
||||
baz :: PWData
|
||||
(baz, _) = newPWData g''
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -23,32 +23,41 @@ License along with this program. If not, see
|
||||
module Spec.PWHasService (tests) where
|
||||
|
||||
import qualified Data.Map as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "pwHasService" $ TestList $ map test'
|
||||
[ ( "empty database", "foo", newPWDatabase, False )
|
||||
, ( "in database", "foo", db, True )
|
||||
, ( "not found", "quux", db, False )
|
||||
, ( "in database", "foo", database, True )
|
||||
, ( "not found", "quux", database, False )
|
||||
]
|
||||
|
||||
test' :: (String, String, PWDatabase, Bool) -> Test
|
||||
test' (label, x, db, expect) = TestLabel label $
|
||||
pwHasService x db ~?= expect
|
||||
|
||||
db = M.fromList
|
||||
database :: M.Map String PWData
|
||||
database = M.fromList
|
||||
[ ( "foo", foo )
|
||||
, ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
foo :: PWData
|
||||
g' :: StdGen
|
||||
(foo, g') = newPWData g
|
||||
|
||||
bar :: PWData
|
||||
g'' :: StdGen
|
||||
(bar, g'') = newPWData g'
|
||||
|
||||
baz :: PWData
|
||||
(baz, _) = newPWData g''
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -23,26 +23,31 @@ License along with this program. If not, see
|
||||
module Spec.PWRemoveService (tests) where
|
||||
|
||||
import qualified Data.Map.Lazy as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), assertBool, (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "pwRemoveService" $ TestList
|
||||
[ emptyDB
|
||||
, existingService
|
||||
, missingService
|
||||
]
|
||||
|
||||
emptyDB :: Test
|
||||
emptyDB = TestLabel "empty database" $
|
||||
pwRemoveService "foo" newPWDatabase ~?= newPWDatabase
|
||||
|
||||
existingService :: Test
|
||||
existingService = TestLabel "existing service" $
|
||||
test' "foo" ["bar", "baz"]
|
||||
|
||||
missingService :: Test
|
||||
missingService = TestLabel "missing service" $
|
||||
test' "quux" ["foo", "bar", "baz"]
|
||||
|
||||
test' :: String -> [String] -> Test
|
||||
test' serv keys = let db' = pwRemoveService serv db in
|
||||
TestList $
|
||||
TestLabel "key count" (length keys ~?= length (M.keys db')) :
|
||||
@@ -50,18 +55,25 @@ test' serv keys = let db' = pwRemoveService serv db in
|
||||
(\x -> TestLabel x $ TestCase $ assertBool "service missing" $ pwHasService x db')
|
||||
keys
|
||||
|
||||
db :: M.Map String PWData
|
||||
db = M.fromList
|
||||
[ ( "foo", foo )
|
||||
, ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
foo :: PWData
|
||||
g' ::StdGen
|
||||
(foo, g') = newPWData g
|
||||
|
||||
bar :: PWData
|
||||
g'' :: StdGen
|
||||
(bar, g'') = newPWData g'
|
||||
|
||||
baz :: PWData
|
||||
(baz, _) = newPWData g''
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -23,35 +23,44 @@ License along with this program. If not, see
|
||||
module Spec.PWSearch (tests) where
|
||||
|
||||
import qualified Data.Map as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), assertBool, (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "pwSearch" $ TestList $ map test'
|
||||
[ ( "no results", "quux", [] )
|
||||
, ( "some results", "A", ["bar", "baz"] )
|
||||
, ( "all results", "", ["foo", "bar", "baz"] )
|
||||
]
|
||||
|
||||
test' :: (String, String, [String]) -> Test
|
||||
test' (label, str, expect) = TestLabel label $ TestList $
|
||||
TestLabel "length" (length result ~?= length expect) :
|
||||
map (\x -> TestLabel ("has " ++ x) $ TestCase $
|
||||
assertBool "not found" $ elem x expect) result
|
||||
where result = pwSearch str db
|
||||
|
||||
db :: M.Map String PWData
|
||||
db = M.fromList
|
||||
[ ( "foo", foo )
|
||||
, ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
foo :: PWData
|
||||
g' :: StdGen
|
||||
(foo, g') = newPWData g
|
||||
|
||||
bar :: PWData
|
||||
g'' :: StdGen
|
||||
(bar, g'') = newPWData g'
|
||||
|
||||
baz :: PWData
|
||||
(baz, _) = newPWData g''
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -23,51 +23,68 @@ License along with this program. If not, see
|
||||
module Spec.PWSetService (tests) where
|
||||
|
||||
import qualified Data.Map as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "pwSetService" $ TestList
|
||||
[ addToEmpty, addToNonEmpty, addToExisting ]
|
||||
|
||||
addToEmpty :: Test
|
||||
addToEmpty = tests' "empty database" newPWDatabase 1
|
||||
|
||||
addToNonEmpty :: Test
|
||||
addToNonEmpty = tests' "non-empty database" nonEmpty 3
|
||||
|
||||
addToExisting :: Test
|
||||
addToExisting = tests' "existing database" existing 3
|
||||
|
||||
tests' :: String -> PWDatabase -> Int -> Test
|
||||
tests' label db size = TestLabel label $ TestList
|
||||
[ dbSize result size
|
||||
, find result
|
||||
] where
|
||||
result = pwSetService "foo" foo db
|
||||
|
||||
dbSize :: M.Map String PWData -> Int -> Test
|
||||
dbSize db expect = TestLabel "database size" $
|
||||
length db ~?= expect
|
||||
|
||||
find :: M.Map String PWData -> Test
|
||||
find db = TestLabel "record" $
|
||||
M.lookup "foo" db ~?= Just foo
|
||||
|
||||
nonEmpty :: M.Map String PWData
|
||||
nonEmpty = M.fromList
|
||||
[ ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
existing :: M.Map String PWData
|
||||
existing = M.fromList
|
||||
[ ( "foo", foo' )
|
||||
, ( "bar", bar )
|
||||
, ( "baz", baz )
|
||||
]
|
||||
|
||||
foo :: PWData
|
||||
g1 :: StdGen
|
||||
(foo, g1) = newPWData g
|
||||
|
||||
foo' :: PWData
|
||||
g2 :: StdGen
|
||||
(foo', g2) = newPWData g1
|
||||
|
||||
bar :: PWData
|
||||
g3 :: StdGen
|
||||
(bar, g3) = newPWData g2
|
||||
|
||||
baz :: PWData
|
||||
(baz, _) = newPWData g3
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -24,26 +24,32 @@ module Spec.ValidatePWData (tests) where
|
||||
|
||||
import Control.Lens (set)
|
||||
import qualified Data.ByteString.Lazy as B
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "validatePWData" $ TestList $ map test'
|
||||
[ ( "valid", new, True )
|
||||
, ( "invalid policy", invalidPolicy, False )
|
||||
, ( "invalid salt", invalidSalt, False )
|
||||
]
|
||||
|
||||
test' :: (String, PWData, Bool) -> Test
|
||||
test' (label, x, expect) = TestLabel label $
|
||||
validatePWData x ~?= expect
|
||||
|
||||
new :: PWData
|
||||
(new, _) = newPWData g
|
||||
|
||||
invalidPolicy :: PWData
|
||||
invalidPolicy = set (pwPolicy.pwLength) (-1) new
|
||||
|
||||
invalidSalt = set pwSalt B.empty new
|
||||
invalidSalt :: PWData
|
||||
invalidSalt = set pwSalt (PWSalt B.empty) new
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -24,11 +24,12 @@ module Spec.ValidatePWDatabase (tests) where
|
||||
|
||||
import Control.Lens (set)
|
||||
import qualified Data.Map as M
|
||||
import System.Random (mkStdGen)
|
||||
import System.Random (mkStdGen, StdGen)
|
||||
import Test.HUnit (Test (..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "validatePWDatabase" $ TestList $ map test'
|
||||
[ ( "empty", newPWDatabase, True )
|
||||
, ( "valid", validDB, True )
|
||||
@@ -36,19 +37,26 @@ tests = TestLabel "validatePWDatabase" $ TestList $ map test'
|
||||
, ( "bar invalid", barInvalid, False )
|
||||
]
|
||||
|
||||
test' :: (String, PWDatabase, Bool) -> Test
|
||||
test' (label, x, expect) = TestLabel label $
|
||||
validatePWDatabase x ~?= expect
|
||||
|
||||
validDB :: M.Map String PWData
|
||||
validDB = M.fromList [("foo", validData), ("bar", validData)]
|
||||
|
||||
fooInvalid :: M.Map String PWData
|
||||
fooInvalid = M.insert "foo" invalidData validDB
|
||||
|
||||
barInvalid :: M.Map String PWData
|
||||
barInvalid = M.insert "bar" invalidData validDB
|
||||
|
||||
validData :: PWData
|
||||
(validData, _) = newPWData g
|
||||
|
||||
invalidData :: PWData
|
||||
invalidData = set (pwPolicy.pwLength) (-1) validData
|
||||
|
||||
g :: StdGen
|
||||
g = mkStdGen 1
|
||||
|
||||
--jl
|
||||
|
||||
@@ -27,6 +27,7 @@ import Test.HUnit (Test(..), (~?=))
|
||||
|
||||
import Password
|
||||
|
||||
tests :: Test
|
||||
tests = TestLabel "validatePWPolicy" $ TestList $ map test'
|
||||
[ ( "default", id, True )
|
||||
, ( "no special chars", set pwSpecial Nothing, True )
|
||||
@@ -45,18 +46,24 @@ tests = TestLabel "validatePWPolicy" $ TestList $ map test'
|
||||
, ( "negative special", set pwSpecial (Just (-1)), False )
|
||||
]
|
||||
|
||||
test' :: (String, PWPolicy -> PWPolicy, Bool) -> Test
|
||||
test' (label, f, expect) = TestLabel label $
|
||||
validatePWPolicy x ~?= expect where
|
||||
x = f newPWPolicy
|
||||
|
||||
validMins :: PWPolicy -> PWPolicy
|
||||
validMins = setAll 1
|
||||
|
||||
excessive :: PWPolicy -> PWPolicy
|
||||
excessive = setAll 5
|
||||
|
||||
shortValid :: PWPolicy -> PWPolicy
|
||||
shortValid = set pwLength 8 . setAll 2
|
||||
|
||||
shortInvalid :: PWPolicy -> PWPolicy
|
||||
shortInvalid = set pwLength 8 . set pwUpper 9
|
||||
|
||||
setAll :: Int -> PWPolicy -> PWPolicy
|
||||
setAll x = set pwUpper x .
|
||||
set pwLower x .
|
||||
set pwDigits x .
|
||||
|
||||
Reference in New Issue
Block a user