Skip to content
This repository has been archived by the owner on Sep 22, 2022. It is now read-only.
/ env Public archive

Java library for a microservice environment emulation

License

Notifications You must be signed in to change notification settings

Adven27/env

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

64 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CI

env

Java library for a microservice environment emulation.

Idea is to be agnostic to tools used for specific external system emulation (e.g. docker, remote server, java standalone app or process). It enables to build up mixed environment consisted of differently set upped systems.

How to use

  1. Add needed dependencies:
testImplementation "io.github.adven27:env-db-postgresql:4.0.7"
testImplementation "io.github.adven27:env-db-mssql:4.0.7"
testImplementation "io.github.adven27:env-db-mysql:4.0.7"
testImplementation "io.github.adven27:env-db-oracle:4.0.7"
testImplementation "io.github.adven27:env-db-oracle-temp:4.0.7"
testImplementation "io.github.adven27:env-db-db2:4.0.7"
testImplementation "io.github.adven27:env-jar-application:4.0.7"
testImplementation "io.github.adven27:env-mq-rabbit:4.0.7"
testImplementation "io.github.adven27:env-mq-ibmmq:4.0.7"
testImplementation "io.github.adven27:env-mq-redis:4.0.7"
testImplementation "io.github.adven27:env-grpc-mock:4.0.7"
testImplementation "io.github.adven27:env-wiremock:4.0.7"
  1. Set up systems:
class SomeEnvironment : Environment(
    "RABBIT" to RabbitContainerSystem(),
    "IBMMQ" to IbmMQContainerSystem(),
    "KAFKA" to KafkaContainerSystem(),
    "REDIS" to RedisContainerSystem(),
    "POSTGRES" to PostgreSqlContainerSystem(),
    "ORACLE" to OracleContainerSystem(),
    "MYSQL" to MySqlContainerSystem(),
    "GRPC" to GrpcMockContainerSystem(1, listOf("common.proto", "wallet.proto")).apply {
        withLogConsumer(Slf4jLogConsumer(logger).withPrefix("GRPC-$serviceId"))
    },
    "WIREMOCK" to WiremockSystem()
) {
    fun rabbit() = find<RabbitContainerSystem>("RABBIT")
    fun mock() = find<WiremockSystem>("WIREMOCK")
}
  1. Use in tests:
class MyTestClass {
    companion object {
        private val ENV: SomeEnvironment = SomeEnvironment() 

        @BeforeClass @JvmStatic 
        fun setup() {
           ENV.up()
        }

        @AfterClass @JvmStatic 
        fun teardown() {
           ENV.down()
        }
    }

    @Test fun testSomething() {
        //some interactions with environment
        ENV.mock().resetRequests()
        //some test
        ...
    }
} 

Run as standalone process

Environment class implementation could be run as standalone java application with io.github.adven27.env.core.EnvStarter

For example as gradle task:

task runEnv(type: JavaExec) {
    group = "Execution"
    description = "Run some environment"
    classpath = sourceSets.test.runtimeClasspath
    main = "io.github.adven27.env.core.EnvStarter"

    args 'SomeEnvironment'
    systemProperty 'SPECS_ENV_START', true
    systemProperty 'SPECS_ENV_FIXED', true
    standardInput = System.in
}

Examples

For more info see demo project