Skip to content

Commit

Permalink
satellite/metabase: remove rarely used test util methods
Browse files Browse the repository at this point in the history
Those methods are easy to replace with commonly used methods.

Change-Id: I583684eb792ba8cc9f070f2b8f7c0aaaaea929e1
  • Loading branch information
mniewrzal committed Apr 2, 2024
1 parent 858a576 commit 4a5964a
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 93 deletions.
56 changes: 0 additions & 56 deletions satellite/metabase/get.go
Expand Up @@ -331,62 +331,6 @@ func (db *DB) BucketEmpty(ctx context.Context, opts BucketEmpty) (empty bool, er
return !value, nil
}

// TestingAllCommittedObjects gets all objects from bucket.
// Use only for testing purposes.
func (db *DB) TestingAllCommittedObjects(ctx context.Context, projectID uuid.UUID, bucketName string) (objects []ObjectEntry, err error) {
defer mon.Task()(&ctx)(&err)

return db.testingAllObjectsByStatus(ctx, projectID, bucketName, false)
}

func (db *DB) testingAllObjectsByStatus(ctx context.Context, projectID uuid.UUID, bucketName string, pending bool) (objects []ObjectEntry, err error) {
defer mon.Task()(&ctx)(&err)

err = db.IterateObjectsAllVersionsWithStatus(ctx,
IterateObjectsWithStatus{
ProjectID: projectID,
BucketName: bucketName,
Recursive: true,
Pending: pending,
IncludeCustomMetadata: true,
IncludeSystemMetadata: true,
}, func(ctx context.Context, it ObjectsIterator) error {
entry := ObjectEntry{}
for it.Next(ctx, &entry) {
objects = append(objects, entry)
}
return nil
},
)
if err != nil {
return nil, Error.Wrap(err)
}

return objects, nil
}

// TestingAllObjectSegments gets all segments for given object.
// Use only for testing purposes.
func (db *DB) TestingAllObjectSegments(ctx context.Context, objectLocation ObjectLocation) (segments []Segment, err error) {
defer mon.Task()(&ctx)(&err)

object, err := db.GetObjectLastCommitted(ctx, GetObjectLastCommitted{
ObjectLocation: objectLocation,
})
if err != nil {
return nil, Error.Wrap(err)
}

response, err := db.ListSegments(ctx, ListSegments{
StreamID: object.StreamID,
})
if err != nil {
return nil, Error.Wrap(err)
}

return response.Segments, nil
}

// TestingAllObjects gets all objects.
// Use only for testing purposes.
func (db *DB) TestingAllObjects(ctx context.Context) (objects []Object, err error) {
Expand Down
60 changes: 25 additions & 35 deletions satellite/metainfo/endpoint_object_test.go
Expand Up @@ -10,6 +10,7 @@ import (
"net"
"sort"
"strconv"
"strings"
"sync"
"testing"
"time"
Expand All @@ -19,6 +20,7 @@ import (
"github.com/zeebo/errs"
"go.uber.org/zap"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"

"storj.io/common/errs2"
"storj.io/common/identity"
Expand Down Expand Up @@ -1254,14 +1256,7 @@ func TestEndpoint_Object_With_StorageNodes(t *testing.T) {
require.Equal(t, params.ExpiresAt.Truncate(time.Millisecond), params.ExpiresAt.Truncate(time.Millisecond))
require.Equal(t, coResponse.Object.ObjectVersion, listResponse.Items[0].ObjectVersion)

object, err := metainfoClient.GetObject(ctx, metaclient.GetObjectParams{
Bucket: []byte(bucket.Name),
EncryptedObjectKey: listResponse.Items[0].EncryptedObjectKey,
})
require.NoError(t, err)

project := planet.Uplinks[0].Projects[0]
allObjects, err := planet.Satellites[0].Metabase.DB.TestingAllCommittedObjects(ctx, project.ID, object.Bucket)
allObjects, err := planet.Satellites[0].Metabase.DB.TestingAllObjects(ctx)
require.NoError(t, err)
require.Len(t, allObjects, 1)
require.Equal(t, listResponse.Items[0].ObjectVersion, allObjects[0].StreamVersionID().Bytes())
Expand Down Expand Up @@ -1432,51 +1427,54 @@ func TestEndpoint_Object_With_StorageNodes(t *testing.T) {
})

t.Run("multipart object download rejection", func(t *testing.T) {
defer ctx.Check(deleteBucket("pip-first"))
defer ctx.Check(deleteBucket("pip-second"))
defer ctx.Check(deleteBucket("pip-third"))
defer ctx.Check(deleteBucket("pip-a"))
defer ctx.Check(deleteBucket("pip-b"))
defer ctx.Check(deleteBucket("pip-c"))

data := testrand.Bytes(20 * memory.KB)
err := planet.Uplinks[0].Upload(ctx, planet.Satellites[0], "pip-first", "non-multipart-object", data)
err := planet.Uplinks[0].Upload(ctx, planet.Satellites[0], "pip-a", "non-multipart-object", data)
require.NoError(t, err)

project, err := planet.Uplinks[0].OpenProject(ctx, planet.Satellites[0])
require.NoError(t, err)
defer ctx.Check(project.Close)

_, err = project.EnsureBucket(ctx, "pip-second")
_, err = project.EnsureBucket(ctx, "pip-b")
require.NoError(t, err)
info, err := project.BeginUpload(ctx, "pip-second", "multipart-object", nil)
info, err := project.BeginUpload(ctx, "pip-b", "multipart-object", nil)
require.NoError(t, err)
upload, err := project.UploadPart(ctx, "pip-second", "multipart-object", info.UploadID, 1)
upload, err := project.UploadPart(ctx, "pip-b", "multipart-object", info.UploadID, 1)
require.NoError(t, err)
_, err = upload.Write(data)
require.NoError(t, err)
require.NoError(t, upload.Commit())
_, err = project.CommitUpload(ctx, "pip-second", "multipart-object", info.UploadID, nil)
_, err = project.CommitUpload(ctx, "pip-b", "multipart-object", info.UploadID, nil)
require.NoError(t, err)

_, err = project.EnsureBucket(ctx, "pip-third")
_, err = project.EnsureBucket(ctx, "pip-c")
require.NoError(t, err)
info, err = project.BeginUpload(ctx, "pip-third", "multipart-object-third", nil)
info, err = project.BeginUpload(ctx, "pip-c", "multipart-object-third", nil)
require.NoError(t, err)
for i := 0; i < 4; i++ {
upload, err := project.UploadPart(ctx, "pip-third", "multipart-object-third", info.UploadID, uint32(i+1))
upload, err := project.UploadPart(ctx, "pip-c", "multipart-object-third", info.UploadID, uint32(i+1))
require.NoError(t, err)
_, err = upload.Write(data)
require.NoError(t, err)
require.NoError(t, upload.Commit())
}
_, err = project.CommitUpload(ctx, "pip-third", "multipart-object-third", info.UploadID, nil)
_, err = project.CommitUpload(ctx, "pip-c", "multipart-object-third", info.UploadID, nil)
require.NoError(t, err)

objects, err := planet.Satellites[0].Metabase.DB.TestingAllCommittedObjects(ctx, planet.Uplinks[0].Projects[0].ID, "pip-first")
objects, err := planet.Satellites[0].Metabase.DB.TestingAllObjects(ctx)
require.NoError(t, err)
require.Len(t, objects, 1)
require.Len(t, objects, 3)
slices.SortFunc(objects, func(a, b metabase.Object) int {
return strings.Compare(a.BucketName, b.BucketName)
})

// verify that standard objects can be downloaded in an old way (index = -1 as last segment)
object, err := metainfoClient.GetObject(ctx, metaclient.GetObjectParams{
Bucket: []byte("pip-first"),
Bucket: []byte(objects[0].BucketName), // pip-a
EncryptedObjectKey: []byte(objects[0].ObjectKey),
})
require.NoError(t, err)
Expand All @@ -1488,14 +1486,10 @@ func TestEndpoint_Object_With_StorageNodes(t *testing.T) {
})
require.NoError(t, err)

objects, err = planet.Satellites[0].Metabase.DB.TestingAllCommittedObjects(ctx, planet.Uplinks[0].Projects[0].ID, "pip-second")
require.NoError(t, err)
require.Len(t, objects, 1)

// verify that multipart objects (single segment) CANNOT be downloaded in an old way (index = -1 as last segment)
object, err = metainfoClient.GetObject(ctx, metaclient.GetObjectParams{
Bucket: []byte("pip-second"),
EncryptedObjectKey: []byte(objects[0].ObjectKey),
Bucket: []byte(objects[1].BucketName), // pip-b
EncryptedObjectKey: []byte(objects[1].ObjectKey),
})
require.NoError(t, err)
_, err = metainfoClient.DownloadSegmentWithRS(ctx, metaclient.DownloadSegmentParams{
Expand All @@ -1507,14 +1501,10 @@ func TestEndpoint_Object_With_StorageNodes(t *testing.T) {
require.Error(t, err)
require.Contains(t, err.Error(), "Used uplink version cannot download multipart objects.")

objects, err = planet.Satellites[0].Metabase.DB.TestingAllCommittedObjects(ctx, planet.Uplinks[0].Projects[0].ID, "pip-third")
require.NoError(t, err)
require.Len(t, objects, 1)

// verify that multipart objects (multiple segments) CANNOT be downloaded in an old way (index = -1 as last segment)
object, err = metainfoClient.GetObject(ctx, metaclient.GetObjectParams{
Bucket: []byte("pip-third"),
EncryptedObjectKey: []byte(objects[0].ObjectKey),
Bucket: []byte(objects[2].BucketName), // pip-c
EncryptedObjectKey: []byte(objects[2].ObjectKey),
})
require.NoError(t, err)
_, err = metainfoClient.DownloadSegmentWithRS(ctx, metaclient.DownloadSegmentParams{
Expand Down
7 changes: 5 additions & 2 deletions satellite/metainfo/expireddeletion/expireddeletion_test.go
Expand Up @@ -15,6 +15,7 @@ import (
"storj.io/common/testrand"
"storj.io/storj/private/testplanet"
"storj.io/storj/satellite"
"storj.io/storj/satellite/metabase"
)

func TestExpiredDeletion(t *testing.T) {
Expand Down Expand Up @@ -107,10 +108,12 @@ func TestExpiresAtForSegmentsAfterCopy(t *testing.T) {
require.Len(t, objects, 4)

for _, v := range objects {
segments, err := satellite.Metabase.DB.TestingAllObjectSegments(ctx, v.Location())
result, err := satellite.Metabase.DB.ListSegments(ctx, metabase.ListSegments{
StreamID: v.StreamID,
})
require.NoError(t, err)

for _, k := range segments {
for _, k := range result.Segments {
require.Equal(t, expiresAt.Unix(), k.ExpiresAt.Unix())
}
}
Expand Down

0 comments on commit 4a5964a

Please sign in to comment.