storj/satellite/metainfo/metabase/streamstat_test.go
Egon Elbre 461d2cd233 satellite/metainfo{,/metabase}: add GetStreamPieceCountByNodeID
GetObjectIPs endpoint was loading all the segment information rather
than only what it needed.

Change-Id: I3f684cb7020b1771d78b5d43c6862d03ada464c0
2021-03-08 16:43:17 +02:00

154 lines
3.6 KiB
Go

// Copyright (C) 2021 Storj Labs, Inc.
// See LICENSE for copying information.
package metabase_test
import (
"testing"
"storj.io/common/storj"
"storj.io/common/testcontext"
"storj.io/common/testrand"
"storj.io/storj/satellite/metainfo/metabase"
)
func TestGetStreamPieceCountByNodeID(t *testing.T) {
All(t, func(ctx *testcontext.Context, t *testing.T, db *metabase.DB) {
obj := randObjectStream()
t.Run("StreamID missing", func(t *testing.T) {
defer DeleteAll{}.Check(ctx, t, db)
GetStreamPieceCountByNodeID{
Opts: metabase.GetStreamPieceCountByNodeID{},
ErrClass: &metabase.ErrInvalidRequest,
ErrText: "StreamID missing",
}.Check(ctx, t, db)
Verify{}.Check(ctx, t, db)
})
t.Run("no segments", func(t *testing.T) {
defer DeleteAll{}.Check(ctx, t, db)
GetStreamPieceCountByNodeID{
Opts: metabase.GetStreamPieceCountByNodeID{
StreamID: obj.StreamID,
},
Result: map[storj.NodeID]int64{},
}.Check(ctx, t, db)
Verify{}.Check(ctx, t, db)
})
t.Run("inline segments", func(t *testing.T) {
defer DeleteAll{}.Check(ctx, t, db)
BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
ObjectStream: obj,
Encryption: defaultTestEncryption,
},
Version: 1,
}.Check(ctx, t, db)
encryptedKey := testrand.Bytes(32)
encryptedKeyNonce := testrand.Bytes(32)
CommitInlineSegment{
Opts: metabase.CommitInlineSegment{
ObjectStream: obj,
Position: metabase.SegmentPosition{Part: 0, Index: 0},
InlineData: []byte{1, 2, 3},
EncryptedKey: encryptedKey,
EncryptedKeyNonce: encryptedKeyNonce,
PlainSize: 512,
PlainOffset: 0,
},
}.Check(ctx, t, db)
GetStreamPieceCountByNodeID{
Opts: metabase.GetStreamPieceCountByNodeID{
StreamID: obj.StreamID,
},
Result: map[storj.NodeID]int64{},
}.Check(ctx, t, db)
})
t.Run("remote segments", func(t *testing.T) {
defer DeleteAll{}.Check(ctx, t, db)
BeginObjectExactVersion{
Opts: metabase.BeginObjectExactVersion{
ObjectStream: obj,
Encryption: defaultTestEncryption,
},
Version: 1,
}.Check(ctx, t, db)
encryptedKey := testrand.Bytes(32)
encryptedKeyNonce := testrand.Bytes(32)
n01 := testrand.NodeID()
n02 := testrand.NodeID()
n03 := testrand.NodeID()
CommitSegment{
Opts: metabase.CommitSegment{
ObjectStream: obj,
Position: metabase.SegmentPosition{Part: 0, Index: 0},
RootPieceID: testrand.PieceID(),
Pieces: metabase.Pieces{
{Number: 1, StorageNode: n01},
{Number: 2, StorageNode: n02},
},
EncryptedKey: encryptedKey,
EncryptedKeyNonce: encryptedKeyNonce,
EncryptedSize: 1024,
PlainSize: 512,
PlainOffset: 0,
Redundancy: defaultTestRedundancy,
},
}.Check(ctx, t, db)
CommitSegment{
Opts: metabase.CommitSegment{
ObjectStream: obj,
Position: metabase.SegmentPosition{Part: 1, Index: 56},
RootPieceID: testrand.PieceID(),
Pieces: metabase.Pieces{
{Number: 1, StorageNode: n02},
{Number: 2, StorageNode: n03},
{Number: 3, StorageNode: n03},
},
EncryptedKey: encryptedKey,
EncryptedKeyNonce: encryptedKeyNonce,
EncryptedSize: 1024,
PlainSize: 512,
PlainOffset: 0,
Redundancy: defaultTestRedundancy,
},
}.Check(ctx, t, db)
GetStreamPieceCountByNodeID{
Opts: metabase.GetStreamPieceCountByNodeID{
StreamID: obj.StreamID,
},
Result: map[storj.NodeID]int64{
n01: 1,
n02: 2,
n03: 2,
},
}.Check(ctx, t, db)
})
})
}