1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package cache_test
17
18 import (
19 "reflect"
20 "testing"
21
22 cluster "github.com/datawire/ambassador/v2/pkg/api/envoy/config/cluster/v3"
23 route "github.com/datawire/ambassador/v2/pkg/api/envoy/config/route/v3"
24 v2route "github.com/datawire/ambassador/v2/pkg/api/envoy/config/route/v3"
25 "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/cache/types"
26 "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/cache/v3"
27 "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/test/resource/v3"
28 )
29
30 const (
31 clusterName = "cluster0"
32 routeName = "route0"
33 listenerName = "listener0"
34 runtimeName = "runtime0"
35 tlsName = "secret0"
36 rootName = "root0"
37 )
38
39 var (
40 testEndpoint = resource.MakeEndpoint(clusterName, 8080)
41 testCluster = resource.MakeCluster(resource.Ads, clusterName)
42 testRoute = resource.MakeRoute(routeName, clusterName)
43 testListener = resource.MakeHTTPListener(resource.Ads, listenerName, 80, routeName)
44 testRuntime = resource.MakeRuntime(runtimeName)
45 testSecret = resource.MakeSecrets(tlsName, rootName)
46 )
47
48 func TestValidate(t *testing.T) {
49 if err := testEndpoint.Validate(); err != nil {
50 t.Error(err)
51 }
52 if err := testCluster.Validate(); err != nil {
53 t.Error(err)
54 }
55 if err := testRoute.Validate(); err != nil {
56 t.Error(err)
57 }
58 if err := testListener.Validate(); err != nil {
59 t.Error(err)
60 }
61 if err := testRuntime.Validate(); err != nil {
62 t.Error(err)
63 }
64
65 invalidRoute := &route.RouteConfiguration{
66 Name: "test",
67 VirtualHosts: []*v2route.VirtualHost{{
68 Name: "test",
69 Domains: []string{},
70 }},
71 }
72
73 if err := invalidRoute.Validate(); err == nil {
74 t.Error("expected an error")
75 }
76 if err := invalidRoute.VirtualHosts[0].Validate(); err == nil {
77 t.Error("expected an error")
78 }
79 }
80
81 func TestGetResourceName(t *testing.T) {
82 if name := cache.GetResourceName(testEndpoint); name != clusterName {
83 t.Errorf("GetResourceName(%v) => got %q, want %q", testEndpoint, name, clusterName)
84 }
85 if name := cache.GetResourceName(testCluster); name != clusterName {
86 t.Errorf("GetResourceName(%v) => got %q, want %q", testCluster, name, clusterName)
87 }
88 if name := cache.GetResourceName(testRoute); name != routeName {
89 t.Errorf("GetResourceName(%v) => got %q, want %q", testRoute, name, routeName)
90 }
91 if name := cache.GetResourceName(testListener); name != listenerName {
92 t.Errorf("GetResourceName(%v) => got %q, want %q", testListener, name, listenerName)
93 }
94 if name := cache.GetResourceName(testRuntime); name != runtimeName {
95 t.Errorf("GetResourceName(%v) => got %q, want %q", testRuntime, name, runtimeName)
96 }
97 if name := cache.GetResourceName(nil); name != "" {
98 t.Errorf("GetResourceName(nil) => got %q, want none", name)
99 }
100 }
101
102 func TestGetResourceReferences(t *testing.T) {
103 cases := []struct {
104 in types.Resource
105 out map[string]bool
106 }{
107 {
108 in: nil,
109 out: map[string]bool{},
110 },
111 {
112 in: testCluster,
113 out: map[string]bool{clusterName: true},
114 },
115 {
116 in: &cluster.Cluster{Name: clusterName, ClusterDiscoveryType: &cluster.Cluster_Type{Type: cluster.Cluster_EDS},
117 EdsClusterConfig: &cluster.Cluster_EdsClusterConfig{ServiceName: "test"}},
118 out: map[string]bool{"test": true},
119 },
120 {
121 in: resource.MakeHTTPListener(resource.Ads, listenerName, 80, routeName),
122 out: map[string]bool{routeName: true},
123 },
124 {
125 in: resource.MakeTCPListener(listenerName, 80, clusterName),
126 out: map[string]bool{},
127 },
128 {
129 in: testRoute,
130 out: map[string]bool{},
131 },
132 {
133 in: testEndpoint,
134 out: map[string]bool{},
135 },
136 {
137 in: testRuntime,
138 out: map[string]bool{},
139 },
140 }
141 for _, cs := range cases {
142 names := cache.GetResourceReferences(cache.IndexResourcesByName([]types.ResourceWithTtl{{Resource: cs.in}}))
143 if !reflect.DeepEqual(names, cs.out) {
144 t.Errorf("GetResourceReferences(%v) => got %v, want %v", cs.in, names, cs.out)
145 }
146 }
147 }
148
View as plain text