module Test.Data.Radius.IsoNoVSA (
tests,
) where
import Test.Data.Radius.ArbitrariesNoVSA (EmptyVSA)
import qualified Test.Data.Radius.IsoBase as Base
import Test.QuickCheck.Simple (Test, qcTest)
import Control.Applicative ((<$>), pure)
import Control.Monad.Trans.Maybe (MaybeT (..))
import Data.ByteString (ByteString)
import Data.Serialize.Get (Get, runGet)
import Data.Serialize.Put (Put, runPut)
import Data.Radius.Scalar (AtText, AtString)
import Data.Radius.Packet (Packet)
import Data.Radius.Attribute (Attribute', Attribute)
import qualified Data.Radius.StreamGet as Get
import Data.Radius.StreamPut (AttributePutM)
import qualified Data.Radius.StreamPut as Put
getEmpty :: Get (Attribute' EmptyVSA)
getEmpty = fail "Vendor Specific Result type is bottom."
putEmpty :: EmptyVSA -> ByteString -> Put
putEmpty _ _ = pure ()
putAttribute :: AttributePutM EmptyVSA a -> Put
putAttribute = mapM_ (Put.attribute' putEmpty) . Put.extractAttributes
isoAttributeText :: Attribute EmptyVSA AtText
-> Bool
isoAttributeText at =
( (runMaybeT . Get.decodeAsText <$>) . runGet (Get.attribute' getEmpty) . runPut . putAttribute $ Put.attribute at )
==
Right (Right (Just at))
isoAttributeString :: Attribute EmptyVSA AtString
-> Bool
isoAttributeString at =
( (runMaybeT . Get.decodeAsString <$>) . runGet (Get.attribute' getEmpty) . runPut . putAttribute $ Put.attribute at )
==
Right (Right (Just at))
isoAttribute' :: Attribute' EmptyVSA -> Bool
isoAttribute' = Base.isoAttribute' getEmpty putEmpty
isoPacket :: Packet [Attribute' EmptyVSA] -> Bool
isoPacket = Base.isoPacket getEmpty putEmpty
tests :: [Test]
tests =
[ qcTest "iso - atText" isoAttributeText
, qcTest "iso - atString" isoAttributeString
, qcTest "iso - attribute'" isoAttribute'
, qcTest "iso - packet" isoPacket
]