From 460f6653dcba927c5cde63c2ca8add9ab9bc2aac Mon Sep 17 00:00:00 2001 From: Alexander Matyushentsev Date: Tue, 9 Jun 2020 19:01:25 -0700 Subject: [PATCH] fix: avoid panic in badge handler (#3741) --- server/badge/badge.go | 6 +++++- server/badge/badge_test.go | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/server/badge/badge.go b/server/badge/badge.go index 344d87a452..b389187057 100644 --- a/server/badge/badge.go +++ b/server/badge/badge.go @@ -123,7 +123,11 @@ func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { badge = svgWidthPattern.ReplaceAllString(badge, fmt.Sprintf(` 7 { + shortRevision = shortRevision[:7] + } + badge = replaceFirstGroupSubMatch(revisionTextPattern, badge, fmt.Sprintf("(%s)", shortRevision)) } w.Header().Set("Content-Type", "image/svg+xml") diff --git a/server/badge/badge_test.go b/server/badge/badge_test.go index a347946c9e..6c4d2e8ec6 100644 --- a/server/badge/badge_test.go +++ b/server/badge/badge_test.go @@ -111,6 +111,22 @@ func TestHandlerRevisionIsEnabledNoOperationState(t *testing.T) { assert.NotContains(t, response, "(aa29b85)") } +func TestHandlerRevisionIsEnabledShortCommitSHA(t *testing.T) { + app := testApp.DeepCopy() + app.Status.OperationState.SyncResult.Revision = "abc" + + settingsMgr := settings.NewSettingsManager(context.Background(), fake.NewSimpleClientset(&argoCDCm, &argoCDSecret), "default") + handler := NewHandler(appclientset.NewSimpleClientset(app), settingsMgr, "default") + req, err := http.NewRequest("GET", "/api/badge?name=testApp&revision=true", nil) + assert.NoError(t, err) + + rr := httptest.NewRecorder() + handler.ServeHTTP(rr, req) + + response := rr.Body.String() + assert.Contains(t, response, "(abc)") +} + func TestHandlerFeatureIsDisabled(t *testing.T) { argoCDCmDisabled := argoCDCm.DeepCopy()