From 94b9c67caedd4ec1f310ca6cad39503343210941 Mon Sep 17 00:00:00 2001 From: f-blass <42929142+f-blass@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:42:20 +0200 Subject: [PATCH] Set buildpack version as header on dcl upload (#93) * Set buildpack version as header on dcl upload * Add userAgent field to uploader * Remove param * add unit test for setting the User-Agent Header in Base DCL upload --------- Co-authored-by: d047491 --- cmd/supply/main.go | 7 +++++++ pkg/supply/supply.go | 2 ++ pkg/supply/supply_test.go | 6 ++++++ pkg/uploader/uploader.go | 2 ++ 4 files changed, 17 insertions(+) diff --git a/cmd/supply/main.go b/cmd/supply/main.go index 2226673..54c9af6 100644 --- a/cmd/supply/main.go +++ b/cmd/supply/main.go @@ -26,6 +26,12 @@ func main() { logger.Error("Unable to load buildpack manifest: %s", err) os.Exit(10) } + version, err := manifest.Version() + if err != nil { + logger.Error("Unable to load buildpack version: %s", err) + os.Exit(20) + } + installer := libbuildpack.NewInstaller(manifest) stager := libbuildpack.NewStager(os.Args[1:], logger, manifest) @@ -74,6 +80,7 @@ func main() { BuildpackDir: buildpackDir, GetClient: uploader.GetClient, CertCopierSourceDir: path.Join(buildpackDir, "bin"), + BuildpackVersion: version, } err = s.Run() diff --git a/pkg/supply/supply.go b/pkg/supply/supply.go index 1e098f8..aa5338a 100644 --- a/pkg/supply/supply.go +++ b/pkg/supply/supply.go @@ -45,6 +45,7 @@ type Supplier struct { BuildpackDir string GetClient func(cert, key []byte) (uploader.AMSClient, error) CertCopierSourceDir string + BuildpackVersion string } type Cloudfoundry struct { @@ -284,6 +285,7 @@ func (s *Supplier) upload(creds *services.IASCredentials, tlsCfg tlsConfig, root Root: path.Join(s.Stager.BuildDir(), rootDir), Client: client, AMSInstanceID: creds.AmsInstanceID, + UserAgent: fmt.Sprintf("cloud-authorization-buildpack/%s", s.BuildpackVersion), } return u.Do(context.Background(), creds.AmsServerURL) } diff --git a/pkg/supply/supply_test.go b/pkg/supply/supply_test.go index 6ceaf38..e02a58c 100644 --- a/pkg/supply/supply_test.go +++ b/pkg/supply/supply_test.go @@ -97,6 +97,7 @@ var _ = Describe("Supply", func() { Log: logger, BuildpackDir: buildpackDir, CertCopierSourceDir: certCopierDir, + BuildpackVersion: "UNIT-TEST", GetClient: func(cert, key []byte) (uploader.AMSClient, error) { certSpy = cert keySpy = key @@ -169,6 +170,11 @@ var _ = Describe("Supply", func() { expectedValue := []string{"00000000-3b4d-4c41-9e5b-9aee7bfa6348"} Expect(uploadReqSpy.Header).Should(HaveKeyWithValue(env.HeaderInstanceID, expectedValue)) }) + It("sets the buildpack version as User-Agent Header", func() { + Expect(supplier.Run()).To(Succeed()) + expectedValue := []string{"cloud-authorization-buildpack/UNIT-TEST"} + Expect(uploadReqSpy.Header).Should(HaveKeyWithValue("User-Agent", expectedValue)) + }) It("creates a valid launch.yml", func() { Expect(supplier.Run()).To(Succeed()) launchConfig, err := os.Open(filepath.Join(depDir, "launch.yml")) diff --git a/pkg/uploader/uploader.go b/pkg/uploader/uploader.go index 429d262..e7518ff 100644 --- a/pkg/uploader/uploader.go +++ b/pkg/uploader/uploader.go @@ -21,6 +21,7 @@ type Uploader struct { Root string Client AMSClient AMSInstanceID string + UserAgent string } //go:generate mockgen --build_flags=--mod=mod --destination=../supply/client_mock_test.go --package=supply_test github.com/SAP/cloud-authorization-buildpack/pkg/uploader AMSClient @@ -91,6 +92,7 @@ func (up *Uploader) do(ctx context.Context, dstURL string, body []byte) (*http.R return nil, fmt.Errorf("could not create DCL upload request %w", err) } r.Header.Set(env.HeaderInstanceID, up.AMSInstanceID) + r.Header.Set("User-Agent", up.UserAgent) r.Header.Set("Content-Type", "application/gzip") return up.Client.Do(r) }