You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@esme.apache.org by vd...@apache.org on 2010/08/08 21:35:12 UTC
svn commit: r983473 -
/incubator/esme/trunk/server/src/test/scala/org/apache/esme/api/TwitterAPITest.scala
Author: vdichev
Date: Sun Aug 8 19:35:12 2010
New Revision: 983473
URL: http://svn.apache.org/viewvc?rev=983473&view=rev
Log:
Implemented a conductor actor to speed up the Twitter API Tests by being notified immediately when a message is received in the timeline.
Modified:
incubator/esme/trunk/server/src/test/scala/org/apache/esme/api/TwitterAPITest.scala
Modified: incubator/esme/trunk/server/src/test/scala/org/apache/esme/api/TwitterAPITest.scala
URL: http://svn.apache.org/viewvc/incubator/esme/trunk/server/src/test/scala/org/apache/esme/api/TwitterAPITest.scala?rev=983473&r1=983472&r2=983473&view=diff
==============================================================================
--- incubator/esme/trunk/server/src/test/scala/org/apache/esme/api/TwitterAPITest.scala (original)
+++ incubator/esme/trunk/server/src/test/scala/org/apache/esme/api/TwitterAPITest.scala Sun Aug 8 19:35:12 2010
@@ -20,10 +20,13 @@
package org.apache.esme.api
import scala.xml._
+import scala.actors.Actor
+import scala.actors.TIMEOUT
import org.specs._
import org.specs.runner.JUnit3
import org.specs.runner.ConsoleRunner
+import net.liftweb.actor.LiftActor
import net.liftweb.util._
import net.liftweb.common._
import net.liftweb.mapper.{By}
@@ -31,6 +34,9 @@ import org.specs.matcher._
import Helpers._
import org.apache.esme._
import model._
+import org.apache.esme.actor.Distributor
+import org.apache.esme.actor.Distributor.NewMessage
+import org.apache.esme.actor.Distributor.PublicTimelineListeners
import net.liftweb.http._
import testing.{ReportFailure, TestKit, HttpResponse, TestFramework, TestResponse, Response}
@@ -92,6 +98,26 @@ object TwitterAPISpecs extends Specifica
theClient
}
+ class BridgeActor(receiver: Actor) extends LiftActor {
+ protected def messageHandler = {
+ case nm @ NewMessage(_) => receiver ! nm
+ }
+ }
+
+ case object Wait
+
+ class ConductorActor extends Actor {
+ def act {
+ react {
+ case Wait => reply {
+ receive {
+ case NewMessage(msg) => msg
+ }
+ }
+ }
+ }
+ }
+
trait XmlResponse {
self: TestResponse =>
def xmlMatch(f: Elem => Unit)(implicit errorFunc: ReportFailure): TestResponse = {
@@ -163,9 +189,18 @@ object TwitterAPISpecs extends Specifica
}
"let follower see user's message in home timeline" in {
+ // register an actor to be notified when a new message is received
+ val conductor = new ConductorActor
+ conductor.start
+ val liftActor = new BridgeActor(conductor)
+ Distributor ! PublicTimelineListeners(liftActor)
+
post("/statuses/update.xml", "status" -> "user_msg") \\(<text>user_msg</text>)
+
// wait till the message appears in the timeline
- Thread.sleep(2000L)
+ // or fail after 5 seconds
+ val msgReceived = conductor !? (5000L, Wait)
+ if (msgReceived.isEmpty) fail("no message received")
get("/statuses/home_timeline.xml", followerClient, Nil) \\(<text>user_msg</text>)
}