From 606070de3e2222cb94f592f5e2059512a5b8da2f Mon Sep 17 00:00:00 2001 From: RIHTARSIC Joze <joze.rihtarsic@ext.ec.europa.eu> Date: Tue, 2 Apr 2024 11:31:47 +0200 Subject: [PATCH] [EDELIVERY-12927] fix unit tests --- .../data/dao/utils/SMPSchemaGenerator.java | 63 ++++++++++++------- .../dao/utils/SMPSchemaGeneratorTest.java | 11 ++-- .../smp/ui/edit/ResourceEditControllerIT.java | 5 +- 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java index 3e1c5fc4e..1682a8b3e 100644 --- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java +++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGenerator.java @@ -34,11 +34,9 @@ import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.lang.reflect.Field; +import java.net.URL; import java.nio.file.Files; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.EnumSet; -import java.util.List; +import java.util.*; /** * Class generates DDL script for SMP. Purpose of script is to manually run SQL script to create database. And to @@ -50,7 +48,10 @@ import java.util.List; public class SMPSchemaGenerator { protected static String filenameTemplate = "%s.ddl"; protected static String filenameDropTemplate = "%s-drop.ddl"; - protected static String smpEntityPackageName = "eu.europa.ec.edelivery.smp.data.model,eu.europa.ec.edelivery.smp.data.model.user,eu.europa.ec.edelivery.smp.data.model.doc,eu.europa.ec.edelivery.smp.data.model.ext"; + protected static String smpEntityPackageName = "eu.europa.ec.edelivery.smp.data.model," + + "eu.europa.ec.edelivery.smp.data.model.user," + + "eu.europa.ec.edelivery.smp.data.model.doc," + + "eu.europa.ec.edelivery.smp.data.model.ext"; private static final String SQL_MESSAGE = "-- ------------------------------------------------------------------------\n-- This file was generated by hibernate for SMP version %s.\n-- ------------------------------------------------------------------------\n\n"; protected static final SMPLogger LOG = SMPLoggerFactory.getLogger(SMPSchemaGenerator.class); @@ -98,7 +99,6 @@ public class SMPSchemaGenerator { // metadata.addPackage did not work... List<Class> clsList = getAllEntityClasses(pckName); for (Class clazz : clsList) { - metadata.addAnnotatedClass(clazz); } } @@ -184,28 +184,49 @@ public class SMPSchemaGenerator { * @return */ public List<Class> getAllEntityClasses(String pckgname) throws ClassNotFoundException { - ArrayList classes = new ArrayList(); + List<Class> classes = new ArrayList<>(); - // Get a File object for the package - File directory = null; + // Get list of folders for the package + List<File> resourceFolders = new ArrayList<>(); try { - directory = new File(Thread.currentThread().getContextClassLoader().getResource(pckgname.replace('.', '/')).getFile()); - } catch (NullPointerException x) { + // can be multiple resource locations: as example test-classes and classes + Enumeration<URL> resourceUrls = Thread.currentThread().getContextClassLoader().getResources(pckgname.replace('.', '/')); + while (resourceUrls.hasMoreElements()) { + URL resource = resourceUrls.nextElement(); + resourceFolders.add(new File(resource.getFile())); + } + + } catch (IOException | NullPointerException x) { throw new ClassNotFoundException(pckgname + " does not appear to be a valid package"); } - if (directory.exists()) { - // Get the list of the files contained in the package - String[] files = directory.list(); - for (int i = 0; i < files.length; i++) { - if (files[i].endsWith(".class")) { - // removes the .class extension - classes.add(Class.forName(pckgname + '.' + files[i].substring(0, files[i].length() - 6))); - } - } - } else { + + if (resourceFolders.isEmpty()) { throw new ClassNotFoundException("Package: " + pckgname + " does not exists!"); } + // iterate over all resource folders + for (File resourceFolder : resourceFolders) { + classes.addAll(getClassesFromFolder(resourceFolder, pckgname)); + } + return classes; + } + /** + * Returns list of classes in folder with given package name. The method is used to get classes + * only from resource folder and not the packaged jars. + * @param resourceFolder - folder with classes + * @param pckgName - package name + * @return list of classes in folder + * @throws ClassNotFoundException - if class not found + */ + public List<Class> getClassesFromFolder(File resourceFolder, String pckgName) throws ClassNotFoundException { + List<Class> classes = new ArrayList<>(); + String[] files = resourceFolder.list(); + for (int i = 0; i < files.length; i++) { + if (files[i].endsWith(".class")) { + // removes the .class extension + classes.add(Class.forName(pckgName + '.' + files[i].substring(0, files[i].length() - 6))); + } + } return classes; } diff --git a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java index 55cdfb5bd..bf72ee552 100644 --- a/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java +++ b/smp-server-library/src/test/java/eu/europa/ec/edelivery/smp/data/dao/utils/SMPSchemaGeneratorTest.java @@ -35,8 +35,10 @@ class SMPSchemaGeneratorTest { private static final String DIALECT_ORACLE = "org.hibernate.dialect.Oracle10gDialect"; private static final String DIALECT_MYSQL_INNO5 = "org.hibernate.dialect.MySQL5InnoDBDialect"; - protected static String ENTITY_PACKAGES = "eu.europa.ec.edelivery.smp.data.model,eu.europa.ec.edelivery.smp.data.model.user,eu.europa.ec.edelivery.smp.data.model.doc,eu.europa.ec.edelivery.smp.data.model.ext"; - + protected static String ENTITY_PACKAGES = "eu.europa.ec.edelivery.smp.data.model," + + "eu.europa.ec.edelivery.smp.data.model.user," + + "eu.europa.ec.edelivery.smp.data.model.doc," + + "eu.europa.ec.edelivery.smp.data.model.ext"; private static Object[] dialectTestCases() { return new Object[][]{ @@ -48,16 +50,14 @@ class SMPSchemaGeneratorTest { }; } - SMPSchemaGenerator testInstance = new SMPSchemaGenerator(); - @Test void createDDLScript() throws ClassNotFoundException, IOException { // given String folder = "target"; String dialect = DIALECT_ORACLE; - String version = "4.1.0-SNAPSHOT"; + String version = "5.1-SNAPSHOT"; List<String> lstPackages = Arrays.asList(ENTITY_PACKAGES.split(",")); File f = new File("target/oracle10g.ddl"); File fDrop = new File("target/oracle10g-drop.ddl"); @@ -128,7 +128,6 @@ class SMPSchemaGeneratorTest { void getAllEntityClassesNotFound() { assertThrows(ClassNotFoundException.class, () -> testInstance.getAllEntityClasses("eu.not.exists")); - } @Test diff --git a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java index 29d08e8d5..489fde0a3 100644 --- a/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java +++ b/smp-webapp/src/test/java/eu/europa/ec/edelivery/smp/ui/edit/ResourceEditControllerIT.java @@ -307,9 +307,10 @@ class ResourceEditControllerIT extends AbstractControllerTest { } @Test - public void testFilter() throws Exception { + void testFilter() throws Exception { // given when final String filter = ":%#^&$-_=asd.<>/\\"; + final String expectedEscapedFilter = ":\\%#^&$-\\_=asd.<>/\\\\"; String filterParam = URLEncoder.encode(filter); MockHttpSession session = loginWithSystemAdmin(mvc); UserRO userRO = getLoggedUserData(mvc, session); @@ -328,6 +329,6 @@ class ResourceEditControllerIT extends AbstractControllerTest { .andExpect(status().isOk()).andReturn(); //then - Mockito.verify(uiResourceService).getGroupResources(anyLong(), anyInt(), anyInt(), eq(filter)); + Mockito.verify(uiResourceService).getGroupResources(anyLong(), anyInt(), anyInt(), eq(expectedEscapedFilter)); } } -- GitLab