forked from TrueCloudLab/frostfs-s3-gw
parent
9fb3fb1274
commit
1a456eaa8b
12 changed files with 4 additions and 647 deletions
|
@ -3,8 +3,6 @@ package layer
|
|||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/nspcc-dev/neo-go/pkg/crypto/keys"
|
||||
|
@ -115,17 +113,6 @@ func (tc *testContext) checkListObjects(ids ...oid.ID) {
|
|||
}
|
||||
}
|
||||
|
||||
func (tc *testContext) getSystemObject(objectName string) *object.Object {
|
||||
for _, obj := range tc.testNeoFS.Objects() {
|
||||
for _, attr := range obj.Attributes() {
|
||||
if attr.Key() == objectSystemAttributeName && attr.Value() == objectName {
|
||||
return obj
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (tc *testContext) getObjectByID(objID oid.ID) *object.Object {
|
||||
for _, obj := range tc.testNeoFS.Objects() {
|
||||
id, _ := obj.ID()
|
||||
|
@ -302,80 +289,6 @@ func TestVersioningDeleteSpecificObjectVersion(t *testing.T) {
|
|||
require.Equal(t, objV3Info.Version(), resInfo.Version())
|
||||
}
|
||||
|
||||
func TestGetLastVersion(t *testing.T) {
|
||||
obj1 := getTestObjectInfo(1, "", "", "")
|
||||
obj1V2 := getTestObjectInfo(2, "", "", "")
|
||||
obj2 := getTestObjectInfoEpoch(1, 2, obj1.Version(), "", "")
|
||||
obj3 := getTestObjectInfoEpoch(1, 3, joinVers(obj1, obj2), "", "*")
|
||||
obj4 := getTestObjectInfoEpoch(1, 4, joinVers(obj1, obj2), obj2.Version(), obj2.Version())
|
||||
obj5 := getTestObjectInfoEpoch(1, 5, obj1.Version(), obj1.Version(), obj1.Version())
|
||||
obj6 := getTestObjectInfoEpoch(1, 6, joinVers(obj1, obj2, obj3), obj3.Version(), obj3.Version())
|
||||
|
||||
for _, tc := range []struct {
|
||||
versions *objectVersions
|
||||
expected *data.ObjectInfo
|
||||
}{
|
||||
{
|
||||
versions: &objectVersions{},
|
||||
expected: nil,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj2, obj1},
|
||||
addList: []string{obj1.Version(), obj2.Version()},
|
||||
},
|
||||
expected: obj2,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj2, obj1, obj3},
|
||||
addList: []string{obj1.Version(), obj2.Version(), obj3.Version()},
|
||||
},
|
||||
expected: nil,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj2, obj1, obj4},
|
||||
addList: []string{obj1.Version(), obj2.Version(), obj4.Version()},
|
||||
delList: []string{obj2.Version()},
|
||||
},
|
||||
expected: obj1,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1, obj5},
|
||||
addList: []string{obj1.Version(), obj5.Version()},
|
||||
delList: []string{obj1.Version()},
|
||||
},
|
||||
expected: nil,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj5},
|
||||
},
|
||||
expected: nil,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1, obj2, obj3, obj6},
|
||||
addList: []string{obj1.Version(), obj2.Version(), obj3.Version(), obj6.Version()},
|
||||
delList: []string{obj3.Version()},
|
||||
},
|
||||
expected: obj2,
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1, obj1V2},
|
||||
addList: []string{obj1.Version(), obj1V2.Version()},
|
||||
},
|
||||
expected: obj1V2,
|
||||
},
|
||||
} {
|
||||
actualObjInfo := tc.versions.getLast()
|
||||
require.Equal(t, tc.expected, actualObjInfo)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNoVersioningDeleteObject(t *testing.T) {
|
||||
tc := prepareContext(t)
|
||||
|
||||
|
@ -389,152 +302,3 @@ func TestNoVersioningDeleteObject(t *testing.T) {
|
|||
tc.getObject(tc.obj, "", true)
|
||||
tc.checkListObjects()
|
||||
}
|
||||
|
||||
func TestAppendVersions(t *testing.T) {
|
||||
obj1 := getTestObjectInfo(1, "", "", "")
|
||||
obj2 := getTestObjectInfo(2, obj1.Version(), "", "")
|
||||
obj3 := getTestObjectInfo(3, joinVers(obj1, obj2), "", "*")
|
||||
obj4 := getTestObjectInfo(4, joinVers(obj1, obj2), obj2.Version(), obj2.Version())
|
||||
obj5 := getTestObjectInfo(5, joinVers(obj1, obj2), "", "")
|
||||
obj6 := getTestObjectInfo(6, joinVers(obj1, obj3), "", "")
|
||||
|
||||
for _, tc := range []struct {
|
||||
versions *objectVersions
|
||||
objectToAdd *data.ObjectInfo
|
||||
expectedVersions *objectVersions
|
||||
}{
|
||||
{
|
||||
versions: &objectVersions{},
|
||||
objectToAdd: obj1,
|
||||
expectedVersions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1},
|
||||
addList: []string{obj1.Version()},
|
||||
isSorted: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj1}},
|
||||
objectToAdd: obj2,
|
||||
expectedVersions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1, obj2},
|
||||
addList: []string{obj1.Version(), obj2.Version()},
|
||||
isSorted: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj1, obj2}},
|
||||
objectToAdd: obj3,
|
||||
expectedVersions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1, obj2, obj3},
|
||||
addList: []string{obj1.Version(), obj2.Version(), obj3.Version()},
|
||||
isSorted: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj1, obj2}},
|
||||
objectToAdd: obj4,
|
||||
expectedVersions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj1, obj2, obj4},
|
||||
addList: []string{obj1.Version(), obj2.Version(), obj4.Version()},
|
||||
delList: []string{obj2.Version()},
|
||||
isSorted: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj5}},
|
||||
objectToAdd: obj6,
|
||||
expectedVersions: &objectVersions{
|
||||
objects: []*data.ObjectInfo{obj5, obj6},
|
||||
addList: []string{obj1.Version(), obj2.Version(), obj3.Version(), obj5.Version(), obj6.Version()},
|
||||
isSorted: true,
|
||||
},
|
||||
},
|
||||
} {
|
||||
tc.versions.appendVersion(tc.objectToAdd)
|
||||
tc.versions.sort()
|
||||
require.Equal(t, tc.expectedVersions, tc.versions)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSortAddHeaders(t *testing.T) {
|
||||
obj1 := getTestObjectInfo(1, "", "", "")
|
||||
obj2 := getTestObjectInfo(2, "", "", "")
|
||||
obj3 := getTestObjectInfo(3, "", "", "")
|
||||
obj4 := getTestObjectInfo(4, "", "", "")
|
||||
obj5 := getTestObjectInfo(5, "", "", "")
|
||||
|
||||
obj6 := getTestObjectInfoEpoch(1, 6, joinVers(obj1, obj2, obj3), "", "")
|
||||
obj7 := getTestObjectInfoEpoch(1, 7, joinVers(obj1, obj4), "", "")
|
||||
obj8 := getTestObjectInfoEpoch(1, 8, joinVers(obj5), "", "")
|
||||
obj9 := getTestObjectInfoEpoch(1, 8, joinVers(obj1, obj5), "", "")
|
||||
obj10 := getTestObjectInfo(11, "", "", "")
|
||||
obj11 := getTestObjectInfo(10, joinVers(obj10), "", "")
|
||||
obj12 := getTestObjectInfo(9, joinVers(obj10, obj11), "", "")
|
||||
|
||||
for _, tc := range []struct {
|
||||
versions *objectVersions
|
||||
expectedAddHeaders string
|
||||
}{
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj6, obj7, obj8}},
|
||||
expectedAddHeaders: joinVers(obj1, obj2, obj3, obj4, obj5, obj6, obj7, obj8),
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj7, obj9}},
|
||||
expectedAddHeaders: joinVers(obj1, obj4, obj5, obj7, obj9),
|
||||
},
|
||||
{
|
||||
versions: &objectVersions{objects: []*data.ObjectInfo{obj11, obj10, obj12}},
|
||||
expectedAddHeaders: joinVers(obj10, obj11, obj12),
|
||||
},
|
||||
} {
|
||||
require.Equal(t, tc.expectedAddHeaders, tc.versions.getAddHeader())
|
||||
}
|
||||
}
|
||||
|
||||
func joinVers(objs ...*data.ObjectInfo) string {
|
||||
if len(objs) == 0 {
|
||||
return ""
|
||||
}
|
||||
|
||||
var versions []string
|
||||
for _, obj := range objs {
|
||||
versions = append(versions, obj.Version())
|
||||
}
|
||||
|
||||
return strings.Join(versions, ",")
|
||||
}
|
||||
|
||||
func getOID(id byte) oid.ID {
|
||||
b := [32]byte{}
|
||||
b[31] = id
|
||||
|
||||
var idObj oid.ID
|
||||
idObj.SetSHA256(b)
|
||||
return idObj
|
||||
}
|
||||
|
||||
func getTestObjectInfo(id byte, addAttr, delAttr, delMarkAttr string) *data.ObjectInfo {
|
||||
headers := make(map[string]string)
|
||||
if addAttr != "" {
|
||||
headers[versionsAddAttr] = addAttr
|
||||
}
|
||||
if delAttr != "" {
|
||||
headers[versionsDelAttr] = delAttr
|
||||
}
|
||||
if delMarkAttr != "" {
|
||||
headers[VersionsDeleteMarkAttr] = delMarkAttr
|
||||
}
|
||||
|
||||
return &data.ObjectInfo{
|
||||
ID: getOID(id),
|
||||
Name: strconv.Itoa(int(id)),
|
||||
Headers: headers,
|
||||
}
|
||||
}
|
||||
|
||||
func getTestObjectInfoEpoch(epoch uint64, id byte, addAttr, delAttr, delMarkAttr string) *data.ObjectInfo {
|
||||
obj := getTestObjectInfo(id, addAttr, delAttr, delMarkAttr)
|
||||
obj.CreationEpoch = epoch
|
||||
return obj
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue