Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Scala 2.10/2.11 cross building #4

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name := "scalawebsocket"

homepage := Some(url("https://github.com/pbuda/scalawebsocket"))

licenses := Seq("Apache License 2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0"))

organization := "eu.piotrbuda"

version := "0.1.2"

scalaVersion := "2.11.6"

crossScalaVersions := List("2.11.6", "2.10.5")

fork in Test := true

libraryDependencies ++= Seq(
"com.ning" % "async-http-client" % "1.7.13",

//logging
"com.typesafe.scala-logging" %% "scala-logging-slf4j" % "2.1.2",
"ch.qos.logback" % "logback-classic" % "1.1.3",

//jetty is used to setup test server
"org.eclipse.jetty" % "jetty-server" % "8.1.7.v20120910" % "test",
"org.eclipse.jetty" % "jetty-websocket" % "8.1.7.v20120910" % "test",
"org.eclipse.jetty" % "jetty-servlet" % "8.1.7.v20120910" % "test",
"org.eclipse.jetty" % "jetty-servlets" % "8.1.7.v20120910" % "test",

"org.scalatest" %% "scalatest" % "2.2.4" % "test"
)

publishMavenStyle := true

publishTo <<= version {
(v: String) =>
val nexus = "https://oss.sonatype.org/"
if (v.trim.endsWith("SNAPSHOT"))
Some("snapshots" at nexus + "content/repositories/snapshots")
else
Some("releases" at nexus + "service/local/staging/deploy/maven2")
}

publishArtifact in Test := false

pomIncludeRepository := {
_ => false
}

pomExtra := (
<scm>
<url>[email protected]:pbuda/scalawebsocket.git</url>
<connection>scm:git:[email protected]:pbuda/scalawebsocket.git</connection>
</scm>
<developers>
<developer>
<id>pbuda</id>
<name>Piotr Buda</name>
<url>http://www.piotrbuda.eu</url>
</developer>
</developers>
)
70 changes: 0 additions & 70 deletions project/Build.scala

This file was deleted.

2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
sbt.version=0.12.3
sbt.version=0.13.8
7 changes: 0 additions & 7 deletions project/project/SWSPlugins.scala

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/resources/logback.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
</configuration>
5 changes: 3 additions & 2 deletions src/main/scala/scalawebsocket/WebSocket.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ package scalawebsocket

import com.ning.http.client.{websocket, AsyncHttpClient}
import com.ning.http.client.websocket.{WebSocketTextListener, WebSocketByteListener, WebSocketUpgradeHandler}
import com.typesafe.scalalogging.log4j.Logging
import com.typesafe.scalalogging.slf4j._
// import com.typesafe.scalalogging.log4j.Logging

object WebSocket {
def apply() = {
Expand All @@ -36,7 +37,7 @@ object WebSocket {
*
* @param client preconfigured instance of the [[com.ning.http.client.AsyncHttpClient]]
*/
class WebSocket(client: AsyncHttpClient) extends Logging {
class WebSocket(client: AsyncHttpClient) extends StrictLogging {
self =>

type OnTextMessageHandler = String => Unit
Expand Down
100 changes: 63 additions & 37 deletions src/test/scala/scalawebsocket/BaseTest.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,40 +17,28 @@
package scalawebsocket

import org.eclipse.jetty.server.nio.SelectChannelConnector
import com.typesafe.scalalogging.log4j.Logging
import org.scalatest.matchers.ShouldMatchers
import org.scalatest.{FlatSpec, BeforeAndAfterAll}
import com.typesafe.scalalogging.slf4j._
import org.eclipse.jetty.server.{Request, Server}
import org.eclipse.jetty.server.handler.HandlerWrapper
import org.eclipse.jetty.websocket.WebSocketFactory
import org.eclipse.jetty.websocket.{ WebSocketFactory }
import java.io.IOException
import javax.servlet.http.{HttpServletResponse, HttpServletRequest}
import java.net.ServerSocket

abstract class BaseTest extends Server with FlatSpec with BeforeAndAfterAll with ShouldMatchers with Logging {
protected var port1: Int = 0
private var _connector: SelectChannelConnector = null
trait TestServer extends StrictLogging {
val server = new Server()
val connector = new SelectChannelConnector

override def beforeAll(configMap: Map[String, Any]) {
setUpGlobal()
}

override def afterAll(configMap: Map[String, Any]) {
tearDownGlobal()
}

def setUpGlobal() {
port1 = findFreePort
_connector = new SelectChannelConnector
_connector.setPort(port1)
addConnector(_connector)
val _wsHandler: BaseTest#WebSocketHandler = getWebSocketHandler
setHandler(_wsHandler)
start()
def setUpServer() {
server.addConnector(connector)
val _wsHandler = getWebSocketHandler
server.setHandler(_wsHandler)
server.start()
logger.info("Local HTTP server started successfully")
}

def tearDownGlobal() {
stop()
def tearDownServer() {
server.stop()
}

abstract class WebSocketHandler extends HandlerWrapper with WebSocketFactory.Acceptor {
Expand All @@ -71,21 +59,59 @@ abstract class BaseTest extends Server with FlatSpec with BeforeAndAfterAll with
private final val _webSocketFactory: WebSocketFactory = new WebSocketFactory(this, 32 * 1024)
}

protected def findFreePort: Int = {
var socket: ServerSocket = null
try {
socket = new ServerSocket(0)
socket.getLocalPort
} finally {
if (socket != null) {
socket.close()
protected def getTargetUrl: String =
"ws://127.0.0.1:" + connector.getLocalPort()

private final class EchoTextWebSocket extends org.eclipse.jetty.websocket.WebSocket with org.eclipse.jetty.websocket.WebSocket.OnTextMessage with org.eclipse.jetty.websocket.WebSocket.OnBinaryMessage {
private var connection: org.eclipse.jetty.websocket.WebSocket.Connection = null

def onOpen(connection: org.eclipse.jetty.websocket.WebSocket.Connection) {
this.connection = connection
connection.setMaxTextMessageSize(1000)
}

def onClose(i: Int, s: String) {
connection.close()
}

def onMessage(s: String) {
try {
connection.sendMessage(s)
} catch {
case e: IOException => {
try {
connection.sendMessage("FAIL")
} catch {
case e1: IOException => {
e1.printStackTrace()
}
}
}
}
}
}

protected def getTargetUrl: String = {
"ws://127.0.0.1:" + port1
def onMessage(data: Array[Byte], offset: Int, length: Int) {
try {
connection.sendMessage(data, offset, length)
} catch {
case e: IOException => {
try {
connection.sendMessage("FAIL")
} catch {
case e1: IOException => {
e1.printStackTrace()
}
}
}
}
}
}

def getWebSocketHandler: BaseTest#WebSocketHandler
def getWebSocketHandler: WebSocketHandler = {
new WebSocketHandler {
def doWebSocketConnect(httpServletRequest: HttpServletRequest, s: String): org.eclipse.jetty.websocket.WebSocket = {
new EchoTextWebSocket
}
}
}
}
61 changes: 8 additions & 53 deletions src/test/scala/scalawebsocket/WebSocketSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -21,65 +21,20 @@ package scalawebsocket

import java.io.IOException
import javax.servlet.http.HttpServletRequest
import com.typesafe.scalalogging.log4j.Logging
import com.typesafe.scalalogging.slf4j._
import java.util.concurrent.{TimeUnit, CountDownLatch}
import com.ning.http.client.{AsyncHttpClient, websocket}
import org.scalatest.matchers.{MatchResult, BeMatcher}
import org.scalatest._
import org.scalatest.matchers._


class WebSocketSpec extends BaseTest with Logging {

private final class EchoTextWebSocket extends org.eclipse.jetty.websocket.WebSocket with org.eclipse.jetty.websocket.WebSocket.OnTextMessage with org.eclipse.jetty.websocket.WebSocket.OnBinaryMessage {
private var connection: org.eclipse.jetty.websocket.WebSocket.Connection = null

def onOpen(connection: org.eclipse.jetty.websocket.WebSocket.Connection) {
this.connection = connection
connection.setMaxTextMessageSize(1000)
}

def onClose(i: Int, s: String) {
connection.close()
}

def onMessage(s: String) {
try {
connection.sendMessage(s)
} catch {
case e: IOException => {
try {
connection.sendMessage("FAIL")
} catch {
case e1: IOException => {
e1.printStackTrace()
}
}
}
}
}

def onMessage(data: Array[Byte], offset: Int, length: Int) {
try {
connection.sendMessage(data, offset, length)
} catch {
case e: IOException => {
try {
connection.sendMessage("FAIL")
} catch {
case e1: IOException => {
e1.printStackTrace()
}
}
}
}
}
class WebSocketSpec extends FlatSpec with TestServer with BeforeAndAfterAll with Matchers with StrictLogging {
override def beforeAll() {
setUpServer()
}

def getWebSocketHandler: BaseTest#WebSocketHandler = {
new WebSocketHandler {
def doWebSocketConnect(httpServletRequest: HttpServletRequest, s: String): org.eclipse.jetty.websocket.WebSocket = {
new EchoTextWebSocket
}
}
override def afterAll() {
tearDownServer()
}

it should "call all onOpen handlers" in {
Expand Down