Skip to content

Commit

Permalink
Add tests for container command + fix digest flag error
Browse files Browse the repository at this point in the history
Signed-off-by: Marco Franssen <marco.franssen@philips.com>
  • Loading branch information
marcofranssen committed Dec 24, 2021
1 parent 0645c6a commit 636239e
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 7 deletions.
116 changes: 116 additions & 0 deletions cmd/slsa-provenance/cli/container_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
package cli_test

import (
"encoding/base64"
"os"
"path"
"runtime"
"testing"

"github.com/stretchr/testify/assert"

"github.com/philips-labs/slsa-provenance-action/cmd/slsa-provenance/cli"
)

func TestGenerateContainerCliOptions(t *testing.T) {
_, filename, _, _ := runtime.Caller(0)
provenanceFile := path.Join(path.Dir(filename), "provenance.json")

base64GitHubContext := base64.StdEncoding.EncodeToString([]byte(githubContext))
base64RunnerContext := base64.StdEncoding.EncodeToString([]byte(runnerContext))

testCases := []struct {
name string
err error
arguments []string
}{
{
name: "without commandline flags",
err: cli.RequiredFlagError("github-context"),
arguments: make([]string, 0),
},
{
name: "only github-context given",
err: cli.RequiredFlagError("runner-context"),
arguments: []string{
"--github-context",
base64GitHubContext,
},
},
{
name: "only context flags given",
err: cli.RequiredFlagError("repository"),
arguments: []string{
"--github-context",
base64GitHubContext,
"--runner-context",
base64RunnerContext,
},
},
{
name: "contexts and tags given",
err: cli.RequiredFlagError("repository"),
arguments: []string{
"--github-context",
base64GitHubContext,
"--runner-context",
base64RunnerContext,
"--tags",
"v0.4.0,33ba3da2213c83ce02df0f2f6ba925ec79037f9d",
},
},
{
name: "contexts, repo and tags given",
err: cli.RequiredFlagError("digest"),
arguments: []string{
"--github-context",
base64GitHubContext,
"--runner-context",
base64RunnerContext,
"--repository",
"ghcr.io/philips-labs/slsa-provenance",
"--tags",
"v0.4.0,33ba3da2213c83ce02df0f2f6ba925ec79037f9d",
},
},
{
name: "all flags given",
err: nil,
arguments: []string{
"--github-context",
base64GitHubContext,
"--runner-context",
base64RunnerContext,
"--repository",
"ghcr.io/philips-labs/slsa-provenance",
"--tags",
"v0.4.0,33ba3da2213c83ce02df0f2f6ba925ec79037f9d",
"--digest",
"sha256:194b471a878add368bf02a7935fa099024576c029491bcefaeb87f81efa093a3",
},
},
}

for _, tc := range testCases {
t.Run(tc.name, func(tt *testing.T) {
assert := assert.New(tt)

output, err := executeCommand(cli.OCI(), tc.arguments...)
defer func() {
_ = os.Remove(provenanceFile)
}()

if tc.err != nil {
assert.EqualError(err, tc.err.Error())
} else {
assert.NoError(err)
assert.Contains(output, "Saving provenance to")
if assert.FileExists(provenanceFile) {
content, err := os.ReadFile(provenanceFile)
assert.NoError(err)
assert.Greater(len(content), 1)
}
}
})
}
}
12 changes: 5 additions & 7 deletions cmd/slsa-provenance/cli/options/oci.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package options

import "github.com/spf13/cobra"
import (
"github.com/spf13/cobra"
)

// OCIOptions Commandline flags used for the generate oci command.
type OCIOptions struct {
Expand All @@ -21,17 +23,13 @@ func (o *OCIOptions) GetRepository() (string, error) {
// GetDigest The digest to validate the tag digests against.
func (o *OCIOptions) GetDigest() (string, error) {
if o.Digest == "" {
return "", RequiredFlagError("repository")
return "", RequiredFlagError("digest")
}
return o.Digest, nil
}

// GetTags The tags to add as provenance subjects.
func (o *OCIOptions) GetTags() ([]string, error) {
if len(o.Tags) == 0 {
return []string{"latest"}, nil
}

return o.Tags, nil
}

Expand All @@ -40,5 +38,5 @@ func (o *OCIOptions) AddFlags(cmd *cobra.Command) {
o.GenerateOptions.AddFlags(cmd)
cmd.PersistentFlags().StringVar(&o.Repository, "repository", "", "The repository of the oci artifact.")
cmd.PersistentFlags().StringVar(&o.Digest, "digest", "", "The digest for the oci artifact.")
cmd.PersistentFlags().StringSliceVar(&o.Tags, "tags", nil, "The given tags for this oci release.")
cmd.PersistentFlags().StringSliceVar(&o.Tags, "tags", []string{"latest"}, "The given tags for this oci release.")
}

0 comments on commit 636239e

Please sign in to comment.