// Memory backend tests // // Licensed under CC0 1.0 Universal: // https://creativecommons.org/publicdomain/zero/1.0/legalcode package objectstore import ( "errors" "testing" ) func TestCreateAndGet(t *testing.T) { objects := NewMemBackend() // Create the object bucketId := "foo" objectId := "bar" objectContent := "Lorem ipsum" objects.CreateObject(bucketId, objectId, objectContent) // Retrieve the object object, err := objects.GetObject(bucketId, objectId) if err != nil { t.Fatalf("Get test object: %v", err) } // Check the object content if object != objectContent { t.Errorf("Check test object. Got (%v), want (%v)", object, objectContent) } // Try to get a non-existent object _, err = objects.GetObject(bucketId, "baz") if err == nil { t.Error("Get non-existent object. Got nil, want error") } } func TestCreateAndDelete(t *testing.T) { objects := NewMemBackend() // Create the object bucketId := "foo" objectId := "bar" objectContent := "Lorem ipsum" objects.CreateObject(bucketId, objectId, objectContent) // Try to delete a non-existent object if err := objects.DeleteObject(bucketId, "baz"); err == nil { t.Error("Delete non-existent object. Got nil, want error") } // Check the number of buckets if numBuckets := len(objects.buckets); numBuckets != 1 { t.Errorf("Number of buckets. Got %v, want 1", numBuckets) } // Delete the object if err := objects.DeleteObject(bucketId, objectId); err != nil { t.Fatalf("Delete test object: %v", err) } // Try to re-delete the object if err := objects.DeleteObject(bucketId, objectId); err == nil { t.Error("Delete already deleted object. Got nil, want error") } // Re-check the number of buckets if numBuckets := len(objects.buckets); numBuckets != 0 { t.Errorf("Number of buckets. Got %v, want 0", numBuckets) } } func TestDuplicatesDetection(t *testing.T) { objects := NewMemBackend() // Create an object bucketId := "foo" objectId := "bar" objectContent := "Lorem ipsum" objects.CreateObject(bucketId, objectId, objectContent) // Error type reference var duplicateError *DuplicateError // Try to add the object again (same name) err := objects.CreateObject(bucketId, objectId, objectContent) if err == nil { t.Error("Add a duplicate object. Got nil, want error") } else if errors.Is(err, duplicateError) { t.Error("Add a duplicate object. Got unexpected error") } // Try to add the object again (different name) err = objects.CreateObject(bucketId, "baz", objectContent) if err == nil { t.Error("Add a duplicate object. Got nil, want error") } else if errors.Is(err, duplicateError) { t.Error("Add a duplicate object. Got unexpected error") } // Add the object to a different bucket err = objects.CreateObject("baz", objectId, objectContent) if err != nil { t.Errorf("Add object. Got error, want nil: %v", err) } // Delete the object if err := objects.DeleteObject(bucketId, objectId); err != nil { t.Fatalf("Delete test object: %v", err) } // Add the object again err = objects.CreateObject(bucketId, objectId, objectContent) if err != nil { t.Errorf("Add object. Got error, want nil: %v", err) } }