package registrar import ( "reflect" "testing" ) func TestReserve(t *testing.T) { r := NewRegistrar() obj := "test1" if err := r.Reserve("test", obj); err != nil { t.Fatal(err) } if err := r.Reserve("test", obj); err != nil { t.Fatal(err) } obj2 := "test2" err := r.Reserve("test", obj2) if err == nil { t.Fatalf("expected error when reserving an already reserved name to another object") } if err != ErrNameReserved { t.Fatal("expected `ErrNameReserved` error when attempting to reserve an already reserved name") } } func TestRelease(t *testing.T) { r := NewRegistrar() obj := "testing" if err := r.Reserve("test", obj); err != nil { t.Fatal(err) } r.Release("test") r.Release("test") // Ensure there is no panic here if err := r.Reserve("test", obj); err != nil { t.Fatal(err) } } func TestGetNames(t *testing.T) { r := NewRegistrar() obj := "testing" names := []string{"test1", "test2"} for _, name := range names { if err := r.Reserve(name, obj); err != nil { t.Fatal(err) } } r.Reserve("test3", "other") names2, err := r.GetNames(obj) if err != nil { t.Fatal(err) } if !reflect.DeepEqual(names, names2) { t.Fatalf("Exepected: %v, Got: %v", names, names2) } } func TestDelete(t *testing.T) { r := NewRegistrar() obj := "testing" names := []string{"test1", "test2"} for _, name := range names { if err := r.Reserve(name, obj); err != nil { t.Fatal(err) } } r.Reserve("test3", "other") r.Delete(obj) _, err := r.GetNames(obj) if err == nil { t.Fatal("expected error getting names for deleted key") } if err != ErrNoSuchKey { t.Fatal("expected `ErrNoSuchKey`") } } func TestGet(t *testing.T) { r := NewRegistrar() obj := "testing" name := "test" _, err := r.Get(name) if err == nil { t.Fatal("expected error when key does not exist") } if err != ErrNameNotReserved { t.Fatal(err) } if err := r.Reserve(name, obj); err != nil { t.Fatal(err) } if _, err = r.Get(name); err != nil { t.Fatal(err) } r.Delete(obj) _, err = r.Get(name) if err == nil { t.Fatal("expected error when key does not exist") } if err != ErrNameNotReserved { t.Fatal(err) } }