1
2 package cache_test
3
4 import (
5 "testing"
6
7 route "github.com/datawire/ambassador/v2/pkg/api/envoy/config/route/v3"
8 discovery "github.com/datawire/ambassador/v2/pkg/api/envoy/service/discovery/v3"
9 "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/cache/types"
10 "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/cache/v3"
11 "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/resource/v3"
12 ttl_helper "github.com/datawire/ambassador/v2/pkg/envoy-control-plane/ttl/v2"
13 "github.com/golang/protobuf/ptypes"
14 "github.com/golang/protobuf/ptypes/any"
15 "github.com/stretchr/testify/assert"
16 )
17
18 const (
19 resourceName = "route1"
20 )
21
22 func TestResponseGetDiscoveryResponse(t *testing.T) {
23 routes := []types.ResourceWithTtl{{Resource: &route.RouteConfiguration{Name: resourceName}}}
24 resp := cache.RawResponse{
25 Request: &discovery.DiscoveryRequest{TypeUrl: resource.RouteType},
26 Version: "v",
27 Resources: routes,
28 }
29
30 discoveryResponse, err := resp.GetDiscoveryResponse()
31 assert.Nil(t, err)
32 assert.Equal(t, discoveryResponse.VersionInfo, resp.Version)
33 assert.Equal(t, len(discoveryResponse.Resources), 1)
34
35 cachedResponse, err := resp.GetDiscoveryResponse()
36 assert.Nil(t, err)
37 assert.Same(t, discoveryResponse, cachedResponse)
38
39 r := &route.RouteConfiguration{}
40 err = ptypes.UnmarshalAny(discoveryResponse.Resources[0], r)
41 assert.Nil(t, err)
42 assert.Equal(t, r.Name, resourceName)
43 }
44
45 func TestPassthroughResponseGetDiscoveryResponse(t *testing.T) {
46 routes := []types.Resource{&route.RouteConfiguration{Name: resourceName}}
47 rsrc, err := ptypes.MarshalAny(routes[0])
48 assert.Nil(t, err)
49 dr := &discovery.DiscoveryResponse{
50 TypeUrl: resource.RouteType,
51 Resources: []*any.Any{rsrc},
52 VersionInfo: "v",
53 }
54 resp := cache.PassthroughResponse{
55 Request: &discovery.DiscoveryRequest{TypeUrl: resource.RouteType},
56 DiscoveryResponse: dr,
57 }
58
59 discoveryResponse, err := resp.GetDiscoveryResponse()
60 assert.Nil(t, err)
61 assert.Equal(t, discoveryResponse.VersionInfo, resp.DiscoveryResponse.VersionInfo)
62 assert.Equal(t, len(discoveryResponse.Resources), 1)
63
64 r := &route.RouteConfiguration{}
65 err = ptypes.UnmarshalAny(discoveryResponse.Resources[0], r)
66 assert.Nil(t, err)
67 assert.Equal(t, r.Name, resourceName)
68 assert.Equal(t, discoveryResponse, dr)
69 }
70
71 func TestHeartbeatResponseGetDiscoveryResponse(t *testing.T) {
72 routes := []types.ResourceWithTtl{{Resource: &route.RouteConfiguration{Name: resourceName}}}
73 resp := cache.RawResponse{
74 Request: &discovery.DiscoveryRequest{TypeUrl: resource.RouteType},
75 Version: "v",
76 Resources: routes,
77 Heartbeat: true,
78 }
79
80 discoveryResponse, err := resp.GetDiscoveryResponse()
81 assert.Nil(t, err)
82 assert.Equal(t, discoveryResponse.VersionInfo, resp.Version)
83 assert.Equal(t, len(discoveryResponse.Resources), 1)
84 assert.True(t, ttl_helper.IsTTLResource(discoveryResponse.Resources[0]))
85
86 cachedResponse, err := resp.GetDiscoveryResponse()
87 assert.Nil(t, err)
88 assert.Same(t, discoveryResponse, cachedResponse)
89
90 r := &route.RouteConfiguration{}
91 err = ptypes.UnmarshalAny(discoveryResponse.Resources[0], r)
92 assert.Nil(t, err)
93 assert.Equal(t, r.Name, resourceName)
94 }
95
View as plain text