1{-# LANGUAGE DeriveDataTypeable #-} 2{-# LANGUAGE OverloadedStrings #-} 3{-# OPTIONS_GHC -fno-warn-missing-fields #-} 4{-# OPTIONS_GHC -fno-warn-missing-signatures #-} 5{-# OPTIONS_GHC -fno-warn-name-shadowing #-} 6{-# OPTIONS_GHC -fno-warn-unused-imports #-} 7{-# OPTIONS_GHC -fno-warn-unused-matches #-} 8 9----------------------------------------------------------------- 10-- Autogenerated by Thrift 11-- -- 12-- DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING 13-- @generated 14----------------------------------------------------------------- 15 16module My.Namespacing.Extend.Test.ExtendTestService_Fuzzer (main) where 17import qualified My.Namespacing.Extend.Test.Extend_Types 18import qualified My.Namespacing.Extend.Test.ExtendTestService_Client as Client 19import qualified My.Namespacing.Test.Hsmodule_Types 20 21import Prelude ( Bool(..), Enum, Float, IO, Double, String, Maybe(..), 22 Eq, Show, Ord, 23 concat, error, fromIntegral, fromEnum, length, map, 24 maybe, not, null, otherwise, return, show, toEnum, 25 enumFromTo, Bounded, minBound, maxBound, seq, succ, 26 pred, enumFrom, enumFromThen, enumFromThenTo, 27 (.), (&&), (||), (==), (++), ($), (-), (>>=), (>>)) 28 29import qualified Control.Applicative as Applicative (ZipList(..)) 30import Control.Applicative ( (<*>) ) 31import qualified Control.DeepSeq as DeepSeq 32import qualified Control.Exception as Exception 33import qualified Control.Monad as Monad ( liftM, ap, when ) 34import qualified Data.ByteString.Lazy as BS 35import Data.Functor ( (<$>) ) 36import qualified Data.Hashable as Hashable 37import qualified Data.Int as Int 38import Data.List 39import qualified Data.Maybe as Maybe (catMaybes) 40import qualified Data.Text.Lazy.Encoding as Encoding ( decodeUtf8, encodeUtf8 ) 41import qualified Data.Text.Lazy as LT 42import qualified Data.Typeable as Typeable ( Typeable ) 43import qualified Data.HashMap.Strict as Map 44import qualified Data.HashSet as Set 45import qualified Data.Vector as Vector 46import qualified Test.QuickCheck.Arbitrary as Arbitrary ( Arbitrary(..) ) 47import qualified Test.QuickCheck as QuickCheck ( elements ) 48 49import qualified Thrift 50import qualified Thrift.Types as Types 51import qualified Thrift.Serializable as Serializable 52import qualified Thrift.Arbitraries as Arbitraries 53 54import qualified My.Namespacing.Test.Hsmodule_Types as Hsmodule_Types 55 56import Prelude ((>>), print) 57import qualified Prelude as P 58import Control.Monad (forM) 59import qualified Data.List as L 60import Data.Maybe (fromJust) 61import qualified Data.Map as Map 62import GHC.Int (Int64, Int32) 63import Data.ByteString.Lazy (ByteString) 64import System.Environment (getArgs) 65import Test.QuickCheck (arbitrary) 66import Test.QuickCheck.Gen (Gen(..)) 67import Thrift.FuzzerSupport 68 69 70handleOptions :: ([Options -> Options], [String], [String]) -> Options 71handleOptions (transformers, (serviceName:[]), []) | serviceName `P.elem` serviceNames 72 = (P.foldl (P.flip ($)) defaultOptions transformers) { opt_service = serviceName } 73handleOptions (_, (serviceName:[]), []) | P.otherwise 74 = P.error $ usage ++ "\nUnknown serviceName " ++ serviceName ++ ", should be one of " ++ (P.show serviceNames) 75handleOptions (_, [], _) = P.error $ usage ++ "\nMissing mandatory serviceName to fuzz." 76handleOptions (_, _a, []) = P.error $ usage ++ "\nToo many serviceNames, pick one." 77handleOptions (_, _, e) = P.error $ usage ++ (P.show e) 78 79main :: IO () 80main = do 81 args <- getArgs 82 let config = handleOptions (getOptions args) 83 fuzz config 84 85selectFuzzer :: Options -> (Options -> IO ()) 86selectFuzzer (Options _host _port service _timeout _framed _verbose) 87 = fromJust $ P.lookup service fuzzerFunctions 88 89fuzz :: Options -> IO () 90fuzz config = (selectFuzzer config) config 91 92-- Dynamic content 93 94-- Configuration via command-line parsing 95 96serviceNames :: [String] 97serviceNames = ["check"] 98 99fuzzerFunctions :: [(String, (Options -> IO ()))] 100fuzzerFunctions = [("check", check_fuzzer)] 101 102-- Random data generation 103inf_Hsmodule_Types_HsFoo :: IO [Hsmodule_Types.HsFoo] 104inf_Hsmodule_Types_HsFoo = infexamples (Arbitrary.arbitrary :: Gen Hsmodule_Types.HsFoo) 105 106-- Fuzzers and exception handlers 107check_fuzzer :: Options -> IO () 108check_fuzzer opts = do 109 a1 <- Applicative.ZipList <$> inf_Hsmodule_Types_HsFoo 110 _ <- forM (Applicative.getZipList a1) check_fuzzFunc 111 return () 112 where 113 check_fuzzFunc a1 = let param = (a1) in 114 if opt_framed opts 115 then withThriftDo opts (withFramedTransport opts) (check_fuzzOnce param) (check_exceptionHandler param) 116 else withThriftDo opts (withHandle opts) (check_fuzzOnce param) (check_exceptionHandler param) 117 118check_exceptionHandler :: (Show a1) => (a1) -> IO () 119check_exceptionHandler (a1) = do 120 P.putStrLn $ "Got exception on data:" 121 P.putStrLn $ "(" ++ show a1 ++ ")" 122check_fuzzOnce (a1) client = Client.check client a1 >> return () 123 124