mirror of
https://github.com/tailscale/tailscale.git
synced 2026-07-15 10:03:09 -04:00
79 lines
1.9 KiB
Go
79 lines
1.9 KiB
Go
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
//go:build !plan9
|
|
|
|
package kube
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestTruncateLabelValue(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
input string
|
|
want string // empty means expect input unchanged
|
|
}{
|
|
{
|
|
name: "short-value-unchanged",
|
|
input: "my-service",
|
|
},
|
|
{
|
|
name: "exactly-63-chars-unchanged",
|
|
input: strings.Repeat("a", 63),
|
|
},
|
|
{
|
|
name: "64-chars-gets-truncated",
|
|
input: strings.Repeat("a", 64),
|
|
},
|
|
{
|
|
name: "very-long-value-gets-truncated",
|
|
input: "tailscale-nginx-clickhouse-o11y-server-https-with-extra-long-suffix-that-exceeds-limit",
|
|
},
|
|
{
|
|
name: "253-chars-max-k8s-resource-name",
|
|
input: strings.Repeat("x", 253),
|
|
},
|
|
{
|
|
name: "empty-string-unchanged",
|
|
input: "",
|
|
},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
got := TruncateLabelValue(tt.input)
|
|
if len(got) > 63 {
|
|
t.Errorf("TruncateLabelValue(%q) = %q (len %d), exceeds 63 chars", tt.input, got, len(got))
|
|
}
|
|
if len(tt.input) <= 63 && got != tt.input {
|
|
t.Errorf("TruncateLabelValue(%q) = %q, want unchanged input", tt.input, got)
|
|
}
|
|
if len(tt.input) > 63 && got == tt.input {
|
|
t.Errorf("TruncateLabelValue(%q) was not truncated", tt.input)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestTruncateLabelValueDeterministic(t *testing.T) {
|
|
input := strings.Repeat("a", 100)
|
|
first := TruncateLabelValue(input)
|
|
for range 10 {
|
|
got := TruncateLabelValue(input)
|
|
if got != first {
|
|
t.Fatalf("non-deterministic: got %q, want %q", got, first)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestTruncateLabelValueUniqueness(t *testing.T) {
|
|
// Two inputs sharing a long prefix but differing at the end should produce different outputs.
|
|
a := strings.Repeat("a", 100) + "-one"
|
|
b := strings.Repeat("a", 100) + "-two"
|
|
if TruncateLabelValue(a) == TruncateLabelValue(b) {
|
|
t.Errorf("collision: %q and %q produce the same truncated label", a, b)
|
|
}
|
|
}
|