Skip to content

Commit

Permalink
Add subjects test
Browse files Browse the repository at this point in the history
  • Loading branch information
marcofranssen committed Oct 22, 2021
1 parent c4a45c8 commit 1af3b37
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 7 deletions.
2 changes: 1 addition & 1 deletion cmd/slsa-provenance/cli/generate.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
"github.com/philips-labs/slsa-provenance-action/lib/slsa"
)

// RequiredFlagError creates an error flag error for the given flag name
// RequiredFlagError creates a required flag error for the given flag name
func RequiredFlagError(flagName string) error {
return fmt.Errorf("no value found for required flag: %s", flagName)
}
Expand Down
8 changes: 2 additions & 6 deletions lib/slsa/provenance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,14 +257,10 @@ func TestGenerateProvenance(t *testing.T) {
}

binaryName := "slsa-provenance"
binary, err := os.ReadFile(path.Join(artifactPath, binaryName))
if !assert.NoError(err) {
return
}
binaryPath := path.Join(artifactPath, binaryName)

shaHex := slsa.ShaSum256HexEncoded(binary)
assert.Len(stmt.Subject, 1)
assert.Contains(stmt.Subject, intoto.Subject{Name: binaryName, Digest: intoto.DigestSet{"sha256": shaHex}})
slsa.AssertSubject(assert, stmt.Subject, binaryName, binaryPath)

assert.Equal(intoto.SlsaPredicateType, stmt.PredicateType)
assert.Equal(intoto.StatementType, stmt.Type)
Expand Down
58 changes: 58 additions & 0 deletions lib/slsa/subjects_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package slsa

import (
"os"
"path"
"runtime"
"testing"

"github.com/stretchr/testify/assert"

"github.com/philips-labs/slsa-provenance-action/lib/intoto"
)

func TestSubjects(t *testing.T) {
assert := assert.New(t)

s, err := subjects("/invalid-path")
assert.Error(err)
assert.Nil(s)

_, filename, _, _ := runtime.Caller(0)
rootDir := path.Join(path.Dir(filename), "../..")
artifactPath := path.Join(rootDir, "bin")
binaryName := "slsa-provenance"
binaryPath := path.Join(artifactPath, binaryName)

s, err = subjects(artifactPath)
assert.NoError(err)
assert.NotNil(s)
assert.Len(s, 1)
AssertSubject(assert, s, binaryName, binaryPath)

s, err = subjects(binaryPath)
assert.NoError(err)
assert.NotNil(s)
assert.Len(s, 1)
AssertSubject(assert, s, binaryName, binaryPath)

s, err = subjects(".")
assert.NoError(err)
assert.NotNil(s)

assert.Len(s, 4)
AssertSubject(assert, s, "provenance_test.go", path.Join(".", "provenance_test.go"))
AssertSubject(assert, s, "provenance.go", path.Join(".", "provenance.go"))
AssertSubject(assert, s, "subjects_test.go", path.Join(".", "subjects_test.go"))
AssertSubject(assert, s, "subjects.go", path.Join(".", "subjects.go"))
}

func AssertSubject(assert *assert.Assertions, subject []intoto.Subject, binaryName, binaryPath string) {
binary, err := os.ReadFile(binaryPath)
if !assert.NoError(err) {
return
}

shaHex := ShaSum256HexEncoded(binary)
assert.Contains(subject, intoto.Subject{Name: binaryName, Digest: intoto.DigestSet{"sha256": shaHex}})
}

0 comments on commit 1af3b37

Please sign in to comment.