private static DataServiceQueryException TopLevelErrorPayloadWithTransportException(int statusCode, Action <DataServiceContextWithCustomTransportLayer> contextAction)
        {
            IODataRequestMessage requestMessage = new ODataTestMessage();

            TopLevelBatchResponseMessage topLevelResponse = new TopLevelBatchResponseMessage();

            byte[] payload = Encoding.UTF8.GetBytes("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\r\n<error xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\">\r\n  <code></code>\r\n  <message xml:lang=\"en-US\">This error must show up in the error returned below</message>\r\n</error>");
            topLevelResponse.SetHeader("OData-Version", "4.0");
            topLevelResponse.SetHeader("Content-Type", "application/xml");
            topLevelResponse.SetHeader("Content-Length", payload.Length.ToString());
            topLevelResponse.StatusCode    = statusCode;
            topLevelResponse.GetStreamFunc = () =>
            {
                return(new MemoryStream(payload));
            };

            var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new DataServiceTransportException(topLevelResponse, new WebException()); });

            context.EnableAtom = true;
            Action test = () => contextAction(context);

            var exception = test.ShouldThrow <DataServiceQueryException>().And;

            return(exception);
        }
        private static TopLevelBatchResponseMessage CreateResponseMessageWithGetStreamThrowingObjectDisposeException()
        {
            var responseMessage = new TopLevelBatchResponseMessage();

            responseMessage.SetHeader("OData-Version", "4.0");
            responseMessage.SetHeader("Content-Type", "application/atom+xml");
            responseMessage.SetHeader("Content-Length", "0");
            responseMessage.StatusCode    = 400;
            responseMessage.GetStreamFunc = () => { throw new ObjectDisposedException("Stream already disposed"); };
            return(responseMessage);
        }
 private static TopLevelBatchResponseMessage CreateResponseMessageWithGetStreamThrowingObjectDisposeException()
 {
     var responseMessage = new TopLevelBatchResponseMessage();
     responseMessage.SetHeader("OData-Version", "4.0");
     responseMessage.SetHeader("Content-Type", "application/atom+xml");
     responseMessage.SetHeader("Content-Length", "0");
     responseMessage.StatusCode = 400;
     responseMessage.GetStreamFunc = () => { throw new ObjectDisposedException("Stream already disposed"); };
     return responseMessage;
 }
        private static DataServiceQueryException TopLevelErrorPayloadWithTransportException(int statusCode, Action<DataServiceContextWithCustomTransportLayer> contextAction)
        {
            IODataRequestMessage requestMessage = new ODataTestMessage();

            TopLevelBatchResponseMessage topLevelResponse = new TopLevelBatchResponseMessage();
            byte[] payload = Encoding.UTF8.GetBytes("<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\r\n<error xmlns=\"http://docs.oasis-open.org/odata/ns/metadata\">\r\n  <code></code>\r\n  <message xml:lang=\"en-US\">This error must show up in the error returned below</message>\r\n</error>");
            topLevelResponse.SetHeader("OData-Version", "4.0");
            topLevelResponse.SetHeader("Content-Type", "application/xml");
            topLevelResponse.SetHeader("Content-Length", payload.Length.ToString());
            topLevelResponse.StatusCode = statusCode;
            topLevelResponse.GetStreamFunc = () =>
            {
                return new MemoryStream(payload);
            };

            var context = new DataServiceContextWithCustomTransportLayer(ODataProtocolVersion.V4, () => requestMessage, () => { throw new DataServiceTransportException(topLevelResponse, new WebException()); });
            context.EnableAtom = true;
            Action test = () => contextAction(context);

            var exception = test.ShouldThrow<DataServiceQueryException>().And;
            return exception;
        }