2023-03-28 08:17:15 +00:00
|
|
|
package meta_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/testutil"
|
|
|
|
cidtest "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/container/id/test"
|
2023-07-06 12:36:41 +00:00
|
|
|
objectSDK "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object"
|
2023-03-28 08:17:15 +00:00
|
|
|
oid "git.frostfs.info/TrueCloudLab/frostfs-sdk-go/object/id"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestDB_SelectExpired(t *testing.T) {
|
|
|
|
db := newDB(t)
|
2024-10-21 13:27:28 +00:00
|
|
|
defer func() { require.NoError(t, db.Close(context.Background())) }()
|
2023-03-28 08:17:15 +00:00
|
|
|
|
|
|
|
containerID1 := cidtest.ID()
|
|
|
|
|
|
|
|
expiredObj11 := testutil.GenerateObject()
|
|
|
|
expiredObj11.SetContainerID(containerID1)
|
|
|
|
setExpiration(expiredObj11, 10)
|
|
|
|
err := putBig(db, expiredObj11)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
expiredObj12 := testutil.GenerateObject()
|
|
|
|
expiredObj12.SetContainerID(containerID1)
|
|
|
|
setExpiration(expiredObj12, 12)
|
|
|
|
err = putBig(db, expiredObj12)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
notExpiredObj11 := testutil.GenerateObject()
|
|
|
|
notExpiredObj11.SetContainerID(containerID1)
|
|
|
|
setExpiration(notExpiredObj11, 20)
|
|
|
|
err = putBig(db, notExpiredObj11)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
regularObj11 := testutil.GenerateObject()
|
|
|
|
regularObj11.SetContainerID(containerID1)
|
|
|
|
err = putBig(db, regularObj11)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
containerID2 := cidtest.ID()
|
|
|
|
|
|
|
|
expiredObj21 := testutil.GenerateObject()
|
|
|
|
expiredObj21.SetContainerID(containerID2)
|
|
|
|
setExpiration(expiredObj21, 10)
|
|
|
|
err = putBig(db, expiredObj21)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
expiredObj22 := testutil.GenerateObject()
|
|
|
|
expiredObj22.SetContainerID(containerID2)
|
|
|
|
setExpiration(expiredObj22, 12)
|
|
|
|
err = putBig(db, expiredObj22)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
notExpiredObj21 := testutil.GenerateObject()
|
|
|
|
notExpiredObj21.SetContainerID(containerID2)
|
|
|
|
setExpiration(notExpiredObj21, 20)
|
|
|
|
err = putBig(db, notExpiredObj21)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
regularObj21 := testutil.GenerateObject()
|
|
|
|
regularObj21.SetContainerID(containerID2)
|
|
|
|
err = putBig(db, regularObj21)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
expired, err := db.FilterExpired(context.Background(), 15,
|
|
|
|
[]oid.Address{
|
|
|
|
getAddressSafe(t, expiredObj11), getAddressSafe(t, expiredObj12), getAddressSafe(t, notExpiredObj11), getAddressSafe(t, regularObj11),
|
|
|
|
getAddressSafe(t, expiredObj21), getAddressSafe(t, expiredObj22), getAddressSafe(t, notExpiredObj21), getAddressSafe(t, regularObj21),
|
|
|
|
})
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, 4, len(expired), "invalid expired count")
|
|
|
|
require.Contains(t, expired, getAddressSafe(t, expiredObj11))
|
|
|
|
require.Contains(t, expired, getAddressSafe(t, expiredObj12))
|
|
|
|
require.Contains(t, expired, getAddressSafe(t, expiredObj21))
|
|
|
|
require.Contains(t, expired, getAddressSafe(t, expiredObj22))
|
|
|
|
}
|
|
|
|
|
2023-07-06 12:36:41 +00:00
|
|
|
func getAddressSafe(t *testing.T, o *objectSDK.Object) oid.Address {
|
2023-03-28 08:17:15 +00:00
|
|
|
cid, set := o.ContainerID()
|
|
|
|
if !set {
|
|
|
|
t.Fatalf("container id required")
|
|
|
|
}
|
|
|
|
id, set := o.ID()
|
|
|
|
if !set {
|
|
|
|
t.Fatalf("object id required")
|
|
|
|
}
|
|
|
|
var addr oid.Address
|
|
|
|
addr.SetContainer(cid)
|
|
|
|
addr.SetObject(id)
|
|
|
|
return addr
|
|
|
|
}
|