From 534b2e9ec4e09b51bc97f175f2298a4f9e44deea Mon Sep 17 00:00:00 2001 From: Sharif Elgamal Date: Thu, 22 Aug 2019 12:45:04 -0700 Subject: [PATCH] add test for getMutexName --- pkg/util/lock/lock.go | 7 ++-- pkg/util/lock/lock_test.go | 67 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 3 deletions(-) create mode 100644 pkg/util/lock/lock_test.go diff --git a/pkg/util/lock/lock.go b/pkg/util/lock/lock.go index 5b8febd88a..513eaaf1c5 100644 --- a/pkg/util/lock/lock.go +++ b/pkg/util/lock/lock.go @@ -66,9 +66,6 @@ func getMutexName(filename string) string { p = strings.ReplaceAll(p, "_", "-") mutexName := fmt.Sprintf("%s-%s", p, strings.ReplaceAll(name, ".", "-")) - // Make sure name doesn't start with a dash - mutexName = strings.TrimPrefix(mutexName, "-") - // Check if name starts with an int and prepend a string instead if _, err := strconv.Atoi(mutexName[:1]); err == nil { mutexName = "m" + mutexName @@ -78,5 +75,9 @@ func getMutexName(filename string) string { mutexName = mutexName[:40] } + // Make sure name doesn't start or end with punctuation + mutexName = strings.TrimPrefix(mutexName, "-") + mutexName = strings.TrimSuffix(mutexName, "-") + return mutexName } diff --git a/pkg/util/lock/lock_test.go b/pkg/util/lock/lock_test.go new file mode 100644 index 0000000000..80e3ec04ae --- /dev/null +++ b/pkg/util/lock/lock_test.go @@ -0,0 +1,67 @@ +/* +Copyright 2019 The Kubernetes Authors All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package lock + +import "testing" + +func TestGetMutexName(t *testing.T) { + var tests = []struct{ + description string + path string + expected string + }{ + { + description: "standard", + path: "/foo/bar", + expected: "foo-bar", + }, + { + description: "deep directory", + path: "/foo/bar/baz/bat", + expected: "baz-bat", + }, + { + description: "underscores", + path: "/foo_bar/baz", + expected: "foo-bar-baz", + }, + { + description: "starts with number", + path: "/foo/2bar/baz", + expected: "m2bar-baz", + }, + { + description: "starts with punctuation", + path: "/.foo/bar", + expected: "foo-bar", + }, + { + description: "long filename", + path: "/very-very-very-very-very-very-very-very-long/bar", + expected: "very-very-very-very-very-very-very-very", + }, + } + + for _, tc := range tests { + t.Run(tc.description, func(t *testing.T) { + got := getMutexName(tc.path) + if got != tc.expected { + t.Errorf("Unexpected mutex name for path %s. got: %s, expected: %s", tc.path, got, tc.expected) + } + }) + } +} \ No newline at end of file