Skip to content

Commit

Permalink
Ent - IngestArtifactID,IngestArtifactIDs implementations (#1300)
Browse files Browse the repository at this point in the history
Signed-off-by: mrizzi <mrizzi@redhat.com>
  • Loading branch information
mrizzi authored and pxp928 committed Nov 30, 2023
1 parent ebe3e7c commit cce09ad
Show file tree
Hide file tree
Showing 12 changed files with 1,092 additions and 265 deletions.
35 changes: 18 additions & 17 deletions pkg/assembler/backends/ent/backend/artifact.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package backend

import (
"context"
"strconv"
"strings"

"entgo.io/ent/dialect/sql"
Expand Down Expand Up @@ -62,44 +63,40 @@ func toLowerPtr(s *string) *string {
return &lower
}

func (b *EntBackend) IngestMaterials(ctx context.Context, materials []*model.ArtifactInputSpec) ([]*model.Artifact, error) {
return b.IngestArtifacts(ctx, materials)
}

func (b *EntBackend) IngestArtifacts(ctx context.Context, artifacts []*model.ArtifactInputSpec) ([]*model.Artifact, error) {
func (b *EntBackend) IngestArtifactIDs(ctx context.Context, artifacts []*model.ArtifactInputSpec) ([]string, error) {
funcName := "IngestArtifacts"
records, err := WithinTX(ctx, b.client, func(ctx context.Context) (*ent.Artifacts, error) {
records, err := WithinTX(ctx, b.client, func(ctx context.Context) (*[]string, error) {
client := ent.TxFromContext(ctx)
slc, err := ingestArtifacts(ctx, client, artifacts)
if err != nil {
return nil, err
}

return &slc, nil
return slc, nil
})

if err != nil {
return nil, gqlerror.Errorf("%v :: %s", funcName, err)
}
return collect(*records, toModelArtifact), nil
return *records, nil
}

func (b *EntBackend) IngestArtifact(ctx context.Context, art *model.ArtifactInputSpec) (*model.Artifact, error) {
records, err := b.IngestArtifacts(ctx, []*model.ArtifactInputSpec{art})
func (b *EntBackend) IngestArtifactID(ctx context.Context, art *model.ArtifactInputSpec) (string, error) {
records, err := b.IngestArtifactIDs(ctx, []*model.ArtifactInputSpec{art})
if err != nil {
return nil, err
return "", err
}

if len(records) == 0 {
return nil, Errorf("no records returned")
return "", Errorf("no records returned")
}

return records[0], nil
}

func ingestArtifacts(ctx context.Context, client *ent.Tx, artifacts []*model.ArtifactInputSpec) (ent.Artifacts, error) {
func ingestArtifacts(ctx context.Context, client *ent.Tx, artifacts []*model.ArtifactInputSpec) (*[]string, error) {
batches := chunk(artifacts, 100)
results := make(ent.Artifacts, 0)
ids := make([]int, 0)

for _, artifacts := range batches {
creates := make([]*ent.ArtifactCreate, len(artifacts))
Expand All @@ -124,12 +121,16 @@ func ingestArtifacts(ctx context.Context, client *ent.Tx, artifacts []*model.Art
predicates[i] = artifactQueryInputPredicates(*art)
}

newRecords, err := client.Artifact.Query().Where(artifact.Or(predicates...)).All(ctx)
newRecords, err := client.Artifact.Query().Where(artifact.Or(predicates...)).IDs(ctx)
if err != nil {
return nil, err
}

results = append(results, newRecords...)
ids = append(ids, newRecords...)
}
result := make([]string, len(ids))
for i := range ids {
result[i] = strconv.Itoa(ids[i])
}
return results, nil
return &result, nil
}
15 changes: 3 additions & 12 deletions pkg/assembler/backends/ent/backend/artifact_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func (s *Suite) Test_IngestArtifacts() {
tests := []struct {
name string
artifactInputs []*model.ArtifactInputSpec
want []*model.Artifact
want []string
wantErr bool
}{{
name: "sha256",
Expand All @@ -40,16 +40,7 @@ func (s *Suite) Test_IngestArtifacts() {
Algorithm: "sha512",
Digest: "374ab8f711235830769aa5f0b31ce9b72c5670074b34cb302cdafe3b606233ee92ee01e298e5701f15cc7087714cd9abd7ddb838a6e1206b3642de16d9fc9dd7",
}},
want: []*model.Artifact{{
Algorithm: "sha256",
Digest: "6bbb0da1891646e58eb3e6a63af3a6fc3c8eb5a0d44824cba581d2e14a0450cf",
}, {
Algorithm: "sha1",
Digest: "7a8f47318e4676dacb0142afa0b83029cd7befd9",
}, {
Algorithm: "sha512",
Digest: "374ab8f711235830769aa5f0b31ce9b72c5670074b34cb302cdafe3b606233ee92ee01e298e5701f15cc7087714cd9abd7ddb838a6e1206b3642de16d9fc9dd7",
}},
want: []string{"1", "2", "3"},
wantErr: false,
}}

Expand All @@ -58,7 +49,7 @@ func (s *Suite) Test_IngestArtifacts() {
be, err := GetBackend(s.Client)
s.NoError(err)

got, err := be.IngestArtifacts(s.Ctx, tt.artifactInputs)
got, err := be.IngestArtifactIDs(s.Ctx, tt.artifactInputs)
if (err != nil) != tt.wantErr {
s.T().Errorf("demoClient.IngestArtifact() error = %v, wantErr %v", err, tt.wantErr)
return
Expand Down
4 changes: 2 additions & 2 deletions pkg/assembler/backends/ent/backend/certify_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ func (s *Suite) TestCertifyBad() {
}
}
for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
t.Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down Expand Up @@ -1476,7 +1476,7 @@ func (s *Suite) TestCertifyGood() {
}
}
for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
t.Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/assembler/backends/ent/backend/hashequal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -468,10 +468,10 @@ func (s *Suite) TestHashEqual() {
}
artifactIDs := make([]string, len(test.InArt))
for i, a := range test.InArt {
if v, err := b.IngestArtifact(ctx, a); err != nil {
if v, err := b.IngestArtifactID(ctx, a); err != nil {
t.Fatalf("Could not ingest artifact: %v", err)
} else {
artifactIDs[i] = v.ID
artifactIDs[i] = v
}
}

Expand Down
31 changes: 15 additions & 16 deletions pkg/assembler/backends/ent/backend/neighbors_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ func (s *Suite) TestNode() {

ids := make([]string, 0, len(test.Expected))
for _, inA := range test.InArt {
if a, err := b.IngestArtifact(ctx, inA); err != nil {
if a, err := b.IngestArtifactID(ctx, inA); err != nil {
s.T().Fatalf("Could not ingest artifact: %v", err)
} else {
ids = append(ids, a.ID)
ids = append(ids, a)
}
}

Expand Down Expand Up @@ -113,22 +113,21 @@ func (s *Suite) TestNodes() {
be, err := GetBackend(s.Client)
s.Require().NoError(err)

v, err := be.IngestArtifact(s.Ctx, a1)
s.Require().NoError(err)
v, err := be.IngestArtifactID(s.Ctx, a1)
s.Require().NoError(err)

p, err := be.IngestPackage(s.Ctx, *p4)
s.Require().NoError(err)

nodes, err := be.Nodes(s.Ctx, []string{v.ID, p.ID, p.Namespaces[0].Names[0].Versions[0].ID})
s.Require().NoError(err)
if diff := cmp.Diff(a1out, nodes[0], ignoreID, ignoreEmptySlices); diff != "" {
s.T().Errorf("Unexpected results. (-want +got):\n%s", diff)
}
if diff := cmp.Diff(p4outNamespace, nodes[1], ignoreID, ignoreEmptySlices); diff != "" {
s.T().Errorf("Unexpected results. (-want +got):\n%s", diff)
}
if diff := cmp.Diff(p4out, nodes[2], ignoreID, ignoreEmptySlices); diff != "" {
s.T().Errorf("Unexpected results. (-want +got):\n%s", diff)
}
})
nodes, err := be.Nodes(s.Ctx, []string{v, p.ID, p.Namespaces[0].Names[0].Versions[0].ID})
s.Require().NoError(err)
if diff := cmp.Diff(a1out, nodes[0], ignoreID, ignoreEmptySlices); diff != "" {
s.T().Errorf("Unexpected results. (-want +got):\n%s", diff)
}
if diff := cmp.Diff(p4outNamespace, nodes[1], ignoreID, ignoreEmptySlices); diff != "" {
s.T().Errorf("Unexpected results. (-want +got):\n%s", diff)
}
if diff := cmp.Diff(p4out, nodes[2], ignoreID, ignoreEmptySlices); diff != "" {
s.T().Errorf("Unexpected results. (-want +got):\n%s", diff)
}
}
4 changes: 2 additions & 2 deletions pkg/assembler/backends/ent/backend/occurrence_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ func (s *Suite) TestOccurrenceHappyPath() {
_, err = be.IngestPackage(s.Ctx, *p1)
s.Require().NoError(err)

_, err = be.IngestArtifact(s.Ctx, a1)
_, err = be.IngestArtifactID(s.Ctx, a1)
s.Require().NoError(err)

occ, err := be.IngestOccurrence(s.Ctx,
Expand Down Expand Up @@ -567,7 +567,7 @@ func (s *Suite) TestOccurrence() {
s.Require().NoError(err, "Could not instantiate testing backend")

for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
s.T().Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down
4 changes: 2 additions & 2 deletions pkg/assembler/backends/ent/backend/sbom_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,7 @@ func (s *Suite) Test_HasSBOM() {
}
}
for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
s.T().Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down Expand Up @@ -766,7 +766,7 @@ func (s *Suite) TestIngestHasSBOMs() {
}
}
for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
t.Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down
7 changes: 3 additions & 4 deletions pkg/assembler/backends/ent/backend/search_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,9 @@ func (s *Suite) Test_FindSoftware() {
}
}

for _, art := range []*model.ArtifactInputSpec{a1} {
if _, err := b.IngestArtifact(s.Ctx, art); err != nil {
s.NoError(err)
}
for _, art := range []*model.ArtifactInputSpec{a1} {
if _, err := b.IngestArtifactID(s.Ctx, art); err != nil {
s.NoError(err)
}

// Find a package
Expand Down
4 changes: 2 additions & 2 deletions pkg/assembler/backends/ent/backend/slsa_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -511,7 +511,7 @@ func (s *Suite) TestHasSLSA() {
t.Fatalf("Could not instantiate testing backend: %v", err)
}
for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
t.Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down Expand Up @@ -747,7 +747,7 @@ func (s *Suite) TestIngestHasSLSAs() {
t.Fatalf("Could not instantiate testing backend: %v", err)
}
for _, a := range test.InArt {
if _, err := b.IngestArtifact(ctx, a); err != nil {
if _, err := b.IngestArtifactID(ctx, a); err != nil {
t.Fatalf("Could not ingest artifact: %v", err)
}
}
Expand Down
12 changes: 11 additions & 1 deletion pkg/assembler/backends/ent/backend/software_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,11 +138,21 @@ func (s *Suite) TestIngestOccurrence_Package() {
_, err = be.IngestPackage(s.Ctx, *p1)
s.NoError(err)

_, err = be.IngestArtifact(s.Ctx, &model.ArtifactInputSpec{
_, err = be.IngestArtifactID(s.Ctx, &model.ArtifactInputSpec{
Algorithm: "sha256", Digest: "6bbb0da1891646e58eb3e6a63af3a6fc3c8eb5a0d44824cba581d2e14a0450cf",
})
s.NoError(err)

// pkg:apk/alpine/apk@2.12.9-r3?arch=x86
oc, err := be.IngestOccurrence(s.Ctx,
model.PackageOrSourceInput{
Package: p1,
},
model.ArtifactInputSpec{
Algorithm: "sha256", Digest: "6bbb0da1891646e58eb3e6a63af3a6fc3c8eb5a0d44824cba581d2e14a0450cf",
})
s.NoError(err)

// pkg:apk/alpine/apk@2.12.9-r3?arch=x86
oc, err := be.IngestOccurrence(s.Ctx,
model.PackageOrSourceInput{
Expand Down
Loading

0 comments on commit cce09ad

Please sign in to comment.