Graqr / Threshr

real-time grocery query java library
GNU General Public License v3.0
1 stars 2 forks source link

consumers of this library have to define the redsky-api as an application service #143

Open Jonathan-Zollinger opened 2 weeks ago

Jonathan-Zollinger commented 2 weeks ago

Current Behavior

attempting to use threshr to query the redsky api results in a io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api error.

We want to be sure this isn't a one-off problem.

Expected Behavior

I should be able to use any part of the threshr library as long as I have a redsky api key assigned to an env. variable.

Steps To Reproduce

One way is to write a CLI tool for any part of the library. ie the pdp endpoint.

write main command:

package com.graqr;

import com.graqr.threshr.Threshr;
import com.graqr.threshr.ThreshrException;
import com.graqr.threshr.model.queryparam.TargetStore;
import com.graqr.threshr.model.queryparam.Tcin;
import com.graqr.threshr.model.redsky.product.Product;
import com.graqr.threshr.model.redsky.store.Store;
import io.micronaut.configuration.picocli.PicocliRunner;
import io.micronaut.serde.ObjectMapper;
import jakarta.inject.Inject;
import jakarta.inject.Singleton;
import picocli.CommandLine;
import picocli.CommandLine.Command;
import picocli.CommandLine.Option;

import java.io.IOException;

@Singleton
@Command(name = "pdp", mixinStandardHelpOptions = true)
public class Pdp implements Runnable {

    private final Threshr threshr;
    @Option(names = {"--tcin", "-t"},
            required = true,
            description = "",
            converter = TcinsConverter.class)
    Tcin tcinValues;

    @Option(names = {"--store-id", "-s"},
            required = true,
            description = "store id as given in redsky api",
            converter = TargetStoreConverter.class)
    TargetStore store;

    @Inject
    ObjectMapper mapper;

    public Pdp(Threshr threshr) {
        this.threshr = threshr;
    }

    public static void main(String[] args) {
        PicocliRunner.run(Pdp.class, args);
    }

    public void run() {
        Product product;
        try {
            product = threshr.fetchProductDetails(store.getStoreId(), store.getStoreId(), tcinValues.getTcins());
        } catch (ThreshrException e) {
            throw new CommandLine.PicocliException("Failed to fetch product details", e);
        }
        try {
            System.out.println(mapper.writeValueAsString(product));
        } catch (IOException e) {
            throw new CommandLine.PicocliException("failed to write returned product as JSON", e);
        }
    }

    static class TargetStoreConverter implements CommandLine.ITypeConverter<TargetStore> {
        @Inject
        Threshr threshr;

        @Override
        public TargetStore convert(String s) throws ThreshrException {
            Store store = threshr.getStore(s);
            return new TargetStore(store.storeId(),
                    store.mailingAddress().state(),
                    store.mailingAddress().postalCode(),
                    store.geographicSpecifications().latitude(),
                    store.geographicSpecifications().longitude());
        }
    }

    static class TcinsConverter implements CommandLine.ITypeConverter<Tcin> {
        @Override
        public Tcin convert(String s) throws ThreshrException {
            if (s.split(",").length > 1) {
                throw new CommandLine.TypeConversionException("only one tcin can be provided");
            }
            return new Tcin(s);
        }
    }
}

write spock test:

package com.graqr

import groovy.sql.Sql
import io.micronaut.configuration.picocli.PicocliRunner
import io.micronaut.context.ApplicationContext
import io.micronaut.context.annotation.Requires
import io.micronaut.context.annotation.Value
import io.micronaut.context.env.Environment
import io.micronaut.test.extensions.spock.annotation.MicronautTest
import spock.lang.AutoCleanup
import spock.lang.Shared
import spock.lang.Specification

@MicronautTest
@Requires(property = "test.datasources.default.url")
class PdpSpec extends Specification {

    @Shared
    @Value('${test.datasources.default.url}')
    String url

    @Shared
    Sql sql

    @Shared
    Random random

    @Shared
    String[] tcins

    @Shared
    String[][] locations //location_id, location_name

    @Shared
    final PrintStream originalOut = System.out
    @Shared
    final PrintStream originalErr = System.err

    @Shared
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream()
    ByteArrayOutputStream errStream = new ByteArrayOutputStream()

    @Shared
    @AutoCleanup
    ApplicationContext ctx = ApplicationContext.run(Environment.CLI, Environment.TEST)

    void setupSpec() {
        url = null == url ? System.getenv("TEST_DATASOURCES_DEFAULT_URL") : url
        sql = Sql.newInstance(url)
        tcins = sql.rows("select tcin FROM target_pdp TABLESAMPLE BERNOULLI (5) LIMIT 20")
                .collect(row -> row.tcin as String)
        locations = sql.rows('select location_id, location_name FROM target_stores TABLESAMPLE BERNOULLI (5) LIMIT 20')
                .collect(row -> new String[]{row.location_id as String, row.location_name as String})
        random = new Random()
    }

    def setup() {
        outputStream.reset()
        errStream.reset()
        System.setOut(new PrintStream(outputStream))
        System.setErr(new PrintStream(errStream))
    }

    def cleanup() {
        System.setOut(originalOut)
        System.setErr(originalErr)
    }

    def "tcin arg exceeding 1 count fails"() {
        when: "performing cli call 'pdp --tcin #tcin --store-id #locationId'"
        PicocliRunner.run(Pdp, ctx, '--tcin', tcin, "--store-id", locationId)

        then: "returns expected error message"
        def matcher = errStream.toString() =~ ".*only one tcin can be provided.*"
        matcher.size() == 1

        where:
        locationId                | tcin            | _
        locations[0][0] as String | tcins.join(",") | _
    }

    def "querying #tcin for #locationId returns expected data"() {
        when: "performing cli call 'pdp --tcin #tcin --store-id #locationId'"
        PicocliRunner.run(Pdp, ctx, "--tcin", tcin, "--store-id", locationId)

        then: "error stream is empty"
        errStream.toString().isBlank()

        and: "output contains data for #tcin"
        outputStream.toString().startsWith("{\"__typename\":\"Product\",\"tcin\":\"${tcin}\"")

        where:
        locationId                | tcin               | _
        locations[0][0] as String | tcins[0] as String | _
    }
}

[!NOTE] a workaround can be done by copying the http:services section from this repo into the consumer repo.

micronaut:
  http:
    services:
      redsky-api:
        url: https://redsky.target.com/
        path: redsky_aggregations/v1/web

A picture is worth a thousand words

/home/jimmy/.sdkman/candidates/java/17.0.9-graalce/bin/java -ea -Didea.test.cyclic.buffer.size=1048576 -javaagent:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/lib/idea_rt.jar=42711:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/bin -Dfile.encoding=UTF-8 -classpath /home/jimmy/.m2/repository/org/junit/platform/junit-platform-launcher/1.10.2/junit-platform-launcher-1.10.2.jar:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/lib/idea_rt.jar:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/plugins/junit/lib/junit5-rt.jar:/home/jimmy/.local/share/JetBrains/Toolbox/apps/intellij-idea-community-edition/plugins/junit/lib/junit-rt.jar:/home/jimmy/src/github.com/graqr/threshr-cli/target/test-classes:/home/jimmy/src/github.com/graqr/threshr-cli/target/classes:/home/jimmy/.m2/repository/com/graqr/threshr/0.0.13/threshr-0.0.13.jar:/home/jimmy/.m2/repository/org/jacoco/jacoco-maven-plugin/0.8.11/jacoco-maven-plugin-0.8.11.jar:/home/jimmy/.m2/repository/org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.jar:/home/jimmy/.m2/repository/org/apache/maven/shared/file-management/3.1.0/file-management-3.1.0.jar:/home/jimmy/.m2/repository/commons-io/commons-io/2.11.0/commons-io-2.11.0.jar:/home/jimmy/.m2/repository/org/apache/maven/reporting/maven-reporting-api/3.0/maven-reporting-api-3.0.jar:/home/jimmy/.m2/repository/org/apache/maven/doxia/doxia-sink-api/1.0/doxia-sink-api-1.0.jar:/home/jimmy/.m2/repository/org/jacoco/org.jacoco.agent/0.8.11/org.jacoco.agent-0.8.11-runtime.jar:/home/jimmy/.m2/repository/org/jacoco/org.jacoco.core/0.8.11/org.jacoco.core-0.8.11.jar:/home/jimmy/.m2/repository/org/jacoco/org.jacoco.report/0.8.11/org.jacoco.report-0.8.11.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http-client/4.5.3/micronaut-http-client-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http-client-core/4.5.3/micronaut-http-client-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-discovery-core/4.5.3/micronaut-discovery-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-websocket/4.5.3/micronaut-websocket-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http-netty/4.5.3/micronaut-http-netty-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-buffer-netty/4.5.3/micronaut-buffer-netty-4.5.3.jar:/home/jimmy/.m2/repository/io/netty/netty-codec-http/4.1.110.Final/netty-codec-http-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-codec-http2/4.1.110.Final/netty-codec-http2-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-handler/4.1.110.Final/netty-handler-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-resolver/4.1.110.Final/netty-resolver-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-transport-native-unix-common/4.1.110.Final/netty-transport-native-unix-common-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-handler-proxy/4.1.110.Final/netty-handler-proxy-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-common/4.1.110.Final/netty-common-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-buffer/4.1.110.Final/netty-buffer-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-transport/4.1.110.Final/netty-transport-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-codec/4.1.110.Final/netty-codec-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/netty/netty-codec-socks/4.1.110.Final/netty-codec-socks-4.1.110.Final.jar:/home/jimmy/.m2/repository/io/projectreactor/reactor-core/3.5.11/reactor-core-3.5.11.jar:/home/jimmy/.m2/repository/org/reactivestreams/reactive-streams/1.0.4/reactive-streams-1.0.4.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-jackson-databind/4.5.3/micronaut-jackson-databind-4.5.3.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/core/jackson-databind/2.17.1/jackson-databind-2.17.1.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.17.1/jackson-datatype-jdk8-2.17.1.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.17.1/jackson-datatype-jsr310-2.17.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-retry/4.5.3/micronaut-retry-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-core-reactive/4.5.3/micronaut-core-reactive-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/validation/micronaut-validation/4.6.0/micronaut-validation-4.6.0.jar:/home/jimmy/.m2/repository/jakarta/validation/jakarta.validation-api/3.1.0/jakarta.validation-api-3.1.0.jar:/home/jimmy/.m2/repository/io/micronaut/reactor/micronaut-reactor/3.4.0/micronaut-reactor-3.4.0.jar:/home/jimmy/.m2/repository/info/picocli/picocli/4.7.6/picocli-4.7.6.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-jdbc/4.8.1/micronaut-data-jdbc-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-inject/4.5.3/micronaut-inject-4.5.3.jar:/home/jimmy/.m2/repository/jakarta/inject/jakarta.inject-api/2.0.1/jakarta.inject-api-2.0.1.jar:/home/jimmy/.m2/repository/jakarta/annotation/jakarta.annotation-api/2.1.1/jakarta.annotation-api-2.1.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-core/4.5.3/micronaut-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-runtime/4.8.1/micronaut-data-runtime-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-model/4.8.1/micronaut-data-model-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-tx/4.8.1/micronaut-data-tx-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-tx-jdbc/4.8.1/micronaut-data-tx-jdbc-4.8.1.jar:/home/jimmy/.m2/repository/jakarta/transaction/jakarta.transaction-api/2.0.1/jakarta.transaction-api-2.0.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-aop/4.5.3/micronaut-aop-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-connection-jdbc/4.8.1/micronaut-data-connection-jdbc-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/data/micronaut-data-connection/4.8.1/micronaut-data-connection-4.8.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-context-propagation/4.5.3/micronaut-context-propagation-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-json-core/4.5.3/micronaut-json-core-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-http/4.5.3/micronaut-http-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/sql/micronaut-jdbc/5.7.0/micronaut-jdbc-5.7.0.jar:/home/jimmy/.m2/repository/io/micronaut/picocli/micronaut-picocli/5.4.0/micronaut-picocli-5.4.0.jar:/home/jimmy/.m2/repository/io/micronaut/serde/micronaut-serde-jackson/2.10.1/micronaut-serde-jackson-2.10.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-jackson-core/4.5.3/micronaut-jackson-core-4.5.3.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/core/jackson-core/2.17.1/jackson-core-2.17.1.jar:/home/jimmy/.m2/repository/com/fasterxml/jackson/core/jackson-annotations/2.17.1/jackson-annotations-2.17.1.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-context/4.5.3/micronaut-context-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/serde/micronaut-serde-api/2.10.1/micronaut-serde-api-2.10.1.jar:/home/jimmy/.m2/repository/io/micronaut/serde/micronaut-serde-support/2.10.1/micronaut-serde-support-2.10.1.jar:/home/jimmy/.m2/repository/io/micronaut/sql/micronaut-jdbc-hikari/5.7.0/micronaut-jdbc-hikari-5.7.0.jar:/home/jimmy/.m2/repository/com/zaxxer/HikariCP/5.1.0/HikariCP-5.1.0.jar:/home/jimmy/.m2/repository/ch/qos/logback/logback-classic/1.5.3/logback-classic-1.5.3.jar:/home/jimmy/.m2/repository/ch/qos/logback/logback-core/1.5.3/logback-core-1.5.3.jar:/home/jimmy/.m2/repository/org/slf4j/slf4j-api/2.0.12/slf4j-api-2.0.12.jar:/home/jimmy/.m2/repository/org/postgresql/postgresql/42.7.3/postgresql-42.7.3.jar:/home/jimmy/.m2/repository/org/checkerframework/checker-qual/3.42.0/checker-qual-3.42.0.jar:/home/jimmy/.m2/repository/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar:/home/jimmy/.m2/repository/io/micronaut/testresources/micronaut-test-resources-client/2.5.2/micronaut-test-resources-client-2.5.2.jar:/home/jimmy/.m2/repository/io/micronaut/testresources/micronaut-test-resources-core/2.5.2/micronaut-test-resources-core-2.5.2.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-inject-groovy/4.5.3/micronaut-inject-groovy-4.5.3.jar:/home/jimmy/.m2/repository/io/micronaut/micronaut-core-processor/4.5.3/micronaut-core-processor-4.5.3.jar:/home/jimmy/.m2/repository/org/ow2/asm/asm-tree/9.7/asm-tree-9.7.jar:/home/jimmy/.m2/repository/org/ow2/asm/asm/9.7/asm-9.7.jar:/home/jimmy/.m2/repository/org/ow2/asm/asm-commons/9.7/asm-commons-9.7.jar:/home/jimmy/.m2/repository/com/github/javaparser/javaparser-symbol-solver-core/3.25.10/javaparser-symbol-solver-core-3.25.10.jar:/home/jimmy/.m2/repository/com/github/javaparser/javaparser-core/3.25.10/javaparser-core-3.25.10.jar:/home/jimmy/.m2/repository/org/apache/groovy/groovy/4.0.21/groovy-4.0.21.jar:/home/jimmy/.m2/repository/io/micronaut/test/micronaut-test-spock/4.3.0/micronaut-test-spock-4.3.0.jar:/home/jimmy/.m2/repository/io/micronaut/test/micronaut-test-core/4.3.0/micronaut-test-core-4.3.0.jar:/home/jimmy/.m2/repository/org/apache/groovy/groovy-sql/4.0.21/groovy-sql-4.0.21.jar:/home/jimmy/.m2/repository/org/spockframework/spock-core/2.3-groovy-4.0/spock-core-2.3-groovy-4.0.jar:/home/jimmy/.m2/repository/org/junit/platform/junit-platform-engine/1.10.2/junit-platform-engine-1.10.2.jar:/home/jimmy/.m2/repository/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar:/home/jimmy/.m2/repository/org/junit/platform/junit-platform-commons/1.10.2/junit-platform-commons-1.10.2.jar:/home/jimmy/.m2/repository/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar:/home/jimmy/.m2/repository/org/hamcrest/hamcrest/2.2/hamcrest-2.2.jar com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.graqr.PdpSpec,querying #tcin for #locationId returns expected data

Condition not satisfied:

errStream.toString().isBlank()
|         |          |
|         |          false
|         Invalid value for option '--store-id': cannot convert '1961' to TargetStore (io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api)
|         Usage: pdp [-hV] -s=<store> -t=<tcinValues>
|           -h, --help                Show this help message and exit.
|           -s, --store-id=<store>    store id as given in redsky api
|           -t, --tcin=<tcinValues>
|           -V, --version             Print version information and exit.
Invalid value for option '--store-id': cannot convert '1961' to TargetStore (io.micronaut.discovery.exceptions.NoAvailableServiceException: No available services for ID: redsky-api)
Usage: pdp [-hV] -s=<store> -t=<tcinValues>
  -h, --help                Show this help message and exit.
  -s, --store-id=<store>    store id as given in redsky api
  -t, --tcin=<tcinValues>
  -V, --version             Print version information and exit.

    at com.graqr.PdpSpec.querying #tcin for #locationId returns expected data(PdpSpec.groovy:93)

15:47:37,978 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.5.3
15:47:37,979 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - No custom configurators were discovered as a service.
15:47:37,979 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Trying to configure with ch.qos.logback.classic.joran.SerializedModelConfigurator
15:47:37,980 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Constructed configurator of type class ch.qos.logback.classic.joran.SerializedModelConfigurator
15:47:37,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.scmo]
15:47:37,985 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.scmo]
15:47:37,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - ch.qos.logback.classic.joran.SerializedModelConfigurator.configure() call lasted 5 milliseconds. ExecutionStatus=INVOKE_NEXT_IF_ANY
15:47:37,994 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Trying to configure with ch.qos.logback.classic.util.DefaultJoranConfigurator
15:47:37,995 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - Constructed configurator of type class ch.qos.logback.classic.util.DefaultJoranConfigurator
15:47:37,995 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15:47:37,998 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/jimmy/src/github.com/graqr/threshr-cli/target/classes/logback.xml]
15:47:37,999 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1698ee84 - Resource [logback.xml] occurs multiple times on the classpath.
15:47:37,999 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1698ee84 - Resource [logback.xml] occurs at [file:/home/jimmy/src/github.com/graqr/threshr-cli/target/classes/logback.xml]
15:47:37,999 |-WARN in ch.qos.logback.classic.util.DefaultJoranConfigurator@1698ee84 - Resource [logback.xml] occurs at [jar:file:/home/jimmy/.m2/repository/com/graqr/threshr/0.0.13/threshr-0.0.13.jar!/logback.xml]
15:47:38,121 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT]
15:47:38,122 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
15:47:38,129 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
15:47:38,162 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to INFO
15:47:38,162 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT]
15:47:38,163 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@10c626be - End of configuration.
15:47:38,164 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@2fc0cc3 - Registering current configuration as safe fallback point
15:47:38,164 |-INFO in ch.qos.logback.classic.util.ContextInitializer@25e2a451 - ch.qos.logback.classic.util.DefaultJoranConfigurator.configure() call lasted 169 milliseconds. ExecutionStatus=DO_NOT_INVOKE_NEXT_IF_ANY

15:47:38.448 [main] INFO  i.m.c.DefaultApplicationContext$RuntimeConfiguredEnvironment - Established active environments: [cli, test]
15:47:38.719 [main] INFO  i.m.c.DefaultApplicationContext$RuntimeConfiguredEnvironment - Established active environments: [test]

Process finished with exit code 255

Environment

OS: Fedora 40 JVM: Graal-ce 17.0.9 maven wrapper version: "6.9.4-200.fc40.x86_64" arch: "amd64" family: "unix"

Code of Conduct