diff options
author | talio <tali.orenbach@amdocs.com> | 2017-11-12 16:12:35 +0200 |
---|---|---|
committer | talio <tali.orenbach@amdocs.com> | 2017-11-13 10:03:55 +0200 |
commit | ce889adae3f91a8296bf41ce5804a51483242b2a (patch) | |
tree | a2fffe0fdbb03b8774c40df9ac9d72e6f145b8da | |
parent | dd1a401f81b7c90c340ab69288236763bad19e83 (diff) |
forwarder
implement toggling feature on forwarder
Issue-Id : SDC-653
Change-Id: I238ae82b6f1fd9fce58ab584acd362a6bafd0dff
Signed-off-by: talio <tali.orenbach@amdocs.com>
8 files changed, 149 insertions, 12 deletions
diff --git a/onboarding/pom.xml b/onboarding/pom.xml index d3023c5049..9a10b0f410 100644 --- a/onboarding/pom.xml +++ b/onboarding/pom.xml @@ -97,6 +97,7 @@ <zusammen-state-store.version>0.2.2</zusammen-state-store.version> <pmd.version>5.8.1</pmd.version> <build.tools.version>${project.version}</build.tools.version> + <togglz.version>2.4.1.Final</togglz.version> </properties> <build> diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/web.xml b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/web.xml index 08e8dd8ec8..35865f988e 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/web.xml +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/onboarding-rest-war/src/main/webapp/WEB-INF/web.xml @@ -11,6 +11,12 @@ <param-value>WEB-INF/beans-services.xml</param-value> </context-param> + <context-param> + <param-name>org.togglz.core.manager.TogglzConfig</param-name> + <param-value>org.openecomp.sdc.common.togglz.TogglzConfiguration</param-value> + </context-param> + + <listener> <listener-class>org.openecomp.server.listeners.OnboardingAppStartupListener</listener-class> diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java new file mode 100644 index 0000000000..aab9845573 --- /dev/null +++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/ToggleableFeature.java @@ -0,0 +1,15 @@ +package org.openecomp.sdc.common.togglz; + +import org.togglz.core.Feature; +import org.togglz.core.annotation.Label; +import org.togglz.core.context.FeatureContext; + +public enum ToggleableFeature implements Feature { + + @Label ("Forwarder Capability") + FORWARDER_CAPABILITY; + + public boolean isActive() { + return FeatureContext.getFeatureManager().isActive(this); + } +} diff --git a/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/TogglzConfiguration.java b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/TogglzConfiguration.java new file mode 100644 index 0000000000..d743205e5b --- /dev/null +++ b/openecomp-be/lib/openecomp-common-lib/src/main/java/org/openecomp/sdc/common/togglz/TogglzConfiguration.java @@ -0,0 +1,27 @@ +package org.openecomp.sdc.common.togglz; + +import org.togglz.core.Feature; +import org.togglz.core.manager.TogglzConfig; +import org.togglz.core.repository.StateRepository; +import org.togglz.core.repository.file.FileBasedStateRepository; +import org.togglz.core.user.SimpleFeatureUser; +import org.togglz.core.user.UserProvider; + +import java.io.File; + +public class TogglzConfiguration implements TogglzConfig { + @Override + public Class<? extends Feature> getFeatureClass() { + return ToggleableFeature.class; + } + + @Override + public StateRepository getStateRepository() { + return new FileBasedStateRepository(new File("/tmp/features.properties")); + } + + @Override + public UserProvider getUserProvider() { + return () -> new SimpleFeatureUser("admin", true); + } +} diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java index d401e4930b..895b3f9670 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/HeatToToscaUtil.java @@ -27,6 +27,7 @@ import org.openecomp.core.translator.datatypes.TranslatorOutput; import org.openecomp.core.translator.factory.HeatToToscaTranslatorFactory; import org.openecomp.core.utilities.file.FileContentHandler; import org.openecomp.core.utilities.file.FileUtils; +import org.openecomp.sdc.common.togglz.ToggleableFeature; import org.openecomp.sdc.tosca.services.YamlUtil; import org.openecomp.core.validation.util.MessageContainerUtil; import org.openecomp.sdc.common.errors.CoreException; @@ -106,6 +107,7 @@ public class HeatToToscaUtil { protected static Logger logger = (Logger) LoggerFactory.getLogger(HeatToToscaUtil.class); protected static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage(); + private static final String forwarder = "forwarder"; /** @@ -1277,23 +1279,37 @@ public class HeatToToscaUtil { NodeType flatNodeType = getNodeTypeWithFlatHierarchy(type, serviceTemplate, context); - String capabilityKey; - List<String> capabilityMapping; + if (flatNodeType.getCapabilities() != null) { - for (Map.Entry<String, CapabilityDefinition> capabilityNodeEntry : flatNodeType - .getCapabilities() - .entrySet()) { - capabilityKey = capabilityNodeEntry.getKey() + "_" + templateName; - nodeTypeCapabilitiesDefinition.put(capabilityKey, capabilityNodeEntry.getValue().clone()); - capabilityMapping = new ArrayList<>(); - capabilityMapping.add(templateName); - capabilityMapping.add(capabilityNodeEntry.getKey()); - capabilitySubstitutionMapping.put(capabilityKey, capabilityMapping); - } + flatNodeType.getCapabilities() + .entrySet() + .stream() + .filter(capabilityNodeEntry -> shouldCapabilityNeedsToBeAdded(capabilityNodeEntry.getKey())) + .forEach(capabilityNodeEntry -> + addCapabilityToSubMapping( + templateName, capabilityNodeEntry, nodeTypeCapabilitiesDefinition, capabilitySubstitutionMapping)); } mdcDataDebugMessage.debugExitMessage(null, null); } + private static boolean shouldCapabilityNeedsToBeAdded(String capabilityKey) { + return !capabilityKey.contains(forwarder) || ToggleableFeature.FORWARDER_CAPABILITY.isActive(); + } + + private static void addCapabilityToSubMapping(String templateName, + Map.Entry<String, CapabilityDefinition> capabilityNodeEntry, + Map<String, CapabilityDefinition> nodeTypeCapabilitiesDefinition, + Map<String, List<String>> capabilitySubstitutionMapping) { + String capabilityKey; + List<String> capabilityMapping; + capabilityKey = capabilityNodeEntry.getKey() + "_" + templateName; + nodeTypeCapabilitiesDefinition.put(capabilityKey, capabilityNodeEntry.getValue().clone()); + capabilityMapping = new ArrayList<>(); + capabilityMapping.add(templateName); + capabilityMapping.add(capabilityNodeEntry.getKey()); + capabilitySubstitutionMapping.put(capabilityKey, capabilityMapping); + } + private static List<Map<String, RequirementDefinition>> getNodeTypeReqs( String type, String templateName, diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java index 59dea8afb9..d0364e793c 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseFullTranslationTest.java @@ -21,7 +21,9 @@ package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation; import org.apache.commons.collections4.MapUtils; +import org.junit.AfterClass; import org.junit.Assert; +import org.junit.BeforeClass; import org.openecomp.core.translator.api.HeatToToscaTranslator; import org.openecomp.core.translator.datatypes.TranslatorOutput; import org.openecomp.core.translator.factory.HeatToToscaTranslatorFactory; @@ -30,6 +32,7 @@ import org.openecomp.core.validation.util.MessageContainerUtil; import org.openecomp.sdc.common.errors.CoreException; import org.openecomp.sdc.common.errors.ErrorCategory; import org.openecomp.sdc.common.errors.ErrorCode; +import org.openecomp.sdc.common.togglz.ToggleableFeature; import org.openecomp.sdc.datatypes.error.ErrorLevel; import org.openecomp.sdc.datatypes.error.ErrorMessage; import org.openecomp.sdc.logging.context.impl.MdcDataErrorMessage; @@ -39,6 +42,8 @@ import org.openecomp.sdc.logging.types.LoggerTragetServiceName; import org.openecomp.sdc.tosca.services.ToscaFileOutputService; import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl; import org.openecomp.sdc.translator.TestUtils; +import org.togglz.testing.TestFeatureManager; +import org.togglz.testing.TestFeatureManagerProvider; import java.io.BufferedInputStream; import java.io.File; @@ -62,6 +67,24 @@ public class BaseFullTranslationTest { public static final String IN_POSTFIX = "/in"; public static final String OUT_POSTFIX = "/out"; + protected static TestFeatureManager manager; + + @BeforeClass + public static void enableForwarderFeature(){ + manager = new TestFeatureManager(ToggleableFeature.class); + if (!ToggleableFeature.FORWARDER_CAPABILITY.isActive()) { + manager.enable(ToggleableFeature.FORWARDER_CAPABILITY); + } + } + + + @AfterClass + public static void disableForwarderFeature() { + manager.disable(ToggleableFeature.FORWARDER_CAPABILITY); + manager = null; + TestFeatureManagerProvider.setFeatureManager(null); + } + protected void testTranslationWithInit(String path) throws IOException { File translatedZipFile = initTranslatorAndTranslate(path); testTranslation(path, translatedZipFile); diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseResourceTranslationTest.java b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseResourceTranslationTest.java index 62f3c07411..528db5ee77 100644 --- a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseResourceTranslationTest.java +++ b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/BaseResourceTranslationTest.java @@ -34,8 +34,10 @@ import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidati import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateVolumeInConsolidationData; import org.apache.commons.collections4.MapUtils; +import org.junit.AfterClass; import org.junit.Assert; import org.junit.Before; +import org.junit.BeforeClass; import org.openecomp.core.translator.datatypes.TranslatorOutput; import org.openecomp.core.utilities.file.FileUtils; import org.openecomp.core.utilities.json.JsonUtil; @@ -43,6 +45,7 @@ import org.openecomp.core.validation.util.MessageContainerUtil; import org.openecomp.sdc.common.errors.CoreException; import org.openecomp.sdc.common.errors.ErrorCategory; import org.openecomp.sdc.common.errors.ErrorCode; +import org.openecomp.sdc.common.togglz.ToggleableFeature; import org.openecomp.sdc.common.utils.SdcCommon; import org.openecomp.sdc.datatypes.error.ErrorLevel; import org.openecomp.sdc.datatypes.error.ErrorMessage; @@ -66,6 +69,8 @@ import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolida import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData; import org.openecomp.sdc.translator.services.heattotosca.TranslationService; import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataValidationType; +import org.togglz.testing.TestFeatureManager; +import org.togglz.testing.TestFeatureManagerProvider; import java.io.BufferedInputStream; import java.io.File; @@ -98,6 +103,24 @@ public class BaseResourceTranslationTest { private final String MANIFEST_NAME = SdcCommon.MANIFEST_NAME; private String validationFilename = "validationOutput.json"; + protected static TestFeatureManager manager; + + @BeforeClass + public static void enableForwarderFeature(){ + manager = new TestFeatureManager(ToggleableFeature.class); + if (!ToggleableFeature.FORWARDER_CAPABILITY.isActive()) { + manager.enable(ToggleableFeature.FORWARDER_CAPABILITY); + } + } + + + @AfterClass + public static void disableForwarderFeature() { + manager.disable(ToggleableFeature.FORWARDER_CAPABILITY); + manager = null; + TestFeatureManagerProvider.setFeatureManager(null); + } + @Before public void setUp() throws IOException { initTranslatorAndTranslate(); diff --git a/openecomp-be/pom.xml b/openecomp-be/pom.xml index 442b7dec15..3934f411fd 100644 --- a/openecomp-be/pom.xml +++ b/openecomp-be/pom.xml @@ -32,6 +32,32 @@ <artifactId>jackson-annotations</artifactId> <version>${jackson.version}</version> </dependency> + + <!-- Feature Toggle support libraries--> + <dependency> + <groupId>org.togglz</groupId> + <artifactId>togglz-core</artifactId> + <version>${togglz.version}</version> + </dependency> + + <dependency> + <groupId>org.togglz</groupId> + <artifactId>togglz-servlet</artifactId> + <version>${togglz.version}</version> + </dependency> + + <dependency> + <groupId>org.togglz</groupId> + <artifactId>togglz-console</artifactId> + <version>${togglz.version}</version> + </dependency> + + <dependency> + <groupId>org.togglz</groupId> + <artifactId>togglz-testing</artifactId> + <version>${togglz.version}</version> + <scope>test</scope> + </dependency> </dependencies> <build> |