/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you 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.mediator.test.foreach;
import org.apache.axiom.om.OMElement;
import org.testng.Assert;
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.FixedSizeSymbolGenerator;
/**
* Tests sending different number of large messages through foreach mediator
*/
public class ForEachLargeMessageTestCase extends ESBIntegrationTest {
private String symbol;
private LogViewerClient logViewer;
@BeforeClass
public void setEnvironment() throws Exception {
init();
loadESBConfigurationFromClasspath(
"/artifacts/ESB/mediatorconfig/foreach/foreach_single_request.xml");
symbol = FixedSizeSymbolGenerator.generateMessageMB(1);
logViewer =
new LogViewerClient(contextUrls.getBackEndUrl(), getSessionCookie());
}
@Test(groups = "wso2.esb", description = "Tests large message in small number 5")
public void testSmallNumbers() throws Exception {
int beforeLogSize = logViewer.getAllRemoteSystemLogs().length;
OMElement response;
for (int i = 0; i < 5; i++) {
response =
axis2Client.sendCustomQuoteRequest(getMainSequenceURL(),
null, "IBM" + symbol);
Assert.assertNotNull(response);
Assert.assertTrue(response.toString().contains("IBM"), "Incorrect symbol in response");
response = null;
}
LogEvent[] logs = logViewer.getAllRemoteSystemLogs();
int afterLogSize = logs.length;
int forEachCount = 0;
for (int i = (afterLogSize - beforeLogSize - 1); i >= 0; i--) {
String message = logs[i].getMessage();
if (message.contains("foreach = in")) {
if (!message.contains("IBM")) {
Assert.fail("Incorrect message entered ForEach scope. Could not find symbol IBM ..");
}
forEachCount++;
}
}
Assert.assertEquals(forEachCount, 5,
"Count of messages entered ForEach scope is incorrect");
}
@Test(groups = "wso2.esb", description = "Tests large message in large number 10")
public void testLargeNumbers() throws Exception {
int beforeLogSize = logViewer.getAllRemoteSystemLogs().length;
OMElement response;
for (int i = 0; i < 10; i++) {
response =
axis2Client.sendCustomQuoteRequest(getMainSequenceURL(),
null, "SUN" + symbol);
Assert.assertNotNull(response);
Assert.assertTrue(response.toString().contains("SUN"), "Incorrect symbol in response");
}
LogEvent[] logs = logViewer.getAllRemoteSystemLogs();
int afterLogSize = logs.length;
int forEachCount = 0;
for (int i = (afterLogSize - beforeLogSize - 1); i >= 0; i--) {
String message = logs[i].getMessage();
if (message.contains("foreach = in")) {
if (!message.contains("SUN")) {
Assert.fail("Incorrect message entered ForEach scope. Could not find symbol SUN ..");
}
forEachCount++;
}
}
Assert.assertEquals(forEachCount, 10,
"Count of messages entered ForEach scope is incorrect");
}
@Test(groups = "wso2.esb", description = "Tests large message 3MB")
public void testLargeMessage() throws Exception {
int beforeLogSize = logViewer.getAllRemoteSystemLogs().length;
String symbol2 = FixedSizeSymbolGenerator.generateMessageMB(3);
OMElement response;
response =
axis2Client.sendCustomQuoteRequest(getMainSequenceURL(),
null, "MSFT" + symbol2);
Assert.assertNotNull(response);
Assert.assertTrue(response.toString().contains("MSFT"), "Incorrect symbol in response");
LogEvent[] logs = logViewer.getAllRemoteSystemLogs();
int afterLogSize = logs.length;
int forEachCount = 0;
for (int i = (afterLogSize - beforeLogSize - 1); i >= 0; i--) {
String message = logs[i].getMessage();
if (message.contains("foreach = in")) {
if (!message.contains("MSFT")) {
Assert.fail("Incorrect message entered ForEach scope. Could not find symbol MSFT ..");
}
forEachCount++;
}
}
Assert.assertEquals(forEachCount, 1,
"Count of messages entered ForEach scope is incorrect");
}
@AfterClass
public void close() throws Exception {
symbol = null;
super.cleanup();
}
}