[#92] nns: Mention domain in panic messages
DCO action / DCO (pull_request) Successful in 1m32s Details
Tests / Tests (1.21) (pull_request) Successful in 1m55s Details
Tests / Tests (1.22) (pull_request) Successful in 2m1s Details

Signed-off-by: Ekaterina Lebedeva <ekaterina.lebedeva@yadro.com>
Ekaterina Lebedeva 2024-06-18 16:50:09 +03:00
parent ba4ef7bd22
commit 52bf87411c
2 changed files with 57 additions and 6 deletions

View File

@ -221,7 +221,7 @@ func GetPrice() int {
func IsAvailable(name string) bool {
fragments := splitAndCheck(name)
if fragments == nil {
panic("invalid domain name format")
panic(getDomainNamePanicMessage(name))
}
ctx := storage.GetReadOnlyContext()
l := len(fragments)
@ -268,7 +268,7 @@ func parentExpired(ctx storage.Context, fragments []string) string {
func Register(name string, owner interop.Hash160, email string, refresh, retry, expire, ttl int) bool {
fragments := splitAndCheck(name)
if fragments == nil {
panic("invalid domain name format")
panic(getDomainNamePanicMessage(name))
}
l := len(fragments)
@ -340,7 +340,7 @@ func Register(name string, owner interop.Hash160, email string, refresh, retry,
// Renew increases domain expiration date.
func Renew(name string) int64 {
if len(name) > maxDomainNameLength {
panic("invalid domain name format")
panic(getDomainNamePanicMessage(name))
}
runtime.BurnGas(GetPrice())
ctx := storage.GetContext()
@ -354,7 +354,7 @@ func Renew(name string) int64 {
// UpdateSOA updates soa record.
func UpdateSOA(name, email string, refresh, retry, expire, ttl int) {
if len(name) > maxDomainNameLength {
panic("invalid domain name format")
panic(getDomainNamePanicMessage(name))
}
ctx := storage.GetContext()
ns := getNameState(ctx, []byte(name))
@ -365,7 +365,7 @@ func UpdateSOA(name, email string, refresh, retry, expire, ttl int) {
// SetAdmin updates domain admin.
func SetAdmin(name string, admin interop.Hash160) {
if len(name) > maxDomainNameLength {
panic("invalid domain name format")
panic(getDomainNamePanicMessage(name))
}
if admin != nil && !runtime.CheckWitness(admin) {
panic("not witnessed by admin")
@ -850,7 +850,7 @@ func checkIPv6(data string) bool {
func tokenIDFromName(name string) string {
fragments := splitAndCheck(name)
if fragments == nil {
panic("invalid domain name format")
panic(getDomainNamePanicMessage(name))
}
ctx := storage.GetReadOnlyContext()
@ -910,3 +910,25 @@ func getAllRecords(ctx storage.Context, name string) iterator.Iterator {
recordsKey := getRecordsKey(tokenID, name)
return storage.Find(ctx, recordsKey, storage.ValuesOnly|storage.DeserializeValues)
}
// getDomainNamePanicMessage returns panic message for invalid domain name containing
// mentioned domain name
func getDomainNamePanicMessage(name string) string {
msg := "invalid domain name format: '" + name + "'"
l := len(name)
if l > maxDomainNameLength {
msg += ": domain name too long: got = " + std.Itoa(len(name), 10) + ", max = " + std.Itoa(maxDomainNameLength, 10)
}
if l < minDomainNameLength {
msg += ": domain name too short: got = " + std.Itoa(len(name), 10) + ", min = " + std.Itoa(minDomainNameLength, 10)
}
fragments := std.StringSplit(name, ".")
l = len(fragments)
for i := 0; i < l; i++ {
if !checkFragment(fragments[i], i == l-1) {
msg += ": invalid fragment '" + fragments[i] + "'"
break
}
}
return msg
}

View File

@ -54,6 +54,9 @@ func TestNNSRegisterTLD(t *testing.T) {
c.InvokeFail(t, "invalid domain name format", "register",
"0com", c.CommitteeHash,
"email@frostfs.info", refresh, retry, expire, ttl)
c.InvokeFail(t, "invalid fragment '0com'", "register",
"0com", c.CommitteeHash,
"email@frostfs.info", refresh, retry, expire, ttl)
acc := c.NewAccount(t)
cAcc := c.WithSigners(acc)
@ -69,6 +72,12 @@ func TestNNSRegisterTLD(t *testing.T) {
c.InvokeFail(t, "invalid domain name format", "register",
"x", c.CommitteeHash,
"email@frostfs.info", refresh, retry, expire, ttl)
c.InvokeFail(t, "domain name too short", "register",
"x", c.CommitteeHash,
"email@frostfs.info", refresh, retry, expire, ttl)
c.InvokeFail(t, "domain name too long", "register",
getTooLongDomainName(255), c.CommitteeHash,
"email@frostfs.info", refresh, retry, expire, ttl)
})
c.Invoke(t, true, "register",
@ -101,9 +110,17 @@ func TestNNSRegister(t *testing.T) {
c3.InvokeFail(t, "invalid domain name format", "register",
"-testdomain.com", acc.ScriptHash(),
"myemail@frostfs.info", refresh, retry, expire, ttl)
c3.InvokeFail(t, "invalid fragment '-testdomain'", "register",
"-testdomain.com", acc.ScriptHash(),
"myemail@frostfs.info", refresh, retry, expire, ttl)
c3.InvokeFail(t, "invalid domain name format", "register",
"testdomain-.com", acc.ScriptHash(),
"myemail@frostfs.info", refresh, retry, expire, ttl)
c3.InvokeFail(t, "invalid fragment 'testdomain-'", "register",
"testdomain-.com", acc.ScriptHash(),
"myemail@frostfs.info", refresh, retry, expire, ttl)
c3.Invoke(t, true, "register",
"test-domain.com", acc.ScriptHash(),
"myemail@frostfs.info", refresh, retry, expire, ttl)
@ -358,6 +375,8 @@ func TestNNSIsAvailable(t *testing.T) {
"myemail@frostfs.info", refresh, retry, expire, ttl)
c.Invoke(t, false, "isAvailable", "dom.domain.com")
c.Invoke(t, true, "isAvailable", "dom.dom.domain.com")
c.InvokeFail(t, "domain name too long", "isAvailable", getTooLongDomainName(255))
}
func TestNNSRenew(t *testing.T) {
@ -382,6 +401,8 @@ func TestNNSRenew(t *testing.T) {
{Key: stackitem.Make("expiration"), Value: stackitem.Make(ts)},
})
cAcc.Invoke(t, expected, "properties", "testdomain.com")
c.InvokeFail(t, "domain name too long", "renew", getTooLongDomainName(255))
}
func TestNNSResolve(t *testing.T) {
@ -431,3 +452,11 @@ func TestNNSAndProxy(t *testing.T) {
checkBalance(t, c.CommitteeHash, 1)
})
}
func getTooLongDomainName(max int) (res string) {
for len(res) < max {
res += "dom."
}
res += "com"
return res
}