/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wso2.carbon.esb.mediators.callout;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.FileRequestEntity;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.RequestEntity;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.wso2.carbon.integration.common.admin.client.LogViewerClient;
import org.wso2.carbon.logging.view.stub.types.carbon.LogEvent;
import org.wso2.esb.integration.common.utils.ESBIntegrationTest;
import org.wso2.esb.integration.common.utils.common.TestConfigurationProvider;
import org.wso2.esb.integration.common.utils.servers.SimpleSocketServer;
import java.io.File;
import static org.testng.Assert.fail;
public class ESBJAVA_4239_HTTP_SC_HandlingTests extends ESBIntegrationTest {
private LogViewerClient logViewerClient;
private SimpleSocketServer simpleSocketServer;
@BeforeClass(alwaysRun = true)
public void deployService() throws Exception {
super.init();
int port = 1995;
String expectedResponse = "HTTP/1.1 404 Not Found\r\nServer: testServer\r\n" +
"Content-Type: text/xml; charset=UTF-8\r\n" +
"Transfer-Encoding: chunked\r\n" +
"\r\n" + "\"<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
"<test></test>";
simpleSocketServer = new SimpleSocketServer(port, expectedResponse);
simpleSocketServer.start();
loadESBConfigurationFromClasspath("/artifacts/ESB/mediatorconfig/callout/CalloutMediatorHTTP_SC_Test.xml");
logViewerClient = new LogViewerClient(contextUrls.getBackEndUrl(), getSessionCookie());
}
@Test(groups = "wso2.esb", description = "Test whether response HTTP status code getting correctly after callout " +
"mediator successfully execute")
public void testHttpStatusCodeGettingSuccessfully() throws Exception {
String endpoint = getProxyServiceURLHttp("TestCallout");
String soapRequest = TestConfigurationProvider.getResourceLocation() + "artifacts" + File.separator +
"ESB" + File.separator + "mediatorconfig" + File.separator + "callout" +
File.separator + "SOAPRequestWithHeader.xml";
File input = new File(soapRequest);
PostMethod post = new PostMethod(endpoint);
RequestEntity entity = new FileRequestEntity(input, "text/xml");
post.setRequestEntity(entity);
post.setRequestHeader("SOAPAction", "getQuote");
HttpClient httpClient = new HttpClient();
boolean errorLog = false;
try {
httpClient.executeMethod(post);
LogEvent[] logs = logViewerClient.getAllSystemLogs();
for (LogEvent logEvent : logs) {
if (logEvent.getPriority().equals("INFO")) {
String message = logEvent.getMessage();
if (message.contains("STATUS-Fault") && message.contains("404 Error: Not Found")) {
errorLog = true;
break;
}
}
}
} finally {
post.releaseConnection();
}
if (!errorLog) {
fail("Response HTTP code not return successfully.");
}
}
@AfterClass(alwaysRun = true)
public void close() throws Exception {
super.cleanup();
if (simpleSocketServer != null) {
simpleSocketServer.shutdown();
}
}
}