[#150] frostfsid: Fix 'update' clears group counter
Signed-off-by: Alexander Chuprov <a.chuprov@yadro.com>
This commit is contained in:
parent
201db45bd7
commit
0653f0dbc6
3 changed files with 70 additions and 0 deletions
|
@ -44,3 +44,8 @@ func AppendVersion(data any) []interface{} {
|
||||||
}
|
}
|
||||||
return append(data.([]any), Version)
|
return append(data.([]any), Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetVersion returns version as int by major, minor, patch.
|
||||||
|
func GetVersion(major, minor, patch int) int {
|
||||||
|
return major*1_000_000 + minor*1_000 + patch
|
||||||
|
}
|
||||||
|
|
|
@ -134,6 +134,22 @@ func _deploy(data any, isUpdate bool) {
|
||||||
storage.Put(ctx, address, true)
|
storage.Put(ctx, address, true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if args.version < common.GetVersion(0, 21, 2) {
|
||||||
|
maxGroupID := 0
|
||||||
|
it := storage.Find(ctx, groupKeysPrefix, storage.ValuesOnly)
|
||||||
|
for iterator.Next(it) {
|
||||||
|
groupRaw := iterator.Value(it)
|
||||||
|
group := std.Deserialize(groupRaw.([]byte)).(Group)
|
||||||
|
if group.ID > maxGroupID {
|
||||||
|
maxGroupID = group.ID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
storage.Put(ctx, groupCounterKey, maxGroupID)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
storage.Put(ctx, groupCounterKey, 0)
|
storage.Put(ctx, groupCounterKey, 0)
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
package tests
|
package tests
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"path"
|
"path"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
@ -656,6 +658,53 @@ func TestAdditionalKeyFromPrimarySubject(t *testing.T) {
|
||||||
invoker.Invoke(t, stackitem.Null{}, createSubjectMethod, defaultNamespace, subjFPrimaryKey.PublicKey().Bytes())
|
invoker.Invoke(t, stackitem.Null{}, createSubjectMethod, defaultNamespace, subjFPrimaryKey.PublicKey().Bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFrostFSIS_GroupsAfterUpdate(t *testing.T) {
|
||||||
|
countNamesepce := 2
|
||||||
|
f := newFrostFSIDInvoker(t)
|
||||||
|
invoker := f.OwnerInvoker()
|
||||||
|
|
||||||
|
groupid := int64(1)
|
||||||
|
|
||||||
|
for i := range countNamesepce {
|
||||||
|
namespace := fmt.Sprintf("nm_%d", i)
|
||||||
|
invoker.Invoke(t, stackitem.Null{}, createNamespaceMethod, namespace)
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range 5 {
|
||||||
|
namespace := fmt.Sprintf("nm_%d", i%2)
|
||||||
|
groupName := fmt.Sprintf("group_%d", groupid)
|
||||||
|
|
||||||
|
invoker.Invoke(t, stackitem.Make(groupid), createGroupMethod, namespace, groupName)
|
||||||
|
s, err := invoker.TestInvoke(t, getGroupIDByNameMethod, namespace, groupName)
|
||||||
|
checkGroupIDResult(t, s, err, groupid)
|
||||||
|
groupid++
|
||||||
|
}
|
||||||
|
|
||||||
|
args := make([]any, 2)
|
||||||
|
args[0] = f.owner.ScriptHash()
|
||||||
|
args[1] = 21 * 1_000
|
||||||
|
|
||||||
|
c := neotest.CompileFile(t, f.e.CommitteeHash, frostfsidPath, path.Join(frostfsidPath, "config.yml"))
|
||||||
|
|
||||||
|
nef, err := c.NEF.Bytes()
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
manifest, err := json.Marshal(c.Manifest)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
f.CommitteeInvoker().Invoke(t, stackitem.Null{}, "update", nef, manifest, args)
|
||||||
|
|
||||||
|
for i := range 5 {
|
||||||
|
namespace := fmt.Sprintf("nm_%d", i%2)
|
||||||
|
groupName := fmt.Sprintf("group_%d", groupid)
|
||||||
|
|
||||||
|
invoker.Invoke(t, stackitem.Make(groupid), createGroupMethod, namespace, groupName)
|
||||||
|
s, err := invoker.TestInvoke(t, getGroupIDByNameMethod, namespace, groupName)
|
||||||
|
checkGroupIDResult(t, s, err, groupid)
|
||||||
|
groupid++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func checkPublicKeyResult(t *testing.T, s *vm.Stack, err error, key *keys.PrivateKey) {
|
func checkPublicKeyResult(t *testing.T, s *vm.Stack, err error, key *keys.PrivateKey) {
|
||||||
if key == nil {
|
if key == nil {
|
||||||
require.ErrorContains(t, err, "not found")
|
require.ErrorContains(t, err, "not found")
|
||||||
|
|
Loading…
Add table
Reference in a new issue