From dff666365ea56fe9a0d6b89cdb85bb4bf7849122 Mon Sep 17 00:00:00 2001 From: Bogumil Zebek Date: Fri, 19 Feb 2021 08:36:45 +0100 Subject: Activate JUnits in project - Fix project configuration: activate junits during project build - Increase code coverage Issue-ID: DCAEGEN2-1016 Signed-off-by: Zebek Bogumil Change-Id: I3d6d3462b4582c20c77577640deff8cece10d4d2 --- security/crypt-password/pom.xml | 23 ++++-- .../sdk/security/CharsFromStreamReader.java | 2 +- .../services/sdk/security/CryptPassword.java | 2 +- .../services/sdk/security/EncodePassword.java | 14 +++- .../services/sdk/security/EncodePasswordTest.java | 87 ++++++++++++++++++++++ 5 files changed, 114 insertions(+), 14 deletions(-) create mode 100644 security/crypt-password/src/test/java/org/onap/dcaegen2/services/sdk/security/EncodePasswordTest.java diff --git a/security/crypt-password/pom.xml b/security/crypt-password/pom.xml index 7c6495ae..732df17d 100644 --- a/security/crypt-password/pom.xml +++ b/security/crypt-password/pom.xml @@ -26,14 +26,6 @@ org.springframework.security spring-security-crypto - - org.junit.jupiter - junit-jupiter-api - - - org.assertj - assertj-core - org.slf4j jcl-over-slf4j @@ -44,6 +36,21 @@ logback-classic runtime + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + + + org.mockito + mockito-core + test + diff --git a/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CharsFromStreamReader.java b/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CharsFromStreamReader.java index 1ea18cc7..58be00cd 100644 --- a/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CharsFromStreamReader.java +++ b/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CharsFromStreamReader.java @@ -25,7 +25,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.CharBuffer; -final class CharsFromStreamReader { +class CharsFromStreamReader { public static final int END_OF_STREAM = -1; private final int maxLength; diff --git a/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CryptPassword.java b/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CryptPassword.java index 4b16c9e2..c2c2528d 100644 --- a/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CryptPassword.java +++ b/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/CryptPassword.java @@ -24,7 +24,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * Class for encoding passwords using BCrypt algorithm. */ -public final class CryptPassword { +public class CryptPassword { private BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); diff --git a/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/EncodePassword.java b/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/EncodePassword.java index 77843816..3fe6265c 100644 --- a/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/EncodePassword.java +++ b/security/crypt-password/src/main/java/org/onap/dcaegen2/services/sdk/security/EncodePassword.java @@ -25,11 +25,17 @@ class EncodePassword { private static final int MAX_PASSWORD_LENGTH = 64 * 1024; private static final int ARGS_LENGTH_PASSWORD_PROVIDED = 1; - private CryptPassword cryptPassword = new CryptPassword(); - private CharsFromStreamReader charsFromStreamReader = new CharsFromStreamReader(MAX_PASSWORD_LENGTH); + private final CryptPassword cryptPassword; + private final CharsFromStreamReader charsFromStreamReader; + + public EncodePassword(CryptPassword cryptPassword, CharsFromStreamReader charsFromStreamReader) { + this.cryptPassword = cryptPassword; + this.charsFromStreamReader = charsFromStreamReader; + } + public static void main(String[] args) { - new EncodePassword().run(args); + new EncodePassword(new CryptPassword(), new CharsFromStreamReader(MAX_PASSWORD_LENGTH)).run(args); } public void run(String[] args) { @@ -65,7 +71,7 @@ class EncodePassword { System.err.println(msg); } - private void printErrorAndExit(ExitCode exitCode, String msg) { + void printErrorAndExit(ExitCode exitCode, String msg) { System.err.println(msg); System.exit(exitCode.value); } diff --git a/security/crypt-password/src/test/java/org/onap/dcaegen2/services/sdk/security/EncodePasswordTest.java b/security/crypt-password/src/test/java/org/onap/dcaegen2/services/sdk/security/EncodePasswordTest.java new file mode 100644 index 00000000..a899bb98 --- /dev/null +++ b/security/crypt-password/src/test/java/org/onap/dcaegen2/services/sdk/security/EncodePasswordTest.java @@ -0,0 +1,87 @@ +/* + * ============LICENSE_START==================================== + * DCAEGEN2-SERVICES-SDK + * ========================================================= + * Copyright (C) 2021 Nokia. All rights reserved. + * ========================================================= + * 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. + * ============LICENSE_END===================================== + */ +package org.onap.dcaegen2.services.sdk.security; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.io.IOException; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +class EncodePasswordTest { + + public static final String PASSWORD_CANNOT_BE_EMPTY = "Password cannot be empty"; + public static final String PASSWORD_TO_ENCODE = "testPass"; + public static final String EMPTY_PASSWORD = ""; + private final CryptPassword cryptPassword = mock(CryptPassword.class); + private final CharsFromStreamReader charsFromStreamReader = mock(CharsFromStreamReader.class); + private final EncodePassword encodePassword = spy(new EncodePassword(cryptPassword, charsFromStreamReader)); + + @BeforeEach + void setUp() { + doNothing().when(encodePassword).printErrorAndExit(any(), any()); + } + + @Test + void shouldExitWithErrorCodeWhenPasswordIsNotAvailableInArgs() throws IOException { + // when + encodePassword.run(new String[]{}); + + // then + verify(charsFromStreamReader).readPasswordFromStdIn(); + verify(encodePassword).printErrorAndExit( + eq(ExitCode.INVALID_PASSWORD), + eq(PASSWORD_CANNOT_BE_EMPTY) + ); + } + + @Test + void shouldExitWithErrorCodeWhenPasswordIsEmpty() { + // when + encodePassword.run(new String[]{EMPTY_PASSWORD}); + + // then + verify(encodePassword).printErrorAndExit( + eq(ExitCode.INVALID_PASSWORD), + eq(PASSWORD_CANNOT_BE_EMPTY) + ); + } + + @Test + void shouldEncodePasswordWhenPasswordIsAvailableInArgs() throws IOException { + // when + encodePassword.run(new String[]{PASSWORD_TO_ENCODE}); + + // then + verify(charsFromStreamReader, never()).readPasswordFromStdIn(); + verify(cryptPassword).encode(eq(PASSWORD_TO_ENCODE)); + verify(encodePassword, never()).printErrorAndExit( + eq(ExitCode.INVALID_PASSWORD), + eq(PASSWORD_CANNOT_BE_EMPTY) + ); + } +} -- cgit 1.2.3-korg