From b2d82bddd39d61c81ce14086809d817a1475e0b5 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Fri, 26 Feb 2021 10:45:00 +0000 Subject: Support for JDK 8 (and 11) --- .github/workflows/actions.yaml | 8 ++++-- README.md | 4 +-- server/src/net/usebox/gemini/server/Server.scala | 8 +++--- server/test/src/ServerSpec.scala | 34 ++++++++++++++++-------- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/.github/workflows/actions.yaml b/.github/workflows/actions.yaml index acc9ac2..0a78809 100644 --- a/.github/workflows/actions.yaml +++ b/.github/workflows/actions.yaml @@ -4,15 +4,19 @@ on: [push] jobs: test: + strategy: + matrix: + java-version: [8, 11] + runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: coursier/cache-action@v5 - - name: Set up JDK 11 + - name: Set up JDK ${{ matrix.java-version }} uses: actions/setup-java@v1 with: - java-version: 11 + java-version: ${{ matrix.java-version }} - name: Run tests run: ./mill server.test diff --git a/README.md b/README.md index d0c89d5..0b85687 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Check [CHANGES](CHANGES.md) to see what's new in the latest release. ## How to run it -Download [the `jar` distribution file](https://github.com/reidrac/spacebeans/releases/) and install Java Runtime Environment 11 (or +Download [the `jar` distribution file](https://github.com/reidrac/spacebeans/releases/) and install Java Runtime Environment 8 (or later; [openJRE](https://adoptopenjdk.net/) recommended). You can run the service with: @@ -92,7 +92,7 @@ validating the certificate, this is perfectly safe. Requirements: - - JDK 11 + - JDK 8 (or later) - [Mill](https://com-lihaoyi.github.io/mill/) for building Run the server with `mill server.run` and the tests with `mill server.test`. diff --git a/server/src/net/usebox/gemini/server/Server.scala b/server/src/net/usebox/gemini/server/Server.scala index c2fcee3..ed9252d 100644 --- a/server/src/net/usebox/gemini/server/Server.scala +++ b/server/src/net/usebox/gemini/server/Server.scala @@ -3,8 +3,7 @@ package net.usebox.gemini.server import java.nio.charset.Charset import javax.net.ssl.SSLEngine import java.net.URI -import java.nio.file.Path -import java.nio.file.Files +import java.nio.file.{Path, FileSystems, Files} import scala.util.{Try, Success => TrySuccess} @@ -102,7 +101,10 @@ case class Server(conf: ServiceConf) { logger.debug("redirect to normalize uri") PermanentRedirect(req, uri.normalize().toString()) case ("gemini", host, path, Some(vhost)) => - val resource = Path.of(vhost.root, path).normalize() + val resource = FileSystems + .getDefault() + .getPath(vhost.root, path) + .normalize() logger.debug(s"requesting: '$resource'") diff --git a/server/test/src/ServerSpec.scala b/server/test/src/ServerSpec.scala index 40a2818..d086d2d 100644 --- a/server/test/src/ServerSpec.scala +++ b/server/test/src/ServerSpec.scala @@ -1,6 +1,6 @@ package net.usebox.gemini.server -import java.nio.file.Path +import java.nio.file.FileSystems import scala.concurrent.duration._ @@ -33,33 +33,42 @@ class ServerSpec extends AnyFlatSpec with Matchers { it should "resolve a known MIME type" in { Server(TestData.conf) - .guessMimeType(Path.of("file.html"), None) shouldBe "text/html" + .guessMimeType( + FileSystems.getDefault().getPath("file.html"), + None + ) shouldBe "text/html" } it should "resolve de default MIME type for unknown types" in { Server(TestData.conf) .guessMimeType( - Path.of("unknow"), + FileSystems.getDefault().getPath("unknow"), None ) shouldBe TestData.conf.defaultMimeType } it should "resolve gemini MIME type" in { Server(TestData.conf) - .guessMimeType(Path.of("file.gmi"), None) shouldBe "text/gemini" + .guessMimeType( + FileSystems.getDefault().getPath("file.gmi"), + None + ) shouldBe "text/gemini" Server(TestData.conf) - .guessMimeType(Path.of("file.gemini"), None) shouldBe "text/gemini" + .guessMimeType( + FileSystems.getDefault().getPath("file.gemini"), + None + ) shouldBe "text/gemini" } it should "resolve gemini MIME type, including parameters" in { Server(TestData.conf) .guessMimeType( - Path.of("file.gmi"), + FileSystems.getDefault().getPath("file.gmi"), Some("param") ) shouldBe "text/gemini; param" Server(TestData.conf) .guessMimeType( - Path.of("file.gemini"), + FileSystems.getDefault().getPath("file.gemini"), Some("param") ) shouldBe "text/gemini; param" } @@ -67,7 +76,7 @@ class ServerSpec extends AnyFlatSpec with Matchers { it should "gemini MIME type parameters are sanitized" in { Server(TestData.conf) .guessMimeType( - Path.of("file.gmi"), + FileSystems.getDefault().getPath("file.gmi"), Some(" ; param") ) shouldBe "text/gemini; param" } @@ -76,14 +85,17 @@ class ServerSpec extends AnyFlatSpec with Matchers { it should "resolve a known MIME type" in { Server(TestData.conf.copy(mimeTypes = TestData.mimeTypes)) - .guessMimeType(Path.of("file.gmi"), None) shouldBe "config" + .guessMimeType( + FileSystems.getDefault().getPath("file.gmi"), + None + ) shouldBe "config" } it should "include parameters for text/gemini MIME types" in { Server( TestData.conf.copy(mimeTypes = Some(Map("text/gemini" -> List(".gmi")))) ).guessMimeType( - Path.of("file.gmi"), + FileSystems.getDefault().getPath("file.gmi"), Some("param") ) shouldBe "text/gemini; param" } @@ -91,7 +103,7 @@ class ServerSpec extends AnyFlatSpec with Matchers { it should "resolve de default MIME type for unknown types" in { Server(TestData.conf.copy(mimeTypes = TestData.mimeTypes)) .guessMimeType( - Path.of("unknow"), + FileSystems.getDefault().getPath("unknow"), None ) shouldBe TestData.conf.defaultMimeType } -- cgit v1.2.3