/* * Copyright 2013-2017 Simba Open Source * * 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 org.simbasecurity.core.util; import static org.junit.Assert.*; import org.junit.Test; public class RandomPasswordGeneratorTest { @Test public void testGenerateWithNumbers() { String regex = "[0-9]"; int minSizeOfPwd = 1; int maxSizeOfPwd = 4; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex); String result = generator.generate(); checkRegEx(regex + "{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } @Test public void testGenerateWithSmallCase() { String regex = "[a-z]"; int minSizeOfPwd = 6; int maxSizeOfPwd = 10; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex); String result = generator.generate(); checkRegEx(regex + "{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } @Test public void testGenerateWithUpperCase() { String regex = "[A-Z]"; int minSizeOfPwd = 2; int maxSizeOfPwd = 4; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex); String result = generator.generate(); checkRegEx(regex + "{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } @Test public void testGenerateWithSpecialChars() { String regex = "[\\W_]"; int minSizeOfPwd = 1; int maxSizeOfPwd = 3; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex); String result = generator.generate(); checkRegEx(regex + "{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } @Test public void testGenerateWithTwoExpressions() { String regex1 = "[0-9]"; String regex2 = "[a-z]"; int minSizeOfPwd = 3; int maxSizeOfPwd = 10; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex1); generator.addPattern(regex2); String result = generator.generate(); checkRegEx("[0-9,a-z]{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } @Test public void testGenerateWithMultipleExpressions() { String regex1 = "[0-9]"; String regex2 = "[a-z]"; String regex3 = "[A-Z]"; String regex4 = "[\\W_]"; int minSizeOfPwd = 3; int maxSizeOfPwd = 10; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex1); generator.addPattern(regex2); generator.addPattern(regex3); generator.addPattern(regex4); String result = generator.generate(); checkRegEx("[0-9a-zA-Z\\W_]{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } @Test public void testGenerateWithMultipleExpressionsWithSmallerMaxSizeThanRegexItems() { String regex1 = "[0-9]"; String regex2 = "[a-z]"; String regex3 = "[A-Z]"; int minSizeOfPwd = 1; int maxSizeOfPwd = 2; RandomPasswordGenerator generator = new RandomPasswordGenerator(minSizeOfPwd,maxSizeOfPwd); generator.addPattern(regex1); generator.addPattern(regex2); generator.addPattern(regex3); String result = generator.generate(); checkRegEx("[0-9,a-z,A-Z]{"+minSizeOfPwd + "," + maxSizeOfPwd +"}", minSizeOfPwd, maxSizeOfPwd, result); } private void checkRegEx(String regex, int minSizeOfPwd, int maxSizeOfPwd, String result) { assertTrue(result.matches(regex)); if(result.length() < minSizeOfPwd || result.length() > maxSizeOfPwd ){ fail("Length of the result doesn't match the min and max length"); } } }