mirror of
https://github.com/tailscale/tailscale.git
synced 2026-10-10 04:12:47 -04:00
Prior to this change there were two problems with our fuzzing for oss-fuzz: 1. There was an issue if the fuzzing spanned two files (mingled with the testing). 2. The fuzzing needs to be part of the implementation package (no _test packages). This change fixes that by moving all package fuzzing into a common `fuzz_test.go` within the package. Updates https://github.com/tailscale/corp/issues/46608 Change-Id: I0b95edcd0df946f723eea32f575c679214c0b202 Signed-off-by: Mike Jensen <mikej@tailscale.com>
97 lines
2.9 KiB
Go
97 lines
2.9 KiB
Go
// Copyright (c) Tailscale Inc & contributors
|
|
// SPDX-License-Identifier: BSD-3-Clause
|
|
|
|
package def_test
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"tailscale.com/util/def"
|
|
)
|
|
|
|
func TestLookupEnv(t *testing.T) {
|
|
const key = "TS_DEF_TEST_LOOKUPENV"
|
|
tests := []struct {
|
|
name string
|
|
unset bool
|
|
value string
|
|
def string
|
|
want string
|
|
}{
|
|
{name: "unset", unset: true, def: "fallback", want: "fallback"},
|
|
{name: "set", value: "value", def: "fallback", want: "value"},
|
|
{name: "empty", value: "", def: "fallback", want: ""},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Setenv(key, tt.value)
|
|
if tt.unset {
|
|
os.Unsetenv(key)
|
|
}
|
|
if got := def.LookupEnv(key, tt.def); got != tt.want {
|
|
t.Errorf("LookupEnv(%q, %q) = %q; want %q", key, tt.def, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestBool(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
in string
|
|
def bool
|
|
want bool
|
|
}{
|
|
{name: "empty_true", in: "", def: true, want: true},
|
|
{name: "empty_false", in: "", def: false, want: false},
|
|
{name: "valid_1", in: "1", def: false, want: true},
|
|
{name: "valid_t", in: "t", def: false, want: true},
|
|
{name: "valid_T", in: "T", def: false, want: true},
|
|
{name: "valid_TRUE", in: "TRUE", def: false, want: true},
|
|
{name: "valid_true", in: "true", def: false, want: true},
|
|
{name: "valid_True", in: "True", def: false, want: true},
|
|
{name: "valid_true_default_true", in: "true", def: true, want: true},
|
|
{name: "valid_0", in: "0", def: true, want: false},
|
|
{name: "valid_f", in: "f", def: true, want: false},
|
|
{name: "valid_F", in: "F", def: true, want: false},
|
|
{name: "valid_FALSE", in: "FALSE", def: true, want: false},
|
|
{name: "valid_false", in: "false", def: true, want: false},
|
|
{name: "valid_False", in: "False", def: true, want: false},
|
|
{name: "valid_false_default_false", in: "false", def: false, want: false},
|
|
{name: "invalid_true", in: "sure", def: true, want: true},
|
|
{name: "invalid_false", in: "sure", def: false, want: false},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := def.Bool(tt.in, tt.def); got != tt.want {
|
|
t.Errorf("Bool(%q, %v) = %v; want %v", tt.in, tt.def, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestDuration(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
in string
|
|
def time.Duration
|
|
want time.Duration
|
|
}{
|
|
{name: "empty_second", in: "", def: time.Second, want: time.Second},
|
|
{name: "empty_zero", in: "", def: 0, want: 0},
|
|
{name: "valid", in: "2m30s", def: time.Second, want: 2*time.Minute + 30*time.Second},
|
|
{name: "valid_zero", in: "0s", def: time.Second, want: 0},
|
|
{name: "invalid_second", in: "soon", def: time.Second, want: time.Second},
|
|
{name: "invalid_minute", in: "soon", def: time.Minute, want: time.Minute},
|
|
}
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
if got := def.Duration(tt.in, tt.def); got != tt.want {
|
|
t.Errorf("Duration(%q, %v) = %v; want %v", tt.in, tt.def, got, tt.want)
|
|
}
|
|
})
|
|
}
|
|
}
|