From b4990cd858c548b3a802a656655693723d1a981b Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Thu, 2 Jan 2025 15:52:30 +0000 Subject: [PATCH] lib/bucket: add IsAllSlashes function --- lib/bucket/bucket.go | 15 +++++++++++++++ lib/bucket/bucket_test.go | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/lib/bucket/bucket.go b/lib/bucket/bucket.go index 44aac0bb3..9b0b31afd 100644 --- a/lib/bucket/bucket.go +++ b/lib/bucket/bucket.go @@ -42,6 +42,21 @@ func Join(path1, path2 string) string { return strings.TrimSuffix(path1, "/") + "/" + strings.TrimPrefix(path2, "/") } +// IsAllSlashes returns true if s is all / characters. +// +// It returns false if s is "". +func IsAllSlashes(s string) bool { + if len(s) == 0 { + return false + } + for _, c := range s { + if c != '/' { + return false + } + } + return true +} + // Cache stores whether buckets are available and their IDs type Cache struct { mu sync.Mutex // mutex to protect created and deleted diff --git a/lib/bucket/bucket_test.go b/lib/bucket/bucket_test.go index 1a36ea300..df4b7d95b 100644 --- a/lib/bucket/bucket_test.go +++ b/lib/bucket/bucket_test.go @@ -45,6 +45,24 @@ func TestJoin(t *testing.T) { } } +func TestIsAllSlashes(t *testing.T) { + for _, test := range []struct { + in string + want bool + }{ + {in: "", want: false}, + {in: "/", want: true}, + {in: "x/", want: false}, + {in: "/x", want: false}, + {in: "//", want: true}, + {in: "/x/", want: false}, + {in: "///", want: true}, + } { + got := IsAllSlashes(test.in) + assert.Equal(t, test.want, got, test.in) + } +} + func TestCache(t *testing.T) { c := NewCache() errBoom := errors.New("boom")