2011-10-27 12:23:01 +02:00
|
|
|
/**
|
|
|
|
|
* Copyright (C) 2009-2011 Typesafe Inc. <http://www.typesafe.com>
|
|
|
|
|
*/
|
|
|
|
|
package akka.event
|
|
|
|
|
|
|
|
|
|
import akka.testkit.AkkaSpec
|
|
|
|
|
import akka.config.Configuration
|
|
|
|
|
import akka.util.duration._
|
2011-11-03 21:41:32 +01:00
|
|
|
import akka.actor.{ Actor, ActorRef }
|
2011-10-27 12:23:01 +02:00
|
|
|
|
|
|
|
|
object MainBusSpec {
|
|
|
|
|
case class M(i: Int)
|
2011-11-03 21:41:32 +01:00
|
|
|
|
|
|
|
|
case class SetTarget(ref: ActorRef)
|
|
|
|
|
|
|
|
|
|
class MyLog extends Actor {
|
|
|
|
|
var dst: ActorRef = app.deadLetters
|
|
|
|
|
def receive = {
|
|
|
|
|
case Logging.InitializeLogger(bus) ⇒ bus.subscribe(context.self, classOf[SetTarget])
|
|
|
|
|
case SetTarget(ref) ⇒ dst = ref
|
|
|
|
|
case e: Logging.LogEvent ⇒ dst ! e
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-10-27 12:23:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class MainBusSpec extends AkkaSpec(Configuration(
|
2011-11-03 21:41:32 +01:00
|
|
|
"akka.stdout-loglevel" -> "WARNING",
|
|
|
|
|
"akka.loglevel" -> "INFO",
|
|
|
|
|
"akka.event-handlers" -> Seq("akka.event.MainBusSpec$MyLog", Logging.StandardOutLoggerName))) {
|
2011-10-27 12:46:10 +02:00
|
|
|
|
2011-10-27 12:23:01 +02:00
|
|
|
import MainBusSpec._
|
|
|
|
|
|
|
|
|
|
"A MainBus" must {
|
|
|
|
|
|
2011-11-03 21:41:32 +01:00
|
|
|
"manage subscriptions" in {
|
2011-10-27 12:23:01 +02:00
|
|
|
val bus = new MainBus(true)
|
|
|
|
|
bus.start(app)
|
|
|
|
|
bus.subscribe(testActor, classOf[M])
|
|
|
|
|
bus.publish(M(42))
|
2011-11-03 21:41:32 +01:00
|
|
|
within(1 second) {
|
|
|
|
|
expectMsg(M(42))
|
|
|
|
|
bus.unsubscribe(testActor)
|
|
|
|
|
bus.publish(M(13))
|
|
|
|
|
expectNoMsg
|
|
|
|
|
}
|
2011-10-27 12:23:01 +02:00
|
|
|
}
|
|
|
|
|
|
2011-11-03 21:41:32 +01:00
|
|
|
"manage log levels" in {
|
|
|
|
|
val bus = new MainBus(false)
|
|
|
|
|
bus.start(app)
|
|
|
|
|
bus.startDefaultLoggers(app, app.AkkaConfig)
|
|
|
|
|
bus.publish(SetTarget(testActor))
|
|
|
|
|
within(1 second) {
|
|
|
|
|
import Logging._
|
|
|
|
|
verifyLevel(bus, InfoLevel)
|
|
|
|
|
bus.logLevel = WarningLevel
|
|
|
|
|
verifyLevel(bus, WarningLevel)
|
|
|
|
|
bus.logLevel = DebugLevel
|
|
|
|
|
verifyLevel(bus, DebugLevel)
|
|
|
|
|
bus.logLevel = ErrorLevel
|
|
|
|
|
verifyLevel(bus, ErrorLevel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private def verifyLevel(bus: LoggingBus, level: Logging.LogLevel) {
|
|
|
|
|
import Logging._
|
|
|
|
|
val allmsg = Seq(Debug(this, "debug"), Info(this, "info"), Warning(this, "warning"), Error(this, "error"))
|
|
|
|
|
val msg = allmsg filter (_.level <= level)
|
|
|
|
|
allmsg foreach bus.publish
|
|
|
|
|
msg foreach (x ⇒ expectMsg(x))
|
2011-10-27 12:23:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|