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