import be.vandewalleh.services.NotesService import be.vandewalleh.services.UserService import com.hekeki.huckleberry.Benchmark import com.hekeki.huckleberry.BenchmarkRunner import com.hekeki.huckleberry.BenchmarkTest import com.hekeki.huckleberry.TimeUnit import com.zaxxer.hikari.HikariConfig import com.zaxxer.hikari.HikariDataSource import me.liuwj.ktorm.database.* import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.Test import org.kodein.di.Kodein import org.kodein.di.generic.bind import org.kodein.di.generic.instance import org.kodein.di.generic.singleton val hikariConfig = HikariConfig().apply { jdbcUrl = "jdbc:mariadb://localhost:3306/notes" username = "notes" password = "notes" } val dataSource = HikariDataSource(hikariConfig) val db = Database.Companion.connect(dataSource) val kodein = Kodein { bind() with singleton { db } bind() with singleton { UserService(this.kodein) } bind() with singleton { NotesService(this.kodein) } } val notesService by kodein.instance() @Benchmark(threads = 1, iterations = 30, warmup = true, warmupIterations = 1000, timeUnit = TimeUnit.MILLIS) class RetrieveNotesBenchmarkTest : BenchmarkTest { override fun execute() { notesService.getNotes(15) } @Test fun compute() { val benchmarkResult = BenchmarkRunner(RetrieveNotesBenchmarkTest::class.java).run() assertTrue(benchmarkResult.median(2, TimeUnit.MILLIS)) assertTrue(benchmarkResult.maxTime(4, TimeUnit.MILLIS)) } }