Add validation for OUTPUT_TYPE parameter
authorpwielebs <piotr.wielebski@nokia.com>
Wed, 10 Jun 2020 09:02:19 +0000 (11:02 +0200)
committerpwielebs <piotr.wielebski@nokia.com>
Wed, 17 Jun 2020 12:48:28 +0000 (14:48 +0200)
Issue-ID: AAF-1152

Signed-off-by: pwielebs <piotr.wielebski@nokia.com>
Change-Id: Iec46b8a7b8e1818b62877f5272368636dc1929a0

certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/AbstractConfigurationFactory.java
certServiceClient/src/main/java/org/onap/aaf/certservice/client/configuration/factory/ClientConfigurationFactory.java
certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/factory/AbstractConfigurationFactoryTest.java
certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/factory/ClientConfigurationFactoryTest.java [moved from certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/model/ClientConfigurationFactoryTest.java with 81% similarity]
certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/factory/CsrConfigurationFactoryTest.java [moved from certServiceClient/src/test/java/org/onap/aaf/certservice/client/configuration/model/CsrConfigurationFactoryTest.java with 98% similarity]

index b72ef7a..b7def80 100644 (file)
@@ -20,6 +20,8 @@
 
 package org.onap.aaf.certservice.client.configuration.factory;
 
+
+import org.onap.aaf.certservice.client.certification.conversion.ArtifactsCreatorProvider;
 import org.onap.aaf.certservice.client.configuration.exception.ClientConfigurationException;
 import org.onap.aaf.certservice.client.configuration.exception.CsrConfigurationException;
 import org.onap.aaf.certservice.client.configuration.model.ConfigurationModel;
@@ -55,6 +57,11 @@ public abstract class AbstractConfigurationFactory<T extends ConfigurationModel>
         return Arrays.asList(Locale.getISOCountries()).contains(country);
     }
 
+    public boolean isOutputTypeValid(String outputType) {
+        return Arrays.stream(ArtifactsCreatorProvider.values())
+                .anyMatch(artifactsCreatorProvider -> artifactsCreatorProvider.toString().equals(outputType));
+    }
+
     private boolean isPortNumberPresent(String stringToCheck) {
         return Pattern.compile(":[0-9]{1,5}").matcher(stringToCheck).find();
     }
index 793799e..d813233 100644 (file)
@@ -27,6 +27,8 @@ import org.onap.aaf.certservice.client.configuration.model.ClientConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.Optional;
+
 public class ClientConfigurationFactory extends AbstractConfigurationFactory<ClientConfiguration> {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(ClientConfigurationFactory.class);
@@ -41,6 +43,8 @@ public class ClientConfigurationFactory extends AbstractConfigurationFactory<Cli
 
         ClientConfiguration configuration = new ClientConfiguration();
 
+        Optional<String> outputType = envsForClient.getOutputType();
+
         envsForClient.getUrlToCertService()
                 .map(configuration::setUrlToCertService);
 
@@ -57,8 +61,11 @@ public class ClientConfigurationFactory extends AbstractConfigurationFactory<Cli
                 .map(configuration::setCaName)
                 .orElseThrow(() -> new ClientConfigurationException(ClientConfigurationEnvs.CA_NAME + " is invalid."));
 
-        envsForClient.getOutputType()
-                .map(configuration::setOutputType);
+        if (outputType.isPresent()) {
+            outputType.filter(this::isOutputTypeValid)
+                    .map(configuration::setOutputType)
+                    .orElseThrow(() -> new ClientConfigurationException(ClientConfigurationEnvs.OUTPUT_TYPE + " is invalid."));
+        }
 
         LOGGER.info("Successful validation of Client configuration. Configuration data: {}", configuration.toString());
 
index c595555..6273e2a 100644 (file)
@@ -28,7 +28,7 @@ import static org.mockito.Mockito.mock;
 
 public class AbstractConfigurationFactoryTest {
 
-    private AbstractConfigurationFactory cut = mock(AbstractConfigurationFactory.class, Mockito.CALLS_REAL_METHODS);
+    private final AbstractConfigurationFactory cut = mock(AbstractConfigurationFactory.class, Mockito.CALLS_REAL_METHODS);
 
     @ParameterizedTest
     @ValueSource(strings = {"/var/log", "/", "/var/log/", "/second_var", "/second-var"})
@@ -77,4 +77,16 @@ public class AbstractConfigurationFactoryTest {
     public void shouldRejectInvalidCommonName(String commonName) {
         assertThat(cut.isCommonNameValid(commonName)).isFalse();
     }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"JKS", "P12", "PEM"})
+    public void shouldAcceptValidOutputType(String outputType) {
+        assertThat(cut.isOutputTypeValid(outputType)).isTrue();
+    }
+
+    @ParameterizedTest
+    @ValueSource(strings = {"jks", "p12", "pem", "", "pass", "!@$#pp"})
+    public void shouldRejectInvalidOutputType(String outputType) {
+        assertThat(cut.isOutputTypeValid(outputType)).isFalse();
+    }
 }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.configuration.model;
+package org.onap.aaf.certservice.client.configuration.factory;
 
 import org.junit.jupiter.api.Test;
 import org.onap.aaf.certservice.client.configuration.ClientConfigurationEnvs;
 import org.onap.aaf.certservice.client.configuration.EnvsForClient;
 import org.onap.aaf.certservice.client.configuration.exception.ClientConfigurationException;
-import org.onap.aaf.certservice.client.configuration.factory.ClientConfigurationFactory;
+import org.onap.aaf.certservice.client.configuration.model.ClientConfiguration;
 
 import java.util.Optional;
 
@@ -42,9 +42,12 @@ public class ClientConfigurationFactoryTest {
     private final String URL_TO_CERT_SERVICE_DEFAULT = "https://aaf-cert-service:8443/v1/certificate/";
     private final String CA_NAME_INVALID =  "caaaftest2#$";
     private final String OUTPUT_PATH_INVALID = "/opt//app/osaaf";
+    private final String OUTPUT_TYPE_VALID = "JKS";
+    private final String OUTPUT_TYPE_INVALID = "JKSS";
 
     private EnvsForClient envsForClient = mock(EnvsForClient.class);
 
+
     @Test
     void create_shouldReturnSuccessWhenAllVariablesAreSetAndValid() throws ClientConfigurationException {
         // given
@@ -52,15 +55,18 @@ public class ClientConfigurationFactoryTest {
         when(envsForClient.getOutputPath()).thenReturn(Optional.of(OUTPUT_PATH_VALID));
         when(envsForClient.getRequestTimeOut()).thenReturn(Optional.of(TIME_OUT_VALID));
         when(envsForClient.getUrlToCertService()).thenReturn(Optional.of(URL_TO_CERT_SERVICE_VALID));
+        when(envsForClient.getOutputType()).thenReturn(Optional.of(OUTPUT_TYPE_VALID));
 
         // when
         ClientConfiguration configuration = new ClientConfigurationFactory(envsForClient).create();
+        System.out.println(configuration.toString());
 
         // then
         assertThat(configuration.getCaName()).isEqualTo(CA_NAME_VALID);
         assertThat(configuration.getRequestTimeout()).isEqualTo(Integer.valueOf(TIME_OUT_VALID));
         assertThat(configuration.getCertsOutputPath()).isEqualTo(OUTPUT_PATH_VALID);
         assertThat(configuration.getUrlToCertService()).isEqualTo(URL_TO_CERT_SERVICE_VALID);
+        assertThat(configuration.getOutputType()).isEqualTo(OUTPUT_TYPE_VALID);
     }
 
     @Test
@@ -87,7 +93,7 @@ public class ClientConfigurationFactoryTest {
         // when
         ClientConfigurationFactory configurationFactory = new ClientConfigurationFactory(envsForClient);
 
-        // when/then
+        // then
         assertThatExceptionOfType(ClientConfigurationException.class)
                 .isThrownBy(configurationFactory::create)
                 .withMessageContaining(ClientConfigurationEnvs.CA_NAME + " is invalid.");
@@ -121,9 +127,27 @@ public class ClientConfigurationFactoryTest {
         // when
         ClientConfigurationFactory configurationFactory = new ClientConfigurationFactory(envsForClient);
 
-        // when/then
+        //then
         assertThatExceptionOfType(ClientConfigurationException.class)
                 .isThrownBy(configurationFactory::create)
                 .withMessageContaining(ClientConfigurationEnvs.OUTPUT_PATH + " is invalid.");
     }
+
+    @Test
+    void create_shouldReturnClientExceptionWhenOutputTypeIsInvalid() {
+        // given
+        when(envsForClient.getCaName()).thenReturn(Optional.of(CA_NAME_VALID));
+        when(envsForClient.getOutputPath()).thenReturn(Optional.of(OUTPUT_PATH_VALID));
+        when(envsForClient.getRequestTimeOut()).thenReturn(Optional.of(TIME_OUT_VALID));
+        when(envsForClient.getUrlToCertService()).thenReturn(Optional.of(URL_TO_CERT_SERVICE_VALID));
+        when(envsForClient.getOutputType()).thenReturn(Optional.of(OUTPUT_TYPE_INVALID));
+
+        // when
+        ClientConfigurationFactory configurationFactory = new ClientConfigurationFactory(envsForClient);
+
+        //then
+        assertThatExceptionOfType(ClientConfigurationException.class)
+                .isThrownBy(configurationFactory::create)
+                .withMessageContaining(ClientConfigurationEnvs.OUTPUT_TYPE + " is invalid.");
+    }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.aaf.certservice.client.configuration.model;
+package org.onap.aaf.certservice.client.configuration.factory;
 
 import org.assertj.core.api.Condition;
 import org.junit.jupiter.api.BeforeEach;
@@ -26,7 +26,7 @@ import org.junit.jupiter.api.Test;
 import org.onap.aaf.certservice.client.configuration.CsrConfigurationEnvs;
 import org.onap.aaf.certservice.client.configuration.EnvsForCsr;
 import org.onap.aaf.certservice.client.configuration.exception.CsrConfigurationException;
-import org.onap.aaf.certservice.client.configuration.factory.CsrConfigurationFactory;
+import org.onap.aaf.certservice.client.configuration.model.CsrConfiguration;
 
 import java.util.Optional;