pekko/akka-remote/src/test/scala/akka/remote/RemoteConfigSpec.scala
Patrik Nordwall 3d1c0a7325 Connection retries to shutdown node, see #3326
* In EC2 connection time out is around 1 minute. A few messages
  were sent after quarantining and these caused endless restarts,
  and connect attempts with 1 minute interval.
* This change makes sure that the endpoint is stopped after the first
  failed connection attempt.
* Changed default settings for netty connection-timeout, and matching
  retry window to allow for 3 restarts
2013-05-13 17:09:30 +02:00

121 lines
5.1 KiB
Scala

/**
* Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.remote
import language.postfixOps
import akka.testkit.AkkaSpec
import akka.actor.ExtendedActorSystem
import scala.concurrent.duration._
import akka.remote.transport.AkkaProtocolSettings
import akka.util.{ Timeout, Helpers }
import akka.remote.transport.netty.SSLSettings
@org.junit.runner.RunWith(classOf[org.scalatest.junit.JUnitRunner])
class RemoteConfigSpec extends AkkaSpec(
"""
akka.actor.provider = "akka.remote.RemoteActorRefProvider"
akka.remote.netty.tcp.port = 0
""") {
"Remoting" must {
"contain correct configuration values in reference.conf" in {
val remoteSettings = RARP(system).provider.remoteSettings
import remoteSettings._
LogReceive must be(false)
LogSend must be(false)
UntrustedMode must be(false)
LogRemoteLifecycleEvents must be(true)
ShutdownTimeout.duration must be(10 seconds)
FlushWait must be(2 seconds)
StartupTimeout.duration must be(10 seconds)
RetryGateClosedFor must be(Duration.Zero)
UnknownAddressGateClosedFor must be(1 minute)
UsePassiveConnections must be(true)
MaximumRetriesInWindow must be(3)
RetryWindow must be(60 seconds)
BackoffPeriod must be(10 millis)
SysMsgAckTimeout must be(0.3 seconds)
SysResendTimeout must be(1 seconds)
SysMsgBufferSize must be(1000)
QuarantineDuration must be(60 seconds)
CommandAckTimeout.duration must be(30 seconds)
Transports.size must be(1)
Transports.head._1 must be(classOf[akka.remote.transport.netty.NettyTransport].getName)
Transports.head._2 must be(Nil)
Adapters must be(Map(
"gremlin" -> classOf[akka.remote.transport.FailureInjectorProvider].getName,
"trttl" -> classOf[akka.remote.transport.ThrottlerProvider].getName))
WatchFailureDetectorImplementationClass must be(classOf[PhiAccrualFailureDetector].getName)
WatchHeartBeatInterval must be(1 seconds)
WatchHeartbeatExpectedResponseAfter must be(3 seconds)
WatchUnreachableReaperInterval must be(1 second)
WatchFailureDetectorConfig.getDouble("threshold") must be(10.0 plusOrMinus 0.0001)
WatchFailureDetectorConfig.getInt("max-sample-size") must be(200)
Duration(WatchFailureDetectorConfig.getMilliseconds("acceptable-heartbeat-pause"), MILLISECONDS) must be(4 seconds)
Duration(WatchFailureDetectorConfig.getMilliseconds("min-std-deviation"), MILLISECONDS) must be(100 millis)
remoteSettings.config.getString("akka.remote.log-frame-size-exceeding") must be("off")
}
"be able to parse AkkaProtocol related config elements" in {
val settings = new AkkaProtocolSettings(RARP(system).provider.remoteSettings.config)
import settings._
RequireCookie must be(false)
SecureCookie must be === None
TransportFailureDetectorImplementationClass must be(classOf[PhiAccrualFailureDetector].getName)
TransportHeartBeatInterval must be === 1.seconds
TransportFailureDetectorConfig.getDouble("threshold") must be(7.0 plusOrMinus 0.0001)
TransportFailureDetectorConfig.getInt("max-sample-size") must be(100)
Duration(TransportFailureDetectorConfig.getMilliseconds("acceptable-heartbeat-pause"), MILLISECONDS) must be(3 seconds)
Duration(TransportFailureDetectorConfig.getMilliseconds("min-std-deviation"), MILLISECONDS) must be(100 millis)
}
"contain correct netty.tcp values in reference.conf" in {
val c = RARP(system).provider.remoteSettings.config.getConfig("akka.remote.netty.tcp")
c.getBytes("maximum-frame-size") must be(128000)
c.getMilliseconds("connection-timeout") must be(15000)
}
"contain correct socket worker pool configuration values in reference.conf" in {
val c = RARP(system).provider.remoteSettings.config.getConfig("akka.remote.netty.tcp")
// server-socket-worker-pool
{
val pool = c.getConfig("server-socket-worker-pool")
pool.getInt("pool-size-min") must equal(2)
pool.getDouble("pool-size-factor") must equal(1.0)
pool.getInt("pool-size-max") must equal(8)
}
// client-socket-worker-pool
{
val pool = c.getConfig("client-socket-worker-pool")
pool.getInt("pool-size-min") must equal(2)
pool.getDouble("pool-size-factor") must equal(1.0)
pool.getInt("pool-size-max") must equal(8)
}
}
"contain correct ssl configuration values in reference.conf" in {
val sslSettings = new SSLSettings(system.settings.config.getConfig("akka.remote.netty.ssl.security"))
sslSettings.SSLKeyStore must be(Some("keystore"))
sslSettings.SSLKeyStorePassword must be(Some("changeme"))
sslSettings.SSLKeyPassword must be(Some("changeme"))
sslSettings.SSLTrustStore must be(Some("truststore"))
sslSettings.SSLTrustStorePassword must be(Some("changeme"))
sslSettings.SSLProtocol must be(Some("TLSv1"))
sslSettings.SSLEnabledAlgorithms must be(Set("TLS_RSA_WITH_AES_128_CBC_SHA"))
sslSettings.SSLRandomNumberGenerator must be(None)
}
}
}