/* * -----------------------------------------------------------------------\ * 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.message; import org.perfcake.PerfCakeException; import org.perfcake.TestSetup; import org.perfcake.TestUtil; import org.perfcake.message.sequence.SequenceManager; import org.perfcake.scenario.Scenario; import org.perfcake.scenario.ScenarioLoader; import org.perfcake.scenario.ScenarioRetractor; import org.testng.Assert; import org.testng.annotations.Test; import java.util.List; import java.util.Properties; /** * Tests integration of message templates. * * @author <a href="mailto:pavel.macik@gmail.com">Pavel Macík</a> */ @Test(groups = { "integration" }) public class MessageTemplateTest extends TestSetup { private static final String HELLO_NAME = "hello"; private static final String HELLO_VALUE = "hello.value"; private static final String NUMBER_NAME = "number"; private static final String TEST_HEADER = "testHeader"; private static final String TEST_PROPERTY = "testProperty"; @Test public void messageTemplateFilteringTest() throws PerfCakeException { final ScenarioLoader sl = new ScenarioLoader(); final Scenario scenario = sl.load("test-scenario-unfiltered"); final ScenarioRetractor sr = new ScenarioRetractor(scenario); final List<MessageTemplate> messageStore = sr.getMessageStore(); final SequenceManager sequenceManager = sr.getSequenceManager(); Assert.assertEquals(messageStore.size(), 7); Assert.assertEquals(System.getProperty("defaultProperty"), "default-property-value"); Assert.assertEquals(System.getProperty("composedProperty"), "default-property-value2"); final Properties propertiesToBeFiltered = new Properties(); sequenceManager.getSnapshot().forEach(propertiesToBeFiltered::put); propertiesToBeFiltered.setProperty(HELLO_NAME, HELLO_VALUE); propertiesToBeFiltered.setProperty(NUMBER_NAME, "1"); final Message m0 = messageStore.get(0).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m0.getPayload(), "1 hello.value 1 " + System.getenv("JAVA_HOME") + " " + System.getProperty("java.runtime.name") + " default-property-value2 I'm a fish!"); Assert.assertEquals(m0.getHeader(TEST_HEADER), "1"); Assert.assertEquals(m0.getProperty(TEST_PROPERTY), "0"); Message m1 = messageStore.get(1).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m1.getPayload(), "1null"); propertiesToBeFiltered.setProperty(NUMBER_NAME, "2"); m1 = messageStore.get(1).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m1.getPayload(), "2null"); final Message m2 = messageStore.get(2).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m2.getPayload(), "null"); final Message m3 = messageStore.get(3).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m3.getPayload(), "null"); final Message m4 = messageStore.get(4).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m4.getPayload(), "nullnull"); final Message m5 = messageStore.get(5).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m5.getPayload(), "nullnull"); final Message m6 = messageStore.get(6).getFilteredMessage(propertiesToBeFiltered); Assert.assertEquals(m6.getPayload(), "default-property-value2"); } @Test public void staticTemplateTest() { final String runtimeName = System.getProperty("java.runtime.name"); final Message m = new Message(); m.setPayload("${props.java.runtime.name}${aa}"); m.setHeader("runtime", "${props.java.runtime.name}${aa}"); m.setProperty("name", "${props.java.runtime.name}${aa}"); final MessageTemplate t = new MessageTemplate(m, 1, null); final Properties p = TestUtil.props("aa", "1"); final Message m2 = t.getFilteredMessage(p); Assert.assertEquals(m2.getPayload(), runtimeName + "null"); Assert.assertEquals(m2.getHeader("runtime"), runtimeName + "null"); Assert.assertEquals(m2.getProperty("name"), runtimeName + "null"); Assert.assertTrue(m2 != t.getFilteredMessage(p)); // we always get a different instance to be able to set headers properly } @Test public void dynamicPayloadTest() { final String runtimeName = System.getProperty("java.runtime.name"); final Message m = new Message(); m.setPayload("${props.java.runtime.name}@{aa}"); m.setHeader("runtime", "${props.java.runtime.name}${aa}"); m.setProperty("name", "${props.java.runtime.name}${aa}"); final MessageTemplate t = new MessageTemplate(m, 1, null); final Properties p = TestUtil.props("aa", "1"); final Message m2 = t.getFilteredMessage(p); Assert.assertEquals(m2.getPayload(), runtimeName + "1"); Assert.assertEquals(m2.getHeader("runtime"), runtimeName + "null"); Assert.assertEquals(m2.getProperty("name"), runtimeName + "null"); Assert.assertTrue(m2 != t.getFilteredMessage(p)); // we should be getting another instance } @Test public void dynamicHeaderTest() { final String runtimeName = System.getProperty("java.runtime.name"); final Message m = new Message(); m.setPayload("${props.java.runtime.name}${aa}"); m.setHeader("runtime", "${props.java.runtime.name}@{aa}"); m.setProperty("name", "${props.java.runtime.name}${aa}"); final MessageTemplate t = new MessageTemplate(m, 1, null); final Properties p = TestUtil.props("aa", "1"); final Message m2 = t.getFilteredMessage(p); Assert.assertEquals(m2.getPayload(), runtimeName + "null"); Assert.assertEquals(m2.getHeader("runtime"), runtimeName + "1"); Assert.assertEquals(m2.getProperty("name"), runtimeName + "null"); Assert.assertTrue(m2 != t.getFilteredMessage(p)); // we should be getting another instance } @Test public void dynamicPropertyTest() { final String runtimeName = System.getProperty("java.runtime.name"); final Message m = new Message(); m.setPayload("${props.java.runtime.name}${aa}"); m.setHeader("runtime", "${props.java.runtime.name}${aa}"); m.setProperty("name", "${props.java.runtime.name}@{aa}"); final MessageTemplate t = new MessageTemplate(m, 1, null); final Properties p = TestUtil.props("aa", "1"); final Message m2 = t.getFilteredMessage(p); Assert.assertEquals(m2.getPayload(), runtimeName + "null"); Assert.assertEquals(m2.getHeader("runtime"), runtimeName + "null"); Assert.assertEquals(m2.getProperty("name"), runtimeName + "1"); Assert.assertTrue(m2 != t.getFilteredMessage(p)); // we should be getting another instance } }