storj.io/minio@v0.0.0-20230509071714-0cbc90f649b1/pkg/event/target/queuestore_test.go (about) 1 /* 2 * MinIO Cloud Storage, (C) 2019 MinIO, Inc. 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 target 18 19 import ( 20 "os" 21 "path/filepath" 22 "reflect" 23 "strings" 24 "testing" 25 26 "storj.io/minio/pkg/event" 27 ) 28 29 // TestDir 30 var queueDir = filepath.Join(os.TempDir(), "minio_test") 31 32 // Sample test event. 33 var testEvent = event.Event{EventVersion: "1.0", EventSource: "test_source", AwsRegion: "test_region", EventTime: "test_time", EventName: event.ObjectAccessedGet} 34 35 // Initialize the store. 36 func setUpStore(directory string, limit uint64) (Store, error) { 37 store := NewQueueStore(queueDir, limit) 38 if oErr := store.Open(); oErr != nil { 39 return nil, oErr 40 } 41 return store, nil 42 } 43 44 // Tear down store 45 func tearDownStore() error { 46 return os.RemoveAll(queueDir) 47 } 48 49 // TestQueueStorePut - tests for store.Put 50 func TestQueueStorePut(t *testing.T) { 51 defer func() { 52 if err := tearDownStore(); err != nil { 53 t.Fatal("Failed to tear down store ", err) 54 } 55 }() 56 store, err := setUpStore(queueDir, 100) 57 if err != nil { 58 t.Fatal("Failed to create a queue store ", err) 59 60 } 61 // Put 100 events. 62 for i := 0; i < 100; i++ { 63 if err := store.Put(testEvent); err != nil { 64 t.Fatal("Failed to put to queue store ", err) 65 } 66 } 67 // Count the events. 68 names, err := store.List() 69 if err != nil { 70 t.Fatal(err) 71 } 72 if len(names) != 100 { 73 t.Fatalf("List() Expected: 100, got %d", len(names)) 74 } 75 } 76 77 // TestQueueStoreGet - tests for store.Get 78 func TestQueueStoreGet(t *testing.T) { 79 defer func() { 80 if err := tearDownStore(); err != nil { 81 t.Fatal("Failed to tear down store ", err) 82 } 83 }() 84 store, err := setUpStore(queueDir, 10) 85 if err != nil { 86 t.Fatal("Failed to create a queue store ", err) 87 } 88 // Put 10 events 89 for i := 0; i < 10; i++ { 90 if err := store.Put(testEvent); err != nil { 91 t.Fatal("Failed to put to queue store ", err) 92 } 93 } 94 eventKeys, err := store.List() 95 if err != nil { 96 t.Fatal(err) 97 } 98 // Get 10 events. 99 if len(eventKeys) == 10 { 100 for _, key := range eventKeys { 101 event, eErr := store.Get(strings.TrimSuffix(key, eventExt)) 102 if eErr != nil { 103 t.Fatal("Failed to Get the event from the queue store ", eErr) 104 } 105 if !reflect.DeepEqual(testEvent, event) { 106 t.Fatalf("Failed to read the event: error: expected = %v, got = %v", testEvent, event) 107 } 108 } 109 } else { 110 t.Fatalf("List() Expected: 10, got %d", len(eventKeys)) 111 } 112 } 113 114 // TestQueueStoreDel - tests for store.Del 115 func TestQueueStoreDel(t *testing.T) { 116 defer func() { 117 if err := tearDownStore(); err != nil { 118 t.Fatal("Failed to tear down store ", err) 119 } 120 }() 121 store, err := setUpStore(queueDir, 20) 122 if err != nil { 123 t.Fatal("Failed to create a queue store ", err) 124 } 125 // Put 20 events. 126 for i := 0; i < 20; i++ { 127 if err := store.Put(testEvent); err != nil { 128 t.Fatal("Failed to put to queue store ", err) 129 } 130 } 131 eventKeys, err := store.List() 132 if err != nil { 133 t.Fatal(err) 134 } 135 // Remove all the events. 136 if len(eventKeys) == 20 { 137 for _, key := range eventKeys { 138 err := store.Del(strings.TrimSuffix(key, eventExt)) 139 if err != nil { 140 t.Fatal("queue store Del failed with ", err) 141 } 142 } 143 } else { 144 t.Fatalf("List() Expected: 20, got %d", len(eventKeys)) 145 } 146 147 names, err := store.List() 148 if err != nil { 149 t.Fatal(err) 150 } 151 if len(names) != 0 { 152 t.Fatalf("List() Expected: 0, got %d", len(names)) 153 } 154 } 155 156 // TestQueueStoreLimit - tests the event limit for the store. 157 func TestQueueStoreLimit(t *testing.T) { 158 defer func() { 159 if err := tearDownStore(); err != nil { 160 t.Fatal("Failed to tear down store ", err) 161 } 162 }() 163 // The max limit is set to 5. 164 store, err := setUpStore(queueDir, 5) 165 if err != nil { 166 t.Fatal("Failed to create a queue store ", err) 167 } 168 for i := 0; i < 5; i++ { 169 if err := store.Put(testEvent); err != nil { 170 t.Fatal("Failed to put to queue store ", err) 171 } 172 } 173 // Should not allow 6th Put. 174 if err := store.Put(testEvent); err == nil { 175 t.Fatalf("Expected to fail with %s, but passes", errLimitExceeded) 176 } 177 } 178 179 // TestQueueStoreLimit - tests for store.LimitN. 180 func TestQueueStoreListN(t *testing.T) { 181 defer func() { 182 if err := tearDownStore(); err != nil { 183 t.Fatal("Failed to tear down store ", err) 184 } 185 }() 186 store, err := setUpStore(queueDir, 10) 187 if err != nil { 188 t.Fatal("Failed to create a queue store ", err) 189 } 190 for i := 0; i < 10; i++ { 191 if err := store.Put(testEvent); err != nil { 192 t.Fatal("Failed to put to queue store ", err) 193 } 194 } 195 // Should return all the event keys in the store. 196 names, err := store.List() 197 if err != nil { 198 t.Fatal(err) 199 } 200 201 if len(names) != 10 { 202 t.Fatalf("List() Expected: 10, got %d", len(names)) 203 } 204 205 if err = os.RemoveAll(queueDir); err != nil { 206 t.Fatal(err) 207 } 208 209 _, err = store.List() 210 if !os.IsNotExist(err) { 211 t.Fatalf("Expected List() to fail with os.ErrNotExist, %s", err) 212 } 213 }