package https3 import ( "fmt" "strings" "testing" "github.com/coredns/caddy" "github.com/coredns/coredns/core/dnsserver" ) func TestSetup(t *testing.T) { tests := []struct { input string shouldErr bool expectedErrContent string expectedMaxStreams *int }{ // Valid configurations { input: `https3`, shouldErr: false, }, { input: `https3 { }`, shouldErr: false, }, { input: `https3 { max_streams 100 }`, shouldErr: false, expectedMaxStreams: intPtr(100), }, // Zero values (unbounded) { input: `https3 { max_streams 0 }`, shouldErr: false, expectedMaxStreams: intPtr(0), }, // Error cases { input: `https3 { max_streams }`, shouldErr: true, expectedErrContent: "Wrong argument count", }, { input: `https3 { max_streams abc }`, shouldErr: true, expectedErrContent: "invalid max_streams value", }, { input: `https3 { max_streams -1 }`, shouldErr: true, expectedErrContent: "must be a non-negative integer", }, { input: `https3 { max_streams 100 max_streams 200 }`, shouldErr: true, expectedErrContent: "already defined", }, { input: `https3 { unknown_option 123 }`, shouldErr: true, expectedErrContent: "unknown property", }, { input: `https3 extra_arg`, shouldErr: true, expectedErrContent: "Wrong argument count", }, } for i, test := range tests { c := caddy.NewTestController("dns", test.input) err := setup(c) if test.shouldErr && err == nil { t.Errorf("Test %d (%s): Expected error but got none", i, test.input) continue } if !test.shouldErr && err != nil { t.Errorf("Test %d (%s): Expected no error but got: %v", i, test.input, err) continue } if test.shouldErr && test.expectedErrContent != "" { if !strings.Contains(err.Error(), test.expectedErrContent) { t.Errorf("Test %d (%s): Expected error containing '%s' but got: %v", i, test.input, test.expectedErrContent, err) } continue } if !test.shouldErr { config := dnsserver.GetConfig(c) assertIntPtrValue(t, i, test.input, "MaxHTTPS3Streams", config.MaxHTTPS3Streams, test.expectedMaxStreams) } } } func intPtr(v int) *int { return &v } func assertIntPtrValue(t *testing.T, testIndex int, testInput, fieldName string, actual, expected *int) { t.Helper() if actual == nil && expected == nil { return } if (actual == nil) != (expected == nil) { t.Errorf("Test %d (%s): Expected %s to be %v, but got %v", testIndex, testInput, fieldName, formatNilableInt(expected), formatNilableInt(actual)) return } if *actual != *expected { t.Errorf("Test %d (%s): Expected %s to be %d, but got %d", testIndex, testInput, fieldName, *expected, *actual) } } func formatNilableInt(v *int) string { if v == nil { return "nil" } return fmt.Sprintf("%d", *v) }