import javax.annotation.concurrent.GuardedBy;
import javax.annotation.concurrent.ThreadSafe;
+import org.opendaylight.protocol.bgp.parser.BGPDocumentedException;
import org.opendaylight.protocol.bgp.parser.BGPError;
+import org.opendaylight.protocol.bgp.parser.BGPParsingException;
import org.opendaylight.protocol.bgp.parser.BGPSessionListener;
-import org.opendaylight.protocol.bgp.parser.impl.BGPMessageFactoryImpl;
-import org.opendaylight.protocol.bgp.parser.impl.SingletonProviderContext;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
import org.opendaylight.protocol.bgp.rib.impl.BGP;
import org.opendaylight.protocol.concepts.ListenerRegistration;
-import org.opendaylight.protocol.framework.DeserializerException;
-import org.opendaylight.protocol.framework.DocumentedException;
-import org.opendaylight.protocol.framework.ProtocolMessageFactory;
import org.opendaylight.protocol.framework.ReconnectStrategy;
+import org.opendaylight.protocol.framework.ReconnectStrategyFactory;
import org.opendaylight.protocol.util.ByteArray;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130918.NotifyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.NotifyBuilder;
import org.opendaylight.yangtools.yang.binding.Notification;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import com.google.common.collect.Lists;
import com.google.common.eventbus.EventBus;
*/
@ThreadSafe
public final class BGPMock implements BGP, Closeable {
- static final Notification connectionLostMagicMessage = new NotifyBuilder().setErrorCode(BGPError.CEASE.getCode()).build();
+
+ private static final Logger LOG = LoggerFactory.getLogger(BGPMock.class);
+
+ static final Notification CONNECTION_LOST_MAGIC_MSG = new NotifyBuilder().setErrorCode(BGPError.CEASE.getCode()).build();
@GuardedBy("this")
private final List<byte[]> allPreviousByteMessages;
private final List<Notification> allPreviousBGPMessages;
private final EventBus eventBus;
+
@GuardedBy("this")
private final List<EventBusRegistration> openRegistrations = Lists.newLinkedList();
- public BGPMock(final EventBus eventBus, final List<byte[]> bgpMessages) {
+ public BGPMock(final EventBus eventBus, final MessageRegistry registry, final List<byte[]> bgpMessages) {
this.allPreviousByteMessages = Lists.newLinkedList(bgpMessages);
this.eventBus = eventBus;
- this.allPreviousBGPMessages = this.parsePrevious(this.allPreviousByteMessages);
+ this.allPreviousBGPMessages = this.parsePrevious(registry, this.allPreviousByteMessages);
}
- private List<Notification> parsePrevious(final List<byte[]> msgs) {
+ private List<Notification> parsePrevious(final MessageRegistry registry, final List<byte[]> msgs) {
final List<Notification> messages = Lists.newArrayList();
- final ProtocolMessageFactory<Notification> parser = new BGPMessageFactoryImpl(
- SingletonProviderContext.getInstance().getMessageRegistry());
try {
for (final byte[] b : msgs) {
final byte[] body = ByteArray.cutBytes(b, 1);
- messages.addAll(parser.parse(body));
+ messages.add(registry.parseMessage(body));
}
- } catch (final DeserializerException e) {
- e.printStackTrace();
- } catch (final DocumentedException e) {
- e.printStackTrace();
+ } catch (final BGPDocumentedException | BGPParsingException e) {
+ LOG.warn("Failed to parse message {}", e);
}
return messages;
}
- /**
- * @param listener BGPListener
- * @return ListenerRegistration
- */
- @Override
- public synchronized ListenerRegistration<BGPSessionListener> registerUpdateListener(final BGPSessionListener listener,
- final ReconnectStrategy strategy) {
- return EventBusRegistration.createAndRegister(this.eventBus, listener, this.allPreviousBGPMessages);
- }
-
public synchronized void insertConnectionLostEvent() {
- this.insertMessage(connectionLostMagicMessage);
+ this.insertMessage(CONNECTION_LOST_MAGIC_MSG);
}
public synchronized void insertMessages(final List<Notification> messages) {
public EventBus getEventBus() {
return this.eventBus;
}
+
+ @Override
+ public ListenerRegistration<BGPSessionListener> registerUpdateListener(
+ final BGPSessionListener listener,
+ final ReconnectStrategyFactory tcpStrategyFactory,
+ final ReconnectStrategy sessionStrategy) {
+ return EventBusRegistration.createAndRegister(this.eventBus, listener, this.allPreviousBGPMessages);
+ }
}