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>)
     }