summaryrefslogtreecommitdiffstats
path: root/infra/cfg-init
diff options
context:
space:
mode:
authorMaros Marsalek <mmarsale@cisco.com>2016-10-26 12:20:14 +0200
committerMaros Marsalek <mmarsale@cisco.com>2016-10-28 11:06:47 +0000
commit9a9c793a0bc09bfc4b232e0626e94ca8b9906843 (patch)
treeccbf894764db6001b52d564fa421ee8220aaffba /infra/cfg-init
parent20e54b17e3b62690135479e269a564e2b1fc6cf0 (diff)
Honeycomb-73 Extensible initializers remove leftovers
Change-Id: Id610346e39585867290170bf09528ecf6e032ee4 Signed-off-by: Maros Marsalek <mmarsale@cisco.com>
Diffstat (limited to 'infra/cfg-init')
-rw-r--r--infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/AbstractDataTreeConverter.java108
-rw-r--r--infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/InitializerRegistryImpl.java44
-rw-r--r--infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/AbstractDataTreeConverterTest.java120
-rw-r--r--infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/InitializerRegistryImplTest.java57
4 files changed, 0 insertions, 329 deletions
diff --git a/infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/AbstractDataTreeConverter.java b/infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/AbstractDataTreeConverter.java
deleted file mode 100644
index 86188dd..0000000
--- a/infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/AbstractDataTreeConverter.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco 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.honeycomb.data.init;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Base class for initializers which perform conversion between operational and config YANG model.
- *
- * @param <C> Config data object
- * @param <O> Operational data object
- */
-@Beta
-public abstract class AbstractDataTreeConverter<O extends DataObject, C extends DataObject>
- implements DataTreeInitializer {
- private static final Logger LOG = LoggerFactory.getLogger(AbstractDataTreeConverter.class);
-
- private final InstanceIdentifier<O> idOper;
- private final InstanceIdentifier<C> idConfig;
- private final DataBroker bindingDataBroker;
-
- public AbstractDataTreeConverter(final DataBroker bindingDataBroker,
- final InstanceIdentifier<O> operRootId,
- final InstanceIdentifier<C> cfgRootId) {
- this.bindingDataBroker = checkNotNull(bindingDataBroker, "bindingDataBroker should not be null");
- this.idOper = checkNotNull(operRootId, "operRootId should not be null");
- this.idConfig = checkNotNull(cfgRootId, "cfgRootId should not be null");
- }
-
- @Override
- public final void initialize() throws InitializeException {
- LOG.debug("AbstractDataTreeConverter.initialize() from(oper): {}, to(cfg): {}", idOper, idConfig);
- final Optional<O> data = readData();
-
- if (data.isPresent()) {
- LOG.debug("Config initialization, operational data={}", data);
-
- final O operationalData = data.get();
- final C configData = convert(operationalData);
-
- try {
- LOG.debug("Initializing config with data={}", configData);
- writeData(configData);
- LOG.info("Config initialization successful from(oper): {}, to(cfg): {}", idOper, idConfig);
- } catch (TransactionCommitFailedException e) {
- throw new InitializeException("Failed to perform config initialization", e);
- }
- } else {
- LOG.info("Data is not present under: {}, no initial changes to config at: {}", idOper, idConfig);
- }
- }
-
- private Optional<O> readData() {
- try (ReadOnlyTransaction readTx = bindingDataBroker.newReadOnlyTransaction()) {
- final CheckedFuture<Optional<O>, org.opendaylight.controller.md.sal.common.api.data.ReadFailedException>
- readFuture = readTx.read(LogicalDatastoreType.OPERATIONAL, idOper);
- return readFuture.checkedGet();
- } catch (org.opendaylight.controller.md.sal.common.api.data.ReadFailedException e) {
- LOG.warn("Failed to read operational state", e);
- }
- return Optional.absent();
- }
-
- private void writeData(final C configData) throws TransactionCommitFailedException {
- final WriteTransaction writeTx = bindingDataBroker.newWriteOnlyTransaction();
- // Merge(instead of put) has to be used due to dynamic start, this might be executed multiple times
- // and might overwrite config restored from persisted file with the same incomplete config.
- // Making the entire configuration trigger VPP twice (on second persis ... and VPP does not like that
- writeTx.merge(LogicalDatastoreType.CONFIGURATION, idConfig, configData);
- writeTx.submit().checkedGet();
- }
-
- // TODO HONEYCOMB-158 make this class concrete and use function dependency instead of abstract method
- /**
- * Converts operational data to config data for given root node.
- *
- * @param operationalData data object representing operational data
- * @return data object representing config data
- */
- protected abstract C convert(final O operationalData);
-}
diff --git a/infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/InitializerRegistryImpl.java b/infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/InitializerRegistryImpl.java
deleted file mode 100644
index cc1c2db..0000000
--- a/infra/cfg-init/src/main/java/io/fd/honeycomb/data/init/InitializerRegistryImpl.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco 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.honeycomb.data.init;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.List;
-import javax.annotation.Nonnull;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class InitializerRegistryImpl implements InitializerRegistry {
- private static final Logger LOG = LoggerFactory.getLogger(InitializerRegistryImpl.class);
- private final List<DataTreeInitializer> initializers;
-
- public InitializerRegistryImpl(@Nonnull List<DataTreeInitializer> initializers) {
- this.initializers = checkNotNull(initializers, "initializers should not be null");
- checkArgument(!initializers.contains(null), "initializers should not contain null elements");
- }
-
- @Override
- public void initialize() throws InitializeException {
- // TODO HONEYCOMB-159 check if readers are there
- LOG.debug("InitializerRegistryImpl.initialize()");
- for (DataTreeInitializer initializer : initializers) {
- initializer.initialize();
- }
- }
-}
diff --git a/infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/AbstractDataTreeConverterTest.java b/infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/AbstractDataTreeConverterTest.java
deleted file mode 100644
index c81f4cd..0000000
--- a/infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/AbstractDataTreeConverterTest.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco 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.honeycomb.data.init;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.verifyZeroInteractions;
-import static org.mockito.Mockito.when;
-
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.Futures;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.yangtools.yang.binding.DataContainer;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-public class AbstractDataTreeConverterTest {
-
- private static final InstanceIdentifier<Operational>
- OPER_ROOT_ID = InstanceIdentifier.create(Operational.class);
- private static final InstanceIdentifier<Configuration>
- CFG_ROOT_ID = InstanceIdentifier.create(Configuration.class);
- @Mock
- private DataBroker bindingDataBroker;
- @Mock
- private ReadOnlyTransaction readTx;
- @Mock
- private WriteTransaction writeTx;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
- when(bindingDataBroker.newReadOnlyTransaction()).thenReturn(readTx);
- when(readTx.read(LogicalDatastoreType.OPERATIONAL, OPER_ROOT_ID)).thenReturn(
- Futures.immediateCheckedFuture(Optional.of(Operational.instance)));
- when(bindingDataBroker.newWriteOnlyTransaction()).thenReturn(writeTx);
- when(writeTx.submit()).thenReturn(Futures.immediateCheckedFuture(null));
- }
-
- @Test
- public void testConvert() throws Exception {
- final TestingDataTreeConverter converter = new TestingDataTreeConverter(bindingDataBroker);
- converter.initialize();
-
- verify(bindingDataBroker).newReadOnlyTransaction();
- verify(readTx).read(LogicalDatastoreType.OPERATIONAL, OPER_ROOT_ID);
- verify(bindingDataBroker).newWriteOnlyTransaction();
- verify(writeTx).merge(LogicalDatastoreType.CONFIGURATION, CFG_ROOT_ID, Configuration.instance);
- }
-
- @Test
- public void testReadFailNoop() throws Exception {
- when(readTx.read(LogicalDatastoreType.OPERATIONAL, OPER_ROOT_ID)).thenReturn(
- Futures.immediateFailedCheckedFuture(new ReadFailedException("failing")));
-
- final TestingDataTreeConverter converter = new TestingDataTreeConverter(bindingDataBroker);
- converter.initialize();
-
- verify(bindingDataBroker).newReadOnlyTransaction();
- verify(readTx).read(LogicalDatastoreType.OPERATIONAL, OPER_ROOT_ID);
- verify(bindingDataBroker, times(0)).newWriteOnlyTransaction();
- verifyZeroInteractions(writeTx);
- }
-
- private static class Configuration implements DataObject {
-
- static final Configuration instance = mock(Configuration.class);
-
- @Override
- public Class<? extends DataContainer> getImplementedInterface() {
- return DataObject.class;
- }
- }
-
- private static class Operational implements DataObject {
-
- static final Operational instance = mock(Operational.class);
-
- @Override
- public Class<? extends DataContainer> getImplementedInterface() {
- return DataObject.class;
- }
- }
-
- private static class TestingDataTreeConverter extends AbstractDataTreeConverter<Operational, Configuration> {
-
- public TestingDataTreeConverter(final DataBroker bindingDataBroker) {
- super(bindingDataBroker, OPER_ROOT_ID, CFG_ROOT_ID);
- }
-
- @Override
- protected Configuration convert(
- final Operational operationalData) {
- return Configuration.instance;
- }
- }
-} \ No newline at end of file
diff --git a/infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/InitializerRegistryImplTest.java b/infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/InitializerRegistryImplTest.java
deleted file mode 100644
index 08d5d66..0000000
--- a/infra/cfg-init/src/test/java/io/fd/honeycomb/data/init/InitializerRegistryImplTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco 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.honeycomb.data.init;
-
-import static org.mockito.Mockito.verify;
-import static org.mockito.MockitoAnnotations.initMocks;
-
-import java.util.Arrays;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mock;
-
-public class InitializerRegistryImplTest {
-
- @Mock(name="dti1")
- private DataTreeInitializer dti1;
- @Mock(name="dti2")
- private DataTreeInitializer dti2;
- @Mock(name="dti3")
- private DataTreeInitializer dti3;
-
- private InitializerRegistryImpl initializerRegistry;
-
- @Before
- public void setUp() throws Exception {
- initMocks(this);
- initializerRegistry = new InitializerRegistryImpl(Arrays.asList(dti1, dti2, dti3));
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testConstructorFailed() throws Exception {
- new InitializerRegistryImpl(Arrays.asList(dti1, null));
- }
-
- @Test
- public void testInitialize() throws Exception {
- initializerRegistry.initialize();
-
- verify(dti1).initialize();
- verify(dti2).initialize();
- verify(dti3).initialize();
- }
-} \ No newline at end of file