alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Play Framework/Scala example source code file (ServerSSLEngineSpec.scala)

This example Play Framework source code file (ServerSSLEngineSpec.scala) is included in my "Source Code Warehouse" project. The intent of this project is to help you more easily find Play Framework (and Scala) source code examples by using tags.

All credit for the original source code belongs to Play Framework; I'm just trying to make examples easier to find. (For my Scala work, see my Scala examples and tutorials.)

Play Framework tags/keywords

applicationcontext, applicationprovider, core, file, javasslengineprovider, mockito, play, play framework, server, ssl, sslcontext, sslengine, sslengineprovider, tempconfdir, utilities, wrongsslengineprovider

The ServerSSLEngineSpec.scala Play Framework example source code

/*
 *
 *  * Copyright (C) 2009-2013 Typesafe Inc. <http://www.typesafe.com>
 *
 */
package play.core.server.ssl

import org.specs2.mutable.{After, Specification}
import org.specs2.mock.Mockito
import org.specs2.specification.Scope
import play.core.ApplicationProvider
import scala.util.Failure
import java.io.File
import javax.net.ssl.SSLEngine
import play.server.api.SSLEngineProvider

class WrongSSLEngineProvider {}

class RightSSLEngineProvider(appPro: ApplicationProvider) extends SSLEngineProvider with Mockito {
  override def createSSLEngine: SSLEngine = {
    require(appPro != null)
    mock[SSLEngine]
  }
}

class JavaSSLEngineProvider(appPro: play.server.ApplicationProvider) extends play.server.SSLEngineProvider with Mockito {
  override def createSSLEngine: SSLEngine = {
    require(appPro != null)
    mock[SSLEngine]
  }
}

class ServerSSLEngineSpec extends Specification with Mockito {

  sequential

  trait ApplicationContext extends Mockito with Scope {
    val applicationProvider = mock[ApplicationProvider]
    applicationProvider.get returns Failure(new Exception("no app"))
  }

  trait TempConfDir extends After {
    val tempDir = File.createTempFile("ServerSSLEngine", ".tmp")
    tempDir.delete()
    val confDir = new File(tempDir, "conf")
    confDir.mkdirs()

    def after = {
      confDir.listFiles().foreach(f => f.delete())
      tempDir.listFiles().foreach(f => f.delete())
      tempDir.delete()
    }
  }

  val javaAppProvider = mock[play.core.ApplicationProvider]

  "ServerSSLContext" should {

    "default create a SSL engine suitable for development" in new ApplicationContext with TempConfDir {
      applicationProvider.path returns tempDir
      System.clearProperty("play.http.sslengineprovider")
      ServerSSLEngine.createSSLEngineProvider(applicationProvider).createSSLEngine() should beAnInstanceOf[SSLEngine]
    }

    "fail to load a non existing SSLEngineProvider" in new ApplicationContext {
      System.setProperty("play.http.sslengineprovider", "bla bla")
      ServerSSLEngine.createSSLEngineProvider(applicationProvider) should throwA[ClassNotFoundException]
    }

    "fail to load an existing SSLEngineProvider with the wrong type" in new ApplicationContext {
      System.setProperty("play.http.sslengineprovider", classOf[WrongSSLEngineProvider].getName)
      ServerSSLEngine.createSSLEngineProvider(applicationProvider) should throwA[ClassCastException]
    }

    "load a custom SSLContext from a SSLEngineProvider" in new ApplicationContext {
      System.setProperty("play.http.sslengineprovider", classOf[RightSSLEngineProvider].getName)
      ServerSSLEngine.createSSLEngineProvider(applicationProvider).createSSLEngine() should beAnInstanceOf[SSLEngine]
    }

    "load a custom SSLContext from a java SSLEngineProvider" in new ApplicationContext {
      System.setProperty("play.http.sslengineprovider", classOf[JavaSSLEngineProvider].getName)
      ServerSSLEngine.createSSLEngineProvider(applicationProvider).createSSLEngine() should beAnInstanceOf[SSLEngine]
    }
  }

}

Other Play Framework source code examples

Here is a short list of links related to this Play Framework ServerSSLEngineSpec.scala source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.