github.com/cs3org/reva/v2@v2.27.7/pkg/store/memory/multimemstore_test.go (about) 1 package memory 2 3 import ( 4 "context" 5 "strconv" 6 "testing" 7 8 "go-micro.dev/v4/store" 9 ) 10 11 func TestWriteReadTables(t *testing.T) { 12 cache := NewMultiMemStore() 13 14 record1 := &store.Record{ 15 Key: "sameKey", 16 Value: []byte("from record1"), 17 } 18 record2 := &store.Record{ 19 Key: "sameKey", 20 Value: []byte("from record2"), 21 } 22 23 _ = cache.Write(record1) 24 _ = cache.Write(record2, store.WriteTo("DB02", "Table02")) 25 26 records1, _ := cache.Read("sameKey") 27 if len(records1) != 1 { 28 t.Fatalf("Wrong number of records, expected 1, got %d", len(records1)) 29 } 30 if records1[0].Key != "sameKey" { 31 t.Errorf("Wrong key, expected \"sameKey\", got %s", records1[0].Key) 32 } 33 if string(records1[0].Value) != "from record1" { 34 t.Errorf("Wrong value, expected \"from record1\", got %s", string(records1[0].Value)) 35 } 36 37 records2, _ := cache.Read("sameKey", store.ReadFrom("DB02", "Table02")) 38 if len(records2) != 1 { 39 t.Fatalf("Wrong number of records, expected 1, got %d", len(records2)) 40 } 41 if records2[0].Key != "sameKey" { 42 t.Errorf("Wrong key, expected \"sameKey\", got %s", records2[0].Key) 43 } 44 if string(records2[0].Value) != "from record2" { 45 t.Errorf("Wrong value, expected \"from record2\", got %s", string(records2[0].Value)) 46 } 47 } 48 49 func TestDeleteTables(t *testing.T) { 50 cache := NewMultiMemStore() 51 52 record1 := &store.Record{ 53 Key: "sameKey", 54 Value: []byte("from record1"), 55 } 56 record2 := &store.Record{ 57 Key: "sameKey", 58 Value: []byte("from record2"), 59 } 60 61 _ = cache.Write(record1) 62 _ = cache.Write(record2, store.WriteTo("DB02", "Table02")) 63 64 records1, _ := cache.Read("sameKey") 65 if len(records1) != 1 { 66 t.Fatalf("Wrong number of records, expected 1, got %d", len(records1)) 67 } 68 if records1[0].Key != "sameKey" { 69 t.Errorf("Wrong key, expected \"sameKey\", got %s", records1[0].Key) 70 } 71 if string(records1[0].Value) != "from record1" { 72 t.Errorf("Wrong value, expected \"from record1\", got %s", string(records1[0].Value)) 73 } 74 75 records2, _ := cache.Read("sameKey", store.ReadFrom("DB02", "Table02")) 76 if len(records2) != 1 { 77 t.Fatalf("Wrong number of records, expected 1, got %d", len(records2)) 78 } 79 if records2[0].Key != "sameKey" { 80 t.Errorf("Wrong key, expected \"sameKey\", got %s", records2[0].Key) 81 } 82 if string(records2[0].Value) != "from record2" { 83 t.Errorf("Wrong value, expected \"from record2\", got %s", string(records2[0].Value)) 84 } 85 86 _ = cache.Delete("sameKey") 87 if _, err := cache.Read("sameKey"); err != store.ErrNotFound { 88 t.Errorf("Key \"sameKey\" still exists after deletion") 89 } 90 91 records2, _ = cache.Read("sameKey", store.ReadFrom("DB02", "Table02")) 92 if len(records2) != 1 { 93 t.Fatalf("Wrong number of records, expected 1, got %d", len(records2)) 94 } 95 if records2[0].Key != "sameKey" { 96 t.Errorf("Wrong key, expected \"sameKey\", got %s", records2[0].Key) 97 } 98 if string(records2[0].Value) != "from record2" { 99 t.Errorf("Wrong value, expected \"from record2\", got %s", string(records2[0].Value)) 100 } 101 } 102 103 func TestListTables(t *testing.T) { 104 cache := NewMultiMemStore() 105 106 record1 := &store.Record{ 107 Key: "key001", 108 Value: []byte("from record1"), 109 } 110 record2 := &store.Record{ 111 Key: "key002", 112 Value: []byte("from record2"), 113 } 114 115 _ = cache.Write(record1) 116 _ = cache.Write(record2, store.WriteTo("DB02", "Table02")) 117 118 keys, _ := cache.List(store.ListFrom("DB02", "Table02")) 119 expectedKeys := []string{"key002"} 120 if len(keys) != 1 { 121 t.Fatalf("Wrong number of keys, expected 1, got %d", len(keys)) 122 } 123 for index, key := range keys { 124 if expectedKeys[index] != key { 125 t.Errorf("Wrong key for index %d, expected %s, got %s", index, expectedKeys[index], key) 126 } 127 } 128 } 129 130 func TestWriteSizeLimit(t *testing.T) { 131 cache := NewMultiMemStore( 132 store.WithContext( 133 NewContext( 134 context.Background(), 135 map[string]interface{}{ 136 "maxCap": 2, 137 }, 138 ), 139 ), 140 ) 141 142 record := &store.Record{} 143 for i := 0; i < 4; i++ { 144 v := strconv.Itoa(i) 145 record.Key = v 146 record.Value = []byte(v) 147 _ = cache.Write(record) 148 _ = cache.Write(record, store.WriteTo("DB02", "Table02")) 149 } 150 151 keys1, _ := cache.List() 152 expectedKeys1 := []string{"2", "3"} 153 if len(keys1) != 2 { 154 t.Fatalf("Wrong number of keys, expected 2, got %d", len(keys1)) 155 } 156 for index, key := range keys1 { 157 if expectedKeys1[index] != key { 158 t.Errorf("Wrong key for index %d, expected %s, got %s", index, expectedKeys1[index], key) 159 } 160 } 161 162 keys2, _ := cache.List(store.ListFrom("DB02", "Table02")) 163 expectedKeys2 := []string{"2", "3"} 164 if len(keys2) != 2 { 165 t.Fatalf("Wrong number of keys, expected 2, got %d", len(keys2)) 166 } 167 for index, key := range keys2 { 168 if expectedKeys2[index] != key { 169 t.Errorf("Wrong key for index %d, expected %s, got %s", index, expectedKeys2[index], key) 170 } 171 } 172 }