8192909: Invalid username or password in HashedPasswordFileTest.java

Reviewed-by: clanger, dfuchs
This commit is contained in:
Harsha Wardhana B 2017-12-05 21:26:11 +05:30
parent 06bf91bacc
commit c8bf23d93a

View File

@ -31,43 +31,26 @@
*
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import jdk.test.lib.Utils;
import jdk.test.lib.process.ProcessTools;
import org.testng.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
import javax.management.MBeanServer;
import javax.management.remote.*;
import java.io.*;
import java.lang.management.ManagementFactory;
import java.net.MalformedURLException;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.attribute.PosixFilePermission;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.ArrayList;
import java.util.Base64;
import java.util.HashMap;
import java.util.HashSet;
import java.util.*;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.*;
import javax.management.MBeanServer;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.annotations.AfterClass;
import jdk.test.lib.Utils;
import jdk.test.lib.process.ProcessTools;
@Test
public class HashedPasswordFileTest {
@ -96,13 +79,12 @@ public class HashedPasswordFileTest {
"SHA3-512"
};
private final Random rnd = new Random();
private final Random random = Utils.getRandomInstance();
private JMXConnectorServer cs;
private String randomWord() {
int idx = rnd.nextInt(randomWords.length);
int idx = random.nextInt(randomWords.length);
return randomWords[idx];
}
@ -146,9 +128,12 @@ public class HashedPasswordFileTest {
BufferedWriter br;
try (FileWriter fw = new FileWriter(file)) {
br = new BufferedWriter(fw);
int numentries = rnd.nextInt(5) + 3;
int numentries = random.nextInt(5) + 3;
for (int i = 0; i < numentries; i++) {
String username = randomWord();
String username;
do {
username = randomWord();
} while (props.get(username) != null);
String password = randomWord();
props.put(username, password);
br.write(username + " " + password + "\n");
@ -182,11 +167,14 @@ public class HashedPasswordFileTest {
BufferedWriter br;
try (FileWriter fw = new FileWriter(file)) {
br = new BufferedWriter(fw);
int numentries = rnd.nextInt(5) + 3;
int numentries = random.nextInt(5) + 3;
for (int i = 0; i < numentries; i++) {
String username = randomWord();
String username;
do {
username = randomWord();
} while (props.get(username) != null);
String password = randomWord();
String alg = hashAlgs[rnd.nextInt(hashAlgs.length)];
String alg = hashAlgs[random.nextInt(hashAlgs.length)];
String[] b64str = getHash(alg, password);
br.write(username + " " + b64str[0] + " " + b64str[1] + " " + alg + "\n");
props.put(username, password);
@ -307,7 +295,7 @@ public class HashedPasswordFileTest {
JMXServiceURL serverUrl = createServerSide(true);
Assert.assertEquals(isPasswordFileHashed(), false);
// create random number of clients
int numClients = rnd.nextInt(20) + 10;
int numClients = random.nextInt(20) + 10;
List<Future> futures = new ArrayList<>();
ExecutorService executor = Executors.newFixedThreadPool(numClients);
for (int i = 0; i < numClients; i++) {
@ -355,32 +343,41 @@ public class HashedPasswordFileTest {
sbuild.append(line).append("\n");
continue;
}
String[] tokens = line.split("\\s+");
// Change password for random entries
if ((tokens.length == 4 || tokens.length == 3) && rnd.nextBoolean()) {
String password = randomWord();
credentials.put(tokens[0], password);
sbuild.append(tokens[0]).append(" ").append(password).append("\n");
if (random.nextBoolean()) {
String[] tokens = line.split("\\s+");
if ((tokens.length == 4 || tokens.length == 3)) {
String password = randomWord();
credentials.put(tokens[0], password);
sbuild.append(tokens[0]).append(" ").append(password).append("\n");
}
} else {
sbuild.append(line).append("\n");
}
}
// Add new entries in clear
int newentries = rnd.nextInt(2) + 3;
int newentries = random.nextInt(2) + 3;
for (int i = 0; i < newentries; i++) {
String username = randomWord();
String username;
do {
username = randomWord();
} while (credentials.get(username) != null);
String password = randomWord();
credentials.put(username, password);
sbuild.append(username).append(" ").append(password).append("\n");
}
// Add new entries as a hash
int numentries = rnd.nextInt(2) + 3;
int numentries = random.nextInt(2) + 3;
for (int i = 0; i < numentries; i++) {
String username = randomWord();
String username;
do {
username = randomWord();
} while (credentials.get(username) != null);
String password = randomWord();
String alg = hashAlgs[rnd.nextInt(hashAlgs.length)];
String alg = hashAlgs[random.nextInt(hashAlgs.length)];
String[] b64str = getHash(alg, password);
credentials.put(username, password);
sbuild.append(username).append(" ").append(b64str[0])