$30 off During Our Annual Pro Sale. View Details »

Micronaut Test Resources

Micronaut Test Resources

Cédric Champeau

January 19, 2023
Tweet

More Decks by Cédric Champeau

Other Decks in Technology

Transcript

  1. 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.

    View Slide

  2. - 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

    View Slide

  3. - 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

    View Slide

  4. 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

    View Slide

  5. 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

    View Slide

  6. 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
    ♥️

    View Slide

  7. - 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

    View Slide

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

    View Slide

  9. 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

    View Slide


  10. ./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

    View Slide

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

    View Slide


  12. 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

    View Slide

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

    View Slide


  14. 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

    View Slide

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

    View Slide


  16. 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();
    }
    }

    View Slide


  17. 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

    View Slide


  18. 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

    View Slide


  19. 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

    View Slide

  20. View Slide