testcontainers / testcontainers/testcontainers-java

Add ability to increase default timeout for BrowserWebDriverContainer when checking if it's started

Offen
#3,161 2 Kommentare 0 Reaktionen 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, seems that on some slow agents we might be hitting the 30s hardcoded timeout. While we can extend BrowserWebDriverContainer to override containerIsStarted() (it's not perfect though since we cannot just copy paste the default content as it uses some private variables), it would be even nicer if the timeout could be configurable.

I'm referring to:

    protected void containerIsStarted(InspectContainerResponse containerInfo) {
        this.driver = (RemoteWebDriver)Unreliables.retryUntilSuccess(30, TimeUnit.SECONDS, (Callable)Timeouts.getWithTimeout(10, TimeUnit.SECONDS, () -> {
            return () -> {
                return new RemoteWebDriver(this.getSeleniumAddress(), this.capabilities);
            };
        }));
        if (this.vncRecordingContainer != null) {
            LOGGER.debug("Starting VNC recording");
            this.vncRecordingContainer.start();
        }

    }

What I did FTR:

public class XWikiBrowserWebDriverContainer<T extends BrowserWebDriverContainer<T>> extends BrowserWebDriverContainer<T>
{
    private Capabilities capabilities;

    @Override
    protected void containerIsStarted(InspectContainerResponse containerInfo)
    {
        Unreliables.retryUntilSuccess(60, TimeUnit.SECONDS,
            Timeouts.getWithTimeout(20, TimeUnit.SECONDS,
                () -> () -> new RemoteWebDriver(this.getSeleniumAddress(), this.capabilities)));
        super.containerIsStarted(containerInfo);
    }

    @Override
    public T withCapabilities(Capabilities capabilities)
    {
        this.capabilities = capabilities;
        return super.withCapabilities(capabilities);
    }
}

Thanks!

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 BrowserWebDriverContainer.containerIsStarted sowie dem im Issue gezeigten Retry- und Treiber-Erstellungspfad. Verfolge, wie withCapabilities und der private Zustand verwendet werden, und finde dann die vorhandenen Tests für den Container-Start, bevor du das Timeout konfigurierbar machst. Fertig ist die Aufgabe, wenn langsame Agents die Wartezeit für den Start überschreiben können, ohne private Implementierungsdetails zu kopieren.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
docker, java
Bereich
testing
Issue-Typ
Feature
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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