blob: c644aa9aa710534ce72a15f19266f0f0ceead072 [file] [log] [blame]
package io.pivotal.gemfire.spark.connector.internal
import io.pivotal.gemfire.spark.connector.GemFireConnectionConf
import org.mockito.Mockito._
import org.scalatest.mock.MockitoSugar
import org.scalatest.{FunSuite, Matchers}
class DefaultGemFireConnectionManagerTest extends FunSuite with Matchers with MockitoSugar {
test("DefaultGemFireConnectionFactory get/closeConnection") {
// note: connConf 1-4 share the same set of locators
val connConf1 = new GemFireConnectionConf(Seq(("host1", 1234)))
val connConf2 = new GemFireConnectionConf(Seq(("host2", 5678)))
val connConf3 = new GemFireConnectionConf(Seq(("host1", 1234), ("host2", 5678)))
val connConf4 = new GemFireConnectionConf(Seq(("host2", 5678), ("host1", 1234)))
val connConf5 = new GemFireConnectionConf(Seq(("host5", 3333)))
val props: Map[String, String] = Map.empty
val mockConnFactory: DefaultGemFireConnectionFactory = mock[DefaultGemFireConnectionFactory]
val mockConn1 = mock[DefaultGemFireConnection]
val mockConn2 = mock[DefaultGemFireConnection]
when(mockConnFactory.newConnection(connConf3.locators, props)).thenReturn(mockConn1)
when(mockConnFactory.newConnection(connConf5.locators, props)).thenReturn(mockConn2)
assert(DefaultGemFireConnectionManager.getConnection(connConf3)(mockConnFactory) == mockConn1)
// note: following 3 lines do not trigger connFactory.newConnection(...)
assert(DefaultGemFireConnectionManager.getConnection(connConf1)(mockConnFactory) == mockConn1)
assert(DefaultGemFireConnectionManager.getConnection(connConf2)(mockConnFactory) == mockConn1)
assert(DefaultGemFireConnectionManager.getConnection(connConf4)(mockConnFactory) == mockConn1)
assert(DefaultGemFireConnectionManager.getConnection(connConf5)(mockConnFactory) == mockConn2)
// connFactory.newConnection(...) were invoked only twice
verify(mockConnFactory, times(1)).newConnection(connConf3.locators, props)
verify(mockConnFactory, times(1)).newConnection(connConf5.locators, props)
assert(DefaultGemFireConnectionManager.connections.size == 3)
DefaultGemFireConnectionManager.closeConnection(connConf1)
assert(DefaultGemFireConnectionManager.connections.size == 1)
DefaultGemFireConnectionManager.closeConnection(connConf5)
assert(DefaultGemFireConnectionManager.connections.isEmpty)
}
test("DefaultGemFireConnectionFactory newConnection(...) throws RuntimeException") {
val connConf1 = new GemFireConnectionConf(Seq(("host1", 1234)))
val props: Map[String, String] = Map.empty
val mockConnFactory: DefaultGemFireConnectionFactory = mock[DefaultGemFireConnectionFactory]
when(mockConnFactory.newConnection(connConf1.locators, props)).thenThrow(new RuntimeException())
intercept[RuntimeException] { DefaultGemFireConnectionManager.getConnection(connConf1)(mockConnFactory) }
verify(mockConnFactory, times(1)).newConnection(connConf1.locators, props)
}
test("DefaultGemFireConnectionFactory close() w/ non-exist connection") {
val props: Map[String, String] = Map.empty
val mockConnFactory: DefaultGemFireConnectionFactory = mock[DefaultGemFireConnectionFactory]
val connConf1 = new GemFireConnectionConf(Seq(("host1", 1234)))
val connConf2 = new GemFireConnectionConf(Seq(("host2", 5678)))
val mockConn1 = mock[DefaultGemFireConnection]
when(mockConnFactory.newConnection(connConf1.locators, props)).thenReturn(mockConn1)
assert(DefaultGemFireConnectionManager.getConnection(connConf1)(mockConnFactory) == mockConn1)
assert(DefaultGemFireConnectionManager.connections.size == 1)
// connection does not exists in the connection manager
DefaultGemFireConnectionManager.closeConnection(connConf2)
assert(DefaultGemFireConnectionManager.connections.size == 1)
}
}