-
Notifications
You must be signed in to change notification settings - Fork 40
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* rework symlink test * add test that uses temp file symbolic link (still not fully working) * Update FileAndResourceDirectivesSymlinkSpec.scala * Update FileAndResourceDirectivesSymlinkSpec.scala
- Loading branch information
Showing
3 changed files
with
81 additions
and
18 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
...g/apache/pekko/http/scaladsl/server/directives/FileAndResourceDirectivesSymlinkSpec.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
/* | ||
* Licensed to the Apache Software Foundation (ASF) under one or more | ||
* license agreements; and to You under the Apache License, version 2.0: | ||
* | ||
* https://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* This file is part of the Apache Pekko project, which was derived from Akka. | ||
*/ | ||
|
||
/* | ||
* Copyright (C) 2009-2022 Lightbend Inc. <https://www.lightbend.com> | ||
*/ | ||
|
||
package org.apache.pekko.http.scaladsl.server | ||
package directives | ||
|
||
import java.io.File | ||
import java.nio.file.{ Files, Paths } | ||
|
||
import scala.concurrent.duration._ | ||
|
||
import org.apache.pekko | ||
import pekko.http.scaladsl.testkit.RouteTestTimeout | ||
import pekko.testkit._ | ||
|
||
import org.scalatest.{ BeforeAndAfterAll, Inside, Inspectors } | ||
|
||
class FileAndResourceDirectivesSymlinkSpec extends RoutingSpec | ||
with Inspectors with Inside with BeforeAndAfterAll { | ||
|
||
// need to serve from the src directory, when sbt copies the resource directory over to the | ||
// target directory it will resolve symlinks in the process | ||
val testRoot = new File("http-tests/src/test/resources") | ||
require(testRoot.exists(), s"testRoot was not found at ${testRoot.getAbsolutePath}") | ||
|
||
val tempDir = Files.createTempDirectory("pekko-http-symlink-test") | ||
tempDir.toFile.deleteOnExit() | ||
val dirWithLink = new File(tempDir.toFile, "dirWithLink") | ||
dirWithLink.mkdir() | ||
val symlink = Files.createSymbolicLink( | ||
Paths.get(dirWithLink.getAbsolutePath, "linked-dir"), | ||
new File(testRoot, "subDirectory").toPath.toAbsolutePath) | ||
|
||
override def afterAll(): Unit = { | ||
super.afterAll() | ||
Files.deleteIfExists(symlink) | ||
Files.deleteIfExists(dirWithLink.toPath) | ||
Files.deleteIfExists(tempDir) | ||
} | ||
|
||
// operations touch files, can be randomly hit by slowness | ||
implicit val routeTestTimeout: RouteTestTimeout = RouteTestTimeout(3.seconds.dilated) | ||
|
||
override def testConfigSource = super.testConfigSource ++ """ | ||
pekko.http.routing.range-coalescing-threshold = 1 | ||
""" | ||
|
||
"getFromDirectory" should { | ||
def _getFromDirectory() = getFromDirectory(dirWithLink.getCanonicalPath) | ||
|
||
"not follow symbolic links to find a file" in { | ||
Files.isSymbolicLink(symlink) shouldBe true | ||
EventFilter.warning(pattern = ".* points to a location that is not part of .*", occurrences = 1).intercept { | ||
Get("linked-dir/empty.pdf") ~> _getFromDirectory() ~> check { | ||
handled shouldBe false | ||
/* TODO: resurrect following links under an option | ||
responseAs[String] shouldEqual "123" | ||
mediaType shouldEqual `application/pdf`*/ | ||
} | ||
} | ||
} | ||
} | ||
} |