module Interop.Client.TestCase.ServerCompressedUnary (runTest) where import Data.Maybe (isJust) import Network.GRPC.Client import Network.GRPC.Common import Network.GRPC.Common.Protobuf import Network.GRPC.Common.StreamElem qualified as StreamElem import Interop.Client.Common import Interop.Client.Connect import Interop.Cmdline import Interop.Util.Exceptions import Interop.Util.Messages import Proto.API.Interop -- | runTest :: Cmdline -> IO () runTest cmdline = withConnection def (testServer cmdline) $ \conn -> do withRPC conn def (Proxy @UnaryCall) $ \call -> do sendInputWithMeta call $ FinalElem (request True) NoMetadata resp <- recvOutputWithMeta call verifyResponse True (StreamElem.value resp) withRPC conn def (Proxy @UnaryCall) $ \call -> do sendInputWithMeta call $ FinalElem (request False) NoMetadata resp <- recvOutputWithMeta call verifyResponse False (StreamElem.value resp) where -- To keep the test simple, we disable /outbound/ compression -- (this test is testing /inbound/ compression) request :: Bool -> (OutboundMeta, Proto SimpleRequest) request expectCompressed = ( def { outboundEnableCompression = False } , mkSimpleRequest False & #responseCompressed .~ boolValue expectCompressed ) verifyResponse :: HasCallStack => Bool -> Maybe (InboundMeta, Proto SimpleResponse) -> IO () verifyResponse _expectCompressed Nothing = assertFailure "Expected response" verifyResponse expectCompressed (Just (meta, resp)) = do assertEqual expectCompressed $ isJust (inboundCompressedSize meta) verifySimpleResponse resp