Repository: jclouds
Updated Branches:
  refs/heads/master 5bcf7c475 -> 640e04b31


Generate fixed length passwords

Avoids bugs where tests succeed with an average sized password but fail when 
the password length is at the allowed extremes.


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/640e04b3
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/640e04b3
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/640e04b3

Branch: refs/heads/master
Commit: 640e04b3152e491bd504c09145e06b01cf8f224c
Parents: 5bcf7c4
Author: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com>
Authored: Tue Aug 1 16:12:59 2017 +0300
Committer: Svetoslav Neykov <svetoslav.ney...@cloudsoftcorp.com>
Committed: Tue Aug 8 20:21:21 2017 +0300

----------------------------------------------------------------------
 core/src/main/java/org/jclouds/util/Passwords.java    | 14 ++++++++++----
 .../src/test/java/org/jclouds/util/PasswordsTest.java |  8 ++++++++
 2 files changed, 18 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/640e04b3/core/src/main/java/org/jclouds/util/Passwords.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/util/Passwords.java 
b/core/src/main/java/org/jclouds/util/Passwords.java
index e1d3b46..cf2d57d 100644
--- a/core/src/main/java/org/jclouds/util/Passwords.java
+++ b/core/src/main/java/org/jclouds/util/Passwords.java
@@ -19,16 +19,18 @@ package org.jclouds.util;
 import java.util.Random;
 import java.util.regex.Pattern;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 
 public class Passwords {
 
    private static final Random random = new Random();
 
-   private static final int MIN_CHAR = 8;
-   private static final int MAX_CHAR = 50;
+   private static final int GENERATE_PASSWORD_LENGTH = 30;
+   private static final int VALID_PASSWORD_MIN_LENGTH = 8;
+   private static final int VALID_PASSWORD_MAX_LENGTH = 50;
    private static final String PASSWORD_FORMAT = String.format(
-           "[a-zA-Z0-9][^iIloOwWyYzZ10]{%d,%d}", MIN_CHAR - 1, MAX_CHAR);
+           "[a-zA-Z0-9][^iIloOwWyYzZ10]{%d,%d}", VALID_PASSWORD_MIN_LENGTH - 
1, VALID_PASSWORD_MAX_LENGTH);
    private static final Pattern PASSWORD_PATTERN = 
Pattern.compile(PASSWORD_FORMAT);
 
    private static final ImmutableSet<Character> INVALID_CHARS = 
ImmutableSet.<Character>of(
@@ -39,7 +41,11 @@ public class Passwords {
    }
 
    public static String generate() {
-      int count = random.nextInt(MAX_CHAR - MIN_CHAR) + MIN_CHAR;
+      return generate(GENERATE_PASSWORD_LENGTH);
+   }
+
+   public static String generate(int count) {
+      Preconditions.checkArgument(count > 0, "Password length must be a 
positive number");
 
       final char[] buffer = new char[count];
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/640e04b3/core/src/test/java/org/jclouds/util/PasswordsTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/util/PasswordsTest.java 
b/core/src/test/java/org/jclouds/util/PasswordsTest.java
index 200bed9..d1d5d50 100644
--- a/core/src/test/java/org/jclouds/util/PasswordsTest.java
+++ b/core/src/test/java/org/jclouds/util/PasswordsTest.java
@@ -20,8 +20,10 @@ import com.google.common.collect.ImmutableList;
 import org.testng.annotations.Test;
 
 import java.util.List;
+import java.util.Random;
 
 import static org.jclouds.util.Passwords.isValidPassword;
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertTrue;
 
@@ -52,4 +54,10 @@ public class PasswordsTest {
          assertTrue(isValidPassword(pwd), "Failed with: " + pwd);
       }
    }
+
+   @Test
+   public void testGeneratorGeneratesRequestedLength() {
+      int passwordLength = new Random().nextInt(40) + 10;
+      assertEquals(Passwords.generate(passwordLength).length(), 
passwordLength);
+   }
 }

Reply via email to