etcd/client/pkg/verify/verify.go
Ivan Valdes 578b784dcd
client: address golangci var-naming issues
Signed-off-by: Ivan Valdes <ivan@vald.es>
2024-03-14 20:47:32 -07:00

81 lines
2.3 KiB
Go

// Copyright 2022 The etcd Authors
//
// 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 verify
import (
"fmt"
"os"
"strings"
)
const envVerify = "ETCD_VERIFY"
type VerificationType string
const (
envVerifyValueAll VerificationType = "all"
envVerifyValueAssert VerificationType = "assert"
)
func getEnvVerify() string {
return strings.ToLower(os.Getenv(envVerify))
}
func IsVerificationEnabled(verification VerificationType) bool {
env := getEnvVerify()
return env == string(envVerifyValueAll) || env == strings.ToLower(string(verification))
}
// EnableVerifications sets `envVerify` and returns a function that
// can be used to bring the original settings.
func EnableVerifications(verification VerificationType) func() {
previousEnv := getEnvVerify()
os.Setenv(envVerify, string(verification))
return func() {
os.Setenv(envVerify, previousEnv)
}
}
// EnableAllVerifications enables verification and returns a function
// that can be used to bring the original settings.
func EnableAllVerifications() func() {
return EnableVerifications(envVerifyValueAll)
}
// DisableVerifications unsets `envVerify` and returns a function that
// can be used to bring the original settings.
func DisableVerifications() func() {
previousEnv := getEnvVerify()
os.Unsetenv(envVerify)
return func() {
os.Setenv(envVerify, previousEnv)
}
}
// Verify performs verification if the assertions are enabled.
// In the default setup running in tests and skipped in the production code.
func Verify(f func()) {
if IsVerificationEnabled(envVerifyValueAssert) {
f()
}
}
// Assert will panic with a given formatted message if the given condition is false.
func Assert(condition bool, msg string, v ...any) {
if !condition {
panic(fmt.Sprintf("assertion failed: "+msg, v...))
}
}