/* * Copyright 2002-2017 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.springframework.integration.jdbc.store; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.After; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.integration.support.MessageBuilder; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabase; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType; /** * @author Gunnar Hillert */ public class JdbcMessageStoreRegionTests { private static EmbeddedDatabase dataSource; private JdbcTemplate jdbcTemplate; private JdbcMessageStore messageStore1; private JdbcMessageStore messageStore2; @BeforeClass public static void setupDatabase() { dataSource = new EmbeddedDatabaseBuilder() .setType(EmbeddedDatabaseType.H2) .addScript("classpath:/org/springframework/integration/jdbc/schema-h2.sql") .build(); } @AfterClass public static void shutDownDatabase() { dataSource.shutdown(); } @Before public void beforeTest() { this.jdbcTemplate = new JdbcTemplate(dataSource); this.messageStore1 = new JdbcMessageStore(dataSource); messageStore1.setRegion("region1"); this.messageStore2 = new JdbcMessageStore(dataSource); this.messageStore2.setRegion("region2"); } @After public void afterTest() { this.jdbcTemplate.execute("delete from INT_GROUP_TO_MESSAGE"); this.jdbcTemplate.execute("delete from INT_MESSAGE"); this.jdbcTemplate.execute("delete from INT_MESSAGE_GROUP"); } @Test public void testVerifyMessageCount() throws Exception { messageStore1.addMessage(MessageBuilder.withPayload("payload1").build()); messageStore1.addMessage(MessageBuilder.withPayload("payload2").build()); messageStore2.addMessage(MessageBuilder.withPayload("payload1").build()); messageStore2.addMessage(MessageBuilder.withPayload("payload2").build()); assertEquals(2, messageStore1.getMessageCount()); assertEquals(2, messageStore2.getMessageCount()); } @Test public void testInsertNullRegion() throws Exception { try { messageStore1.setRegion(null); } catch (IllegalArgumentException e) { Assert.assertEquals("Region must not be null or empty.", e.getMessage()); return; } Assert.fail("Expected an IllegalArgumentException to be thrown."); } @Test public void testVerifyMessageGroupCount() throws Exception { messageStore1.addMessageToGroup("group1", MessageBuilder.withPayload("payload1").build()); messageStore1.addMessageToGroup("group2", MessageBuilder.withPayload("payload2").build()); messageStore2.addMessageToGroup("group1", MessageBuilder.withPayload("payload1").build()); messageStore2.addMessageToGroup("group2", MessageBuilder.withPayload("payload2").build()); assertEquals(1, messageStore1.getMessageGroup("group1").getMessages().size()); assertEquals(1, messageStore2.getMessageGroup("group1").getMessages().size()); assertEquals(1, messageStore1.getMessageGroup("group2").getMessages().size()); assertEquals(1, messageStore2.getMessageGroup("group2").getMessages().size()); assertEquals(2, messageStore1.getMessageCount()); assertEquals(2, messageStore2.getMessageCount()); } @Test public void testRegionSetToMessageGroup() throws Exception { messageStore1.addMessageToGroup("group1", MessageBuilder.withPayload("payload1").build()); List<String> regions = jdbcTemplate.query("Select * from INT_MESSAGE_GROUP where REGION = 'region1'", (RowMapper<String>) (rs, rowNum) -> rs.getString("REGION")); assertEquals(1, regions.size()); assertEquals("region1", regions.get(0)); messageStore2.addMessageToGroup("group1", MessageBuilder.withPayload("payload1").build()); List<String> regions2 = jdbcTemplate.query("Select * from INT_MESSAGE_GROUP where REGION = 'region2'", (RowMapper<String>) (rs, rowNum) -> rs.getString("REGION")); assertEquals(1, regions2.size()); assertEquals("region2", regions2.get(0)); } @Test public void testRemoveMessageGroup() throws Exception { messageStore1.addMessageToGroup("group1", MessageBuilder.withPayload("payload1").build()); messageStore1.addMessageToGroup("group2", MessageBuilder.withPayload("payload2").build()); messageStore2.addMessageToGroup("group1", MessageBuilder.withPayload("payload1").build()); messageStore2.addMessageToGroup("group2", MessageBuilder.withPayload("payload2").build()); messageStore1.removeMessageGroup("group1"); assertEquals(1, messageStore1.getMessageGroupCount()); assertEquals(2, messageStore2.getMessageGroupCount()); } }