1 package entrypoint
2
3 import (
4 "fmt"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8
9 "github.com/datawire/ambassador/v2/pkg/kates"
10 "github.com/datawire/dlib/dlog"
11 )
12
13 var serviceTests = []struct {
14 Module moduleResolver
15 Service string
16 Namespace string
17 ExpectedService string
18 ExpectedNamespace string
19 ExpectedPort string
20 }{
21 {
22 moduleResolver{},
23 "service-name.namespace:3000",
24 "other-namespace",
25 "service-name",
26 "namespace",
27 "3000",
28 },
29 {
30 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
31 "service-name.namespace:3000",
32 "other-namespace",
33 "service-name",
34 "namespace",
35 "3000",
36 },
37 {
38 moduleResolver{},
39 "service-name.namespace",
40 "other-namespace",
41 "service-name",
42 "namespace",
43 "",
44 },
45 {
46 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
47 "service-name.namespace",
48 "other-namespace",
49 "service-name",
50 "namespace",
51 "",
52 },
53 {
54 moduleResolver{},
55 "service-name.namespace.svc.cluster.local:3000",
56 "other-namespace",
57 "service-name",
58 "namespace",
59 "3000",
60 },
61 {
62 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
63 "service-name.namespace.svc.cluster.local:3000",
64 "other-namespace",
65 "service-name",
66 "namespace",
67 "3000",
68 },
69 {
70 moduleResolver{},
71 "service-name.namespace.svc.cluster.local",
72 "other-namespace",
73 "service-name",
74 "namespace",
75 "",
76 },
77 {
78 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
79 "service-name.namespace.svc.cluster.local",
80 "other-namespace",
81 "service-name",
82 "namespace",
83 "",
84 },
85 {
86 moduleResolver{},
87 "service-name:3000",
88 "other-namespace",
89 "service-name",
90 "other-namespace",
91 "3000",
92 },
93 {
94 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
95 "service-name:3000",
96 "other-namespace",
97 "service-name",
98 "default",
99 "3000",
100 },
101 {
102 moduleResolver{},
103 "service-name",
104 "other-namespace",
105 "service-name",
106 "other-namespace",
107 "",
108 },
109 {
110 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
111 "service-name",
112 "other-namespace",
113 "service-name",
114 "default",
115 "",
116 },
117 {
118 moduleResolver{},
119 "1.2.3.4",
120 "other-namespace",
121 "1.2.3.4",
122 "other-namespace",
123 "",
124 },
125 {
126 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
127 "1.2.3.4:8080",
128 "other-namespace",
129 "1.2.3.4",
130 "default",
131 "8080",
132 },
133 {
134 moduleResolver{},
135 "1.2.3.4:blah",
136 "other-namespace",
137 "1",
138 "2",
139 "",
140 },
141 {
142 moduleResolver{UseAmbassadorNamespaceForServiceResolution: true},
143 "1.2.3.4:blah",
144 "other-namespace",
145 "1",
146 "2",
147 "",
148 },
149 }
150
151 func TestParseService(t *testing.T) {
152 ctx := dlog.NewTestContext(t, false)
153 cm := &kates.ConfigMap{ObjectMeta: kates.ObjectMeta{Name: "foo", Namespace: "bar"}}
154 for _, test := range serviceTests {
155
156 for _, prefix := range []string{"", "http://", "https://"} {
157 service := fmt.Sprintf("%s%s", prefix, test.Service)
158 t.Run(fmt.Sprintf("%s,%s,%v", service, test.Namespace, test.Module.UseAmbassadorNamespaceForServiceResolution), func(t *testing.T) {
159 name, namespace, port := test.Module.parseService(ctx, cm, service, test.Namespace)
160 assert.Equal(t, test.ExpectedService, name)
161 assert.Equal(t, test.ExpectedNamespace, namespace)
162 assert.Equal(t, test.ExpectedPort, port)
163 })
164 }
165 }
166 }
167
View as plain text