mirror of
https://github.com/gotenberg/gotenberg.git
synced 2026-10-08 13:33:18 +01:00
62 lines
2.1 KiB
Go
62 lines
2.1 KiB
Go
package chromium
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
"slices"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// TestChromiumBrowser_Start_rejectsOverlappingStart guards against the latch
|
|
// reported in https://github.com/gotenberg/gotenberg/issues/1599. When the
|
|
// supervisor abandons a Start goroutine on request-deadline expiry, that
|
|
// goroutine keeps running and holds startMu (and the pinning proxy it started)
|
|
// until it unwinds. A second Start must be refused rather than proceeding to
|
|
// start the pinning proxy a second time.
|
|
func TestChromiumBrowser_Start_rejectsOverlappingStart(t *testing.T) {
|
|
b := &chromiumBrowser{initialCtx: context.Background()}
|
|
|
|
// Simulate a Start still in flight.
|
|
b.startMu.Lock()
|
|
defer b.startMu.Unlock()
|
|
|
|
err := b.Start(slog.New(slog.DiscardHandler))
|
|
if err == nil {
|
|
t.Fatal("expected an error when a start is already in progress, got nil")
|
|
}
|
|
if !strings.Contains(err.Error(), "already in progress") {
|
|
t.Fatalf("expected an 'already in progress' error, got %q", err)
|
|
}
|
|
|
|
// The guard must return before touching any startup resource, so no user
|
|
// profile directory is created and the browser stays not started.
|
|
if b.userProfileDirPath != "" {
|
|
t.Fatalf("expected no user profile directory to be created, got %q", b.userProfileDirPath)
|
|
}
|
|
if b.isStarted.Load() {
|
|
t.Fatal("expected the browser to stay not started")
|
|
}
|
|
}
|
|
|
|
// TestChromiumDisableFeatures guards the override described in
|
|
// https://github.com/gotenberg/gotenberg/issues/1656. Gotenberg replaces
|
|
// chromedp's --disable-features value rather than extending it, as
|
|
// chromedp.Flag keys its flags by switch name. Dropping one of chromedp's own
|
|
// entries while editing this list would silently re-enable it.
|
|
func TestChromiumDisableFeatures(t *testing.T) {
|
|
for _, feature := range []string{
|
|
// chromedp.DefaultExecAllocatorOptions.
|
|
"site-per-process",
|
|
"Translate",
|
|
"BlinkGenPropertyTrees",
|
|
// The address-bar popup WebUI, built even in headless.
|
|
"WebUIOmniboxPopup",
|
|
"WebUIOmniboxAimPopup",
|
|
} {
|
|
if !slices.Contains(strings.Split(chromiumDisableFeatures, ","), feature) {
|
|
t.Errorf("expected %q to be disabled, got %q", feature, chromiumDisableFeatures)
|
|
}
|
|
}
|
|
}
|