testcontainers-dotnet
testcontainers-dotnet copied to clipboard
fix: Throw an exception if the container has exited while checking for readiness
What does this PR do?
This pull request ensures that if a container has exited, readiness check are aborted with the newly introduced ContainerException. The exception message includes both stdout and stderr of the container to help diagnosing the issue.
Why is it important?
As described in #1445, this change significantly improves the developer experience. Developers get immediate feedback when something goes wrong.
Related issues
Fixes #1445
How to test this PR
A simple way to test this PR is to run the Oracle21 tests on an Apple Silicon Mac. You'll get this error.
DotNet.Testcontainers.Configurations.ContainerException
The gvenzl/oracle-xe:21-slim-faststart container has exited.
=== stdout of sad_noyce (63dc2f99ee704a934636f47d2372d0283697ec6731af1f9ffad564e9e34a1f0a) ===
2025-05-20T08:32:31.693685128Z CONTAINER: starting up...
2025-05-20T08:32:31.769256852Z CONTAINER: first database startup, initializing...
2025-05-20T08:32:31.904095582Z CONTAINER: starting up Oracle Database...
2025-05-20T08:32:31.945699749Z
2025-05-20T08:32:31.945714499Z LSNRCTL for Linux: Version 21.0.0.0.0 - Production on 20-MAY-2025 08:32:31
2025-05-20T08:32:31.945716291Z
2025-05-20T08:32:31.945717499Z Copyright (c) 1991, 2021, Oracle. All rights reserved.
2025-05-20T08:32:31.945718624Z
2025-05-20T08:32:31.959288638Z Starting /opt/oracle/product/21c/dbhomeXE/bin/tnslsnr: please wait...
2025-05-20T08:32:31.959295388Z
2025-05-20T08:32:32.411257859Z TNSLSNR for Linux: Version 21.0.0.0.0 - Production
2025-05-20T08:32:32.411270818Z System parameter file is /opt/oracle/homes/OraDBHome21cXE/network/admin/listener.ora
2025-05-20T08:32:32.411272401Z Log messages written to /opt/oracle/diag/tnslsnr/63dc2f99ee70/listener/alert/log.xml
2025-05-20T08:32:32.411273526Z Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
2025-05-20T08:32:32.411274526Z Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
2025-05-20T08:32:32.411275526Z
2025-05-20T08:32:32.411276401Z Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
2025-05-20T08:32:32.421983213Z STATUS of the LISTENER
2025-05-20T08:32:32.421995755Z ------------------------
2025-05-20T08:32:32.421997338Z Alias LISTENER
2025-05-20T08:32:32.421998546Z Version TNSLSNR for Linux: Version 21.0.0.0.0 - Production
2025-05-20T08:32:32.422025213Z Start Date 20-MAY-2025 08:32:32
2025-05-20T08:32:32.422028838Z Uptime 0 days 0 hr. 0 min. 0 sec
2025-05-20T08:32:32.422030046Z Trace Level off
2025-05-20T08:32:32.422031130Z Security ON: Local OS Authentication
2025-05-20T08:32:32.422032213Z SNMP OFF
2025-05-20T08:32:32.422033255Z Default Service XE
2025-05-20T08:32:32.422034296Z Listener Parameter File /opt/oracle/homes/OraDBHome21cXE/network/admin/listener.ora
2025-05-20T08:32:32.422035421Z Listener Log File /opt/oracle/diag/tnslsnr/63dc2f99ee70/listener/alert/log.xml
2025-05-20T08:32:32.422187838Z Listening Endpoints Summary...
2025-05-20T08:32:32.422193421Z (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
2025-05-20T08:32:32.422195004Z (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
2025-05-20T08:32:32.422196213Z The listener supports no services
2025-05-20T08:32:32.422213212Z The command completed successfully
2025-05-20T08:32:38.970127990Z ORA-03113: end-of-file on communication channel
Another way is to update JanusGraphContainerTest with a bad configuration:
private readonly JanusGraphContainer _janusGraphContainer = new JanusGraphBuilder().WithEnvironment("janusgraph.storage.backend", "fail").Build();
This is a bit slow because the container tries to access the storage backend several times before giving up. Eventually the ContainerException is raised.
DotNet.Testcontainers.Configurations.ContainerException
The janusgraph/janusgraph:1.0.0 container has exited.
=== stderr of zen_boyd (219b4c540223bcca4302123353b7a6deb79b29f4291e9771809d48a4c22db5f7) ===
2025-05-20T08:44:10.796906006Z SLF4J: Class path contains multiple SLF4J bindings.
2025-05-20T08:44:10.796979214Z SLF4J: Found binding in [jar:file:/opt/janusgraph/lib/log4j-slf4j-impl-2.20.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2025-05-20T08:44:10.796982631Z SLF4J: Found binding in [jar:file:/opt/janusgraph/lib/logback-classic-1.2.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2025-05-20T08:44:10.796984089Z SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2025-05-20T08:44:10.833135474Z SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
=== stdout of zen_boyd (219b4c540223bcca4302123353b7a6deb79b29f4291e9771809d48a4c22db5f7) ===
2025-05-20T08:43:16.921148209Z waiting for storage...
2025-05-20T08:43:28.859094884Z waiting for storage...
2025-05-20T08:43:40.728261827Z waiting for storage...
2025-05-20T08:43:52.573210101Z waiting for storage...
2025-05-20T08:44:04.523083150Z waiting for storage...
2025-05-20T08:44:09.756047117Z /etc/opt/janusgraph/janusgraph-server.yaml will be used to start JanusGraph Server in foreground
2025-05-20T08:44:11.065499419Z 08:44:11 INFO org.janusgraph.graphdb.server.JanusGraphServer.printHeader -
2025-05-20T08:44:11.065521253Z mmm mmm #
2025-05-20T08:44:11.065525794Z # mmm m mm m m mmm m" " m mm mmm mmmm # mm
2025-05-20T08:44:11.065528252Z # " # #" # # # # " # mm #" " " # #" "# #" #
2025-05-20T08:44:11.065530086Z # m"""# # # # # """m # # # m"""# # # # #
2025-05-20T08:44:11.065531461Z "mmm" "mm"# # # "mm"# "mmm" "mmm" # "mm"# ##m#" # #
2025-05-20T08:44:11.065532711Z #
2025-05-20T08:44:11.065533877Z "
2025-05-20T08:44:11.065534961Z
2025-05-20T08:44:11.120586766Z 08:44:11 INFO com.jcabi.log.Logger.infoForced - 106 attributes loaded from 339 stream(s) in 49ms, 106 saved, 5377 ignored: ["Agent-Class", "Ant-Version", "Archiver-Version", "Automatic-Module-Name", "Bnd-LastModified", "Build-Date", "Build-Date-UTC", "Build-Id", "Build-Java-Version", "Build-Jdk", "Build-Jdk-Spec", "Build-Number", "Build-Tag", "Build-Timezone", "Build-Version", "Built-By", "Built-JDK", "Built-OS", "Built-Status", "Bundle-ActivationPolicy", "Bundle-Activator", "Bundle-Category", "Bundle-ClassPath", "Bundle-Classpath", "Bundle-ContactAddress", "Bundle-Copyright", "Bundle-Description", "Bundle-Developers", "Bundle-DocURL", "Bundle-License", "Bundle-ManifestVersion", "Bundle-Name", "Bundle-NativeCode", "Bundle-RequiredExecutionEnvironment", "Bundle-SCM", "Bundle-SymbolicName", "Bundle-Vendor", "Bundle-Version", "Can-Redefine-Classes", "Can-Retransform-Classes", "Can-Set-Native-Method-Prefix", "Carl-Is-Awesome", "Change", "Copyright", "Created-By", "DSTAMP", "Dependencies", "DynamicImport-Package", "Eclipse-BuddyPolicy", "Eclipse-ExtensibleAPI", "Embed-Dependency", "Embed-Transitive", "Export-Package", "Extension-Name", "Extension-name", "Fragment-Host", "Gradle-Version", "Gremlin-Plugin-Dependencies", "Ignore-Package", "Implementation-Build", "Implementation-Build-Date", "Implementation-Build-Id", "Implementation-Title", "Implementation-URL", "Implementation-Vendor", "Implementation-Vendor-Id", "Implementation-Version", "Import-Package", "Include-Resource", "JCabi-Build", "JCabi-Date", "JCabi-Version", "Main-Class", "Manifest-Version", "Module-Origin", "Module-Requires", "Multi-Release", "Originally-Created-By", "Package", "Premain-Class", "Private-Package", "Provide-Capability", "Require-Bundle", "Require-Capability", "Sealed", "Specification-Title", "Specification-Vendor", "Specification-Version", "TODAY", "TSTAMP", "Target-Label", "Tool", "X-Compile-Elasticsearch-Snapshot", "X-Compile-Elasticsearch-Version", "X-Compile-Lucene-Version", "X-Compile-Source-JDK", "X-Compile-Target-JDK", "artifactId", "groupId", "hash", "janusgraphVersion", "service", "tinkerpop-version", "tinkerpopVersion", "url", "version"]
2025-05-20T08:44:11.123917634Z 08:44:11 INFO org.janusgraph.graphdb.server.JanusGraphServer.printHeader - JanusGraph Version: 1.0.0
2025-05-20T08:44:11.124006509Z 08:44:11 INFO org.janusgraph.graphdb.server.JanusGraphServer.printHeader - TinkerPop Version: 3.7.0
2025-05-20T08:44:11.124820382Z 08:44:11 INFO org.janusgraph.graphdb.server.JanusGraphServer.start - Configuring JanusGraph Server from /etc/opt/janusgraph/janusgraph-server.yaml
2025-05-20T08:44:11.179736812Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.util.MetricManager.addConsoleReporter - Configured Metrics ConsoleReporter configured with report interval=180000ms
2025-05-20T08:44:11.181416809Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.util.MetricManager.addCsvReporter - Configured Metrics CsvReporter configured with report interval=180000ms to fileName=/tmp/gremlin-server-metrics.csv
2025-05-20T08:44:11.182765098Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.util.MetricManager.addJmxReporter - Configured Metrics JmxReporter configured with domain= and agentId=
2025-05-20T08:44:11.184571761Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.util.MetricManager.addSlf4jReporter - Configured Metrics Slf4jReporter configured with interval=180000ms and loggerName=org.apache.tinkerpop.gremlin.server.Settings$Slf4jReporterMetrics
2025-05-20T08:44:11.260499107Z 08:44:11 INFO org.apache.commons.beanutils.FluentPropertyBeanIntrospector.introspect - Error when creating PropertyDescriptor for public final void org.apache.commons.configuration2.AbstractConfiguration.setProperty(java.lang.String,java.lang.Object)! Ignoring this property.
2025-05-20T08:44:11.393766462Z 08:44:11 ERROR org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init> - Could not invoke constructor on class org.janusgraph.graphdb.management.JanusGraphManager (defined by the 'graphManager' setting) with one argument of class Settings
2025-05-20T08:44:11.401148447Z 08:44:11 ERROR org.janusgraph.graphdb.server.JanusGraphServer.lambda$main$0 - JanusGraph Server was unable to start and will now begin shutdown
2025-05-20T08:44:11.401164738Z java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
2025-05-20T08:44:11.401166572Z at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:97) ~[gremlin-server-3.7.0.jar:3.7.0]
2025-05-20T08:44:11.401168238Z at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:127) ~[gremlin-server-3.7.0.jar:3.7.0]
2025-05-20T08:44:11.401182697Z at org.apache.tinkerpop.gremlin.server.GremlinServer.<init>(GremlinServer.java:90) ~[gremlin-server-3.7.0.jar:3.7.0]
2025-05-20T08:44:11.401191238Z at org.janusgraph.graphdb.server.JanusGraphServer.start(JanusGraphServer.java:85) ~[janusgraph-server-1.0.0.jar:?]
2025-05-20T08:44:11.401192530Z at org.janusgraph.graphdb.server.JanusGraphServer.main(JanusGraphServer.java:53) [janusgraph-server-1.0.0.jar:?]
2025-05-20T08:44:11.401193738Z Caused by: java.lang.reflect.InvocationTargetException
2025-05-20T08:44:11.401194822Z at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
2025-05-20T08:44:11.401196030Z at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401197113Z at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401198238Z at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401199322Z at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:86) ~[gremlin-server-3.7.0.jar:3.7.0]
2025-05-20T08:44:11.401200530Z ... 4 more
2025-05-20T08:44:11.401201572Z Caused by: java.lang.IllegalArgumentException: Could not find implementation class: fail
2025-05-20T08:44:11.401202697Z at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:75) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401203863Z at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:548) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401205030Z at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:509) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401206155Z at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:64) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401208072Z at org.janusgraph.core.JanusGraphFactory.lambda$open$0(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401209238Z at org.janusgraph.graphdb.management.JanusGraphManager.openGraph(JanusGraphManager.java:239) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401210446Z at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401211613Z at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:115) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401212696Z at org.janusgraph.graphdb.management.JanusGraphManager.lambda$new$0(JanusGraphManager.java:73) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401213863Z at java.util.LinkedHashMap.forEach(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401214905Z at org.janusgraph.graphdb.management.JanusGraphManager.<init>(JanusGraphManager.java:72) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401216071Z at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
2025-05-20T08:44:11.401218030Z at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401219905Z at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401221071Z at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401222155Z at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:86) ~[gremlin-server-3.7.0.jar:3.7.0]
2025-05-20T08:44:11.401223321Z ... 4 more
2025-05-20T08:44:11.401224280Z Caused by: java.lang.ClassNotFoundException: fail
2025-05-20T08:44:11.401225363Z at jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401226446Z at jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401227488Z at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401228571Z at java.lang.Class.forName0(Native Method) ~[?:?]
2025-05-20T08:44:11.401229696Z at java.lang.Class.forName(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401230696Z at org.janusgraph.util.system.ConfigurationUtil.instantiate(ConfigurationUtil.java:71) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401231821Z at org.janusgraph.diskstorage.Backend.getImplementationClass(Backend.java:548) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401232946Z at org.janusgraph.diskstorage.Backend.getStorageManager(Backend.java:509) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401234155Z at org.janusgraph.graphdb.configuration.builder.GraphDatabaseConfigurationBuilder.build(GraphDatabaseConfigurationBuilder.java:64) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401235530Z at org.janusgraph.core.JanusGraphFactory.lambda$open$0(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401236821Z at org.janusgraph.graphdb.management.JanusGraphManager.openGraph(JanusGraphManager.java:239) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401237946Z at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:165) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401239071Z at org.janusgraph.core.JanusGraphFactory.open(JanusGraphFactory.java:115) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401240196Z at org.janusgraph.graphdb.management.JanusGraphManager.lambda$new$0(JanusGraphManager.java:73) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401243071Z at java.util.LinkedHashMap.forEach(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401244280Z at org.janusgraph.graphdb.management.JanusGraphManager.<init>(JanusGraphManager.java:72) ~[janusgraph-core-1.0.0.jar:?]
2025-05-20T08:44:11.401245446Z at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
2025-05-20T08:44:11.401246530Z at jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401247738Z at jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401249488Z at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:?]
2025-05-20T08:44:11.401250946Z at org.apache.tinkerpop.gremlin.server.util.ServerGremlinExecutor.<init>(ServerGremlinExecutor.java:86) ~[gremlin-server-3.7.0.jar:3.7.0]
2025-05-20T08:44:11.401252155Z ... 4 more
2025-05-20T08:44:11.420682074Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.op.OpLoader.lambda$static$0 - Adding the standard OpProcessor.
2025-05-20T08:44:11.456537334Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.op.OpLoader.lambda$static$0 - Adding the session OpProcessor.
2025-05-20T08:44:11.457328916Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.op.OpLoader.lambda$static$0 - Adding the traversal OpProcessor.
2025-05-20T08:44:11.457469999Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.GremlinServer.lambda$stop$2 - Shutting down OpProcessor[]
2025-05-20T08:44:11.457532749Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.GremlinServer.lambda$stop$2 - Shutting down OpProcessor[session]
2025-05-20T08:44:11.458040290Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.GremlinServer.lambda$stop$2 - Shutting down OpProcessor[traversal]
2025-05-20T08:44:11.458048248Z 08:44:11 INFO org.apache.tinkerpop.gremlin.server.GremlinServer.stop - Shutting down thread pools.
2025-05-20T08:44:13.547865967Z 5/20/25, 8:44:13 AM ============================================================
2025-05-20T08:44:13.547947300Z
2025-05-20T08:44:13.548353341Z -- Gauges ----------------------------------------------------------------------
2025-05-20T08:44:13.548550632Z org.apache.tinkerpop.gremlin.server.GremlinServer.sessions
2025-05-20T08:44:13.548935548Z value = 0
2025-05-20T08:44:13.548967589Z
2025-05-20T08:44:13.550939210Z -- Timers ----------------------------------------------------------------------
2025-05-20T08:44:13.550966127Z org.apache.tinkerpop.gremlin.server.GremlinServer.op.eval
2025-05-20T08:44:13.556035700Z count = 0
2025-05-20T08:44:13.556241658Z mean rate = 0.00 calls/second
2025-05-20T08:44:13.556387074Z 1-minute rate = 0.00 calls/second
2025-05-20T08:44:13.556503949Z 5-minute rate = 0.00 calls/second
2025-05-20T08:44:13.556549324Z 15-minute rate = 0.00 calls/second
2025-05-20T08:44:13.556657949Z min = 0.00 milliseconds
2025-05-20T08:44:13.556751532Z max = 0.00 milliseconds
2025-05-20T08:44:13.556795198Z mean = 0.00 milliseconds
2025-05-20T08:44:13.556841698Z stddev = 0.00 milliseconds
2025-05-20T08:44:13.556928948Z median = 0.00 milliseconds
2025-05-20T08:44:13.557007948Z 75% <= 0.00 milliseconds
2025-05-20T08:44:13.557078865Z 95% <= 0.00 milliseconds
2025-05-20T08:44:13.557225114Z 98% <= 0.00 milliseconds
2025-05-20T08:44:13.557332364Z 99% <= 0.00 milliseconds
2025-05-20T08:44:13.557439572Z 99.9% <= 0.00 milliseconds
2025-05-20T08:44:13.557449322Z org.apache.tinkerpop.gremlin.server.GremlinServer.op.traversal
2025-05-20T08:44:13.557569364Z count = 0
2025-05-20T08:44:13.557677238Z mean rate = 0.00 calls/second
2025-05-20T08:44:13.557817321Z 1-minute rate = 0.00 calls/second
2025-05-20T08:44:13.557875738Z 5-minute rate = 0.00 calls/second
2025-05-20T08:44:13.557886905Z 15-minute rate = 0.00 calls/second
2025-05-20T08:44:13.557991321Z min = 0.00 milliseconds
2025-05-20T08:44:13.558010571Z max = 0.00 milliseconds
2025-05-20T08:44:13.558090529Z mean = 0.00 milliseconds
2025-05-20T08:44:13.558652153Z stddev = 0.00 milliseconds
2025-05-20T08:44:13.558668361Z median = 0.00 milliseconds
2025-05-20T08:44:13.558673070Z 75% <= 0.00 milliseconds
2025-05-20T08:44:13.558677070Z 95% <= 0.00 milliseconds
2025-05-20T08:44:13.558680695Z 98% <= 0.00 milliseconds
2025-05-20T08:44:13.558684361Z 99% <= 0.00 milliseconds
2025-05-20T08:44:13.558687695Z 99.9% <= 0.00 milliseconds
2025-05-20T08:44:13.558690611Z
2025-05-20T08:44:13.558693320Z
2025-05-20T08:44:13.562733686Z 08:44:13 INFO com.codahale.metrics.Slf4jReporter$InfoLoggerProxy.log - type=GAUGE, name=org.apache.tinkerpop.gremlin.server.GremlinServer.sessions, value=0
2025-05-20T08:44:13.567898509Z 08:44:13 INFO com.codahale.metrics.Slf4jReporter$InfoLoggerProxy.log - type=TIMER, name=org.apache.tinkerpop.gremlin.server.GremlinServer.op.eval, count=0, min=0.0, max=0.0, mean=0.0, stddev=0.0, p50=0.0, p75=0.0, p95=0.0, p98=0.0, p99=0.0, p999=0.0, m1_rate=0.0, m5_rate=0.0, m15_rate=0.0, mean_rate=0.0, rate_unit=events/second, duration_unit=milliseconds
2025-05-20T08:44:13.567914134Z 08:44:13 INFO com.codahale.metrics.Slf4jReporter$InfoLoggerProxy.log - type=TIMER, name=org.apache.tinkerpop.gremlin.server.GremlinServer.op.traversal, count=0, min=0.0, max=0.0, mean=0.0, stddev=0.0, p50=0.0, p75=0.0, p95=0.0, p98=0.0, p99=0.0, p999=0.0, m1_rate=0.0, m5_rate=0.0, m15_rate=0.0, mean_rate=0.0, rate_unit=events/second, duration_unit=milliseconds
2025-05-20T08:44:13.567918676Z 08:44:13 INFO org.apache.tinkerpop.gremlin.server.GremlinServer.lambda$stop$9 - Gremlin Server - shutdown complete
Deploy Preview for testcontainers-dotnet ready!
| Name | Link |
|---|---|
| Latest commit | 1503c67e22787a56a6ee7a82765e1bc9ce8274cf |
| Latest deploy log | https://app.netlify.com/projects/testcontainers-dotnet/deploys/68dd6bef6db8470008f35f22 |
| Deploy Preview | https://deploy-preview-1451--testcontainers-dotnet.netlify.app |
| Preview on mobile | Toggle QR Code...Use your smartphone camera to open QR code link. |
To edit notification comments on pull requests, go to your Netlify project configuration.
Many tests are failing, this is more complicated than I first thought. 😟
Many tests are failing, this is more complicated than I first thought. 😟
I haven't looked closely at the implementation yet, but my initial idea was to create a base class for the wait strategy that checks whether the container has exited.