summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'dev-haskell/certificate/files/certificate-1.3.6/Tests/Unit.hs')
-rw-r--r--dev-haskell/certificate/files/certificate-1.3.6/Tests/Unit.hs46
1 files changed, 46 insertions, 0 deletions
diff --git a/dev-haskell/certificate/files/certificate-1.3.6/Tests/Unit.hs b/dev-haskell/certificate/files/certificate-1.3.6/Tests/Unit.hs
new file mode 100644
index 000000000000..d97947f2b233
--- /dev/null
+++ b/dev-haskell/certificate/files/certificate-1.3.6/Tests/Unit.hs
@@ -0,0 +1,46 @@
+module Tests.Unit
+ ( runTests
+ ) where
+
+import System.Directory
+import Test.HUnit
+import Control.Monad
+import Control.Applicative ((<$>))
+import Control.Exception
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as L
+import Data.Certificate.X509
+import Data.List (isPrefixOf)
+
+-- FIXME : make unit tests portable to run on osX and windows
+import System.Certificate.X509
+import Data.CertificateStore
+
+checkCert (X509 c mraw rawCert sigalg sigbits) = do
+ let errs =
+ (checkSigAlg $ certSignatureAlg c) ++
+ (checkPubKey $ certPubKey c) ++
+ (checkExtensions $ certExtensions c) ++
+ (checkBodyRaw rawCert mraw)
+ when (errs /= []) $ do
+ putStrLn ("error decoding")
+ mapM_ (putStrLn . (" " ++)) errs
+ where
+ checkExtensions ext = []
+
+ checkSigAlg (SignatureALG_Unknown oid) = ["unknown signature algorithm " ++ show oid]
+ checkSigAlg _ = []
+
+ checkPubKey (PubKeyUnknown oid _) = ["unknown public key alg " ++ show (certPubKey c)]
+ checkPubKey _ = []
+
+ checkBodyRaw (Just x) (Just y) = if findsubstring y x then [] else ["cannot find body cert in original raw file"]
+ checkBodyRaw _ _ = []
+
+ findsubstring a b
+ | L.null b = False
+ | a `L.isPrefixOf` b = True
+ | otherwise = findsubstring a (L.drop 1 b)
+
+runTests :: IO ()
+runTests = getSystemCertificateStore >>= mapM_ checkCert . listCertificates