diff --git a/.gitignore b/.gitignore index 0be829d..7dd0025 100644 --- a/.gitignore +++ b/.gitignore @@ -68,4 +68,7 @@ project/plugins/project/ .worksheet .idea/ -project/ \ No newline at end of file +project/ +.metals +.bsp +.bloop \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..32cfc61 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.watcherExclude": { + "**/target": true + } +} \ No newline at end of file diff --git a/build.sbt b/build.sbt index 528e152..b31ef3d 100644 --- a/build.sbt +++ b/build.sbt @@ -2,11 +2,11 @@ name := "scala_nio_server" version := "1.0" -scalaVersion := "2.11.8" +scalaVersion := "2.13.11" libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.7" -libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.5.0" +libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.9.5" -libraryDependencies += "org.scalactic" %% "scalactic" % "3.0.0" % "test" -libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.0" % "test" -libraryDependencies += "org.mockito" % "mockito-core" % "1.10.19" % "test" \ No newline at end of file +libraryDependencies += "org.scalactic" %% "scalactic" % "3.2.10" % "test" +libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10" % "test" +libraryDependencies += "org.scalatestplus" %% "mockito-4-11" % "3.2.17.0" % "test" \ No newline at end of file diff --git a/src/main/scala/de/khamrakulov/followermaze/Followermaze.scala b/src/main/scala/de/khamrakulov/followermaze/Followermaze.scala index bcca5fb..8a78155 100644 --- a/src/main/scala/de/khamrakulov/followermaze/Followermaze.scala +++ b/src/main/scala/de/khamrakulov/followermaze/Followermaze.scala @@ -27,5 +27,5 @@ object Followermaze extends App { clientListener.start() new Thread(EventTransformer.toTypedEvent(eventSourceQueue, transformedQueue), "Transformer thread").start() - new Thread(Router(transformedQueue, clientController, followerController), "Router thread")start() + new Thread(Router(transformedQueue, clientController, followerController), "Router thread").start() } diff --git a/src/main/scala/de/khamrakulov/followermaze/controller/ClientController.scala b/src/main/scala/de/khamrakulov/followermaze/controller/ClientController.scala index 9349c53..7e4c8b6 100644 --- a/src/main/scala/de/khamrakulov/followermaze/controller/ClientController.scala +++ b/src/main/scala/de/khamrakulov/followermaze/controller/ClientController.scala @@ -2,7 +2,7 @@ package de.khamrakulov.followermaze.controller import java.util.concurrent.ConcurrentHashMap -import scala.collection.convert.decorateAsScala._ +import scala.jdk.CollectionConverters._ /** * @author Timur Khamrakulov . @@ -12,7 +12,7 @@ object ClientController { } class ClientController { - val clients = new ConcurrentHashMap[Int, Client]().asScala + val clients = new ConcurrentHashMap[Int, Client]().asScala def get(id: Int) = clients.get(id) diff --git a/src/main/scala/de/khamrakulov/followermaze/controller/FollowController.scala b/src/main/scala/de/khamrakulov/followermaze/controller/FollowController.scala index 48a8685..9a20b02 100644 --- a/src/main/scala/de/khamrakulov/followermaze/controller/FollowController.scala +++ b/src/main/scala/de/khamrakulov/followermaze/controller/FollowController.scala @@ -2,7 +2,7 @@ package de.khamrakulov.followermaze.controller import java.util.concurrent.{ConcurrentHashMap, ConcurrentSkipListSet} -import scala.collection.convert.decorateAsScala._ +import scala.jdk.CollectionConverters._ /** * @author Timur Khamrakulov . diff --git a/src/test/scala/de/khamrakulov/followermaze/controller/ClientControllerSpec.scala b/src/test/scala/de/khamrakulov/followermaze/controller/ClientControllerSpec.scala index 82ae91c..ab409ff 100644 --- a/src/test/scala/de/khamrakulov/followermaze/controller/ClientControllerSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/controller/ClientControllerSpec.scala @@ -1,13 +1,14 @@ package de.khamrakulov.followermaze.controller import de.khamrakulov.followermaze.nio.NioClientImpl -import org.scalatest.mockito.MockitoSugar -import org.scalatest.{FlatSpec, Matchers} +import org.scalatestplus.mockito.MockitoSugar +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class ClientControllerSpec extends FlatSpec with Matchers with MockitoSugar { +class ClientControllerSpec extends AnyFlatSpec with Matchers with MockitoSugar { "ClientController" should "add and get clients" in { val controller = ClientController() val client = mock[NioClientImpl] diff --git a/src/test/scala/de/khamrakulov/followermaze/controller/FollowControllerSpec.scala b/src/test/scala/de/khamrakulov/followermaze/controller/FollowControllerSpec.scala index 7379547..bcba6de 100644 --- a/src/test/scala/de/khamrakulov/followermaze/controller/FollowControllerSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/controller/FollowControllerSpec.scala @@ -1,11 +1,12 @@ package de.khamrakulov.followermaze.controller -import org.scalatest.{FlatSpec, Matchers} +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class FollowControllerSpec extends FlatSpec with Matchers { +class FollowControllerSpec extends AnyFlatSpec with Matchers { "FollowController" should "add, get and remove follow relations" in { val controller = FollowController() controller.add(1, 2) diff --git a/src/test/scala/de/khamrakulov/followermaze/controller/TypedEventSeqControllerSpec.scala b/src/test/scala/de/khamrakulov/followermaze/controller/TypedEventSeqControllerSpec.scala index 2a741ab..0a59c5d 100644 --- a/src/test/scala/de/khamrakulov/followermaze/controller/TypedEventSeqControllerSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/controller/TypedEventSeqControllerSpec.scala @@ -2,14 +2,15 @@ package de.khamrakulov.followermaze.controller import de.khamrakulov.followermaze.{Broadcast, TypedEvent} import org.mockito.Mockito -import org.scalatest.mockito.MockitoSugar -import org.scalatest.{FlatSpec, Matchers} +import org.scalatestplus.mockito.MockitoSugar +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class TypedEventSeqControllerSpec extends FlatSpec with Matchers with MockitoSugar { +class TypedEventSeqControllerSpec extends AnyFlatSpec with Matchers with MockitoSugar { "TypedEventSeqController" should "provide events in correct order" in { type Handler = TypedEvent => Unit val handler = mock[Handler] diff --git a/src/test/scala/de/khamrakulov/followermaze/event/ParserSpec.scala b/src/test/scala/de/khamrakulov/followermaze/event/ParserSpec.scala index ade11e5..07f0d9d 100644 --- a/src/test/scala/de/khamrakulov/followermaze/event/ParserSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/event/ParserSpec.scala @@ -1,12 +1,13 @@ package de.khamrakulov.followermaze.event import de.khamrakulov.followermaze._ -import org.scalatest._ - +import org.scalatestplus.mockito.MockitoSugar +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class ParserSpec extends FlatSpec with Matchers { +class ParserSpec extends AnyFlatSpec with Matchers { val followString = "666|F|60|50" val unfollowString = "666|U|60|50" val broadcastString = "666|B" diff --git a/src/test/scala/de/khamrakulov/followermaze/event/RouterSpec.scala b/src/test/scala/de/khamrakulov/followermaze/event/RouterSpec.scala index 4e31d60..f2ba248 100644 --- a/src/test/scala/de/khamrakulov/followermaze/event/RouterSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/event/RouterSpec.scala @@ -6,13 +6,14 @@ import de.khamrakulov.followermaze._ import de.khamrakulov.followermaze.controller.{ClientController, FollowController} import de.khamrakulov.followermaze.nio.NioClientImpl import org.mockito.Mockito -import org.scalatest.mockito.MockitoSugar -import org.scalatest.{FlatSpec, Matchers} +import org.scalatestplus.mockito.MockitoSugar +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class RouterSpec extends FlatSpec with Matchers with MockitoSugar { +class RouterSpec extends AnyFlatSpec with Matchers with MockitoSugar { "Router" should "correctly route events" in { val service = Executors.newSingleThreadExecutor() val in = new LinkedBlockingQueue[TypedEvent]() diff --git a/src/test/scala/de/khamrakulov/followermaze/event/source/UntypedEventSourceSpec.scala b/src/test/scala/de/khamrakulov/followermaze/event/source/UntypedEventSourceSpec.scala index 6258833..fc8a348 100644 --- a/src/test/scala/de/khamrakulov/followermaze/event/source/UntypedEventSourceSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/event/source/UntypedEventSourceSpec.scala @@ -7,14 +7,15 @@ import java.util.concurrent.{LinkedBlockingQueue, TimeUnit, Future => JFuture} import de.khamrakulov.followermaze.UntypedEvent import org.mockito.invocation.InvocationOnMock import org.mockito.stubbing.Answer -import org.mockito.{Mockito, Matchers => M} -import org.scalatest.mockito.MockitoSugar -import org.scalatest.{FlatSpec, Matchers} +import org.mockito.{Mockito, ArgumentMatchers => M} +import org.scalatestplus.mockito.MockitoSugar +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class UntypedEventSourceSpec extends FlatSpec with Matchers with MockitoSugar { +class UntypedEventSourceSpec extends AnyFlatSpec with Matchers with MockitoSugar { def getSocket(output1: String, output2: String) = { val stringBytes1 = output1.getBytes("utf-8") val stringBytes2 = output2.getBytes("utf-8") diff --git a/src/test/scala/de/khamrakulov/followermaze/event/transformer/ToTypedEventTransformerSpec.scala b/src/test/scala/de/khamrakulov/followermaze/event/transformer/ToTypedEventTransformerSpec.scala index 00ebc9c..f786ccd 100644 --- a/src/test/scala/de/khamrakulov/followermaze/event/transformer/ToTypedEventTransformerSpec.scala +++ b/src/test/scala/de/khamrakulov/followermaze/event/transformer/ToTypedEventTransformerSpec.scala @@ -3,12 +3,13 @@ package de.khamrakulov.followermaze.event.transformer import java.util.concurrent.{Executors, LinkedBlockingQueue, TimeUnit} import de.khamrakulov.followermaze._ -import org.scalatest.{FlatSpec, Matchers} +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers /** * @author Timur Khamrakulov . */ -class ToTypedEventTransformerSpec extends FlatSpec with Matchers { +class ToTypedEventTransformerSpec extends AnyFlatSpec with Matchers { "ToTypedEventTransformer" should "correctly transform events" in { val in = new LinkedBlockingQueue[UntypedEvent]() in.add(UntypedEvent("1|F|2|3"))