/* * -----------------------------------------------------------------------\ * PerfCake *   * Copyright (C) 2010 - 2016 the original author or authors. *   * 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.perfcake.scenario; import org.perfcake.PerfCakeException; import org.perfcake.RunInfo; import org.perfcake.common.BoundPeriod; import org.perfcake.common.Period; import org.perfcake.common.PeriodType; import org.perfcake.message.Message; import org.perfcake.message.MessageTemplate; import org.perfcake.message.correlator.Correlator; import org.perfcake.message.correlator.GenerateHeaderCorrelator; import org.perfcake.message.generator.DefaultMessageGenerator; import org.perfcake.message.generator.MessageGenerator; import org.perfcake.message.receiver.HttpReceiver; import org.perfcake.message.receiver.Receiver; import org.perfcake.message.sender.HttpSender; import org.perfcake.message.sender.MessageSender; import org.perfcake.message.sequence.PrimitiveNumberSequence; import org.perfcake.message.sequence.Sequence; import org.perfcake.reporting.destination.ConsoleDestination; import org.perfcake.reporting.destination.Destination; import org.perfcake.reporting.reporter.IterationsPerSecondReporter; import org.perfcake.reporting.reporter.Reporter; import org.perfcake.validation.MessageValidator; import org.perfcake.validation.RegExpValidator; import org.testng.Assert; import org.testng.annotations.Test; import java.util.Collections; /** * @author <a href="mailto:marvenec@gmail.com">Martin Večeřa</a> */ public class ScenarioBuilderTest { @Test public void basicApiUsageTest() throws PerfCakeException { final Period period = new Period(PeriodType.TIME, 30_000); final RunInfo runInfo = new RunInfo(period); final MessageGenerator generator = new DefaultMessageGenerator(); generator.setThreads(10); final MessageValidator validator = new RegExpValidator().setCaseInsensitive(true).setPattern(".*"); final Message message = new Message(); message.setPayload("Hello world no. @{intSeq}!"); final MessageTemplate messageTemplate = new MessageTemplate(message, 1, Collections.singletonList("regExp")); final MessageSender sender = new HttpSender().setMethod(HttpSender.Method.POST).setTarget("http://httpbin.org/post"); final Correlator correlator = new GenerateHeaderCorrelator(); final Receiver receiver = new HttpReceiver().setSource("localhost:8282").setThreads(10); final Sequence sequence = new PrimitiveNumberSequence(); final Destination destination = new ConsoleDestination(); final Reporter reporter = new IterationsPerSecondReporter(); reporter.registerDestination(destination, new Period(PeriodType.TIME, 1000)); final ScenarioBuilder builder = new ScenarioBuilder(runInfo, generator, sender); builder.setReceiver(receiver).setCorrelator(correlator); builder.putMessageValidator("regExp", validator).addMessage(messageTemplate). putSequence("intSeq", sequence).addReporter(reporter); final Scenario scenario = builder.build(); scenario.init(); final ScenarioRetractor retractor = new ScenarioRetractor(scenario); Assert.assertTrue(retractor.getGenerator() instanceof DefaultMessageGenerator); Assert.assertEquals(retractor.getGenerator().getThreads(), 10); Assert.assertEquals(retractor.getMessageStore().size(), 1); Assert.assertEquals((long) retractor.getMessageStore().get(0).getMultiplicity(), 1); Assert.assertEquals(retractor.getMessageStore().get(0).getMessage().getPayload(), "Hello world no. @{intSeq}!"); Assert.assertEquals(retractor.getMessageStore().get(0).getFilteredMessage(retractor.getSequenceManager().getSnapshot()).getPayload(), "Hello world no. 0!"); Assert.assertEquals(retractor.getMessageStore().get(0).getValidatorIds().size(), 1); Assert.assertEquals(retractor.getMessageStore().get(0).getValidatorIds().get(0), "regExp"); MessageSender tmpSender = retractor.getMessageSenderManager().acquireSender(); Assert.assertTrue(tmpSender instanceof HttpSender); Assert.assertEquals(tmpSender.getTarget(), "http://httpbin.org/post"); Assert.assertEquals(((HttpSender) tmpSender).getMethod(), HttpSender.Method.POST); retractor.getMessageSenderManager().releaseSender(tmpSender); Assert.assertEquals(retractor.getSequenceManager().getSnapshot().getProperty("intSeq"), "1"); Assert.assertTrue(retractor.getReceiver() instanceof HttpReceiver); Assert.assertEquals(retractor.getReceiver().getSource(), "localhost:8282"); Assert.assertTrue(retractor.getCorrelator() instanceof GenerateHeaderCorrelator); Assert.assertEquals(retractor.getReportManager().getReporters().size(), 1); Reporter tmpReporter = retractor.getReportManager().getReporters().iterator().next(); Assert.assertTrue(tmpReporter instanceof IterationsPerSecondReporter); Assert.assertEquals(tmpReporter.getDestinations().size(), 1); Assert.assertEquals(tmpReporter.getReportingPeriods().size(), 1); BoundPeriod<Destination> boundPeriod = tmpReporter.getReportingPeriods().iterator().next(); Assert.assertEquals(boundPeriod.getPeriodType(), PeriodType.TIME); Assert.assertEquals(boundPeriod.getPeriod(), 1000); Destination tmpDestination = tmpReporter.getDestinations().iterator().next(); Assert.assertTrue(tmpDestination instanceof ConsoleDestination); } }