|
4 | 4 | package xdscommon
|
5 | 5 |
|
6 | 6 | import (
|
| 7 | + "fmt" |
| 8 | + "slices" |
7 | 9 | "testing"
|
8 | 10 |
|
9 | 11 | envoy_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3"
|
@@ -70,99 +72,53 @@ func TestDetermineEnvoyVersionFromNode(t *testing.T) {
|
70 | 72 | }
|
71 | 73 |
|
72 | 74 | func TestDetermineSupportedProxyFeaturesFromString(t *testing.T) {
|
73 |
| - const ( |
74 |
| - errTooOld = "is too old and is not supported by Consul" |
75 |
| - ) |
| 75 | + const errTooOld = "is too old and is not supported by Consul" |
76 | 76 |
|
77 | 77 | type testcase struct {
|
| 78 | + name string |
78 | 79 | expect SupportedProxyFeatures
|
79 | 80 | expectErr string
|
80 | 81 | }
|
| 82 | + var cases []testcase |
81 | 83 |
|
82 |
| - // Just the bad versions |
83 |
| - cases := map[string]testcase{ |
84 |
| - "1.9.0": {expectErr: "Envoy 1.9.0 " + errTooOld}, |
85 |
| - "1.10.0": {expectErr: "Envoy 1.10.0 " + errTooOld}, |
86 |
| - "1.11.0": {expectErr: "Envoy 1.11.0 " + errTooOld}, |
87 |
| - "1.12.0": {expectErr: "Envoy 1.12.0 " + errTooOld}, |
88 |
| - "1.12.1": {expectErr: "Envoy 1.12.1 " + errTooOld}, |
89 |
| - "1.12.2": {expectErr: "Envoy 1.12.2 " + errTooOld}, |
90 |
| - "1.12.3": {expectErr: "Envoy 1.12.3 " + errTooOld}, |
91 |
| - "1.12.4": {expectErr: "Envoy 1.12.4 " + errTooOld}, |
92 |
| - "1.12.5": {expectErr: "Envoy 1.12.5 " + errTooOld}, |
93 |
| - "1.12.6": {expectErr: "Envoy 1.12.6 " + errTooOld}, |
94 |
| - "1.12.7": {expectErr: "Envoy 1.12.7 " + errTooOld}, |
95 |
| - "1.13.0": {expectErr: "Envoy 1.13.0 " + errTooOld}, |
96 |
| - "1.13.1": {expectErr: "Envoy 1.13.1 " + errTooOld}, |
97 |
| - "1.13.2": {expectErr: "Envoy 1.13.2 " + errTooOld}, |
98 |
| - "1.13.3": {expectErr: "Envoy 1.13.3 " + errTooOld}, |
99 |
| - "1.13.4": {expectErr: "Envoy 1.13.4 " + errTooOld}, |
100 |
| - "1.13.5": {expectErr: "Envoy 1.13.5 " + errTooOld}, |
101 |
| - "1.13.6": {expectErr: "Envoy 1.13.6 " + errTooOld}, |
102 |
| - "1.13.7": {expectErr: "Envoy 1.13.7 " + errTooOld}, |
103 |
| - "1.14.0": {expectErr: "Envoy 1.14.0 " + errTooOld}, |
104 |
| - "1.14.1": {expectErr: "Envoy 1.14.1 " + errTooOld}, |
105 |
| - "1.14.2": {expectErr: "Envoy 1.14.2 " + errTooOld}, |
106 |
| - "1.14.3": {expectErr: "Envoy 1.14.3 " + errTooOld}, |
107 |
| - "1.14.4": {expectErr: "Envoy 1.14.4 " + errTooOld}, |
108 |
| - "1.14.5": {expectErr: "Envoy 1.14.5 " + errTooOld}, |
109 |
| - "1.14.6": {expectErr: "Envoy 1.14.6 " + errTooOld}, |
110 |
| - "1.14.7": {expectErr: "Envoy 1.14.7 " + errTooOld}, |
111 |
| - "1.15.0": {expectErr: "Envoy 1.15.0 " + errTooOld}, |
112 |
| - "1.15.1": {expectErr: "Envoy 1.15.1 " + errTooOld}, |
113 |
| - "1.15.2": {expectErr: "Envoy 1.15.2 " + errTooOld}, |
114 |
| - "1.15.3": {expectErr: "Envoy 1.15.3 " + errTooOld}, |
115 |
| - "1.15.4": {expectErr: "Envoy 1.15.4 " + errTooOld}, |
116 |
| - "1.15.5": {expectErr: "Envoy 1.15.5 " + errTooOld}, |
117 |
| - "1.16.1": {expectErr: "Envoy 1.16.1 " + errTooOld}, |
118 |
| - "1.16.2": {expectErr: "Envoy 1.16.2 " + errTooOld}, |
119 |
| - "1.16.3": {expectErr: "Envoy 1.16.3 " + errTooOld}, |
120 |
| - "1.16.4": {expectErr: "Envoy 1.16.4 " + errTooOld}, |
121 |
| - "1.16.5": {expectErr: "Envoy 1.16.5 " + errTooOld}, |
122 |
| - "1.16.6": {expectErr: "Envoy 1.16.6 " + errTooOld}, |
123 |
| - "1.17.4": {expectErr: "Envoy 1.17.4 " + errTooOld}, |
124 |
| - "1.18.6": {expectErr: "Envoy 1.18.6 " + errTooOld}, |
125 |
| - "1.19.5": {expectErr: "Envoy 1.19.5 " + errTooOld}, |
126 |
| - "1.20.7": {expectErr: "Envoy 1.20.7 " + errTooOld}, |
127 |
| - "1.21.5": {expectErr: "Envoy 1.21.5 " + errTooOld}, |
128 |
| - "1.22.0": {expectErr: "Envoy 1.22.0 " + errTooOld}, |
129 |
| - "1.22.1": {expectErr: "Envoy 1.22.1 " + errTooOld}, |
130 |
| - "1.22.2": {expectErr: "Envoy 1.22.2 " + errTooOld}, |
131 |
| - "1.22.3": {expectErr: "Envoy 1.22.3 " + errTooOld}, |
132 |
| - "1.22.4": {expectErr: "Envoy 1.22.4 " + errTooOld}, |
133 |
| - "1.22.5": {expectErr: "Envoy 1.22.5 " + errTooOld}, |
134 |
| - "1.22.6": {expectErr: "Envoy 1.22.6 " + errTooOld}, |
135 |
| - "1.22.7": {expectErr: "Envoy 1.22.7 " + errTooOld}, |
136 |
| - "1.22.8": {expectErr: "Envoy 1.22.8 " + errTooOld}, |
137 |
| - "1.22.9": {expectErr: "Envoy 1.22.9 " + errTooOld}, |
138 |
| - "1.22.10": {expectErr: "Envoy 1.22.10 " + errTooOld}, |
139 |
| - "1.22.11": {expectErr: "Envoy 1.22.11 " + errTooOld}, |
| 84 | + // Bad versions. |
| 85 | + minMajorVersion := version.Must(version.NewVersion(getMinEnvoyVersion())) |
| 86 | + minMajorVersionMajorPart := minMajorVersion.Segments()[len(minMajorVersion.Segments())-2] |
| 87 | + for major := 9; major < minMajorVersionMajorPart; major++ { |
| 88 | + for minor := 0; minor < 10; minor++ { |
| 89 | + cases = append(cases, testcase{ |
| 90 | + name: version.Must(version.NewVersion(fmt.Sprintf("1.%d.%d", major, minor))).String(), |
| 91 | + expectErr: errTooOld, |
| 92 | + }) |
| 93 | + } |
140 | 94 | }
|
141 | 95 |
|
142 |
| - // Insert a bunch of valid versions. |
143 |
| - // Populate feature flags here when appropriate. See consul 1.10.x for reference. |
144 |
| - /* Example from 1.18 |
145 |
| - for _, v := range []string{ |
146 |
| - "1.18.0", "1.18.1", "1.18.2", "1.18.3", "1.18.4", "1.18.5", "1.18.6", |
147 |
| - } { |
148 |
| - cases[v] = testcase{expect: SupportedProxyFeatures{ |
149 |
| - ForceLDSandCDSToAlwaysUseWildcardsOnReconnect: true, |
150 |
| - }} |
151 |
| - } |
152 |
| - */ |
153 |
| - for _, v := range []string{ |
154 |
| - "1.26.0", "1.26.1", "1.26.2", "1.26.3", "1.26.4", "1.26.5", "1.26.6", "1.26.7", "1.26.8", |
155 |
| - "1.27.0", "1.27.1", "1.27.2", "1.27.3", "1.27.4", "1.27.5", "1.27.6", |
156 |
| - "1.28.0", "1.28.1", "1.28.2", "1.28.3", "1.28.4", |
157 |
| - "1.29.0", "1.29.1", "1.29.2", "1.29.3", "1.29.4", "1.29.5", |
158 |
| - } { |
159 |
| - cases[v] = testcase{expect: SupportedProxyFeatures{}} |
| 96 | + // Good versions. |
| 97 | + // Sort ascending so test output is ordered like bad cases above. |
| 98 | + var supportedVersionsAscending []string |
| 99 | + supportedVersionsAscending = append(supportedVersionsAscending, EnvoyVersions...) |
| 100 | + slices.Reverse(supportedVersionsAscending) |
| 101 | + for _, v := range supportedVersionsAscending { |
| 102 | + envoyVersion := version.Must(version.NewVersion(v)) |
| 103 | + // e.g. this is 27 in 1.27.4 |
| 104 | + versionMajorPart := envoyVersion.Segments()[len(envoyVersion.Segments())-2] |
| 105 | + // e.g. this is 4 in 1.27.4 |
| 106 | + versionMinorPart := envoyVersion.Segments()[len(envoyVersion.Segments())-1] |
| 107 | + |
| 108 | + // Create synthetic minor versions from .0 through the actual configured version. |
| 109 | + for minor := 0; minor <= versionMinorPart; minor++ { |
| 110 | + minorVersion := version.Must(version.NewVersion(fmt.Sprintf("1.%d.%d", versionMajorPart, minor))) |
| 111 | + cases = append(cases, testcase{ |
| 112 | + name: minorVersion.String(), |
| 113 | + expect: SupportedProxyFeatures{}, |
| 114 | + }) |
| 115 | + } |
160 | 116 | }
|
161 | 117 |
|
162 |
| - for name, tc := range cases { |
| 118 | + for _, tc := range cases { |
163 | 119 | tc := tc
|
164 |
| - t.Run(name, func(t *testing.T) { |
165 |
| - sf, err := DetermineSupportedProxyFeaturesFromString(name) |
| 120 | + t.Run(tc.name, func(t *testing.T) { |
| 121 | + sf, err := DetermineSupportedProxyFeaturesFromString(tc.name) |
166 | 122 | if tc.expectErr == "" {
|
167 | 123 | require.NoError(t, err)
|
168 | 124 | require.Equal(t, tc.expect, sf)
|
|
0 commit comments