{-# language TypeOperators #-} module Main (main) where import Data.Aeson.AutoType.Alternative import Data.Proxy (Proxy(..)) import Data.Word (Word8) import Net.Types (IPv4,Mac) import Test.QuickCheck import Test.QuickCheck.Classes import VFlow.Types.IpFix (IpFix(..)) import VFlow.Types.SFlow (SFlow(..)) import qualified Net.IPv4 as I4 import qualified Net.Mac as Mac import qualified VFlow.Types.IpFix as I import qualified VFlow.Types.NetFlow5 as N5 import qualified VFlow.Types.NetFlow9 as N9 import qualified VFlow.Types.SFlow as S main :: IO () main = lawsCheckMany laws laws :: [(String,[Laws])] laws = [ ("IPFIX", [jsonLaws (Proxy :: Proxy IpFix)]) , ("sflow", [jsonLaws (Proxy :: Proxy SFlow)]) , ("Netflow v5", [jsonLaws (Proxy :: Proxy N5.NetFlow)]) , ("Netflow v9", [jsonLaws (Proxy :: Proxy N9.NetFlow)]) ] instance (Arbitrary a, Arbitrary b) => Arbitrary (a :|: b) where arbitrary = frequency [ (1, AltLeft <$> arbitrary), (1, AltRight <$> arbitrary) ] instance Arbitrary IpFix where arbitrary = IpFix <$> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary I.Header where arbitrary = I.Header <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary I.DataSetsEltElt where arbitrary = I.DataSetsEltElt <$> arbitrary <*> arbitrary instance Arbitrary IPv4 where arbitrary = I4.ipv4 <$> word8 <*> word8 <*> word8 <*> word8 instance Arbitrary Mac where arbitrary = Mac.fromOctets <$> word8 <*> word8 <*> word8 <*> word8 <*> word8 <*> word8 instance Arbitrary I.HexInt where arbitrary = I.HexInt <$> arbitrary instance Arbitrary S.ExtRouter where arbitrary = S.ExtRouter <$> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.ExtSwitch where arbitrary = S.ExtSwitch <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.L2 where arbitrary = S.L2 <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.L3 where arbitrary = S.L3 <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.L4 where arbitrary = S.L4 <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.RawHeader where arbitrary = S.RawHeader <$> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.Records where arbitrary = S.Records <$> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.SamplesElt where arbitrary = S.SamplesElt <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary S.SFlow where arbitrary = S.SFlow <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary word8 :: Gen Word8 word8 = arbitrary `suchThat` (\x -> x >= 0 && x <= 255) instance Arbitrary N5.FlowsElt where arbitrary = N5.FlowsElt <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary N5.Header where arbitrary = N5.Header <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary N5.NetFlow where arbitrary = N5.NetFlow <$> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary N9.HexInt where arbitrary = N9.HexInt <$> arbitrary instance Arbitrary N9.DataSetsEltElt where arbitrary = N9.DataSetsEltElt <$> arbitrary <*> arbitrary instance Arbitrary N9.Header where arbitrary = N9.Header <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary instance Arbitrary N9.NetFlow where arbitrary = N9.NetFlow <$> arbitrary <*> arbitrary <*> arbitrary