/*
* Copyright 2010-2017 Norwegian Agency for Public Management and eGovernment (Difi)
*
* Licensed under the EUPL, Version 1.1 or – as soon they
* will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
*
* You may not use this work except in compliance with the Licence.
*
* You may obtain a copy of the Licence at:
*
* https://joinup.ec.europa.eu/community/eupl/og_page/eupl
*
* Unless required by applicable law or agreed to in
* writing, software distributed under the Licence is
* distributed on an "AS IS" basis,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied.
* See the Licence for the specific language governing
* permissions and limitations under the Licence.
*/
package no.difi.oxalis.as2;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
import no.difi.oxalis.api.outbound.MessageSender;
import no.difi.oxalis.api.outbound.TransmissionRequest;
import no.difi.oxalis.api.outbound.TransmissionResponse;
import no.difi.oxalis.as2.inbound.As2InboundModule;
import no.difi.oxalis.as2.outbound.As2OutboundModule;
import no.difi.oxalis.commons.guice.GuiceModuleLoader;
import no.difi.oxalis.commons.http.ApacheHttpModule;
import no.difi.oxalis.test.jetty.AbstractJettyServerTest;
import no.difi.vefa.peppol.common.model.Endpoint;
import no.difi.vefa.peppol.common.model.Header;
import no.difi.vefa.peppol.common.model.TransportProfile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.io.InputStream;
import java.net.URI;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class SimpleLoadTest extends AbstractJettyServerTest {
private static Logger logger = LoggerFactory.getLogger(SimpleLoadTest.class);
@Override
public Injector getInjector() {
return Guice.createInjector(
new GuiceModuleLoader(),
new As2OutboundModule(),
new As2InboundModule(),
new ApacheHttpModule()
);
}
@Test
public void simple() throws Exception {
MessageSender messageSender = injector.getInstance(Key.get(MessageSender.class, Names.named("oxalis-as2")));
TransmissionRequest transmissionRequest = new TransmissionRequest() {
@Override
public Endpoint getEndpoint() {
return Endpoint.of(TransportProfile.AS2_1_0, URI.create("http://localhost:8080/as2"),
injector.getInstance(X509Certificate.class));
}
@Override
public Header getHeader() {
return Header.newInstance();
}
@Override
public InputStream getPayload() {
return getClass().getResourceAsStream("/as2-peppol-bis-invoice-sbdh.xml");
}
};
long ts = System.currentTimeMillis();
ExecutorService executorService = Executors.newFixedThreadPool(10);
List<Future<TransmissionResponse>> futures = new ArrayList<>();
for (int i = 0; i < 500; i++)
futures.add(executorService.submit(() -> messageSender.send(transmissionRequest)));
for (Future<TransmissionResponse> future : futures)
future.get();
long result = System.currentTimeMillis() - ts;
logger.info("Sent 500 messages in {} ms.", result);
Assert.assertTrue(result < 5 * 60 * 1000, "Sending 500 messages took more than one minute.");
}
}