From ee292e66d8e9d2968f44e6e139f4179d3a46a0b5 Mon Sep 17 00:00:00 2001 From: Michael Pollmeier Date: Wed, 8 Jan 2025 08:28:44 +0100 Subject: [PATCH 1/3] upgrade cask to 0.9.5 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit note: 0.9.5 is actually the latest release, not 0.10.2 ¯\_(ツ)_/¯ check the cask git commits... https://github.com/com-lihaoyi/cask/commits/master/ --- build.sbt | 2 +- core/src/main/scala/replpp/util/ClasspathHelper.scala | 2 +- .../src/main/scala/replpp/server/WebServiceWithWebSocket.scala | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.sbt b/build.sbt index 708e82b5..46c30233 100644 --- a/build.sbt +++ b/build.sbt @@ -43,7 +43,7 @@ lazy val server = project.in(file("server")) Defaults.itSettings, fork := true, // important: otherwise we run into classloader issues libraryDependencies ++= Seq( - "com.lihaoyi" %% "cask" % "0.8.3", + "com.lihaoyi" %% "cask" % "0.9.5", "org.slf4j" % "slf4j-simple" % Slf4jVersion % Optional, "com.lihaoyi" %% "requests" % "0.8.2" % Test, "org.scalatest" %% "scalatest" % ScalaTestVersion % "it", diff --git a/core/src/main/scala/replpp/util/ClasspathHelper.scala b/core/src/main/scala/replpp/util/ClasspathHelper.scala index f970c229..c36a94e6 100644 --- a/core/src/main/scala/replpp/util/ClasspathHelper.scala +++ b/core/src/main/scala/replpp/util/ClasspathHelper.scala @@ -44,7 +44,7 @@ object ClasspathHelper { if (debugPrint) println(s"using jar from inherited classpath: $path") entries.addOne(path) } else { - if (debugPrint) println(s"exluding jar from inherited classpath (included=$included; excluded=$excluded: $path)") + if (debugPrint) println(s"excluding jar from inherited classpath (included=$included; excluded=$excluded: $path)") } } System.getProperty("java.class.path").split(pathSeparator).filter(_.nonEmpty).map(Paths.get(_)).foreach(addToEntriesMaybe) diff --git a/server/src/main/scala/replpp/server/WebServiceWithWebSocket.scala b/server/src/main/scala/replpp/server/WebServiceWithWebSocket.scala index 5d539efe..f3d18d36 100644 --- a/server/src/main/scala/replpp/server/WebServiceWithWebSocket.scala +++ b/server/src/main/scala/replpp/server/WebServiceWithWebSocket.scala @@ -33,7 +33,7 @@ abstract class WebServiceWithWebSocket[T <: HasUUID]( case Some(providedAuth) => areEqual(providedAuth, requiredAuth) } } - delegate(Map("isAuthorized" -> isAuthorized)) + delegate(request, Map("isAuthorized" -> isAuthorized)) } private def parseAuthentication(request: Request): Option[UsernamePasswordAuth] = From a550da2b5032d07370a5307902e06f857a3113c7 Mon Sep 17 00:00:00 2001 From: Michael Pollmeier Date: Wed, 8 Jan 2025 12:34:21 +0100 Subject: [PATCH 2/3] fix ReplServerTests n.b. org.java_websocket.client.WebSocketClient expects the url scheme to be either `ws` or `wss`, and this tests mixes the two cases widely --- .../scala/replpp/server/ReplServerTests.scala | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/server/src/test/scala/replpp/server/ReplServerTests.scala b/server/src/test/scala/replpp/server/ReplServerTests.scala index 007a9fe2..53dfe8ed 100644 --- a/server/src/test/scala/replpp/server/ReplServerTests.scala +++ b/server/src/test/scala/replpp/server/ReplServerTests.scala @@ -41,7 +41,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "asynchronous api" should { "allow websocket connections to the `/connect` endpoint" in Fixture() { url => val wsMsgPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { case cask.Ws.Text(msg) => + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) => wsMsgPromise.success(msg) } val wsMsg = Await.result(wsMsgPromise.future, DefaultPromiseAwaitTimeout) @@ -80,7 +80,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "allow fetching the result of a completed query using its UUID" in Fixture() { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -103,7 +103,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "use predefined code" in Fixture("val foo = 40") { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -126,7 +126,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "use runBefore code" in Fixture(runBeforeCode = Seq("import Int.MaxValue")) { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -149,7 +149,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "disallow fetching the result of a completed query with an invalid auth header" in Fixture() { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -172,7 +172,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -199,7 +199,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "write a well-formatted message to a websocket connection when a query failed evaluation" in Fixture() { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -228,7 +228,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { url => val wsMsgPromise = scala.concurrent.Promise[String]() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) if msg == "connected" => connectedPromise.success(msg) case cask.Ws.Text(msg) => @@ -254,7 +254,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "receive error when attempting to retrieve result with invalid uuid" in Fixture() { url => val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { case cask.Ws.Text(msg) => + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) => connectedPromise.success(msg) } Await.result(connectedPromise.future, Duration(1, SECONDS)) @@ -266,7 +266,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { "return a valid JSON response when calling /result with incorrectly-formatted UUID parameter" in Fixture() { url => val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { case cask.Ws.Text(msg) => + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) => connectedPromise.success(msg) } Await.result(connectedPromise.future, Duration(1, SECONDS)) @@ -284,7 +284,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { val rtl: Lock = new ReentrantLock() val connectedPromise = scala.concurrent.Promise[String]() - cask.util.WsClient.connect(s"$url/connect") { case cask.Ws.Text(msg) => + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) => if (msg == "connected") { connectedPromise.success(msg) } else { @@ -318,7 +318,7 @@ class ReplServerTests extends AnyWordSpec with Matchers { val connectedPromise = scala.concurrent.Promise[String]() val rtl: Lock = new ReentrantLock() - cask.util.WsClient.connect(s"$url/connect") { case cask.Ws.Text(msg) => + cask.util.WsClient.connect(s"${websocketUrl(url)}/connect") { case cask.Ws.Text(msg) => if (msg == "connected") { connectedPromise.success(msg) } else { @@ -392,6 +392,12 @@ class ReplServerTests extends AnyWordSpec with Matchers { ujson.read(getResponse.bytes) } + /** + * org.java_websocket.client.WebSocketClient expects the url scheme to be either `ws` or `wss`, + * and this tests mixes the two cases widely, so I found this to be the simplest way around it... + */ + def websocketUrl(httpUrl: String): String = + httpUrl.replaceFirst("^http://", "ws://") } object Fixture { From 59ba5347649e559acad52fcce2310e356495a3e4 Mon Sep 17 00:00:00 2001 From: Michael Pollmeier Date: Wed, 8 Jan 2025 12:54:32 +0100 Subject: [PATCH 3/3] trigger ci