diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml index 2bff0888..6e312801 100644 --- a/.github/workflows/validate.yml +++ b/.github/workflows/validate.yml @@ -7,7 +7,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - version: [11, 17] + version: [11, 17, 21, 25] steps: - uses: actions/checkout@v6 diff --git a/pom.xml b/pom.xml index 0af6de2e..132714fd 100644 --- a/pom.xml +++ b/pom.xml @@ -34,6 +34,7 @@ 11 11 false + 0 2.0.13 3.26.1 @@ -69,7 +70,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.10.1 + 3.15.0 @@ -88,7 +89,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.0.0-M7 + 3.5.6 false @@ -113,21 +114,29 @@ maven-war-plugin - 3.3.2 + 3.5.1 maven-clean-plugin - 3.2.0 + 3.5.0 org.apache.maven.plugins maven-shade-plugin - 3.2.4 + 3.6.2 org.apache.maven.plugins maven-plugin-plugin - 3.6.0 + 3.15.2 + + 3.9 + + + + org.eclipse.sisu + sisu-maven-plugin + 1.0.0 io.github.mavenplugins @@ -137,17 +146,17 @@ org.apache.maven.plugins maven-gpg-plugin - 3.2.4 + 3.2.8 org.apache.maven.plugins maven-source-plugin - 3.3.0 + 3.4.0 org.apache.maven.plugins maven-javadoc-plugin - 3.6.3 + 3.12.0 @@ -155,12 +164,31 @@ + + + org.apache.maven + maven-archiver + 3.6.6 + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.5.0 + + + org.apache.maven.plugins + maven-resources-plugin + 3.5.0 + org.codehaus.mojo versions-maven-plugin - 2.16.2 + 2.21.0 false @@ -171,7 +199,7 @@ regex - .+-(alpha|beta|rc|M)[0-9]* + .+[-.](alpha|beta|rc|RC|M)[0-9]* @@ -382,7 +410,7 @@ io.github.unknow0.maven unknow-maven-codegen - 0.02 + 0.2.0 io.github.unknow0.model diff --git a/unknow-server-maven/pom.xml b/unknow-server-maven/pom.xml index d6056db2..2901d143 100644 --- a/unknow-server-maven/pom.xml +++ b/unknow-server-maven/pom.xml @@ -37,14 +37,16 @@ org.apache.maven.plugins maven-plugin-plugin - + + io.github.unknow0.maven:unknow-maven-codegen + true + unknow-server org.eclipse.sisu sisu-maven-plugin - 0.3.3 generate-index diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java deleted file mode 100644 index 6a054f91..00000000 --- a/unknow-server-maven/src/main/java/unknow/server/maven/AbstractGeneratorMojo.java +++ /dev/null @@ -1,28 +0,0 @@ -/** - * - */ -package unknow.server.maven; - -import org.apache.maven.execution.MavenSession; -import org.apache.maven.plugin.MojoExecution; -import org.apache.maven.plugins.annotations.Component; -import org.apache.maven.plugins.annotations.Parameter; -import org.eclipse.aether.RepositorySystem; - -import unknow.maven.codegen.AbstractCodeGenMojo; -import unknow.maven.codegen.CodeGenConfig; - -/** - * @author unknow - */ -public abstract class AbstractGeneratorMojo extends AbstractCodeGenMojo { - @Parameter(defaultValue = "${session}", required = true, readonly = true) - protected MavenSession session; - @Parameter(defaultValue = "${mojo}", required = true, readonly = true) - protected MojoExecution mojo; - @Component - protected RepositorySystem repository; - - @Parameter - protected CodeGenConfig codegen; -} diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java index 09884ba1..b1de8f8b 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxb/JaxbGeneratorMojo.java @@ -34,6 +34,7 @@ import com.github.javaparser.ast.stmt.ReturnStmt; import jakarta.xml.bind.annotation.XmlRootElement; +import unknow.maven.codegen.AbstractCodeGenMojo; import unknow.maven.codegen.CodeGenUtils; import unknow.maven.codegen.TypeFactory; import unknow.model.api.AnnotationModel; @@ -58,7 +59,6 @@ import unknow.server.jaxb.handler.ShortHandler; import unknow.server.jaxb.handler.StringHandler; import unknow.server.jaxb.handler.ZonedDateTimeHandler; -import unknow.server.maven.AbstractGeneratorMojo; import unknow.server.maven.jaxb.builder.HandlerBuilder; import unknow.server.maven.jaxb.model.XmlCollection; import unknow.server.maven.jaxb.model.XmlLoader; @@ -68,7 +68,7 @@ * @author unknow */ @Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "jaxb-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME) -public class JaxbGeneratorMojo extends AbstractGeneratorMojo { +public class JaxbGeneratorMojo extends AbstractCodeGenMojo { private static final HandlerBuilder HANDLER = new HandlerBuilder(); private final Map handlers = new HashMap<>(); @@ -98,8 +98,7 @@ public JaxbGeneratorMojo() { } @Override - public void execute() throws MojoExecutionException, MojoFailureException { - init(session, mojo, repository, codegen); + protected void doexecute() throws MojoExecutionException, MojoFailureException { processSrc(type -> { if (type.annotation(jakarta.xml.bind.annotation.XmlType.class).isPresent()) xmlLoader.add(type); @@ -147,7 +146,7 @@ private void writeXmlLoader() throws MojoExecutionException { ClassOrInterfaceDeclaration cl = cu.addClass("XmlLoader", CodeGenUtils.PUBLIC).addImplementedType(types.getClass(XmlHandlerLoader.class)); cl.addMethod("contextPath", CodeGenUtils.PUBLIC).addMarkerAnnotation(Override.class).setType(types.getClass(String.class)).createBody() - .addStatement(new ReturnStmt(CodeGenUtils.text(codegen.packageName))); + .addStatement(new ReturnStmt(CodeGenUtils.text(codegen.getPackageName()))); NodeList list = new NodeList<>(); for (Entry e : handlers.entrySet()) { @@ -162,7 +161,7 @@ private void writeXmlLoader() throws MojoExecutionException { writer.write(cu); - Path path = Paths.get(codegen.resources, "META-INF", "services", XmlHandlerLoader.class.getName()); + Path path = Paths.get(codegen.getResources(), "META-INF", "services", XmlHandlerLoader.class.getName()); try { Files.createDirectories(path.getParent()); try (BufferedWriter w = Files.newBufferedWriter(path)) { @@ -175,11 +174,11 @@ private void writeXmlLoader() throws MojoExecutionException { } private void generateGraalVmResources() throws MojoFailureException { - if (!codegen.graalvm) + if (!codegen.isGraalvm()) return; try { - Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); + Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); Files.createDirectories(path.getParent()); try (BufferedWriter w = Files.newBufferedWriter(path)) { w.write("{\"resources\":{\"includes\":["); diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java index 7c01905f..1e9be67f 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxrs/JaxrsMojo.java @@ -60,6 +60,7 @@ import jakarta.ws.rs.ext.ParamConverter; import jakarta.ws.rs.ext.ParamConverterProvider; import jakarta.ws.rs.ext.RuntimeDelegate; +import unknow.maven.codegen.AbstractCodeGenMojo; import unknow.maven.codegen.CodeGenUtils; import unknow.maven.codegen.TypeFactory; import unknow.model.api.ClassModel; @@ -67,13 +68,12 @@ import unknow.server.http.jaxrs.JaxrsContext; import unknow.server.http.jaxrs.JaxrsRuntime; import unknow.server.http.jaxrs.protostuff.ProtostuffSchema; -import unknow.server.maven.AbstractGeneratorMojo; /** * @author unknow */ @Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "jaxrs-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME) -public class JaxrsMojo extends AbstractGeneratorMojo { +public class JaxrsMojo extends AbstractCodeGenMojo { private static final String VALUE = "value"; private JaxrsModel model; @@ -94,8 +94,7 @@ public class JaxrsMojo extends AbstractGeneratorMojo { private MediaTypesBuilder mt; @Override - public void execute() throws MojoExecutionException, MojoFailureException { - init(session, mojo, repository, codegen); + protected void doexecute() throws MojoExecutionException, MojoFailureException { if (basePath.endsWith("/")) basePath = basePath.substring(0, basePath.length() - 1); model = new JaxrsModel(loader, classLoader, basePath); @@ -124,7 +123,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { for (Entry> e : map.entrySet()) writer.write(new JaxRsServletBuilder(newCu(), existingClass, e.getKey(), e.getValue(), beans, mt).build()); - new OpenApiBuilder().build(openapi.getSpec(project), model, codegen.resources + basePath + "/openapi.json"); + new OpenApiBuilder().build(openapi.getSpec(project), model, codegen.getResources() + basePath + "/openapi.json"); beans.save(writer); mt.save(writer); @@ -136,7 +135,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { */ private void generateInitalizer() throws IOException, MojoExecutionException { - Path path = Paths.get(codegen.resources, "META-INF", "services", ServletContainerInitializer.class.getName()); + Path path = Paths.get(codegen.getResources(), "META-INF", "services", ServletContainerInitializer.class.getName()); Files.createDirectories(path.getParent()); try (Writer w = Files.newBufferedWriter(path, StandardCharsets.UTF_8)) { w.append(fullName("JaxrsInit")).write('\n'); @@ -265,11 +264,11 @@ private void generateImplicitConverter(ClassOrInterfaceDeclaration clazz, String } private void generateGraalvmResources() throws MojoFailureException { - if (!codegen.graalvm) + if (!codegen.isGraalvm()) return; try { - Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); + Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); Files.createDirectories(path.getParent()); try (BufferedWriter w = Files.newBufferedWriter(path)) { w.write("{\"resources\":{\"includes\":["); diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java index 25a2f432..51baed8d 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/jaxws/JaxwsGeneratorMojo.java @@ -31,9 +31,9 @@ import com.github.javaparser.ast.CompilationUnit; import jakarta.jws.WebService; +import unknow.maven.codegen.AbstractCodeGenMojo; import unknow.maven.codegen.TypeFactory; import unknow.model.api.AnnotationModel; -import unknow.server.maven.AbstractGeneratorMojo; import unknow.server.maven.jaxb.model.XmlLoader; import unknow.server.maven.jaxws.binding.Service; @@ -41,7 +41,7 @@ * @author unknow */ @Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "jaxws-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME) -public class JaxwsGeneratorMojo extends AbstractGeneratorMojo { +public class JaxwsGeneratorMojo extends AbstractCodeGenMojo { private static final Logger logger = LoggerFactory.getLogger(JaxwsGeneratorMojo.class); private static final XMLOutputFactory f = XMLOutputFactory.newInstance(); @@ -55,9 +55,7 @@ public class JaxwsGeneratorMojo extends AbstractGeneratorMojo { private final XmlLoader xmlLoader = new XmlLoader(); @Override - public void execute() throws MojoExecutionException, MojoFailureException { - init(session, mojo, repository, codegen); - + protected void doexecute() throws MojoExecutionException, MojoFailureException { if (!basePath.endsWith("/")) basePath += "/"; @@ -80,7 +78,7 @@ public void execute() throws MojoExecutionException, MojoFailureException { Service service = Service.build(t.asClass(), basePath, loader, xmlLoader); String n = "generated/" + uniquePath + "/" + service.name + ".wsdl"; - Path path = Paths.get(codegen.resources, n); + Path path = Paths.get(codegen.getResources(), n); Files.createDirectories(path.getParent()); try (BufferedWriter w = Files.newBufferedWriter(path)) { new WsdlBuilder(service, publishUrl).write(f.createXMLStreamWriter(w)); @@ -93,9 +91,9 @@ public void execute() throws MojoExecutionException, MojoFailureException { } }); - if (codegen.graalvm && !wsdl.isEmpty()) { + if (codegen.isGraalvm() && !wsdl.isEmpty()) { try { - Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); + Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); Files.createDirectories(path.getParent()); try (BufferedWriter w = Files.newBufferedWriter(path)) { w.write("{\"resources\":{\"includes\":["); diff --git a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java index 1f5b6ed6..305e024c 100644 --- a/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java +++ b/unknow-server-maven/src/main/java/unknow/server/maven/servlet/ServletGenMojo.java @@ -6,8 +6,11 @@ import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.PathMatcher; import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; import java.util.Arrays; +import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.concurrent.TimeUnit; @@ -31,9 +34,11 @@ import jakarta.servlet.DispatcherType; import jakarta.servlet.ServletContainerInitializer; +import unknow.maven.codegen.AbstractCodeGenMojo; +import unknow.maven.codegen.FileScanner.FileHandler; +import unknow.maven.codegen.PathMatchers; import unknow.maven.codegen.TypeFactory; import unknow.model.api.ModelLoader; -import unknow.server.maven.AbstractGeneratorMojo; import unknow.server.maven.servlet.Builder.BuilderContext; import unknow.server.maven.servlet.builder.CreateContext; import unknow.server.maven.servlet.builder.CreateEventManager; @@ -55,7 +60,7 @@ * @author unknow */ @Mojo(defaultPhase = LifecyclePhase.GENERATE_SOURCES, name = "servlet-generator", requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME) -public class ServletGenMojo extends AbstractGeneratorMojo implements BuilderContext { +public class ServletGenMojo extends AbstractCodeGenMojo implements BuilderContext, FileHandler { private static final Logger logger = LoggerFactory.getLogger(ServletGenMojo.class); private static final List BUILDER = Arrays.asList(new CreateEventManager(), new CreateServletManager(), new CreateContext(), new CreateServlets(), @@ -86,13 +91,15 @@ public class ServletGenMojo extends AbstractGeneratorMojo implements BuilderCont @Parameter(defaultValue = "false") private boolean addAccessLog; - @Parameter(defaultValue = "WEB-INF,META-INF,generated") - private List ignoredResources; + private PathMatcher ignoredResources; - @Override - public void execute() throws MojoExecutionException, MojoFailureException { - init(session, mojo, repository, codegen); + @Parameter(defaultValue = "WEB-INF/**,META-INF/**,generated/**") + public void setIgnoredResources(Collection ignore) { + ignoredResources = PathMatchers.oneofGlob(ignore); + } + @Override + protected void doexecute() throws MojoExecutionException, MojoFailureException { cu = newCu(); if (addAccessLog) @@ -106,8 +113,8 @@ public void execute() throws MojoExecutionException, MojoFailureException { } processSrc(descriptor); - processResources(this::process); - if (codegen.graalvm && !descriptor.resources.isEmpty()) + processResources(this); + if (codegen.isGraalvm() && !descriptor.resources.isEmpty()) generateGraalvmResources(); logger.info("descriptor:\n{}", descriptor); @@ -123,8 +130,9 @@ public void execute() throws MojoExecutionException, MojoFailureException { writer.write(cu); } - private void process(Path full, Path file) { - if (file.equals(WEBXML)) { + @Override + public boolean handle(Path full, Path relative, BasicFileAttributes attrs) throws IOException { + if (relative.equals(WEBXML)) { try (InputStream is = Files.newInputStream(full)) { XMLStreamReader r = XML_IN.createXMLStreamReader(is); WebXml.parse(loader, descriptor, r); @@ -132,9 +140,9 @@ private void process(Path full, Path file) { } catch (XMLStreamException | IOException e) { logger.warn("Failed to parse web.xml {}", full, e); } - return; + return true; } - if (file.equals(INITIALIZER)) { + if (relative.equals(INITIALIZER)) { try (BufferedReader r = Files.newBufferedReader(full)) { String l; while ((l = r.readLine()) != null) @@ -144,12 +152,10 @@ private void process(Path full, Path file) { } } - for (String p : ignoredResources) { - if (file.startsWith(p)) - return; - } + if (ignoredResources.matches(relative)) + return true; - String p = "/" + file.toString().replace('\\', '/'); + String p = "/" + relative.toString().replace('\\', '/'); try { long size = Files.size(full); descriptor.resources.put(p, new Resource(Files.getLastModifiedTime(full).to(TimeUnit.MILLISECONDS), size)); @@ -161,7 +167,7 @@ private void process(Path full, Path file) { } catch (IOException e) { logger.error("Failed to process resources {}", full, e); } - + return true; } /** @@ -170,7 +176,7 @@ private void process(Path full, Path file) { */ private void generateGraalvmResources() throws MojoFailureException { try { - Path path = Paths.get(codegen.resources + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); + Path path = Paths.get(codegen.getResources() + "/META-INF/native-image/" + uniquePath + "/resource-config.json"); Files.createDirectories(path.getParent()); try (BufferedWriter w = Files.newBufferedWriter(path)) { w.write("{\"resources\":{\"includes\":["); diff --git a/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java b/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java index 9154c317..fbae134f 100644 --- a/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java +++ b/unknow-server-nio/src/main/java/unknow/server/nio/NIOLoop.java @@ -93,7 +93,7 @@ public final void run() { if (!selector.isOpen()) { afterStop(); return; - } + } // stop mode // TODO add timeout ? diff --git a/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java b/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java index d16fe6be..51cace9c 100644 --- a/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java +++ b/unknow-server-servlet/src/main/java/unknow/server/servlet/HttpWorker.java @@ -68,11 +68,21 @@ public void sendError(int sc, Throwable t, String msg) throws IOException { } } + private final boolean start() { + try { + return doStart(); + } catch (Exception e) { + logger.warn("init req failed", e); + if (e instanceof InterruptedException) + Thread.currentThread().interrupt(); + return false; + } + } + @Override public void run() { try { - if (!doStart()) { - logger.warn("init req failed"); + if (!start()) { co.getOut().close(); return; } @@ -84,8 +94,6 @@ public void run() { res.sendError(500); } catch (@SuppressWarnings("unused") IOException e1) { //ok } - if (e instanceof InterruptedException) - Thread.currentThread().interrupt(); } finally { try { doDone(); diff --git a/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java b/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java index 8f576485..33978d86 100644 --- a/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java +++ b/unknow-server-servlet/src/main/java/unknow/server/servlet/impl/ServletRequestImpl.java @@ -215,22 +215,28 @@ public void setAttribute(String name, Object o) { @Override public String getCharacterEncoding() { if (encoding == null) { - String header = getHeader("content-type"); - if (header != null) { - int i = header.indexOf(";encoding="); - if (i > 0) { - int e = header.indexOf(';', i); - if (e < 0) - e = header.length(); - encoding = header.substring(i + 10, e); - } - } + encoding = getCharset(getHeader("content-type")); if (encoding == null) encoding = co.getCtx().getRequestCharacterEncoding(); } return encoding; } + private static String getCharset(String header) { + int i = header.indexOf(';'); + while (i > 0) { + int e = header.indexOf(';', i); + if (e < 0) + e = header.length(); + int c = header.indexOf("charset=", i); + if (c < e) { + return header.substring(c + 10, e); + } + i = e; + } + return null; + } + @Override public void setCharacterEncoding(String env) throws UnsupportedEncodingException { encoding = env; @@ -274,7 +280,11 @@ public int getIntHeader(String name) { @Override public String getContentType() { - return getHeader("content-type"); + String s = getHeader("content-type"); + int i = s.indexOf(';'); + if (i > 0) + return s.substring(0, i); + return s; } @Override @@ -366,7 +376,7 @@ public Map getParameterMap() { @Override public String getScheme() { - return "http"; + return isSecure() ? "https" : "http"; } @Override diff --git a/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java b/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java index 999eddd1..2be942e9 100644 --- a/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java +++ b/unknow-server-servlet/src/test/java/unknow/server/servlet/http11/RequestDecoderTest.java @@ -2,8 +2,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.withSettings; import java.nio.ByteBuffer; import java.util.stream.Stream; @@ -12,7 +10,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import unknow.server.servlet.HttpConnection; import unknow.server.servlet.impl.ServletRequestImpl; public class RequestDecoderTest { @@ -30,7 +27,7 @@ public static Stream test() { @ParameterizedTest @MethodSource public void test(String expected, byte[]... chunk) { - Http11Processor co = mock(Http11Processor.class, withSettings().useConstructor((HttpConnection) null)); + Http11Processor co = new Http11Processor(null); RequestDecoder d = new RequestDecoder(co); ServletRequestImpl req = null; for (byte[] b : chunk) diff --git a/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java b/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java index f756b8fb..b71f4ddf 100644 --- a/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java +++ b/unknow-server-servlet/src/test/java/unknow/server/servlet/utils/PathTreeTest.java @@ -4,19 +4,14 @@ package unknow.server.servlet.utils; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; import java.util.Arrays; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.mockito.Mockito; import jakarta.servlet.DispatcherType; import jakarta.servlet.FilterChain; -import unknow.server.servlet.HttpConnection; -import unknow.server.servlet.impl.ServletContextImpl; import unknow.server.servlet.impl.ServletRequestImpl; import unknow.server.servlet.utils.PathTree.Node; import unknow.server.servlet.utils.PathTree.PartNode; @@ -25,15 +20,13 @@ * @author unknow */ public class PathTreeTest { - ServletRequestImpl mock; + ServletRequestImpl req; @BeforeEach public void init() { - ServletContextImpl ctx = new ServletContextImpl("", "", null, null, null, null, null); - HttpConnection p = mock(HttpConnection.class); - when(p.getCtx()).thenReturn(ctx); +// ServletContextImpl ctx = new ServletContextImpl("", "", null, null, null, null, null); - mock = mock(ServletRequestImpl.class, Mockito.withSettings().useConstructor(p, DispatcherType.REQUEST)); + req = new ServletRequestImpl(null, DispatcherType.REQUEST); } @Test @@ -43,11 +36,11 @@ public void root() { PathTree tree = new PathTree(new PartNode(null, null, null, exacts, defaults)); - when(mock.getRequestURI()).thenReturn("/"); - assertEquals(exacts, tree.find(mock)); + req.setRequestUri("/"); + assertEquals(exacts, tree.find(req)); - when(mock.getRequestURI()).thenReturn("/blabla"); - assertEquals(defaults, tree.find(mock)); + req.setRequestUri("/blabla"); + assertEquals(defaults, tree.find(req)); } @Test @@ -60,14 +53,14 @@ public void nexts() { PathTree tree = new PathTree(new PartNode(null, next, null, null, defaults)); - when(mock.getRequestURI()).thenReturn("/toto"); - assertEquals(defaults, tree.find(mock)); + req.setRequestUri("/toto"); + assertEquals(defaults, tree.find(req)); - when(mock.getRequestURI()).thenReturn("/first"); - assertEquals(first, tree.find(mock)); + req.setRequestUri("/first"); + assertEquals(first, tree.find(req)); - when(mock.getRequestURI()).thenReturn("/second"); - assertEquals(second, tree.find(mock)); + req.setRequestUri("/second"); + assertEquals(second, tree.find(req)); } @Test @@ -80,14 +73,14 @@ public void ends() { PathTree tree = new PathTree(new PartNode(null, null, ends, null, defaults)); - when(mock.getRequestURI()).thenReturn("/bla.txt"); - assertEquals(defaults, tree.find(mock)); + req.setRequestUri("/bla.txt"); + assertEquals(defaults, tree.find(req)); - when(mock.getRequestURI()).thenReturn("/bla.jsp"); - assertEquals(jsp, tree.find(mock)); + req.setRequestUri("/bla.jsp"); + assertEquals(jsp, tree.find(req)); - when(mock.getRequestURI()).thenReturn("/bla.html"); - assertEquals(html, tree.find(mock)); + req.setRequestUri("/bla.html"); + assertEquals(html, tree.find(req)); } }