diff --git a/build.sbt b/build.sbt index f335ae91..d0087047 100644 --- a/build.sbt +++ b/build.sbt @@ -3,7 +3,7 @@ val scala213 = "2.13.8" val scala3 = "3.1.1" val zioVersion = "1.0.13" -val zio2Version = "2.0.0-RC2" +val zio2Version = "2.0.0-RC5" val scalacOptions212 = Seq("-Ypartial-unification", "-deprecation", "-target:jvm-1.8") val scalacOptions213 = Seq("-deprecation", "-target:jvm-1.8") @@ -125,7 +125,7 @@ lazy val proxZStream2 = Project("prox-zstream-2", file("prox-zstream-2")).settin libraryDependencies ++= Seq( "dev.zio" %% "zio" % zio2Version, "dev.zio" %% "zio-streams" % zio2Version, - "dev.zio" %% "zio-prelude" % "1.0.0-RC10", + "dev.zio" %% "zio-prelude" % "1.0.0-RC13", "dev.zio" %% "zio-test" % zio2Version % "test", "dev.zio" %% "zio-test-sbt" % zio2Version % "test", diff --git a/prox-zstream-2/src/main/scala/io/github/vigoo/prox/ProxZStream.scala b/prox-zstream-2/src/main/scala/io/github/vigoo/prox/ProxZStream.scala index 45f2fd22..d13922b3 100644 --- a/prox-zstream-2/src/main/scala/io/github/vigoo/prox/ProxZStream.scala +++ b/prox-zstream-2/src/main/scala/io/github/vigoo/prox/ProxZStream.scala @@ -24,7 +24,7 @@ trait ProxZStream extends Prox { override type ProxExitCode = zio.ExitCode override type ProxFiber[A] = zio.Fiber[ProxError, A] override type ProxIO[A] = ZIO[Any, ProxError, A] - override type ProxResource[A] = ZManaged[Any, ProxError, A] + override type ProxResource[A] = ZIO[Scope, ProxError, A] override type ProxStream[A] = ZStream[Any, ProxError, A] override type ProxPipe[A, B] = ProxStream[A] => ProxStream[B] override type ProxSink[A] = TransformAndSink[A, _] @@ -75,10 +75,10 @@ trait ProxZStream extends Prox { } protected override final def makeResource[A](acquire: ProxIO[A], release: A => ProxIO[Unit]): ProxResource[A] = - ZManaged.acquireReleaseWith(acquire)(x => release(x).mapError(_.toThrowable).orDie) + ZIO.acquireRelease(acquire)(x => release(x).mapError(_.toThrowable).orDie) protected override final def useResource[A, B](r: ProxResource[A], f: A => ProxIO[B]): ProxIO[B] = - r.use(f) + ZIO.scoped(r.flatMap(f)) protected override final def joinFiber[A](f: ProxFiber[A]): ProxIO[A] = f.join @@ -108,19 +108,19 @@ trait ProxZStream extends Prox { ZStream.fromInputStream(input, chunkSize).mapError(FailedToReadProcessOutput.apply) protected override final def drainToJavaOutputStream(stream: ProxStream[Byte], output: io.OutputStream, flushChunks: Boolean): ProxIO[Unit] = { - val managedOutput = ZManaged.acquireReleaseWith(ZIO.succeed(output))(s => ZIO.attempt(s.close()).orDie) + val managedOutput = ZIO.acquireRelease(ZIO.succeed(output))(s => ZIO.attempt(s.close()).orDie) if (flushChunks) { stream.run(flushingOutputStreamSink(managedOutput).mapError(FailedToWriteProcessInput.apply)).unit } else { stream .run(ZSink - .fromOutputStreamManaged(managedOutput) + .fromOutputStreamScoped(managedOutput) .mapError(FailedToWriteProcessInput.apply)).unit } } - private final def flushingOutputStreamSink(managedOutput: ZManaged[Any, Nothing, io.OutputStream]): ZSink[Any, IOException, Byte, Byte, Long] = - ZSink.unwrapManaged { + private final def flushingOutputStreamSink(managedOutput: ZIO[Scope, Nothing, io.OutputStream]): ZSink[Any, IOException, Byte, Byte, Long] = + ZSink.unwrapScoped { managedOutput.map { os => ZSink.foldLeftChunksZIO(0L) { (bytesWritten, byteChunk: Chunk[Byte]) => ZIO.attemptBlockingInterrupt { diff --git a/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessGroupSpecs.scala b/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessGroupSpecs.scala index a54a5d3f..ff152a63 100644 --- a/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessGroupSpecs.scala +++ b/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessGroupSpecs.scala @@ -11,7 +11,7 @@ import zio.test._ import java.nio.charset.StandardCharsets import java.nio.file.Files -object ProcessGroupSpecs extends DefaultRunnableSpec with ProxSpecHelpers { +object ProcessGroupSpecs extends ZIOSpecDefault with ProxSpecHelpers { implicit val processRunner: ProcessRunner[JVMProcessInfo] = new JVMProcessRunner override val spec = @@ -78,7 +78,7 @@ object ProcessGroupSpecs extends DefaultRunnableSpec with ProxSpecHelpers { val processGroup = Process("perl", List("-e", """$SIG{TERM} = sub { exit 1 }; sleep 30; exit 0""")) | Process("sort") - val program = processGroup.start().use { fiber => fiber.interrupt.unit } + val program = ZIO.scoped { processGroup.start().flatMap { fiber => fiber.interrupt.unit } } assertM(program)(equalTo(())) } @@ TestAspect.timeout(5.seconds), @@ -95,8 +95,8 @@ object ProcessGroupSpecs extends DefaultRunnableSpec with ProxSpecHelpers { result <- runningProcesses.terminate() } yield result.exitCodes.toList - assertM(program.provideLayer(Clock.live))(contains[(Process[Unit, Unit], ProxExitCode)](p1 -> ExitCode(1))) - }, + assertM(program)(contains[(Process[Unit, Unit], ProxExitCode)](p1 -> ExitCode(1))) + } @@ withLiveClock, test("can be killed") { @@ -112,10 +112,10 @@ object ProcessGroupSpecs extends DefaultRunnableSpec with ProxSpecHelpers { // Note: we can't assert on the second process' exit code because there is a race condition // between killing it directly and being stopped because of the upstream process got killed. - assertM(program.provideLayer(Clock.live))( + assertM(program)( contains(p1 -> ExitCode(137) )) - } + } @@ withLiveClock ), suite("Input redirection")( diff --git a/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessSpecs.scala b/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessSpecs.scala index 3061de04..88d8fd55 100644 --- a/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessSpecs.scala +++ b/prox-zstream-2/src/test/scala/io/github/vigoo/prox/tests/zstream/ProcessSpecs.scala @@ -12,7 +12,7 @@ import zio.test.TestAspect._ import zio.test._ import zio.{ExitCode, ZIO} -object ProcessSpecs extends DefaultRunnableSpec with ProxSpecHelpers { +object ProcessSpecs extends ZIOSpecDefault with ProxSpecHelpers { implicit val processRunner: ProcessRunner[JVMProcessInfo] = new JVMProcessRunner override val spec = @@ -268,7 +268,7 @@ object ProcessSpecs extends DefaultRunnableSpec with ProxSpecHelpers { suite("Termination")( test("can be terminated with cancellation") { val process = Process("perl", List("-e", """$SIG{TERM} = sub { exit 1 }; sleep 30; exit 0""")) - val program = process.start().use { fiber => fiber.interrupt.unit } + val program = ZIO.scoped { process.start().flatMap { fiber => fiber.interrupt.unit } } assertM(program)(equalTo(())) } @@ TestAspect.timeout(5.seconds), @@ -281,19 +281,19 @@ object ProcessSpecs extends DefaultRunnableSpec with ProxSpecHelpers { result <- runningProcess.terminate() } yield result.exitCode - assertM(program.provideLayer(Clock.live))(equalTo(ExitCode(1))) - }, + assertM(program)(equalTo(ExitCode(1))) + } @@ withLiveClock, test("can be killed") { val process = Process("perl", List("-e", """$SIG{TERM} = 'IGNORE'; sleep 30; exit 2""")) val program = for { runningProcess <- process.startProcess() - _ <- ZIO(Thread.sleep(250)) + _ <- ZIO.sleep(250.millis) result <- runningProcess.kill() } yield result.exitCode - assertM(program.provideLayer(Clock.live))(equalTo(ExitCode(137))) - }, + assertM(program)(equalTo(ExitCode(137))) + } @@ withLiveClock, test("can be checked if is alive") { val process = Process("sleep", List("10"))