testcontainers / testcontainers/testcontainers-java

NullPointerException in old shaded OkHttp version

Offen
#3,535 0 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Java
Sterne
8.7k
Forks
1.9k
Ø Merge
2 T. 17 Std.
Gemergte PRs (30 T.)
9

Beschreibung

Hi

We're getting occasional flaky tests when using testcontainers-java which has an embedded docker-java-transport-okhttp shaded in its jar.

Could not start container
java.lang.NullPointerException
  at org.testcontainers.shaded.okio.Okio$1.write(Okio.java:78)
  at org.testcontainers.shaded.okio.AsyncTimeout$1.write(AsyncTimeout.java:180)
  at org.testcontainers.shaded.okio.RealBufferedSink.flush(RealBufferedSink.java:224)
  at org.testcontainers.shaded.okhttp3.internal.http1.Http1ExchangeCodec.finishRequest(Http1ExchangeCodec.java:190)
  at org.testcontainers.shaded.okhttp3.internal.connection.Exchange.finishRequest(Exchange.java:101)
  at org.testcontainers.shaded.okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:86)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
  at org.testcontainers.shaded.com.github.dockerjava.okhttp.HijackingInterceptor.intercept(HijackingInterceptor.java:20)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
  at org.testcontainers.shaded.okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:43)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
  at org.testcontainers.shaded.okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:94)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
  at org.testcontainers.shaded.okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
  at org.testcontainers.shaded.okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:88)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:142)
  at org.testcontainers.shaded.okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:117)
  at org.testcontainers.shaded.okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:229)
  at org.testcontainers.shaded.okhttp3.RealCall.execute(RealCall.java:81)
  at org.testcontainers.shaded.com.github.dockerjava.okhttp.OkDockerHttpClient$OkResponse.<init>(OkDockerHttpClient.java:251)
  at org.testcontainers.shaded.com.github.dockerjava.okhttp.OkDockerHttpClient.execute(OkDockerHttpClient.java:225)
  at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.execute(DefaultInvocationBuilder.java:228)
  at org.testcontainers.shaded.com.github.dockerjava.core.DefaultInvocationBuilder.post(DefaultInvocationBuilder.java:125)
  at org.testcontainers.shaded.com.github.dockerjava.core.exec.CreateContainerCmdExec.execute(CreateContainerCmdExec.java:33)
  at org.testcontainers.shaded.com.github.dockerjava.core.exec.CreateContainerCmdExec.execute(CreateContainerCmdExec.java:13)
  at org.testcontainers.shaded.com.github.dockerjava.core.exec.AbstrSyncDockerCmdExec.exec(AbstrSyncDockerCmdExec.java:21)
  at org.testcontainers.shaded.com.github.dockerjava.core.command.AbstrDockerCmd.exec(AbstrDockerCmd.java:35)
  at org.testcontainers.shaded.com.github.dockerjava.core.command.CreateContainerCmdImpl.exec(CreateContainerCmdImpl.java:595)
  at org.testcontainers.containers.GenericContainer.tryStart(GenericContainer.java:404)
  at org.testcontainers.containers.GenericContainer.lambda$doStart$0(GenericContainer.java:322)
  at org.rnorth.ducttape.unreliables.Unreliables.retryUntilSuccess(Unreliables.java:81)
  at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:320)
  at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:308)
  at org.testcontainers.lifecycle.Startable$start.call(Unknown Source)

docker-java-transport-okhttp currently depends on OkHttp 3.14.4, but there have been many releases since: they're up to 4.9.0 and the code in question has changed somewhat, presumably fixing bugs. I've raised https://github.com/docker-java/docker-java/issues/1507 there to suggest bumping the issue, but it's difficult to test whether the latest version still has the bug since the dependency is shaded.

It would be good to have a non-shaded library that would allow your users to bump versions if they need to in situations like this. It might also be good to bump the OkHttp version if upstream doesn't do it soon.

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem sporadisch fehlschlagenden Testcontainers-Fehler beim Starten des Containers und der shaded-Abhängigkeit docker-java-transport-okhttp. Prüfe anschließend das verknüpfte docker-java issue 1507 und den Stack Trace von OkHttp 3.14.4. Erledigt ist die Untersuchung, wenn festgestellt wurde, ob der NPE durch eine Änderung der Upstream-Version behoben wird oder einen unterstützten nicht-shaded Abhängigkeitspfad erfordert.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
docker, java
Bereich
testing
Issue-Typ
Bug
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.