github.com/igggame/nebulas-go@v2.1.0+incompatible/nf/nvm/storage_test.go (about) 1 // Copyright (C) 2018 go-nebulas authors 2 // 3 // This file is part of the go-nebulas library. 4 // 5 // the go-nebulas library is free software: you can redistribute it and/or modify 6 // it under the terms of the GNU General Public License as published by 7 // the Free Software Foundation, either version 3 of the License, or 8 // (at your option) any later version. 9 // 10 // the go-nebulas library is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 // GNU General Public License for more details. 14 // 15 // You should have received a copy of the GNU General Public License 16 // along with the go-nebulas library. If not, see <http://www.gnu.org/licenses/>. 17 // 18 19 package nvm 20 21 import ( 22 "testing" 23 24 "github.com/stretchr/testify/assert" 25 ) 26 27 func TestStorageKeyPattern(t *testing.T) { 28 tests := []struct { 29 key string 30 want error 31 domainKey string 32 itemKey string 33 }{ 34 {"", ErrInvalidStorageKey, "", ""}, 35 {"string", ErrInvalidStorageKey, "", ""}, 36 {"_map[key]", ErrInvalidStorageKey, "", ""}, 37 {"@map[key", ErrInvalidStorageKey, "", ""}, 38 {"@mapkey]", ErrInvalidStorageKey, "", ""}, 39 {"@123[key]", ErrInvalidStorageKey, "", ""}, 40 {"@|abc[key]", ErrInvalidStorageKey, "", ""}, 41 {"@abc123-[key]", ErrInvalidStorageKey, "", ""}, 42 {"@abc$[key]", ErrInvalidStorageKey, "", ""}, 43 {"@a[key]", ErrInvalidStorageKey, "", ""}, 44 {"@$[key]", ErrInvalidStorageKey, "", ""}, 45 {"@_[key]", ErrInvalidStorageKey, "", ""}, 46 {"@$abc[]", nil, "$abc", ""}, 47 {"@$abc[key]", nil, "$abc", "key"}, 48 {"@abc[key]", nil, "abc", "key"}, 49 {"@abc12_12[key]", nil, "abc12_12", "key"}, 50 {"@abc[[key]]", nil, "abc", "[key]"}, 51 {"@abc[zzz[key]yyy?]", nil, "abc", "zzz[key]yyy?"}, 52 {"@abc[[key]yyy]", nil, "abc", "[key]yyy"}, 53 {"@abc[zzz[key]]", nil, "abc", "zzz[key]"}, 54 } 55 56 for _, tt := range tests { 57 t.Run(tt.key, func(t *testing.T) { 58 var ( 59 domainKey string 60 itemKey string 61 err error 62 ) 63 64 matches := StorageKeyPattern.FindAllStringSubmatch(tt.key, -1) 65 if matches == nil { 66 err = ErrInvalidStorageKey 67 } else { 68 domainKey, itemKey = matches[0][1], matches[0][2] 69 } 70 71 assert.Equal(t, tt.want, err) 72 assert.Equal(t, tt.domainKey, domainKey) 73 assert.Equal(t, tt.itemKey, itemKey) 74 }) 75 } 76 }