internal/proxy: inject transport in proxy.New

This removes the dependency from internal/proxy on ochttp.

For golang/go#61399

Change-Id: Ib2a350151752dc18c9a6e03b38b2d423ed55f4a1
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/523513
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Run-TryBot: Michael Matloob <matloob@golang.org>
TryBot-Result: Gopher Robot <gobot@golang.org>
kokoro-CI: kokoro <noreply+kokoro@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
diff --git a/cmd/frontend/main.go b/cmd/frontend/main.go
index 72c63a7..63eba69 100644
--- a/cmd/frontend/main.go
+++ b/cmd/frontend/main.go
@@ -79,7 +79,7 @@
 	expg := cmdconfig.ExperimentGetter(ctx, cfg)
 	log.Infof(ctx, "cmd/frontend: initialized cmdconfig.ExperimentGetter")
 
-	proxyClient, err := proxy.New(*proxyURL)
+	proxyClient, err := proxy.New(*proxyURL, &ochttp.Transport{})
 	if err != nil {
 		log.Fatal(ctx, err)
 	}
@@ -103,7 +103,7 @@
 		defer db.Close()
 		dsg = func(context.Context) internal.DataSource { return db }
 		sourceClient := source.NewClient(&http.Client{
-			Transport: &ochttp.Transport{},
+			Transport: new(ochttp.Transport),
 			Timeout:   config.SourceTimeout,
 		})
 		// The closure passed to queue.New is only used for testing and local
diff --git a/cmd/pkgsite/main.go b/cmd/pkgsite/main.go
index 1883dbd..3c50ff5 100644
--- a/cmd/pkgsite/main.go
+++ b/cmd/pkgsite/main.go
@@ -132,7 +132,7 @@
 			die("GOPROXY environment variable is not set")
 		}
 		var err error
-		serverCfg.proxy, err = proxy.New(url)
+		serverCfg.proxy, err = proxy.New(url, nil)
 		if err != nil {
 			die("connecting to proxy: %s", err)
 		}
diff --git a/cmd/worker/main.go b/cmd/worker/main.go
index df8fed0..3238587 100644
--- a/cmd/worker/main.go
+++ b/cmd/worker/main.go
@@ -72,7 +72,7 @@
 	if err != nil {
 		log.Fatal(ctx, err)
 	}
-	proxyClient, err := proxy.New(cfg.ProxyURL)
+	proxyClient, err := proxy.New(cfg.ProxyURL, new(ochttp.Transport))
 	if err != nil {
 		log.Fatal(ctx, err)
 	}
diff --git a/devtools/cmd/seeddb/main.go b/devtools/cmd/seeddb/main.go
index e2002a3..59738af 100644
--- a/devtools/cmd/seeddb/main.go
+++ b/devtools/cmd/seeddb/main.go
@@ -72,13 +72,13 @@
 func run(ctx context.Context, db *database.DB, proxyURL string) error {
 	start := time.Now()
 
-	proxyClient, err := proxy.New(proxyURL)
+	proxyClient, err := proxy.New(proxyURL, new(ochttp.Transport))
 	if err != nil {
 		return err
 	}
 
 	sourceClient := source.NewClient(&http.Client{
-		Transport: &ochttp.Transport{},
+		Transport: new(ochttp.Transport),
 		Timeout:   config.SourceTimeout,
 	})
 	seedModules, err := readSeedFile(ctx, *seedfile)
diff --git a/internal/fetch/gen_zip_signatures.go b/internal/fetch/gen_zip_signatures.go
index 0a98f13..dc5ade0 100644
--- a/internal/fetch/gen_zip_signatures.go
+++ b/internal/fetch/gen_zip_signatures.go
@@ -63,7 +63,7 @@
 	flag.Parse()
 	ctx := context.Background()
 
-	prox, err := proxy.New("https://proxy.golang.org")
+	prox, err := proxy.New("https://proxy.golang.org", nil)
 	if err != nil {
 		log.Fatal(err)
 	}
diff --git a/internal/proxy/client.go b/internal/proxy/client.go
index 1ada97c..92adc32 100644
--- a/internal/proxy/client.go
+++ b/internal/proxy/client.go
@@ -18,7 +18,6 @@
 	"strings"
 	"time"
 
-	"go.opencensus.io/plugin/ochttp"
 	"golang.org/x/mod/module"
 	"golang.org/x/net/context/ctxhttp"
 	"golang.org/x/pkgsite/internal/derrors"
@@ -52,11 +51,12 @@
 
 // New constructs a *Client using the provided url, which is expected to
 // be an absolute URI that can be directly passed to http.Get.
-func New(u string) (_ *Client, err error) {
+// The optional transport parameter is used by the underlying http client.
+func New(u string, transport http.RoundTripper) (_ *Client, err error) {
 	defer derrors.WrapStack(&err, "proxy.New(%q)", u)
 	return &Client{
 		url:          strings.TrimRight(u, "/"),
-		HTTPClient:   &http.Client{Transport: &ochttp.Transport{}},
+		HTTPClient:   &http.Client{Transport: transport},
 		disableFetch: false,
 	}, nil
 }
diff --git a/internal/proxy/client_test.go b/internal/proxy/client_test.go
index 54c3a5b..67fa831 100644
--- a/internal/proxy/client_test.go
+++ b/internal/proxy/client_test.go
@@ -278,7 +278,7 @@
 }
 
 func TestEncodedURL(t *testing.T) {
-	c, err := proxy.New("u")
+	c, err := proxy.New("u", nil)
 	if err != nil {
 		t.Fatal(err)
 	}
diff --git a/internal/proxy/proxytest/proxytest.go b/internal/proxy/proxytest/proxytest.go
index 8cf10a9..8be98af 100644
--- a/internal/proxy/proxytest/proxytest.go
+++ b/internal/proxy/proxytest/proxytest.go
@@ -10,6 +10,7 @@
 	"strings"
 	"testing"
 
+	"go.opencensus.io/plugin/ochttp"
 	"golang.org/x/mod/modfile"
 	"golang.org/x/pkgsite/internal/proxy"
 	"golang.org/x/pkgsite/internal/testing/testhelper"
@@ -36,7 +37,7 @@
 func NewClientForServer(s *Server) (*proxy.Client, func(), error) {
 	// override client.httpClient to skip TLS verification
 	httpClient, prox, serverClose := testhelper.SetupTestClientAndServer(s.mux)
-	client, err := proxy.New(prox.URL)
+	client, err := proxy.New(prox.URL, new(ochttp.Transport))
 	if err != nil {
 		return nil, nil, err
 	}
diff --git a/tests/api/main.go b/tests/api/main.go
index 2adec42..c42aadd 100755
--- a/tests/api/main.go
+++ b/tests/api/main.go
@@ -19,6 +19,7 @@
 	"sort"
 	"strings"
 
+	"go.opencensus.io/plugin/ochttp"
 	"golang.org/x/mod/semver"
 	"golang.org/x/pkgsite/internal"
 	"golang.org/x/pkgsite/internal/derrors"
@@ -107,7 +108,7 @@
 
 func generate(ctx context.Context, pkgPath, modulePath, tmpPath, proxyURL string) (err error) {
 	defer derrors.Wrap(&err, "generate(ctx, %q, %q, %q, %q)", pkgPath, modulePath, tmpPath, proxyURL)
-	proxyClient, err := proxy.New(proxyURL)
+	proxyClient, err := proxy.New(proxyURL, new(ochttp.Transport))
 	if err != nil {
 		return err
 	}