/** * Copyright (C) 2012 Ness Computing, Inc. * * 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 com.nesscomputing.jms.activemq; import java.util.UUID; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.commons.lang3.ObjectUtils; import org.junit.Assert; import org.junit.Test; import com.google.common.collect.ImmutableMap; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Inject; import com.google.inject.name.Named; import com.nesscomputing.config.Config; import com.nesscomputing.config.ConfigModule; import com.nesscomputing.jms.JmsModule; import com.nesscomputing.logging.Log; import com.nesscomputing.service.discovery.client.ReadOnlyDiscoveryClient; import com.nesscomputing.service.discovery.client.ServiceInformation; import com.nesscomputing.service.discovery.testing.client.MockedReadOnlyDiscoveryClient; import com.nesscomputing.testing.lessio.AllowDNSResolution; @AllowDNSResolution public class ServiceDiscoveryTransportFactoryTest { private static final String QNAME = "disco-test-queue"; private static final Log LOG = Log.findLog(); String uniqueId = UUID.randomUUID().toString(); @Inject @Named("test") ConnectionFactory factory; @Test public void testDiscoveryUri() throws Exception { final ServiceInformation vmbrokerInfo = new ServiceInformation("vmbroker", null, UUID.randomUUID(), ImmutableMap.of("uri", "vm://disco-test-broker-" + uniqueId)); final Config config = Config.getFixedConfig(ImmutableMap.of("ness.jms.connection-url", "srvc://vmbroker?discoveryId=%s")); Guice.createInjector(new AbstractModule() { @Override protected void configure() { binder().requireExplicitBindings(); binder().disableCircularProxies(); install (new ConfigModule(config)); install (new JmsModule(config, "test")); install (new DiscoveryJmsModule(config)); bind (ReadOnlyDiscoveryClient.class).toInstance( MockedReadOnlyDiscoveryClient.builder().addServiceInformation(vmbrokerInfo).build()); } }).injectMembers(this); final ConnectionFactory directFactory = new ActiveMQConnectionFactory("vm://disco-test-broker-" + uniqueId + "?broker.persistent=false"); final Connection directConnection = directFactory.createConnection(); directConnection.start(); try { sendTestMessage(directConnection); consumeTestMessage(); } finally { directConnection.stop(); directConnection.close(); } } private void consumeTestMessage() throws Exception { final Connection connection = factory.createConnection(); connection.start(); try { final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); final MessageConsumer consumer = session.createConsumer(session.createQueue(QNAME)); final Message message = consumer.receive(1000); LOG.info(ObjectUtils.toString(message, "<no message>")); Assert.assertEquals(uniqueId, ((TextMessage) message).getText()); } finally { connection.stop(); connection.close(); } } private void sendTestMessage(final Connection directConnection) throws Exception { final Session session = directConnection.createSession(false, Session.AUTO_ACKNOWLEDGE); final MessageProducer producer = session.createProducer(session.createQueue(QNAME)); producer.send(session.createTextMessage(uniqueId)); session.close(); } }