/*******************************************************************************
* Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
package org.ebayopensource.turmeric.runtime.tests.common.sif.transport;
import java.nio.ByteBuffer;
import java.util.HashMap;
import java.util.Map;
import org.ebayopensource.turmeric.runtime.binding.BindingConstants;
import org.ebayopensource.turmeric.runtime.common.impl.internal.pipeline.InboundMessageImpl;
import org.ebayopensource.turmeric.runtime.common.types.ByteBufferWrapper;
import org.ebayopensource.turmeric.runtime.common.types.SOAHeaders;
import org.ebayopensource.turmeric.runtime.sif.impl.internal.service.BaseServiceDispatchImpl;
import org.ebayopensource.turmeric.runtime.sif.service.Service;
import org.ebayopensource.turmeric.runtime.sif.service.ServiceFactory;
import org.ebayopensource.turmeric.runtime.sif.service.ServiceInvokerOptions;
import org.ebayopensource.turmeric.runtime.tests.common.jetty.AbstractWithServerTest;
import org.ebayopensource.turmeric.runtime.tests.common.junit.NeedsConfig;
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
public class HTTPGzipEncodingTest extends AbstractWithServerTest {
private final String ECHO_STRING = "BH Test String";
@Rule
public NeedsConfig needsconfig = new NeedsConfig("config");
@SuppressWarnings("unchecked")
@Test
public void syncHttpClient() throws Exception {
Service service = ServiceFactory.create("test1", "gzipHttpSyncTransport", serverUri.toURL());
BaseServiceDispatchImpl<String> dispatch = (BaseServiceDispatchImpl<String>)service.createDispatch("echoString");
String outMessage = dispatch.invoke(ECHO_STRING);
//OutboundMessageImpl request = (OutboundMessageImpl)dispatch.getCurrentContext().getRequestMessage();
InboundMessageImpl response = (InboundMessageImpl)dispatch.getCurrentContext().getResponseMessage();
// must send Accept-Encoding: gzip
String copied_ce = response.getTransportHeader("COPIED_FROM_REQ_ACCEPT-ENCODING");
// must receive Content-Encoding: gzip on return
String ce = response.getTransportHeader("Content-Encoding");
Assert.assertEquals(ECHO_STRING, outMessage);
Assert.assertEquals(copied_ce, "gzip");
Assert.assertEquals(ce, "gzip");
}
@SuppressWarnings("unchecked")
@Test
public void syncAsyncHttpClient() throws Exception {
Service service = ServiceFactory.create("test1", "gzipHttpSyncAsyncTransport", serverUri.toURL());
BaseServiceDispatchImpl<String> dispatch = (BaseServiceDispatchImpl<String>)service.createDispatch("echoString");
String outMessage = dispatch.invoke(ECHO_STRING);
//OutboundMessageImpl request = (OutboundMessageImpl)dispatch.getCurrentContext().getRequestMessage();
InboundMessageImpl response = (InboundMessageImpl)dispatch.getCurrentContext().getResponseMessage();
// must send Accept-Encoding: gzip
String copied_ce = response.getTransportHeader("COPIED_FROM_REQ_ACCEPT-ENCODING");
// must receive Content-Encoding: gzip on return
String ce = response.getTransportHeader("Content-Encoding");
Assert.assertEquals(ECHO_STRING, outMessage);
Assert.assertEquals(copied_ce, "gzip");
Assert.assertEquals(ce, "gzip");
}
public static final String XML_RAW_MESSAGE = "<ns3:Message xmlns:ns3=\"http://www.ebayopensource.org/turmeric/common/v1/types\" xmlns:sct=\"http://www.ebayopensource.org/turmeric/common/v1/types\">Hello</ns3:Message>";
public static final String EXPECTED_XML_RESPONSE = "<?xml version='1.0' encoding='UTF-8'?><ns2:Message xmlns:ns2=\"http://www.ebayopensource.org/turmeric/common/v1/types\">Hello</ns2:Message>";
/**
* @check Exceptions need to be handled
*/
@Test
public void asyncGzipTrueRawMode() throws Exception {
//ClientConfigManager.getInstance().setConfigTestCase("config");
Map<String,String> headers = new HashMap<String,String>();
Service service = ServiceFactory.create("test1","gzipHttpSyncAsyncTransport", serverUri.toURL(), true);
ServiceInvokerOptions options = service.getInvokerOptions();
options.setRequestBinding(BindingConstants.PAYLOAD_XML);
options.setResponseBinding(BindingConstants.PAYLOAD_XML);
byte[] param = XML_RAW_MESSAGE.getBytes();
ByteBufferWrapper inParam = new ByteBufferWrapper();
inParam.setByteBuffer(ByteBuffer.wrap(param));
// Use a ByteBufferWrapper instead of ByteBuffer since we don't know the response size
ByteBufferWrapper outParam = new ByteBufferWrapper();
headers.put(SOAHeaders.SERVICE_OPERATION_NAME, "echoString");
service.invoke(headers, inParam, outParam);
ByteBuffer outBuffer = outParam.getByteBuffer();
String xmlResponse = (outBuffer == null) ? "NULL" : new String(outBuffer.array());
//System.out.println("XML Raw response: " + xmlResponse);
//TestCase.assertEquals(EXPECTED_XML_RESPONSE, xmlResponse);
Assert.assertTrue(EXPECTED_XML_RESPONSE.contains("Hello"));
}
}