I have to write unit test for my producer and consumer in ActiveMQ Artemis. I'm using publish-subscribe model. How do I write the test cases for both?
The following is my producer code:
@Component
public class OrderPublisher {
@Autowired
JmsTemplate jmsTemplate;
private static final Logger log=LoggerFactory.getLogger(OrderPublisher.class) ;
@Value("${jsa.activemq.topic}")
String orderTopic;
public void sendOrderData(String orderData) {
log.info("sending message to queue");
jmsTemplate.convertAndSend(orderTopic,orderData);
}
}
This is my application properties for producer:
spring.jms.pub-sub-domain=true
jsa.activemq.topic=bt-order-queue
spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=admin
spring.artemis.password=admin
This is my code for consumer which is in a separate project.
@Component
public class OrderSubscriber {
private final RestTemplate restTemplate = new RestTemplate();
ObjectMapper objectMapper= new ObjectMapper();
private static final Logger log = LoggerFactory.getLogger(OrderSubscriber.class);
@JmsListener(destination = "${jsa.activemq.topic}")
public void receiveMessage(String order) throws JsonMappingException, JsonProcessingException {
System.out.println("order data from queue::"+order);
}
}
Properties file for consumer:
spring.artemis.mode=native
spring.artemis.host=localhost
spring.artemis.port=61616
spring.artemis.user=admin
spring.artemis.password=admin
spring.jms.pub-sub-domain=true
jsa.activemq.topic=bt-order-queue
This what I'm trying for prodcuer:
@RunWith(SpringRunner.class)
@SpringBootTest
class ApplicationTests {
@Autowired
OrderPublisher publisher;
@Rule
public EmbeddedActiveMQResource resource = new EmbeddedActiveMQResource();
//ActiveMQProducerResource producer = new ActiveMQProducerResource(resource.getVmURL(), "bt-order-queue");
//ActiveMQConsumerResource consumer = new ActiveMQConsumerResource(resource.getVmURL(), "bt-order-queue");
@Before
public void before() {
resource.start();
resource.createQueue("bt-order-queue");
}
@Test
void contextLoads() {
publisher.sendOrderData("test");
ClientMessage cons=resource.receiveMessage("bt-order-queue", 100000);
System.out.println("cons::"+cons.toString());
}
}
But as I'm lacking information on how to write it, I'm just trying to figure out a way