grapesy-1.0.0: interop/Interop/Client/TestCase/ServerCompressedUnary.hs
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
-- | <https://github.com/grpc/grpc/blob/master/doc/interop-test-descriptions.md#server_compressed_unary>
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