com.asarkar.grpc.test.Resource.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of grpc-test Show documentation
Show all versions of grpc-test Show documentation
JUnit5 Extension that can automatically release gRPC resources at the end of the test
The newest version!
package com.asarkar.grpc.test
import io.grpc.ManagedChannel
import io.grpc.Server
import java.time.Duration
import java.util.concurrent.TimeUnit
/**
* An abstraction of a resource used by the test that will be released at the end.
*
* @author Abhijit Sarkar
* @since 1.0.0
*/
interface Resource {
fun cleanUp()
fun forceCleanUp()
fun awaitReleased(duration: Duration): Boolean
}
sealed class AbstractResource(private val e: E) : Resource {
override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false
other as AbstractResource<*>
return e == other.e
}
override fun hashCode(): Int {
return e.hashCode()
}
override fun toString(): String {
return e.toString()
}
}
internal class ManagedChannelResource internal constructor(private val channel: ManagedChannel) :
AbstractResource(channel) {
override fun cleanUp() {
channel.shutdown()
}
override fun forceCleanUp() {
channel.shutdownNow()
}
override fun awaitReleased(duration: Duration): Boolean {
return channel.awaitTermination(duration.toNanos(), TimeUnit.NANOSECONDS)
}
}
internal class ServerResource internal constructor(private val server: Server) : AbstractResource(server) {
override fun cleanUp() {
server.shutdown()
}
override fun forceCleanUp() {
server.shutdownNow()
}
override fun awaitReleased(duration: Duration): Boolean {
return server.awaitTermination(duration.toNanos(), TimeUnit.NANOSECONDS)
}
}