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