forked from TrueCloudLab/frostfs-contract
[#165] nns: disallow duplicating records
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
370720c83b
commit
99c81fe26a
2 changed files with 8 additions and 1 deletions
|
@ -584,9 +584,14 @@ func addRecord(ctx storage.Context, tokenId []byte, name string, typ RecordType,
|
||||||
recordsKey := getRecordsKeyByType(tokenId, name, typ)
|
recordsKey := getRecordsKeyByType(tokenId, name, typ)
|
||||||
|
|
||||||
var id byte
|
var id byte
|
||||||
records := storage.Find(ctx, recordsKey, storage.KeysOnly)
|
records := storage.Find(ctx, recordsKey, storage.ValuesOnly|storage.DeserializeValues)
|
||||||
for iterator.Next(records) {
|
for iterator.Next(records) {
|
||||||
id++
|
id++
|
||||||
|
|
||||||
|
r := iterator.Value(records).(RecordState)
|
||||||
|
if r.Name == name && r.Type == typ && r.Data == data {
|
||||||
|
panic("record already exists")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if typ == CNAME && id != 0 {
|
if typ == CNAME && id != 0 {
|
||||||
|
|
|
@ -95,6 +95,8 @@ func TestNNSRegister(t *testing.T) {
|
||||||
cAcc := c.WithSigners(acc)
|
cAcc := c.WithSigners(acc)
|
||||||
cAcc.Invoke(t, stackitem.Null{}, "addRecord",
|
cAcc.Invoke(t, stackitem.Null{}, "addRecord",
|
||||||
"testdomain.com", int64(nns.TXT), "first TXT record")
|
"testdomain.com", int64(nns.TXT), "first TXT record")
|
||||||
|
cAcc.InvokeFail(t, "record already exists", "addRecord",
|
||||||
|
"testdomain.com", int64(nns.TXT), "first TXT record")
|
||||||
cAcc.Invoke(t, stackitem.Null{}, "addRecord",
|
cAcc.Invoke(t, stackitem.Null{}, "addRecord",
|
||||||
"testdomain.com", int64(nns.TXT), "second TXT record")
|
"testdomain.com", int64(nns.TXT), "second TXT record")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue