github.com/unigraph-dev/dgraph@v1.1.1-0.20200923154953-8b52b426f765/x/keys_test.go (about) 1 /* 2 * Copyright 2016-2018 Dgraph Labs, Inc. and Contributors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package x 18 19 import ( 20 "fmt" 21 "math" 22 "sort" 23 "testing" 24 25 "github.com/stretchr/testify/require" 26 ) 27 28 func TestDataKey(t *testing.T) { 29 var uid uint64 30 for uid = 0; uid < 1001; uid++ { 31 // Use the uid to derive the attribute so it has variable length and the test 32 // can verify that multiple sizes of attr work correctly. 33 sattr := fmt.Sprintf("attr:%d", uid) 34 key := DataKey(sattr, uid) 35 pk, err := Parse(key) 36 require.NoError(t, err) 37 38 require.True(t, pk.IsData()) 39 require.Equal(t, sattr, pk.Attr) 40 require.Equal(t, uid, pk.Uid) 41 require.Equal(t, uint64(0), pk.StartUid) 42 } 43 44 keys := make([]string, 0, 1024) 45 for uid = 1024; uid >= 1; uid-- { 46 key := DataKey("testing.key", uid) 47 keys = append(keys, string(key)) 48 } 49 // Test that sorting is as expected. 50 sort.Strings(keys) 51 require.True(t, sort.StringsAreSorted(keys)) 52 for i, key := range keys { 53 exp := DataKey("testing.key", uint64(i+1)) 54 require.Equal(t, string(exp), key) 55 } 56 } 57 58 func TestParseDataKeysWithStartUid(t *testing.T) { 59 var uid uint64 60 startUid := uint64(math.MaxUint64) 61 for uid = 0; uid < 1001; uid++ { 62 sattr := fmt.Sprintf("attr:%d", uid) 63 key := DataKey(sattr, uid) 64 key, err := GetSplitKey(key, startUid) 65 require.NoError(t, err) 66 pk, err := Parse(key) 67 require.NoError(t, err) 68 69 require.True(t, pk.IsData()) 70 require.Equal(t, sattr, pk.Attr) 71 require.Equal(t, uid, pk.Uid) 72 require.Equal(t, pk.HasStartUid, true) 73 require.Equal(t, startUid, pk.StartUid) 74 } 75 } 76 77 func TestIndexKey(t *testing.T) { 78 var uid uint64 79 for uid = 0; uid < 1001; uid++ { 80 sattr := fmt.Sprintf("attr:%d", uid) 81 sterm := fmt.Sprintf("term:%d", uid) 82 83 key := IndexKey(sattr, sterm) 84 pk, err := Parse(key) 85 require.NoError(t, err) 86 87 require.True(t, pk.IsIndex()) 88 require.Equal(t, sattr, pk.Attr) 89 require.Equal(t, sterm, pk.Term) 90 } 91 } 92 93 func TestIndexKeyWithStartUid(t *testing.T) { 94 var uid uint64 95 startUid := uint64(math.MaxUint64) 96 for uid = 0; uid < 1001; uid++ { 97 sattr := fmt.Sprintf("attr:%d", uid) 98 sterm := fmt.Sprintf("term:%d", uid) 99 100 key := IndexKey(sattr, sterm) 101 key, err := GetSplitKey(key, startUid) 102 require.NoError(t, err) 103 pk, err := Parse(key) 104 require.NoError(t, err) 105 106 require.True(t, pk.IsIndex()) 107 require.Equal(t, sattr, pk.Attr) 108 require.Equal(t, sterm, pk.Term) 109 require.Equal(t, pk.HasStartUid, true) 110 require.Equal(t, startUid, pk.StartUid) 111 } 112 } 113 114 func TestReverseKey(t *testing.T) { 115 var uid uint64 116 for uid = 0; uid < 1001; uid++ { 117 sattr := fmt.Sprintf("attr:%d", uid) 118 119 key := ReverseKey(sattr, uid) 120 pk, err := Parse(key) 121 require.NoError(t, err) 122 123 require.True(t, pk.IsReverse()) 124 require.Equal(t, sattr, pk.Attr) 125 require.Equal(t, uid, pk.Uid) 126 } 127 } 128 129 func TestReverseKeyWithStartUid(t *testing.T) { 130 var uid uint64 131 startUid := uint64(math.MaxUint64) 132 for uid = 0; uid < 1001; uid++ { 133 sattr := fmt.Sprintf("attr:%d", uid) 134 135 key := ReverseKey(sattr, uid) 136 key, err := GetSplitKey(key, startUid) 137 require.NoError(t, err) 138 pk, err := Parse(key) 139 require.NoError(t, err) 140 141 require.True(t, pk.IsReverse()) 142 require.Equal(t, sattr, pk.Attr) 143 require.Equal(t, uid, pk.Uid) 144 require.Equal(t, pk.HasStartUid, true) 145 require.Equal(t, startUid, pk.StartUid) 146 } 147 } 148 149 func TestCountKey(t *testing.T) { 150 var count uint32 151 for count = 0; count < 1001; count++ { 152 sattr := fmt.Sprintf("attr:%d", count) 153 154 key := CountKey(sattr, count, true) 155 pk, err := Parse(key) 156 require.NoError(t, err) 157 158 require.True(t, pk.IsCountOrCountRev()) 159 require.Equal(t, sattr, pk.Attr) 160 require.Equal(t, count, pk.Count) 161 } 162 } 163 164 func TestCountKeyWithStartUid(t *testing.T) { 165 var count uint32 166 startUid := uint64(math.MaxUint64) 167 for count = 0; count < 1001; count++ { 168 sattr := fmt.Sprintf("attr:%d", count) 169 170 key := CountKey(sattr, count, true) 171 key, err := GetSplitKey(key, startUid) 172 require.NoError(t, err) 173 pk, err := Parse(key) 174 require.NoError(t, err) 175 176 require.True(t, pk.IsCountOrCountRev()) 177 require.Equal(t, sattr, pk.Attr) 178 require.Equal(t, count, pk.Count) 179 require.Equal(t, pk.HasStartUid, true) 180 require.Equal(t, startUid, pk.StartUid) 181 } 182 } 183 184 func TestSchemaKey(t *testing.T) { 185 var uid uint64 186 for uid = 0; uid < 1001; uid++ { 187 sattr := fmt.Sprintf("attr:%d", uid) 188 189 key := SchemaKey(sattr) 190 pk, err := Parse(key) 191 require.NoError(t, err) 192 193 require.True(t, pk.IsSchema()) 194 require.Equal(t, sattr, pk.Attr) 195 } 196 }