Skip to content

Commit 3e2ec51

Browse files
videnkzSylvainJuge
andauthored
fixed flaky test SPringAmqpBatchIT - solved problem with bean creation order (#3388)
* fixed flaky test SPringAmqpBatchIT - solved problem with bean creation order * add missing file header * remove useless import --------- Co-authored-by: Sylvain Juge <[email protected]>
1 parent 5ff1430 commit 3e2ec51

File tree

4 files changed

+59
-22
lines changed

4 files changed

+59
-22
lines changed

apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/SpringAmqpBatchIT.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@
1919
package co.elastic.apm.agent.rabbitmq;
2020

2121

22-
import co.elastic.apm.agent.tracer.configuration.MessagingConfiguration;
2322
import co.elastic.apm.agent.impl.transaction.Span;
2423
import co.elastic.apm.agent.impl.transaction.TraceContext;
2524
import co.elastic.apm.agent.impl.transaction.Transaction;
25+
import co.elastic.apm.agent.rabbitmq.components.batch.BatchListenerComponent;
2626
import co.elastic.apm.agent.rabbitmq.config.BatchConfiguration;
27-
import org.junit.Ignore;
27+
import co.elastic.apm.agent.tracer.configuration.MessagingConfiguration;
2828
import org.junit.Test;
2929
import org.junit.runner.RunWith;
3030
import org.springframework.amqp.rabbit.core.BatchingRabbitTemplate;
@@ -42,10 +42,9 @@
4242
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
4343
import static org.mockito.Mockito.doReturn;
4444

45-
@Ignore
4645
@RunWith(SpringRunner.class)
4746
@SpringBootTest
48-
@ContextConfiguration(classes = {BatchConfiguration.class}, initializers = {RabbitMqTestBase.Initializer.class})
47+
@ContextConfiguration(classes = {BatchConfiguration.class, BatchListenerComponent.class}, initializers = {RabbitMqTestBase.Initializer.class})
4948
public class SpringAmqpBatchIT extends RabbitMqTestBase {
5049

5150
@Autowired
@@ -158,7 +157,7 @@ public void testTransactionPerBatch() {
158157
.filter(span -> Objects.equals(span.getNameAsString(), "RabbitMQ SEND to <default>"))
159158
.collect(Collectors.toList());
160159
assertThat(sendSpans.size()).isEqualTo(2);
161-
sendSpans.forEach(span -> {
160+
sendSpans.forEach(span -> {
162161
assertThat(span.getType()).isEqualTo("messaging");
163162
assertThat(span.getTraceContext().getParentId()).isEqualTo(rootTraceTransaction.getTraceContext().getId());
164163
});
@@ -193,3 +192,4 @@ public void testTransactionPerBatch() {
193192
rootTraceTransaction.deactivate().end();
194193
}
195194
}
195+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/*
2+
* Licensed to Elasticsearch B.V. under one or more contributor
3+
* license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright
5+
* ownership. Elasticsearch B.V. licenses this file to you under
6+
* the Apache License, Version 2.0 (the "License"); you may
7+
* not use this file except in compliance with the License.
8+
* You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
*/
19+
package co.elastic.apm.agent.rabbitmq.components.batch;
20+
21+
import co.elastic.apm.agent.rabbitmq.TestConstants;
22+
import co.elastic.apm.agent.sdk.logging.Logger;
23+
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
24+
import co.elastic.apm.api.CaptureSpan;
25+
import org.springframework.amqp.core.Message;
26+
import org.springframework.amqp.rabbit.annotation.RabbitListener;
27+
import org.springframework.stereotype.Component;
28+
29+
import java.util.List;
30+
31+
import static co.elastic.apm.agent.rabbitmq.TestConstants.QUEUE_NAME;
32+
33+
@Component
34+
public class BatchListenerComponent {
35+
36+
public static final Logger logger = LoggerFactory.getLogger(BatchListenerComponent.class);
37+
38+
@RabbitListener(
39+
queues = TestConstants.QUEUE_NAME,
40+
containerFactory = "simpleRabbitListenerContainerFactory"
41+
)
42+
public void receiveWorkingBatch(List<Message> batchMessages) {
43+
logger.info("Received batch of size {} from '{}'", batchMessages.size(), QUEUE_NAME);
44+
batchMessages.forEach(message -> {
45+
logger.info("Message in 'spring-boot' batch: {}", message.getBody());
46+
testSpan();
47+
});
48+
}
49+
50+
@CaptureSpan(value = "testSpan", type = "custom", subtype = "anything", action = "test")
51+
public void testSpan() {
52+
}
53+
}

apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/BaseConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.beans.factory.annotation.Qualifier;
3131
import org.springframework.context.annotation.Bean;
3232
import org.springframework.context.annotation.Configuration;
33+
import org.springframework.context.annotation.Lazy;
3334
import org.springframework.core.env.Environment;
3435
import org.springframework.web.client.RestTemplate;
3536

apm-agent-plugins/apm-rabbitmq/apm-rabbitmq-spring/src/test/java/co/elastic/apm/agent/rabbitmq/config/BatchConfiguration.java

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@
1919
package co.elastic.apm.agent.rabbitmq.config;
2020

2121

22-
import co.elastic.apm.agent.rabbitmq.TestConstants;
2322
import co.elastic.apm.agent.sdk.logging.Logger;
2423
import co.elastic.apm.agent.sdk.logging.LoggerFactory;
25-
import org.springframework.amqp.core.Message;
2624
import org.springframework.amqp.core.Queue;
2725
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
28-
import org.springframework.amqp.rabbit.annotation.RabbitListener;
2926
import org.springframework.amqp.rabbit.batch.SimpleBatchingStrategy;
3027
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
3128
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
@@ -37,8 +34,6 @@
3734
import org.springframework.scheduling.TaskScheduler;
3835
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
3936

40-
import java.util.List;
41-
4237
import static co.elastic.apm.agent.rabbitmq.TestConstants.QUEUE_NAME;
4338

4439
@EnableRabbit
@@ -83,16 +78,4 @@ public Jackson2JsonMessageConverter converter() {
8378
public Queue queue() {
8479
return new Queue(QUEUE_NAME, false);
8580
}
86-
87-
@RabbitListener(
88-
queues = TestConstants.QUEUE_NAME,
89-
containerFactory = "simpleRabbitListenerContainerFactory"
90-
)
91-
public void receiveWorkingBatch(List<Message> batchMessages) {
92-
logger.info("Received batch of size {} from '{}'", batchMessages.size(), QUEUE_NAME);
93-
batchMessages.forEach(message -> {
94-
logger.info("Message in 'spring-boot' batch: {}", message.getBody());
95-
testSpan();
96-
});
97-
}
9881
}

0 commit comments

Comments
 (0)