testcontainers / testcontainers/testcontainers-java

NullPointerException in old shaded OkHttp version

Ouverte
#3,535 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Java
Étoiles
8.7k
Forks
1.9k
Merge moyen
2 j 17 h
PR mergées (30 j)
9

Description

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.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par l’échec intermittent de Testcontainers lors du démarrage du conteneur et par la dépendance shaded docker-java-transport-okhttp, puis examinez le issue 1507 de docker-java référencé et la stack trace d’OkHttp 3.14.4. Le travail sera considéré comme terminé lorsqu’il aura été établi si le NPE est résolu par un changement de version upstream ou s’il nécessite un chemin de dépendance non-shaded pris en charge.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
docker, java
Domaine
testing
Type d'issue
Bug
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.