1
+ package com .ericsson .ei .rabbitmq .configuration ;
2
+
3
+ import static org .junit .Assert .assertEquals ;
4
+
5
+ import java .io .File ;
6
+ import java .util .ArrayList ;
7
+ import java .util .List ;
8
+
9
+ import org .junit .Ignore ;
10
+ import org .slf4j .Logger ;
11
+ import org .slf4j .LoggerFactory ;
12
+ import org .springframework .amqp .core .BindingBuilder ;
13
+ import org .springframework .amqp .core .Queue ;
14
+ import org .springframework .amqp .core .TopicExchange ;
15
+ import org .springframework .amqp .rabbit .connection .CachingConnectionFactory ;
16
+ import org .springframework .amqp .rabbit .core .RabbitAdmin ;
17
+ import org .springframework .amqp .rabbit .core .RabbitTemplate ;
18
+ import org .springframework .amqp .rabbit .listener .SimpleMessageListenerContainer ;
19
+ import org .springframework .beans .factory .annotation .Autowired ;
20
+ import org .springframework .beans .factory .annotation .Qualifier ;
21
+ import org .springframework .beans .factory .annotation .Value ;
22
+ import org .springframework .test .context .TestPropertySource ;
23
+ import org .springframework .util .SocketUtils ;
24
+
25
+ import com .ericsson .ei .handlers .EventHandler ;
26
+ import com .ericsson .ei .handlers .RmqHandler ;
27
+ import com .ericsson .ei .utils .AMQPBrokerManager ;
28
+ import com .ericsson .ei .utils .FunctionalTestBase ;
29
+
30
+ import cucumber .api .java .en .Given ;
31
+ import cucumber .api .java .en .Then ;
32
+ import cucumber .api .java .en .When ;
33
+
34
+ @ Ignore
35
+ @ TestPropertySource (properties = {
36
+ "spring.data.mongodb.database: RabbitMQConfigurationTestSteps" ,
37
+ "missedNotificationDataBaseName: RabbitMQConfigurationTestSteps-missedNotifications" ,
38
+ "rabbitmq.exchange.name: RabbitMQConfigurationTestSteps-exchange" ,
39
+ "rabbitmq.consumerName: RabbitMQConfigurationTestStepsConsumer" })
40
+ public class RabbitMQConfigurationTestSteps extends FunctionalTestBase {
41
+
42
+ @ Value ("${rabbitmq.port}" )
43
+ private String rabbitMQPort ;
44
+
45
+ private static final Logger LOGGER = LoggerFactory .getLogger (RabbitMQConfigurationTestSteps .class );
46
+ private static final String EIFFEL_EVENTS = "src/functionaltests/resources/eiffel_events_for_test.json" ;
47
+
48
+ private static final String ROUTING_KEY_1 = "routing-key-1" ;
49
+ private static final String ROUTING_KEY_2 = "routing-key-2" ;
50
+
51
+ private AMQPBrokerManager amqpBroker ;
52
+
53
+ @ Autowired
54
+ @ Qualifier ("bindToQueueForRecentEvents" )
55
+ SimpleMessageListenerContainer container ;
56
+
57
+ @ Autowired
58
+ EventHandler eventHandler ;
59
+
60
+ @ Given ("^We are connected to message bus$" )
61
+ public void connect_to_message_bus () throws Exception {
62
+ int port = SocketUtils .findAvailableTcpPort ();
63
+ String config = "src/functionaltests/resources/configs/qpidConfig.json" ;
64
+ File qpidConfig = new File (config );
65
+ amqpBroker = new AMQPBrokerManager (qpidConfig .getAbsolutePath (), port );
66
+ amqpBroker .startBroker ();
67
+
68
+ RmqHandler rmqHandler = eventManager .getRmqHandler ();
69
+ rmqHandler .setPort (port );
70
+ rmqHandler .connectionFactory ();
71
+ rmqHandler .getCachingConnectionFactory ().createConnection ();
72
+
73
+ RabbitAdmin rabbitAdmin = createExchange (rmqHandler );
74
+ RabbitTemplate rabbitTemplate = rabbitAdmin .getRabbitTemplate ();
75
+
76
+ rmqHandler .setRabbitTemplate (rabbitTemplate );
77
+ rmqHandler .getContainer ().setRabbitAdmin (rabbitAdmin );
78
+ rmqHandler .getContainer ().setConnectionFactory (rmqHandler .getCachingConnectionFactory ());
79
+ rmqHandler .getContainer ().setQueueNames (rmqHandler .getQueueName ());
80
+ assertEquals ("Expected message bus to be up" , true , amqpBroker .isRunning );
81
+ }
82
+
83
+ @ When ("^events are published using different routing keys$" )
84
+ public void events_are_published_using_different_routing_keys () throws Exception {
85
+ LOGGER .debug ("Sending eiffel events" );
86
+ List <String > eventNames = getEventNamesToSend ();
87
+ eventNames .remove (1 );
88
+ eventManager .getRmqHandler ().rabbitMqTemplate ().setRoutingKey (ROUTING_KEY_1 );
89
+ eventManager .sendEiffelEvents (EIFFEL_EVENTS , eventNames );
90
+ eventNames .clear ();
91
+ eventNames = getEventNamesToSend ();
92
+ eventNames .remove (0 );
93
+ eventManager .getRmqHandler ().rabbitMqTemplate ().setRoutingKey (ROUTING_KEY_2 );
94
+ eventManager .sendEiffelEvents (EIFFEL_EVENTS , eventNames );
95
+ }
96
+
97
+ @ Then ("^an aggregated object should be created$" )
98
+ public void an_aggregated_object_should_be_created () throws Exception {
99
+ List <String > arguments = new ArrayList <>();
100
+ arguments .add ("_id=6acc3c87-75e0-4b6d-88f5-b1a5d4e62b43" );
101
+ arguments .add ("uri=https://myrepository.com/mySubSystemArtifact" );
102
+ List <String > missingArguments = dbManager .verifyAggregatedObjectInDB (arguments );
103
+ assertEquals ("The following arguments are missing in the Aggregated Object in mongoDB: "
104
+ + missingArguments .toString (), 0 , missingArguments .size ());
105
+ }
106
+
107
+ /**
108
+ * This method collects all the event names of events we will send to the
109
+ * message bus.
110
+ */
111
+ protected List <String > getEventNamesToSend () {
112
+ List <String > eventNames = new ArrayList <>();
113
+ eventNames .add ("event_EiffelArtifactCreatedEvent_3" );
114
+ eventNames .add ("event_EiffelArtifactPublishedEvent_3" );
115
+ return eventNames ;
116
+ }
117
+
118
+ private RabbitAdmin createExchange (final RmqHandler rmqHandler ) {
119
+ final String exchangeName = rmqHandler .getExchangeName ();
120
+ final String queueName = rmqHandler .getQueueName ();
121
+ final CachingConnectionFactory ccf = rmqHandler .getCachingConnectionFactory ();
122
+ LOGGER .info ("Creating exchange: {} and queue: {}" , exchangeName , queueName );
123
+ RabbitAdmin admin = new RabbitAdmin (ccf );
124
+ Queue queue = new Queue (queueName , true );
125
+ admin .declareQueue (queue );
126
+ final TopicExchange exchange = new TopicExchange (exchangeName , true , false );
127
+ admin .declareExchange (exchange );
128
+ admin .declareBinding (BindingBuilder .bind (queue ).to (exchange ).with (ROUTING_KEY_1 ));
129
+ admin .declareBinding (BindingBuilder .bind (queue ).to (exchange ).with (ROUTING_KEY_2 ));
130
+ admin .initialize ();
131
+ admin .getQueueProperties (queueName );
132
+ RabbitTemplate rabbitTemplate = admin .getRabbitTemplate ();
133
+ rabbitTemplate .setExchange (exchangeName );
134
+ rabbitTemplate .setQueue (queueName );
135
+ rabbitTemplate .setRoutingKey (ROUTING_KEY_1 );
136
+ return admin ;
137
+ }
138
+
139
+ }
0 commit comments