From 72d39b9cf9eb93893e7871dcd7c61a4985e220aa Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Wed, 20 Jun 2018 09:57:15 +0200 Subject: HC2VPP-317: remove FibTableService After implementing FIB table management in SRv6 and routing FibTableService is no longer necessary and can be removed. Change-Id: I797ac52d5ed8ee1c6bf901895080aa06e5ac9016 Signed-off-by: Michal Cmarada --- .../hc2vpp/fib/management/FibManagementModule.java | 17 ---- .../fib/management/services/FibTableService.java | 58 ----------- .../management/services/FibTableServiceImpl.java | 110 --------------------- .../services/FibTableServiceProvider.java | 38 ------- .../services/FibTableServiceImplTest.java | 103 ------------------- 5 files changed, 326 deletions(-) delete mode 100644 fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableService.java delete mode 100644 fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImpl.java delete mode 100644 fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceProvider.java delete mode 100644 fib-management/fib-management-impl/src/test/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImplTest.java (limited to 'fib-management') diff --git a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/FibManagementModule.java b/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/FibManagementModule.java index 462a1e4f6..b889c16a9 100644 --- a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/FibManagementModule.java +++ b/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/FibManagementModule.java @@ -16,18 +16,12 @@ package io.fd.hc2vpp.fib.management; -import com.google.common.annotations.VisibleForTesting; import com.google.inject.AbstractModule; -import com.google.inject.Provider; -import com.google.inject.Singleton; import com.google.inject.multibindings.Multibinder; import io.fd.hc2vpp.fib.management.read.FibManagementReaderFactory; -import io.fd.hc2vpp.fib.management.services.FibTableService; -import io.fd.hc2vpp.fib.management.services.FibTableServiceProvider; import io.fd.hc2vpp.fib.management.write.FibManagementWriterFactory; import io.fd.honeycomb.translate.read.ReaderFactory; import io.fd.honeycomb.translate.write.WriterFactory; -import javax.annotation.Nonnull; import net.jmob.guice.conf.core.ConfigurationModule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,23 +32,12 @@ import org.slf4j.LoggerFactory; public class FibManagementModule extends AbstractModule { private static final Logger LOG = LoggerFactory.getLogger(FibManagementModule.class); - private final Class> fibTableServiceProvider; - - public FibManagementModule() { - this(FibTableServiceProvider.class); - } - - @VisibleForTesting - protected FibManagementModule(@Nonnull final Class> fibTableServiceProvider) { - this.fibTableServiceProvider = fibTableServiceProvider; - } @Override protected void configure() { LOG.info("Starting FibManagementModule initialization"); // requests injection of properties install(ConfigurationModule.create()); - bind(FibTableService.class).toProvider(fibTableServiceProvider).in(Singleton.class); LOG.debug("Injecting FibManagementModule reader factories"); // creates reader factory binding diff --git a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableService.java b/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableService.java deleted file mode 100644 index eef4df7fa..000000000 --- a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableService.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.hc2vpp.fib.management.services; - -import static java.lang.String.format; - -import io.fd.honeycomb.translate.ModificationCache; -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.write.WriteFailedException; -import javax.annotation.Nonnegative; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; - -public interface FibTableService { - - /** - * Checks whether FIB table with provided index exist in VPP - * - * @throws ReadFailedException if there was an error while reading FIB tables - * @throws FibTableService.FibTableDoesNotExistException if requested index does not exist - */ - void checkTableExist(@Nonnegative final int index, @Nonnull final ModificationCache cache) - throws ReadFailedException, FibTableService.FibTableDoesNotExistException; - - /** - * Writes FIB table in VPP - * - * @param identifier id of currently processed data - * @param tableId table Id to be written in VPP - * @param tableName name of the FIB table that will be added - * @param isIpv6 true if adding IPv6 FIB table, false if adding IPv4 table - * @throws WriteFailedException if there was an error while writing FIB tables - */ - @Deprecated - void write(InstanceIdentifier identifier, @Nonnegative int tableId, @Nonnull String tableName, boolean isIpv6) - throws WriteFailedException; - - class FibTableDoesNotExistException extends Exception { - - public FibTableDoesNotExistException(final int index) { - super(format("Fib table with index %s does not exist", index)); - } - } -} diff --git a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImpl.java b/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImpl.java deleted file mode 100644 index 01d264189..000000000 --- a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImpl.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.hc2vpp.fib.management.services; - -import static io.fd.honeycomb.translate.util.read.cache.EntityDumpExecutor.NO_PARAMS; - -import io.fd.hc2vpp.common.translate.util.FutureJVppCustomizer; -import io.fd.hc2vpp.common.translate.util.JvppReplyConsumer; -import io.fd.hc2vpp.fib.management.FibManagementIIds; -import io.fd.hc2vpp.fib.management.request.FibTableRequest; -import io.fd.honeycomb.translate.ModificationCache; -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.util.read.cache.DumpCacheManager; -import io.fd.honeycomb.translate.write.WriteFailedException; -import io.fd.vpp.jvpp.core.dto.Ip6FibDetailsReplyDump; -import io.fd.vpp.jvpp.core.dto.Ip6FibDump; -import io.fd.vpp.jvpp.core.dto.IpFibDetailsReplyDump; -import io.fd.vpp.jvpp.core.dto.IpFibDump; -import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import java.util.Collections; -import java.util.stream.Stream; -import javax.annotation.Nonnegative; -import javax.annotation.Nonnull; -import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -// Todo HC2VPP-317: FibTableService was created as a temporary workaround to write Fib tables in VPP. -// We need to implement proper support for Fib table management. -public class FibTableServiceImpl extends FutureJVppCustomizer implements FibTableService, JvppReplyConsumer { - - private static final Logger LOG = LoggerFactory.getLogger(FibTableServiceImpl.class); - private final DumpCacheManager v4DumpManager; - private final DumpCacheManager v6DumpManager; - - public FibTableServiceImpl(@Nonnull FutureJVppCore futureJVppCore) { - super(futureJVppCore); - v4DumpManager = new DumpCacheManager.DumpCacheManagerBuilder() - .acceptOnly(IpFibDetailsReplyDump.class) - .withExecutor((identifier, params) -> getReplyForRead( - futureJVppCore.ipFibDump(new IpFibDump()).toCompletableFuture(), identifier)) - .build(); - v6DumpManager = new DumpCacheManager.DumpCacheManagerBuilder() - .acceptOnly(Ip6FibDetailsReplyDump.class) - .withExecutor((identifier, params) -> getReplyForRead( - futureJVppCore.ip6FibDump(new Ip6FibDump()).toCompletableFuture(), identifier)) - .build(); - } - - @Override - public void write(InstanceIdentifier identifier, @Nonnegative int tableId, @Nonnull String tableName, - boolean isIpv6) throws WriteFailedException { - // Register FIB table in VPP - FibTableRequest fibTableRequest = new FibTableRequest(getFutureJVpp()); - fibTableRequest.setFibName(tableName); - fibTableRequest.setIpv6(isIpv6); - fibTableRequest.setFibTable(tableId); - fibTableRequest.checkValid(); - try { - fibTableRequest.write(identifier); - LOG.debug("Fib table written successfully. table-name: {}, table-id: {}, request: {}", tableName, tableId, - fibTableRequest); - } catch (WriteFailedException e) { - LOG.warn("Fib table write failed. request: {}", fibTableRequest); - throw new WriteFailedException(identifier, "Failed to write FIB table to VPP.", e); - } - } - - @Override - public void checkTableExist(@Nonnegative final int index, @Nonnull final ModificationCache cache) - throws ReadFailedException, FibTableService.FibTableDoesNotExistException { - - if (Stream.concat(dumpV4FibTableIdsStream(cache), dumpV6FibTableIdsStream(cache)) - .noneMatch(id -> id == index)) { - throw new FibTableService.FibTableDoesNotExistException(index); - } - } - - private Stream dumpV6FibTableIdsStream(final ModificationCache cache) throws ReadFailedException { - return v6DumpManager.getDump(FibManagementIIds.FIB_MNGMNT, cache, NO_PARAMS) - .toJavaUtil() - .map(ip6FibDetailsReplyDump -> ip6FibDetailsReplyDump.ip6FibDetails) - .orElse(Collections.emptyList()) - .stream() - .map(ip6FibDetails -> ip6FibDetails.tableId); - } - - private Stream dumpV4FibTableIdsStream(final ModificationCache cache) throws ReadFailedException { - return v4DumpManager.getDump(FibManagementIIds.FIB_MNGMNT, cache, NO_PARAMS) - .toJavaUtil() - .map(ipFibDetailsReplyDump -> ipFibDetailsReplyDump.ipFibDetails) - .orElse(Collections.emptyList()) - .stream() - .map(ipFibDetails -> ipFibDetails.tableId); - } -} diff --git a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceProvider.java b/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceProvider.java deleted file mode 100644 index d70f18e65..000000000 --- a/fib-management/fib-management-impl/src/main/java/io/fd/hc2vpp/fib/management/services/FibTableServiceProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - -package io.fd.hc2vpp.fib.management.services; - -import com.google.inject.Inject; -import com.google.inject.Provider; -import io.fd.honeycomb.translate.ModificationCache; -import io.fd.vpp.jvpp.core.future.FutureJVppCore; - -public class FibTableServiceProvider implements Provider { - - @Inject - private - FutureJVppCore api; - - @Inject - private ModificationCache modificationCache; - - @Override - public FibTableService get() { - return new FibTableServiceImpl(api); - } -} diff --git a/fib-management/fib-management-impl/src/test/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImplTest.java b/fib-management/fib-management-impl/src/test/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImplTest.java deleted file mode 100644 index 2351ead2c..000000000 --- a/fib-management/fib-management-impl/src/test/java/io/fd/hc2vpp/fib/management/services/FibTableServiceImplTest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (c) 2018 Bell Canada, Pantheon Technologies and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at: - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package io.fd.hc2vpp.fib.management.services; - -import static io.fd.vpp.jvpp.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import com.google.inject.Inject; -import io.fd.hc2vpp.common.test.util.FutureProducer; -import io.fd.hc2vpp.common.translate.util.ByteDataTranslator; -import io.fd.hc2vpp.fib.management.FibManagementIIds; -import io.fd.hc2vpp.fib.management.helpers.SchemaContextTestHelper; -import io.fd.honeycomb.translate.ModificationCache; -import io.fd.honeycomb.translate.read.ReadFailedException; -import io.fd.honeycomb.translate.write.WriteFailedException; -import io.fd.vpp.jvpp.core.dto.Ip6FibDetailsReplyDump; -import io.fd.vpp.jvpp.core.dto.IpFibDetailsReplyDump; -import io.fd.vpp.jvpp.core.dto.IpTableAddDel; -import io.fd.vpp.jvpp.core.dto.IpTableAddDelReply; -import io.fd.vpp.jvpp.core.future.FutureJVppCore; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - -public class FibTableServiceImplTest implements SchemaContextTestHelper, ByteDataTranslator, FutureProducer { - - private static final int FIB_TABLE_ID = 123456; - private static final String FIB_TABLE_NAME = "VRF123456"; - - @Inject - @Mock - private static FutureJVppCore api; - - @Mock - private ModificationCache modificationCache; - - @Captor - private ArgumentCaptor argumentCaptor; - - @Before - public void setup() { - MockitoAnnotations.initMocks(this); - when(api.ipTableAddDel(any())).thenReturn(future(new IpTableAddDelReply())); - when(api.ipFibDump(any())).thenReturn(future(new IpFibDetailsReplyDump())); - when(api.ip6FibDump(any())).thenReturn(future(new Ip6FibDetailsReplyDump())); - when(modificationCache.get(any())).thenReturn(null); - - } - - @Test(expected = FibTableService.FibTableDoesNotExistException.class) - public void checkTableExistTest() throws ReadFailedException, FibTableService.FibTableDoesNotExistException { - FibTableServiceImpl fibService = new FibTableServiceImpl(api); - fibService.checkTableExist(FIB_TABLE_ID, modificationCache); - } - - @Test - public void writeIpv4Test() throws WriteFailedException { - FibTableServiceImpl fibTableService = new FibTableServiceImpl(api); - fibTableService.write(FibManagementIIds.FIB_MNGMNT, FIB_TABLE_ID, FIB_TABLE_NAME, false); - - verify(api, times(1)).ipTableAddDel(argumentCaptor.capture()); - - assertTableAddDelRequest(argumentCaptor.getValue(), false); - } - - @Test - public void writeIpv6Test() throws WriteFailedException { - FibTableServiceImpl fibTableService = new FibTableServiceImpl(api); - fibTableService.write(FibManagementIIds.FIB_MNGMNT, FIB_TABLE_ID, FIB_TABLE_NAME, true); - - verify(api, times(1)).ipTableAddDel(argumentCaptor.capture()); - - assertTableAddDelRequest(argumentCaptor.getValue(), true); - } - - private void assertTableAddDelRequest(IpTableAddDel jvppRequest, boolean isIpv6) { - assertEquals(ByteDataTranslator.BYTE_TRUE, jvppRequest.isAdd); - assertEquals(ByteDataTranslator.INSTANCE.booleanToByte(isIpv6), jvppRequest.isIpv6); - assertEquals(FIB_TABLE_ID, jvppRequest.tableId); - Assert.assertArrayEquals(FIB_TABLE_NAME.getBytes(), jvppRequest.name); - } -} -- cgit 1.2.3-korg