Skip to content

Commit

Permalink
Fix delete when pushed with --relative
Browse files Browse the repository at this point in the history
Fixes #134
  • Loading branch information
hypnoglow committed Jul 11, 2022
1 parent b2325c9 commit 4508fa3
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 1 deletion.
8 changes: 8 additions & 0 deletions cmd/helms3/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"context"
"strings"

"github.com/pkg/errors"

Expand Down Expand Up @@ -52,6 +53,13 @@ func (act deleteAction) Run(ctx context.Context) error {
// Delete the file from S3 and replace index file.

if url != "" {
// For relative URLs we need to prepend base URL.

// TODO: fail test, then uncomment, test again.
if !strings.HasPrefix(url, repoEntry.URL()) {
url = strings.TrimSuffix(repoEntry.URL(), "/") + "/" + url
}

if err := storage.Delete(ctx, url); err != nil {
return errors.WithMessage(err, "delete chart file from s3")
}
Expand Down
62 changes: 62 additions & 0 deletions tests/e2e/delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,3 +69,65 @@ func TestDelete(t *testing.T) {
expected = `No results found`
assert.Contains(t, stdout.String(), expected)
}

func TestDeleteRelative(t *testing.T) {
t.Log("Test delete action when chart is pushed with --relative flag")

const (
repoName = "test-delete-relative"
repoDir = "charts"
chartName = "foo"
chartVersion = "1.2.3"
chartFilename = "foo-1.2.3.tgz"
chartFilepath = "testdata/" + chartFilename
chartObjectName = repoDir + "/" + chartFilename
)

setupRepo(t, repoName, repoDir)
defer teardownRepo(t, repoName)

// Push chart to be deleted.

cmd, stdout, stderr := command(fmt.Sprintf("helm s3 push --relative %s %s", chartFilepath, repoName))
err := cmd.Run()
assert.NoError(t, err)
assertEmptyOutput(t, stdout, stderr)

// Check that pushed chart exists in the bucket.

obj, err := mc.StatObject(repoName, chartObjectName, minio.StatObjectOptions{})
assert.NoError(t, err)
assert.Equal(t, chartObjectName, obj.Key)

// Check that pushed chart can be searched, which means it exists in the index.

cmd, stdout, stderr = command(makeSearchCommand(repoName, chartName))
err = cmd.Run()
assert.NoError(t, err)
assertEmptyOutput(t, nil, stderr)

expected := `test-delete-relative/foo 1.2.3 1.2.3 A Helm chart for Kubernetes`
assert.Contains(t, stdout.String(), expected)

// Delete chart.

cmd, stdout, stderr = command(fmt.Sprintf("helm s3 delete %s --version %s %s", chartName, chartVersion, repoName))
err = cmd.Run()
assert.NoError(t, err)
assertEmptyOutput(t, stdout, stderr)

// Check that chart was actually deleted from the bucket.

_, err = mc.StatObject(repoName, chartObjectName, minio.StatObjectOptions{})
assert.Equal(t, "NoSuchKey", minio.ToErrorResponse(err).Code)

// Check that deleted chart cannot be searched, which means it was deleted from the index.

cmd, stdout, stderr = command(makeSearchCommand(repoName, chartName))
err = cmd.Run()
assert.NoError(t, err)
assertEmptyOutput(t, nil, stderr)

expected = `No results found`
assert.Contains(t, stdout.String(), expected)
}
2 changes: 1 addition & 1 deletion tests/e2e/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ func command(c string) (cmd *exec.Cmd, stdout, stderr *bytes.Buffer) {

// For helm v2, the command is `helm search foo/bar`.
// For helm v3, the command is `helm search repo foo/bar`.
func makeSearchCommand(repoName, chartName string) string {
func makeSearchCommand(repoName, chartName string) string { //nolint:unparam
c := "helm search"

helmutil.SetupHelm()
Expand Down

0 comments on commit 4508fa3

Please sign in to comment.