5353import java .util .ServiceConfigurationError ;
5454import java .util .ServiceLoader ;
5555import java .util .Set ;
56+ import java .util .stream .Collectors ;
5657import java .util .stream .Stream ;
5758
5859import jdk .test .lib .Platform ;
60+ import jdk .test .lib .Utils ;
5961import jdk .test .lib .artifacts .Artifact ;
6062import jdk .test .lib .artifacts .ArtifactResolver ;
6163import jdk .test .lib .artifacts .ArtifactResolverException ;
@@ -481,14 +483,13 @@ public static String getNssConfig() throws Exception {
481483 return null ;
482484 }
483485
484- String base = getBase ();
485-
486+ String nssConfigDir = copyNssFiles ();
486487 String libfile = libdir + System .mapLibraryName (nss_library );
487488
488489 String customDBdir = System .getProperty ("CUSTOM_DB_DIR" );
489490 String dbdir = (customDBdir != null ) ?
490491 customDBdir :
491- base + SEP + "nss" + SEP + "db" ;
492+ nssConfigDir + SEP + "db" ;
492493 // NSS always wants forward slashes for the config path
493494 dbdir = dbdir .replace ('\\' , '/' );
494495
@@ -498,7 +499,7 @@ public static String getNssConfig() throws Exception {
498499 System .setProperty ("pkcs11test.nss.db" , dbdir );
499500 return (customConfig != null ) ?
500501 customConfig :
501- base + SEP + "nss" + SEP + customConfigName ;
502+ nssConfigDir + SEP + customConfigName ;
502503 }
503504
504505 // Generate a vector of supported elliptic curves of a given provider
@@ -725,6 +726,31 @@ private static Path findNSSLibrary(Path path, Path libraryName) throws IOExcepti
725726 }
726727 }
727728
729+ //Copy the nss config files to the current directory for tests. Returns the destination path
730+ private static String copyNssFiles () throws Exception {
731+ String nss = "nss" ;
732+ String db = "db" ;
733+ Path nssDirSource = Path .of (getBase ()).resolve (nss );
734+ Path nssDirDestination = Path .of ("." ).resolve (nss );
735+
736+ // copy files from nss directory
737+ copyFiles (nssDirSource , nssDirDestination );
738+ // copy files from nss/db directory
739+ copyFiles (nssDirSource .resolve (db ), nssDirDestination .resolve (db ));
740+ return nssDirDestination .toString ();
741+ }
742+
743+ private static void copyFiles (Path dirSource , Path dirDestination ) throws IOException {
744+ List <Path > sourceFiles = Arrays
745+ .stream (dirSource .toFile ().listFiles ())
746+ .filter (File ::isFile )
747+ .map (File ::toPath )
748+ .collect (Collectors .toList ());
749+ List <Path > destFiles = Utils .copyFiles (sourceFiles , dirDestination ,
750+ StandardCopyOption .REPLACE_EXISTING );
751+ destFiles .forEach ((Path file ) -> file .toFile ().setWritable (true ));
752+ }
753+
728754 public abstract void main (Provider p ) throws Exception ;
729755
730756 protected boolean skipTest (Provider p ) {
0 commit comments