Slide 1

Slide 1 text

Micronaut Test Resources Automatic test resources provisioning for your Micronaut applications Cédric Champeau Micronaut, Oracle Labs @[email protected] @CedricChampeau Copyright © 23-1-19, Oracle and/or its affiliates Micronaut® is a registered trademark of Object Computing, Inc. Use is for referential purposes and does not imply any endorsement or affiliation with any third-party product. Unauthorized use is strictly prohibited.

Slide 2

Slide 2 text

- Working at Oracle Labs on Micronaut Main focus on build plugins and dev productivitity - Formerly working at Gradle Inc - Author of static compiler of Groovy - Amateur astronomer @[email protected] https://www.astrobin.com/users/melix/ https://bit.ly/3eGD0GM (Youtube) About me Copyright © 2022, Oracle and/or its affiliates micronaut.io github.com/micronaut-projects/micronaut-core

Slide 3

Slide 3 text

- Micronaut is focused on modern architectures like Serverless and Microservices - Also a complete framework for any type of application - Lightweight, reactive (HTTP Client/Server based on Netty) - Annotation processor to compute framework infrastructure at compile time Micronaut Copyright © 2022, Oracle and/or its affiliates micronaut.io github.com/micronaut-projects/micronaut-core

Slide 4

Slide 4 text

Micronaut computes: - All dependency & configuration injection - Annotation metadata, meta-annotations - AOP proxies - Bean introspections - And all other framework infrastructure - Reflection, runtime proxy, and dynamic classloader free Micronaut = Build Time Framework Infrastructure Copyright © 2022, Oracle and/or its affiliates micronaut.io github.com/micronaut-projects/micronaut-core

Slide 5

Slide 5 text

High-performance JDK distribution Increases application throughput, reduces latency, reduces memory use Graal just-in-time (JIT) compiler that runs on top of HotSpot, written in Java native-image ahead-of-time (AoT) compiler compiles Java applications into small self- contained native binaries Micronaut = Build Time Framework Infrastructure Copyright © 2022, Oracle and/or its affiliates graalvm.org github.com/graalvm/graalvm-demos oracle.com/graalvm

Slide 6

Slide 6 text

Micronaut + GraalVM Native Image are a match made in heaven Less work to configure Native Image because Micronaut eliminates reflection, runtime proxies, bytecode generation and dynamic classloading Startup time 20ms and Memory Consumption 18MB! Micronaut GraalVM ♥️ Copyright © 2022, Oracle and/or its affiliates graalvm.org github.com/graalvm/graalvm-demos oracle.com/graalvm ♥️

Slide 7

Slide 7 text

- New in Micronaut 3.6 - Simplifies setup of tests - eg. spawn a database container, a Kafka server, … - Compatible with native executables - Extensible Micronaut Test Resources Copyright © 2022, Oracle and/or its affiliates micronaut.io github.com/micronaut-projects/micronaut-core

Slide 8

Slide 8 text

Copyright © 2022, Oracle and/or its affiliates | Confidential: Internal/Restricted/Highly Restricted 8

Slide 9

Slide 9 text

Micronaut Test Resources Copyright © 2022, Oracle and/or its affiliates Demo 1 : Micronaut Data JDBC + Test Resources micronaut.io github.com/micronaut-projects/micronaut-core

Slide 10

Slide 10 text

● ./gradlew test → spawns test resources ● ./gradlew run → also spawns test resources ● ./gradlew -t test (or run) → keeps tests resources alive ● ./gradlew startTestResourcesService → test resources outlive the build ● ./gradlew nativeTest • Builds a native image which can connect to test resources service • Runs tests against the test resources Micronaut Test Resources micronaut.io github.com/micronaut-projects/micronaut-core

Slide 11

Slide 11 text

Micronaut Test Resources Copyright © 2022, Oracle and/or its affiliates Demo 2 : Micronaut MQTT + Test Resources micronaut.io github.com/micronaut-projects/micronaut-core

Slide 12

Slide 12 text

● Supports test resources service cross-project • Two independent “Git” repositories can share resources • Or in simpler use cases, different modules of same repository ● Supports test resources service cross-build tools! • e.g, producer built with Maven and consumer built with Gradle Micronaut Test Resources micronaut.io github.com/micronaut-projects/micronaut-core

Slide 13

Slide 13 text

Micronaut Test Resources Copyright © 2022, Oracle and/or its affiliates Demo 3 : Micronaut Email + Test Resources micronaut.io github.com/micronaut-projects/micronaut-core

Slide 14

Slide 14 text

● Supports conventional way to declare new resources Micronaut Test Resources test-resources: containers: fakesmtp: image-name: ghusta/fakesmtp hostnames: - smtp.host exposed-ports: - smtp.port: 25

Slide 15

Slide 15 text

Micronaut Test Resources Copyright © 2022, Oracle and/or its affiliates Demo 4 : Custom Test Resources micronaut.io github.com/micronaut-projects/micronaut-core

Slide 16

Slide 16 text

● Supports completely adhoc test resources Micronaut Test Resources public class MyTestResource implements TestResourcesResolver { public static final String MY_TEST_PROPERTY = "my.user.name"; @Override public List getResolvableProperties(Map> propertyEntries, Map testResourcesConfig) { return Collections.singletonList(MY_TEST_PROPERTY); } @Override public Optional resolve(String propertyName, Map properties, Map testResourcesConfiguration) { if (MY_TEST_PROPERTY.equals(propertyName)) { return Optional.of("world"); } return Optional.empty(); } }

Slide 17

Slide 17 text

● Supports both JDBC and R2DBC • PostgreSQL • MySQL/MariaDB • Oracle XE • Microsoft SQL Server ● Container based resources • Elasticsearch • Kafka • MongoDB • MQTT (HiveMQ, RabbitMQ) • Neo4J • Redis • Hashicorp Vault Micronaut Test Resources : conclusion

Slide 18

Slide 18 text

● Generic Testcontainers support • Expose your own container via conventional properties • Allows mounting local files, etc. ● Generic test resources support • Implement your own! ● Compatible with native images • Isolates your application code from test resources • Native binary connects to remote service Micronaut Test Resources : conclusion

Slide 19

Slide 19 text

● Micronaut Launch : https://micronaut.io/launch ● Micronaut Project: https://micronaut.io/ ● Micronaut Test Resources: https://github.com/micronaut-projects/micronaut-test-resources Slides coming @[email protected] Micronaut Test Resources : resources

Slide 20

Slide 20 text

No content