LOG.info("Binding Eid context[{}]", LOCAL_MAPPING_CONTEXT);
bind(EidMappingContext.class)
.annotatedWith(Names.named(LOCAL_MAPPING_CONTEXT))
- .toInstance(new EidMappingContext(LOCAL_MAPPING_CONTEXT));
+ .toInstance(new EidMappingContext(LOCAL_MAPPING_CONTEXT, "local-mapping-"));
LOG.info("Binding Eid context[{}]", REMOTE_MAPPING_CONTEXT);
bind(EidMappingContext.class)
.annotatedWith(Names.named(REMOTE_MAPPING_CONTEXT))
- .toInstance(new EidMappingContext(REMOTE_MAPPING_CONTEXT));
+ .toInstance(new EidMappingContext(REMOTE_MAPPING_CONTEXT, "remote-mapping-"));
LOG.info("Binding Adjacencies context");
bind(AdjacenciesMappingContext.class)
package io.fd.hc2vpp.lisp.context.util;
import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkState;
import com.google.common.base.Optional;
import io.fd.hc2vpp.lisp.translate.util.EidTranslator;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.MappingId;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* Utility class allowing {@link MappingId} to {@link Eid} mapping
private final KeyedInstanceIdentifier<org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.eid.mapping.context.rev160801.contexts.EidMappingContext, EidMappingContextKey>
namingContextIid;
+ private final String artificialPrefix;
/**
* Create new naming context
*
* @param instanceName name of this context instance. Will be used as list item identifier within context data tree
*/
- public EidMappingContext(@Nonnull final String instanceName) {
+ public EidMappingContext(@Nonnull final String instanceName, @Nonnull final String artificialPrefix) {
namingContextIid = InstanceIdentifier.create(Contexts.class).child(
org.opendaylight.yang.gen.v1.urn.honeycomb.params.xml.ns.yang.eid.mapping.context.rev160801.contexts.EidMappingContext.class,
new EidMappingContextKey(instanceName));
+ this.artificialPrefix = artificialPrefix;
}
/**
@Nonnull final MappingContext mappingContext) {
final Optional<Mappings> read = mappingContext.read(namingContextIid.child(Mappings.class));
- checkState(read.isPresent(), "Mapping for eid: %s is not present. But should be", remoteEid);
+ if (!read.isPresent()) {
+ final MappingId artificialMappingId = getMappingId(remoteEid.toString(), artificialPrefix);
+ addEid(artificialMappingId, remoteEid, mappingContext);
+ return artificialMappingId;
+ }
return read.get().getMapping()
.stream()
.collect(SINGLE_ITEM_COLLECTOR).getId();
}
+ private static MappingId getMappingId(final String eidValue, final String artificialPrefix) {
+ return new MappingId(artificialPrefix.concat(eidValue));
+ }
+
/**
* Retrieve name for mapping stored provided mappingContext instance.
*
@Nonnull final MappingContext mappingContext) {
final Optional<Mappings> read = mappingContext.read(namingContextIid.child(Mappings.class));
- //don't create artificial name as naming context, to not create reference to some artificial(in vpp non-existing)eid
- checkState(read.isPresent(), "Mapping for eid: %s is not present. But should be", eid);
+ if (!read.isPresent()) {
+ final MappingId artificialMappingId = getMappingId(eid.toString(), artificialPrefix);
+ addEid(artificialMappingId, eid, mappingContext);
+ return artificialMappingId;
+ }
return read.get().getMapping().stream()
.filter(mapping -> compareEids(mapping.getEid(), eid))
package io.fd.hc2vpp.lisp.context.util;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import io.fd.hc2vpp.lisp.util.EidMappingContextHelper;
import io.fd.honeycomb.translate.MappingContext;
import org.junit.Before;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.local.mapping.Eid;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.lisp.rev170315.dp.subtable.grouping.local.mappings.local.mapping.EidBuilder;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
public class EidMappingContextTest implements EidMappingContextHelper {
private static final String EID_MAPPING_CONTEXT_NAME = "eidMappingContext";
@Before
public void init() {
MockitoAnnotations.initMocks(this);
- eidMappingContext = new EidMappingContext(EID_MAPPING_CONTEXT_NAME);
+ eidMappingContext = new EidMappingContext(EID_MAPPING_CONTEXT_NAME, "eid-ctx-");
localEid =
new EidBuilder().setAddress(new Ipv4Builder().setIpv4(new Ipv4Address("192.168.2.1")).build()).build();
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.when;
+import io.fd.hc2vpp.common.test.read.ListReaderCustomizerTest;
+import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
import io.fd.hc2vpp.lisp.context.util.AdjacenciesMappingContext;
import io.fd.hc2vpp.lisp.context.util.EidMappingContext;
import io.fd.hc2vpp.lisp.translate.util.EidMetadataProvider;
import io.fd.hc2vpp.lisp.util.AdjacencyMappingContextTestHelper;
import io.fd.hc2vpp.lisp.util.EidMappingContextHelper;
import io.fd.honeycomb.translate.spi.read.ReaderCustomizer;
-import io.fd.hc2vpp.common.translate.util.ByteDataTranslator;
-import io.fd.hc2vpp.common.test.read.ListReaderCustomizerTest;
import io.fd.vpp.jvpp.core.dto.LispAdjacenciesGetReply;
import io.fd.vpp.jvpp.core.types.LispAdjacency;
import java.util.List;
@Override
protected ReaderCustomizer<Adjacency, AdjacencyBuilder> initCustomizer() {
- return new AdjacencyCustomizer(api, new EidMappingContext("local-mapping-context"),
- new EidMappingContext("remote-mapping-context"),
+ return new AdjacencyCustomizer(api, new EidMappingContext("local-mapping-context", "local-mapping-"),
+ new EidMappingContext("remote-mapping-context", "remote-mapping-"),
new AdjacenciesMappingContext("adjacencies-mapping-context"));
}
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import io.fd.hc2vpp.common.test.write.WriterCustomizerTest;
import io.fd.hc2vpp.lisp.context.util.AdjacenciesMappingContext;
import io.fd.hc2vpp.lisp.context.util.EidMappingContext;
import io.fd.hc2vpp.lisp.util.EidMappingContextHelper;
-import io.fd.hc2vpp.common.test.write.WriterCustomizerTest;
import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacency;
import io.fd.vpp.jvpp.core.dto.LispAddDelAdjacencyReply;
import org.junit.Before;
@Before
public void init() {
- localMappingContext = new EidMappingContext("local-mapping-context");
- remoteMappingContext = new EidMappingContext("remote-mapping-context");
+ localMappingContext = new EidMappingContext("local-mapping-context", "local-mapping-");
+ remoteMappingContext = new EidMappingContext("remote-mapping-context", "remote-mapping-");
customizer = new AdjacencyCustomizer(api, localMappingContext, remoteMappingContext, adjacenciesMappingContext);
emptyId = InstanceIdentifier.create(Adjacency.class);