1
17
18 package xdsresource
19
20 import (
21 "testing"
22
23 "github.com/google/go-cmp/cmp"
24 "github.com/google/go-cmp/cmp/cmpopts"
25 )
26
27 func TestParseName(t *testing.T) {
28 tests := []struct {
29 name string
30 in string
31 want *Name
32 wantStr string
33 }{
34 {
35 name: "old style name",
36 in: "test-resource",
37 want: &Name{ID: "test-resource"},
38 wantStr: "test-resource",
39 },
40 {
41 name: "invalid not url",
42 in: "a:/b/c",
43 want: &Name{ID: "a:/b/c"},
44 wantStr: "a:/b/c",
45 },
46 {
47 name: "invalid no resource type",
48 in: "xdstp://auth/id",
49 want: &Name{ID: "xdstp://auth/id"},
50 wantStr: "xdstp://auth/id",
51 },
52 {
53 name: "valid with no authority",
54 in: "xdstp:///type/id",
55 want: &Name{Scheme: "xdstp", Authority: "", Type: "type", ID: "id"},
56 wantStr: "xdstp:///type/id",
57 },
58 {
59 name: "valid no ctx params",
60 in: "xdstp://auth/type/id",
61 want: &Name{Scheme: "xdstp", Authority: "auth", Type: "type", ID: "id"},
62 wantStr: "xdstp://auth/type/id",
63 },
64 {
65 name: "valid with ctx params",
66 in: "xdstp://auth/type/id?a=1&b=2",
67 want: &Name{Scheme: "xdstp", Authority: "auth", Type: "type", ID: "id", ContextParams: map[string]string{"a": "1", "b": "2"}},
68 wantStr: "xdstp://auth/type/id?a=1&b=2",
69 },
70 {
71 name: "valid with ctx params sorted by keys",
72 in: "xdstp://auth/type/id?b=2&a=1",
73 want: &Name{Scheme: "xdstp", Authority: "auth", Type: "type", ID: "id", ContextParams: map[string]string{"a": "1", "b": "2"}},
74 wantStr: "xdstp://auth/type/id?a=1&b=2",
75 },
76 }
77 for _, tt := range tests {
78 t.Run(tt.name, func(t *testing.T) {
79 got := ParseName(tt.in)
80 if !cmp.Equal(got, tt.want, cmpopts.IgnoreFields(Name{}, "processingDirective")) {
81 t.Errorf("ParseName() = %#v, want %#v", got, tt.want)
82 }
83 if gotStr := got.String(); gotStr != tt.wantStr {
84 t.Errorf("Name.String() = %s, want %s", gotStr, tt.wantStr)
85 }
86 })
87 }
88 }
89
90
91
92 func TestNameStringCtxParamsOrder(t *testing.T) {
93 const (
94 a = "xdstp://auth/type/id?a=1&b=2"
95 b = "xdstp://auth/type/id?b=2&a=1"
96 )
97 aParsed := ParseName(a).String()
98 bParsed := ParseName(b).String()
99
100 if aParsed != bParsed {
101 t.Fatalf("aParsed.String() = %q, bParsed.String() = %q, want them to be the same", aParsed, bParsed)
102 }
103 }
104
View as plain text