From 783944cb8750e3c26284aba80a8d48590dcba3b8 Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Sun, 3 Nov 2019 23:59:18 +0800 Subject: actor readme pipelineLog --- cask/actor/test/src-jvm/JvmActorsTest.scala | 58 +++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'cask') diff --git a/cask/actor/test/src-jvm/JvmActorsTest.scala b/cask/actor/test/src-jvm/JvmActorsTest.scala index 066fd3e..45c8546 100644 --- a/cask/actor/test/src-jvm/JvmActorsTest.scala +++ b/cask/actor/test/src-jvm/JvmActorsTest.scala @@ -243,6 +243,64 @@ object JvmActorsTest extends TestSuite{ "Yoghurt curds cream cheese and butter Comes from liquids from my udder I am cow, I am cow Hear me moo, moooo", ) } + test("pipelineLog"){ + class Writer(log: os.Path, old: os.Path, rotateSize: Int) + (implicit ac: Context) extends SimpleActor[String]{ + def run(s: String) = { + val newLogSize = logSize + s.length + 1 + if (newLogSize <= rotateSize) logSize = newLogSize + else { + logSize = s.length + os.move(log, old, replaceExisting = true) + } + os.write.append(log, s + "\n", createFolders = true) + } + private var logSize = 0 + } + + class Logger(dest: Actor[String])(implicit ac: Context) extends SimpleActor[String]{ + def run(s: String) = dest.send(java.util.Base64.getEncoder.encodeToString(s.getBytes)) + } + + implicit val ac = new Context.Test( + scala.concurrent.ExecutionContext.fromExecutor( + java.util.concurrent.Executors.newSingleThreadExecutor() + ) + ){ + override def reportRun(a: Actor[_], msg: Any, token: Context.Token): Unit = { + println(s"$a <- $msg") + super.reportRun(a, msg, token) + } + } + + val logPath = os.pwd / "out" / "scratch" / "log.txt" + val oldPath = os.pwd / "out" / "scratch" / "log-old.txt" + + val writer = new Writer(logPath, oldPath, rotateSize = 50) + val logger = new Logger(writer) + + logger.send("I am cow") + logger.send("hear me moo") + logger.send("I weight twice as much as you") + logger.send("And I look good on the barbecue") + logger.send("Yoghurt curds cream cheese and butter") + logger.send("Comes from liquids from my udder") + logger.send("I am cow, I am cow") + logger.send("Hear me moo, moooo") + + ac.waitForInactivity() + + os.read(oldPath) ==> "Q29tZXMgZnJvbSBsaXF1aWRzIGZyb20gbXkgdWRkZXI=\n" + os.read(logPath) ==> "SSBhbSBjb3csIEkgYW0gY293\nSGVhciBtZSBtb28sIG1vb29v\n" + + def decodeFile(p: os.Path) = { + os.read.lines(p).map(s => new String(java.util.Base64.getDecoder.decode(s))) + } + + decodeFile(oldPath) ==> Seq("Comes from liquids from my udder") + decodeFile(logPath) ==> Seq("I am cow, I am cow", "Hear me moo, moooo") + } + } } \ No newline at end of file -- cgit v1.2.3