Skip to content

Commit ef60735

Browse files
committed
Move TestDynamicCertificates to a separate file
And guard it with go:build linux.
1 parent 74e8a5b commit ef60735

File tree

2 files changed

+186
-171
lines changed

2 files changed

+186
-171
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
//go:build linux
2+
3+
package certsyncpod
4+
5+
import (
6+
"bytes"
7+
"context"
8+
"os"
9+
"path/filepath"
10+
"sync"
11+
"testing"
12+
"time"
13+
14+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15+
"k8s.io/apimachinery/pkg/util/wait"
16+
"k8s.io/apiserver/pkg/server/dynamiccertificates"
17+
18+
"github.com/openshift/library-go/pkg/operator/events/eventstesting"
19+
)
20+
21+
// TestDynamicCertificates makes sure the receiving side of certificate synchronization works as expected.
22+
// It reads and watches the certificates being synchronized in the same way as e.g. kube-apiserver,
23+
// the very same libraries are being used.
24+
func TestDynamicCertificates(t *testing.T) {
25+
const typeName = "secret"
26+
om := metav1.ObjectMeta{
27+
Namespace: "openshift-kube-apiserver",
28+
Name: "s1",
29+
}
30+
31+
// Write the keypair into a secret directory.
32+
secretDir := filepath.Join(t.TempDir(), "secrets", om.Name)
33+
certFile := filepath.Join(secretDir, "tls.crt")
34+
keyFile := filepath.Join(secretDir, "tls.key")
35+
36+
if err := os.MkdirAll(secretDir, 0700); err != nil {
37+
t.Fatalf("Failed to create secret directory %q: %v", secretDir, err)
38+
}
39+
if err := os.WriteFile(certFile, []byte(tlsCert), 0600); err != nil {
40+
t.Fatalf("Failed to write TLS certificate into %q: %v", certFile, err)
41+
}
42+
if err := os.WriteFile(keyFile, []byte(tlsKey), 0600); err != nil {
43+
t.Fatalf("Failed to write TLS key into %q: %v", keyFile, err)
44+
}
45+
46+
// Start the watcher.
47+
// This reads the keypair synchronously so the initial state is loaded here.
48+
dc, err := dynamiccertificates.NewDynamicServingContentFromFiles("localhost TLS", certFile, keyFile)
49+
if err != nil {
50+
t.Fatalf("Failed to init dynamic certificate: %v", err)
51+
}
52+
53+
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
54+
var wg sync.WaitGroup
55+
wg.Add(1)
56+
go func() {
57+
defer wg.Done()
58+
dc.Run(ctx, 1)
59+
}()
60+
defer wg.Wait()
61+
defer cancel()
62+
63+
// Poll until update detected.
64+
recorder := eventstesting.NewTestingEventRecorder(t)
65+
files := map[string]string{
66+
"tls.crt": tlsCertUpdated,
67+
"tls.key": tlsKeyUpdated,
68+
}
69+
err = wait.PollUntilContextCancel(ctx, 250*time.Millisecond, true, func(ctx context.Context) (bool, error) {
70+
// Replace the secret directory.
71+
if err := writeFiles(&realFS, recorder, typeName, om, secretDir, files, 0600); err != nil {
72+
t.Errorf("Failed to write files: %v", err)
73+
return false, err
74+
}
75+
76+
// Check the loaded content matches.
77+
// This is most probably updated based on write in a previous Poll invocation.
78+
cert, key := dc.CurrentCertKeyContent()
79+
return bytes.Equal(cert, []byte(tlsCertUpdated)) && bytes.Equal(key, []byte(tlsKeyUpdated)), nil
80+
})
81+
if err != nil {
82+
t.Fatalf("Failed to wait for dynamic certificate: %v", err)
83+
}
84+
}
85+
86+
const (
87+
tlsCert = `-----BEGIN CERTIFICATE-----
88+
MIIDDzCCAfegAwIBAgIUNizZp8wiNCSTBiwtNLz2uS/UxJYwDQYJKoZIhvcNAQEL
89+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDkxODEyMDI1NFoXDTI1MTAx
90+
ODEyMDI1NFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
91+
AAOCAQ8AMIIBCgKCAQEAwCFBu6vi5JqeCEHJvE97xdhlXX2BEgWS16ikEa6oGOBi
92+
Q0P1TdW+0GgQYRviuWq0/3Ql2GnrWlulVMZfVGDnwVJNjRvNbPUCOXieP8JIj79x
93+
Hua6tdwvin69kB6yvhMKPi6h5tmPDgxmcOAU/IZzSkm62kJ8ygJ7nlpD3VcBowj1
94+
2nGQf3KVXG50YU+/2IFP8iaEj/KsCs1yd0oXlqHHELIWq+9scHYdA1pH+CqZC+u0
95+
CKJKG2Umgj4cgby9ltOqOsmr2rMXVq5tle381tu9QGqEeJJ3TpnmCb9z5+TLdUAB
96+
jdBHQKiKXhhVpIKbDScsZ1rmVZ34t1jFFJlHFflqCQIDAQABo1kwVzAUBgNVHREE
97+
DTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMB
98+
MB0GA1UdDgQWBBSzdSuyIKFJtdCOA3nPtV/WJMhuNDANBgkqhkiG9w0BAQsFAAOC
99+
AQEAWhg6qUZ5l6qHx6OdhlekkVtmgAIplxtpMHbmCjMFcTA+qc1W56a6X/9fPRyy
100+
Wb/8B2biu2cQ9uoLiiZo+2VhnsmvbqeSWhAVPkTWf1ojDq3VmfK+y12rwX5t4VOv
101+
NdOJabSufjjmTGzjuNqD+6n43JRu42TCAgbMccdGQzHk9xIBRD7Ik886PYYe3E+G
102+
4Wha7/jMFaUF0z0FBqIKJbDPB51R2w8g5D5mR4Ylm9tRidxz39qfNHNEWPpp/pVH
103+
l5h1v53gThzzktCzKQKjgUTzUi4qvqnxRPxHgixfAbvvSYlC3+HizVSuK6j53t+k
104+
qdEbfjD2fIjpTY91oFX78tVdoA==
105+
-----END CERTIFICATE-----
106+
`
107+
tlsKey = `-----BEGIN PRIVATE KEY-----
108+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAIUG7q+Lkmp4I
109+
Qcm8T3vF2GVdfYESBZLXqKQRrqgY4GJDQ/VN1b7QaBBhG+K5arT/dCXYaetaW6VU
110+
xl9UYOfBUk2NG81s9QI5eJ4/wkiPv3Ee5rq13C+Kfr2QHrK+Ewo+LqHm2Y8ODGZw
111+
4BT8hnNKSbraQnzKAnueWkPdVwGjCPXacZB/cpVcbnRhT7/YgU/yJoSP8qwKzXJ3
112+
SheWoccQshar72xwdh0DWkf4KpkL67QIokobZSaCPhyBvL2W06o6yavasxdWrm2V
113+
7fzW271AaoR4kndOmeYJv3Pn5Mt1QAGN0EdAqIpeGFWkgpsNJyxnWuZVnfi3WMUU
114+
mUcV+WoJAgMBAAECggEAEMuXdHFtLzC4+d3OZdDI8B2fltGe09V65bFPTmBnP212
115+
CY1KR1iVCqDeNa77XdwPIHmlyUpREaALTuLceILUH5kzQE+a4Jh2blG1+7rfHvnM
116+
SLhAwB8UZNX5ejzEwUrmzVLEQmroT4ET/3AHRZ/3OhpB5EyFnh8jcU9QuWuesAK0
117+
biAfn67Vxc3AOUuzvQMqltgJSzc6MBUETyBmxUEXsGxpSw3Ma/ieMPs8hTS60aU3
118+
TrzkgHD9mBTdpLpSYHmAXYJJOTylVcYYuTWzEoEjNJDTaZf/HiQTC93NZ/M2Kl6s
119+
kSwT+HaRDfU0BaBbjfPNSXwEUhSvd0JuEie7cpdAxQKBgQD7ivVizx9QUbQkJfkb
120+
OokCXo/Tjz5uqGq7gMvDdnl34PMju/tG/e+DHphEpetd5cDPg5nEpwhDe7ztbepn
121+
8UrDTV5RPkwNs9u9eskW8cmELsKjpoodMCXOeEaT3QeYA2fwe5A1X3ILSAPPZAOK
122+
0YKzr3S/7JSMCiD8+OlxrkPVywKBgQDDiMqFugvMUcDhgByj9aVitkfn3VXB/tGE
123+
D3DLLoHnt8MpehIbzkMeoDEqqz+K8ItHuOdPSA7dhqP2CG2zDBeWlVxlfZ7S1WMW
124+
YEwp2frdnLbCXwo93zc5Cje2XMnkU44GzPW1LdLTbY/PodkNAHa0F4LeayMBKsmH
125+
d7Oxu2rk+wKBgFWhOmPGqpxHFBHyM1kHljiORFv6uYAmKR9nevYxUKx0kZCqn6HN
126+
NEnokmFcMkGmwvphjGkbi36dkvUoo9F6nL7bia4SjQVlIvrf37DF4pny6SOYwA+r
127+
olMlMrGHXtxq3GlLRw5ETah1fYaOP350UBAnPJFRUkhR8mTrv1yJvGH9AoGAUPTL
128+
1P4ocFnQ4Axoz0GfTfVmZAtxvDZCjMjPzG/e/Q9KUFvoL3cAtydf8+ifEGlzYSif
129+
LGYLMZDTRcRLlvwEsCX68VJHdcc/lT4dip5jjWmbCXLMDL3kYUtnsatNM6mcfhhS
130+
CseEKGGOT0sVUJrGit3JI0l8XrlWYy4eShHsug0CgYBDTFYrnc8pSZn5SQwHVRkc
131+
hEW+WWdaTjmuaUx0I/ce4rocLHiO+bTM2hjYNL52xn62L2N7p+1wQBfChcI1wFbU
132+
w6An158oz0ldvlmxQk7CIyEoQNY+snSxOmZFXILDdp7mPbHhtavJj5vruY5VIHYs
133+
n4dXmvaEIZfo5M7UBlYW1A==
134+
-----END PRIVATE KEY-----
135+
`
136+
tlsCertUpdated = `-----BEGIN CERTIFICATE-----
137+
MIIDDzCCAfegAwIBAgIUIcqFTfK2NxKU2YAyPdt/IL2TGl0wDQYJKoZIhvcNAQEL
138+
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDkxODEyNDI1NloXDTI1MTAx
139+
ODEyNDI1NlowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
140+
AAOCAQ8AMIIBCgKCAQEAlwJe+8tKBE/Q+epUKl7UI+R/8es0U11BuaQIF6iT0FvE
141+
DbEyFLAxvNPoE9m+Bu/wXivzkfEcXaxpHcDE6jA/A51TX/cDKwZAD6aMOovmG4b+
142+
SJDTtbtRzZcEwyWqwK43cbK12O/D+TTV2/0lZYisA/EoAoWjGb6uY053xcBn6+Cf
143+
+6+cZ5slBizrIcY87U2a039hRBaAb/1Wss+Ogj22eYJotYxFeuptWhqKP4cvn6nZ
144+
r+HPaio/Eq2LRVb0tAzSuIATleo9k9443EnNB63TkgeW2RTTsFvSK6R7EWN4Kcdk
145+
ubxhPMuUyWgCsSEwYTu19BVrwBIlZjZpNETsqtbDbQIDAQABo1kwVzAUBgNVHREE
146+
DTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMB
147+
MB0GA1UdDgQWBBSkjhnvdVmMb+9DKQ4lQNmnwM1IHjANBgkqhkiG9w0BAQsFAAOC
148+
AQEAU0YlNhE0iaNJk/rvlXqkD/1O4b7pM8+aOHN54crVAgaA3fNZOcNelMuxPhFj
149+
mHpvM8L09wwlueVHudFier5g41mhgbkN7jsHZJlKG7ZjW5GJVggshn+bFmAYK/VS
150+
JSvJe+QcUMJeWANjbV3pMgg3Is/edhOMeJawvqHjSQMNT6qln4/9MgBTuSiEnpOh
151+
3MzmMXaFQLfFIDeuQY0dTM6Sx2Yn8EAmMuhjClLUdlPMskOk4vasqnbZuARp6bUe
152+
ZofmJ2YNG4PsXZQak7p6WSkt9HqGll7a9UBFSAI2O4a3D3MahdRNMcwi8LDzZr/y
153+
Vj72VewkK8yf+sPJ/nmkY/2j/w==
154+
-----END CERTIFICATE-----
155+
`
156+
tlsKeyUpdated = `-----BEGIN PRIVATE KEY-----
157+
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXAl77y0oET9D5
158+
6lQqXtQj5H/x6zRTXUG5pAgXqJPQW8QNsTIUsDG80+gT2b4G7/BeK/OR8RxdrGkd
159+
wMTqMD8DnVNf9wMrBkAPpow6i+Ybhv5IkNO1u1HNlwTDJarArjdxsrXY78P5NNXb
160+
/SVliKwD8SgChaMZvq5jTnfFwGfr4J/7r5xnmyUGLOshxjztTZrTf2FEFoBv/Vay
161+
z46CPbZ5gmi1jEV66m1aGoo/hy+fqdmv4c9qKj8SrYtFVvS0DNK4gBOV6j2T3jjc
162+
Sc0HrdOSB5bZFNOwW9IrpHsRY3gpx2S5vGE8y5TJaAKxITBhO7X0FWvAEiVmNmk0
163+
ROyq1sNtAgMBAAECggEADbGaWW0C5kcypScZwMnepO6Yp6Bzm0euqR312edgmBlq
164+
Ou+hofykVgJFXl91ev2RJ4kGymo570iuM5OCh9YeML64i9BDikhD0OeCeeCr2j0w
165+
m/X+LNGyxlj2hpfI1zY1MutI0EZV2ChxaESZeo6dQrJAtZHWy4PeHoVEGTuscNhH
166+
FZSUjqnJxxYUIH5ypHF13yYE++BtTfUW0lKVoYjV1w8a/qKiJTLukZy452wFkJ6a
167+
pwOmZF0F5oxrhe8hdG6WP3CeGnr4Bv6OKSmBG3N/fNbEXfk7zMLiZo74hUYgrKfy
168+
YfwHI5pbwURl+Ust69uyn8EDRfBhqQCNqdB4iNOA4QKBgQDOnx3MrluSDSb+kJ86
169+
CwwN6MCWLn20Rq36afmTW8iUvSmbKO/KyYbrVY/+qsoSQ89L3doE5O2YHsu08OJ7
170+
BGJMxfFZ71+OTcvCl5iirkg/2g530cf1/QcYhtqc6+WDvluZUxt4ZpE+jyERQaG3
171+
EzaJLPoIbMT+DyCwfXcKWjndCQKBgQC7GPRzA4oTj0csxLuH8y4yIT2wbMPHiSML
172+
f96OHroUhBeVbruL4y5cu9EJyYKIM9Q1yi13Ce+T+YLlFvUgUpPK/zpF5sPICz+Z
173+
TRs055t3tG4QOLm6gfrGlyka6n5CLlANT1mSDghlfh1zXZ1m/vME6cFxwgVzGBlE
174+
ptxBoQiwRQKBgEB+GecRZTOpN0quCYUsfY6536MAz+u9RACto2EDfRAwGxR7Kp25
175+
WYuLIW70EC6zS7j6flqYujCJLDxGE+sh6yzbfAH+XW0lizwp5VKh45tKjMmJiUiW
176+
uehF72abmwAMIrsw3ZovKZbFRiUEv11NefBHQaPvj21de26bOtTYZMdBAoGAMMt9
177+
VVGi/R7s7RwR3I7riV9p+00icjOt1B3xKReSaC9bBznt57nEKaNCDU9kn6kEu1KT
178+
MOyCcxErthuaqmde7B5MUFay0MU+PPkDE3Uj8sA3xDtHFQE5KfnaWo61hwUVE6OS
179+
NKk8P1v4ylGr72SmdK2SKdz0FuQ+Es2BvAwHfBECgYAPVRckudv8Yx4/dXVkhBkM
180+
b5V7VUwWYq2Dmwzf83p2C3gqoXbO8d91pkIQhcc+LhC4umYisNFx5cuEfkzJXTBT
181+
zQWIuZVz5eekCOb+Egi/kBrheenpc+/7NXCx2km1zegN4dn2Njusb0XgLVFMvCkQ
182+
a3PRfBcOqez6+lxuQkb+NQ==
183+
-----END PRIVATE KEY-----
184+
`
185+
)

pkg/operator/staticpod/certsyncpod/certsync_controller_test.go

Lines changed: 1 addition & 171 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,15 @@
11
package certsyncpod
22

33
import (
4-
"bytes"
5-
"context"
64
"errors"
75
"os"
86
"path/filepath"
9-
"sync"
107
"testing"
11-
"time"
128

139
"github.com/google/go-cmp/cmp"
1410

15-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
16-
"k8s.io/apimachinery/pkg/util/wait"
17-
"k8s.io/apiserver/pkg/server/dynamiccertificates"
18-
1911
"github.com/openshift/library-go/pkg/operator/events/eventstesting"
12+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2013
)
2114

2215
func TestWriteFiles(t *testing.T) {
@@ -278,166 +271,3 @@ func failToWriteNth(writeFile writeFileFunc, n int) writeFileFunc {
278271
return writeFile(path, data, perm)
279272
}
280273
}
281-
282-
func TestDynamicCertificates(t *testing.T) {
283-
const typeName = "secret"
284-
om := metav1.ObjectMeta{
285-
Namespace: "openshift-kube-apiserver",
286-
Name: "s1",
287-
}
288-
289-
// Write the keypair into a secret directory.
290-
secretDir := filepath.Join(t.TempDir(), "secrets", om.Name)
291-
certFile := filepath.Join(secretDir, "tls.crt")
292-
keyFile := filepath.Join(secretDir, "tls.key")
293-
294-
if err := os.MkdirAll(secretDir, 0700); err != nil {
295-
t.Fatalf("Failed to create secret directory %q: %v", secretDir, err)
296-
}
297-
if err := os.WriteFile(certFile, []byte(tlsCert), 0600); err != nil {
298-
t.Fatalf("Failed to write TLS certificate into %q: %v", certFile, err)
299-
}
300-
if err := os.WriteFile(keyFile, []byte(tlsKey), 0600); err != nil {
301-
t.Fatalf("Failed to write TLS key into %q: %v", keyFile, err)
302-
}
303-
304-
// Start the watcher.
305-
// This reads the keypair synchronously so the initial state is loaded here.
306-
dc, err := dynamiccertificates.NewDynamicServingContentFromFiles("localhost TLS", certFile, keyFile)
307-
if err != nil {
308-
t.Fatalf("Failed to init dynamic certificate: %v", err)
309-
}
310-
311-
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
312-
var wg sync.WaitGroup
313-
wg.Add(1)
314-
go func() {
315-
defer wg.Done()
316-
dc.Run(ctx, 1)
317-
}()
318-
defer wg.Wait()
319-
defer cancel()
320-
321-
// Poll until update detected.
322-
recorder := eventstesting.NewTestingEventRecorder(t)
323-
files := map[string]string{
324-
"tls.crt": tlsCertUpdated,
325-
"tls.key": tlsKeyUpdated,
326-
}
327-
err = wait.PollUntilContextCancel(ctx, 250*time.Millisecond, true, func(ctx context.Context) (bool, error) {
328-
// Replace the secret directory.
329-
if err := writeFiles(&realFS, recorder, typeName, om, secretDir, files, 0600); err != nil {
330-
t.Errorf("Failed to write files: %v", err)
331-
return false, err
332-
}
333-
334-
// Check the loaded content matches.
335-
// This is most probably updated based on write in a previous Poll invocation.
336-
cert, key := dc.CurrentCertKeyContent()
337-
return bytes.Equal(cert, []byte(tlsCertUpdated)) && bytes.Equal(key, []byte(tlsKeyUpdated)), nil
338-
})
339-
if err != nil {
340-
t.Fatalf("Failed to wait for dynamic certificate: %v", err)
341-
}
342-
}
343-
344-
const (
345-
tlsCert = `-----BEGIN CERTIFICATE-----
346-
MIIDDzCCAfegAwIBAgIUNizZp8wiNCSTBiwtNLz2uS/UxJYwDQYJKoZIhvcNAQEL
347-
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDkxODEyMDI1NFoXDTI1MTAx
348-
ODEyMDI1NFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
349-
AAOCAQ8AMIIBCgKCAQEAwCFBu6vi5JqeCEHJvE97xdhlXX2BEgWS16ikEa6oGOBi
350-
Q0P1TdW+0GgQYRviuWq0/3Ql2GnrWlulVMZfVGDnwVJNjRvNbPUCOXieP8JIj79x
351-
Hua6tdwvin69kB6yvhMKPi6h5tmPDgxmcOAU/IZzSkm62kJ8ygJ7nlpD3VcBowj1
352-
2nGQf3KVXG50YU+/2IFP8iaEj/KsCs1yd0oXlqHHELIWq+9scHYdA1pH+CqZC+u0
353-
CKJKG2Umgj4cgby9ltOqOsmr2rMXVq5tle381tu9QGqEeJJ3TpnmCb9z5+TLdUAB
354-
jdBHQKiKXhhVpIKbDScsZ1rmVZ34t1jFFJlHFflqCQIDAQABo1kwVzAUBgNVHREE
355-
DTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMB
356-
MB0GA1UdDgQWBBSzdSuyIKFJtdCOA3nPtV/WJMhuNDANBgkqhkiG9w0BAQsFAAOC
357-
AQEAWhg6qUZ5l6qHx6OdhlekkVtmgAIplxtpMHbmCjMFcTA+qc1W56a6X/9fPRyy
358-
Wb/8B2biu2cQ9uoLiiZo+2VhnsmvbqeSWhAVPkTWf1ojDq3VmfK+y12rwX5t4VOv
359-
NdOJabSufjjmTGzjuNqD+6n43JRu42TCAgbMccdGQzHk9xIBRD7Ik886PYYe3E+G
360-
4Wha7/jMFaUF0z0FBqIKJbDPB51R2w8g5D5mR4Ylm9tRidxz39qfNHNEWPpp/pVH
361-
l5h1v53gThzzktCzKQKjgUTzUi4qvqnxRPxHgixfAbvvSYlC3+HizVSuK6j53t+k
362-
qdEbfjD2fIjpTY91oFX78tVdoA==
363-
-----END CERTIFICATE-----
364-
`
365-
tlsKey = `-----BEGIN PRIVATE KEY-----
366-
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDAIUG7q+Lkmp4I
367-
Qcm8T3vF2GVdfYESBZLXqKQRrqgY4GJDQ/VN1b7QaBBhG+K5arT/dCXYaetaW6VU
368-
xl9UYOfBUk2NG81s9QI5eJ4/wkiPv3Ee5rq13C+Kfr2QHrK+Ewo+LqHm2Y8ODGZw
369-
4BT8hnNKSbraQnzKAnueWkPdVwGjCPXacZB/cpVcbnRhT7/YgU/yJoSP8qwKzXJ3
370-
SheWoccQshar72xwdh0DWkf4KpkL67QIokobZSaCPhyBvL2W06o6yavasxdWrm2V
371-
7fzW271AaoR4kndOmeYJv3Pn5Mt1QAGN0EdAqIpeGFWkgpsNJyxnWuZVnfi3WMUU
372-
mUcV+WoJAgMBAAECggEAEMuXdHFtLzC4+d3OZdDI8B2fltGe09V65bFPTmBnP212
373-
CY1KR1iVCqDeNa77XdwPIHmlyUpREaALTuLceILUH5kzQE+a4Jh2blG1+7rfHvnM
374-
SLhAwB8UZNX5ejzEwUrmzVLEQmroT4ET/3AHRZ/3OhpB5EyFnh8jcU9QuWuesAK0
375-
biAfn67Vxc3AOUuzvQMqltgJSzc6MBUETyBmxUEXsGxpSw3Ma/ieMPs8hTS60aU3
376-
TrzkgHD9mBTdpLpSYHmAXYJJOTylVcYYuTWzEoEjNJDTaZf/HiQTC93NZ/M2Kl6s
377-
kSwT+HaRDfU0BaBbjfPNSXwEUhSvd0JuEie7cpdAxQKBgQD7ivVizx9QUbQkJfkb
378-
OokCXo/Tjz5uqGq7gMvDdnl34PMju/tG/e+DHphEpetd5cDPg5nEpwhDe7ztbepn
379-
8UrDTV5RPkwNs9u9eskW8cmELsKjpoodMCXOeEaT3QeYA2fwe5A1X3ILSAPPZAOK
380-
0YKzr3S/7JSMCiD8+OlxrkPVywKBgQDDiMqFugvMUcDhgByj9aVitkfn3VXB/tGE
381-
D3DLLoHnt8MpehIbzkMeoDEqqz+K8ItHuOdPSA7dhqP2CG2zDBeWlVxlfZ7S1WMW
382-
YEwp2frdnLbCXwo93zc5Cje2XMnkU44GzPW1LdLTbY/PodkNAHa0F4LeayMBKsmH
383-
d7Oxu2rk+wKBgFWhOmPGqpxHFBHyM1kHljiORFv6uYAmKR9nevYxUKx0kZCqn6HN
384-
NEnokmFcMkGmwvphjGkbi36dkvUoo9F6nL7bia4SjQVlIvrf37DF4pny6SOYwA+r
385-
olMlMrGHXtxq3GlLRw5ETah1fYaOP350UBAnPJFRUkhR8mTrv1yJvGH9AoGAUPTL
386-
1P4ocFnQ4Axoz0GfTfVmZAtxvDZCjMjPzG/e/Q9KUFvoL3cAtydf8+ifEGlzYSif
387-
LGYLMZDTRcRLlvwEsCX68VJHdcc/lT4dip5jjWmbCXLMDL3kYUtnsatNM6mcfhhS
388-
CseEKGGOT0sVUJrGit3JI0l8XrlWYy4eShHsug0CgYBDTFYrnc8pSZn5SQwHVRkc
389-
hEW+WWdaTjmuaUx0I/ce4rocLHiO+bTM2hjYNL52xn62L2N7p+1wQBfChcI1wFbU
390-
w6An158oz0ldvlmxQk7CIyEoQNY+snSxOmZFXILDdp7mPbHhtavJj5vruY5VIHYs
391-
n4dXmvaEIZfo5M7UBlYW1A==
392-
-----END PRIVATE KEY-----
393-
`
394-
tlsCertUpdated = `-----BEGIN CERTIFICATE-----
395-
MIIDDzCCAfegAwIBAgIUIcqFTfK2NxKU2YAyPdt/IL2TGl0wDQYJKoZIhvcNAQEL
396-
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTI1MDkxODEyNDI1NloXDTI1MTAx
397-
ODEyNDI1NlowFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEF
398-
AAOCAQ8AMIIBCgKCAQEAlwJe+8tKBE/Q+epUKl7UI+R/8es0U11BuaQIF6iT0FvE
399-
DbEyFLAxvNPoE9m+Bu/wXivzkfEcXaxpHcDE6jA/A51TX/cDKwZAD6aMOovmG4b+
400-
SJDTtbtRzZcEwyWqwK43cbK12O/D+TTV2/0lZYisA/EoAoWjGb6uY053xcBn6+Cf
401-
+6+cZ5slBizrIcY87U2a039hRBaAb/1Wss+Ogj22eYJotYxFeuptWhqKP4cvn6nZ
402-
r+HPaio/Eq2LRVb0tAzSuIATleo9k9443EnNB63TkgeW2RTTsFvSK6R7EWN4Kcdk
403-
ubxhPMuUyWgCsSEwYTu19BVrwBIlZjZpNETsqtbDbQIDAQABo1kwVzAUBgNVHREE
404-
DTALgglsb2NhbGhvc3QwCwYDVR0PBAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMB
405-
MB0GA1UdDgQWBBSkjhnvdVmMb+9DKQ4lQNmnwM1IHjANBgkqhkiG9w0BAQsFAAOC
406-
AQEAU0YlNhE0iaNJk/rvlXqkD/1O4b7pM8+aOHN54crVAgaA3fNZOcNelMuxPhFj
407-
mHpvM8L09wwlueVHudFier5g41mhgbkN7jsHZJlKG7ZjW5GJVggshn+bFmAYK/VS
408-
JSvJe+QcUMJeWANjbV3pMgg3Is/edhOMeJawvqHjSQMNT6qln4/9MgBTuSiEnpOh
409-
3MzmMXaFQLfFIDeuQY0dTM6Sx2Yn8EAmMuhjClLUdlPMskOk4vasqnbZuARp6bUe
410-
ZofmJ2YNG4PsXZQak7p6WSkt9HqGll7a9UBFSAI2O4a3D3MahdRNMcwi8LDzZr/y
411-
Vj72VewkK8yf+sPJ/nmkY/2j/w==
412-
-----END CERTIFICATE-----
413-
`
414-
tlsKeyUpdated = `-----BEGIN PRIVATE KEY-----
415-
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCXAl77y0oET9D5
416-
6lQqXtQj5H/x6zRTXUG5pAgXqJPQW8QNsTIUsDG80+gT2b4G7/BeK/OR8RxdrGkd
417-
wMTqMD8DnVNf9wMrBkAPpow6i+Ybhv5IkNO1u1HNlwTDJarArjdxsrXY78P5NNXb
418-
/SVliKwD8SgChaMZvq5jTnfFwGfr4J/7r5xnmyUGLOshxjztTZrTf2FEFoBv/Vay
419-
z46CPbZ5gmi1jEV66m1aGoo/hy+fqdmv4c9qKj8SrYtFVvS0DNK4gBOV6j2T3jjc
420-
Sc0HrdOSB5bZFNOwW9IrpHsRY3gpx2S5vGE8y5TJaAKxITBhO7X0FWvAEiVmNmk0
421-
ROyq1sNtAgMBAAECggEADbGaWW0C5kcypScZwMnepO6Yp6Bzm0euqR312edgmBlq
422-
Ou+hofykVgJFXl91ev2RJ4kGymo570iuM5OCh9YeML64i9BDikhD0OeCeeCr2j0w
423-
m/X+LNGyxlj2hpfI1zY1MutI0EZV2ChxaESZeo6dQrJAtZHWy4PeHoVEGTuscNhH
424-
FZSUjqnJxxYUIH5ypHF13yYE++BtTfUW0lKVoYjV1w8a/qKiJTLukZy452wFkJ6a
425-
pwOmZF0F5oxrhe8hdG6WP3CeGnr4Bv6OKSmBG3N/fNbEXfk7zMLiZo74hUYgrKfy
426-
YfwHI5pbwURl+Ust69uyn8EDRfBhqQCNqdB4iNOA4QKBgQDOnx3MrluSDSb+kJ86
427-
CwwN6MCWLn20Rq36afmTW8iUvSmbKO/KyYbrVY/+qsoSQ89L3doE5O2YHsu08OJ7
428-
BGJMxfFZ71+OTcvCl5iirkg/2g530cf1/QcYhtqc6+WDvluZUxt4ZpE+jyERQaG3
429-
EzaJLPoIbMT+DyCwfXcKWjndCQKBgQC7GPRzA4oTj0csxLuH8y4yIT2wbMPHiSML
430-
f96OHroUhBeVbruL4y5cu9EJyYKIM9Q1yi13Ce+T+YLlFvUgUpPK/zpF5sPICz+Z
431-
TRs055t3tG4QOLm6gfrGlyka6n5CLlANT1mSDghlfh1zXZ1m/vME6cFxwgVzGBlE
432-
ptxBoQiwRQKBgEB+GecRZTOpN0quCYUsfY6536MAz+u9RACto2EDfRAwGxR7Kp25
433-
WYuLIW70EC6zS7j6flqYujCJLDxGE+sh6yzbfAH+XW0lizwp5VKh45tKjMmJiUiW
434-
uehF72abmwAMIrsw3ZovKZbFRiUEv11NefBHQaPvj21de26bOtTYZMdBAoGAMMt9
435-
VVGi/R7s7RwR3I7riV9p+00icjOt1B3xKReSaC9bBznt57nEKaNCDU9kn6kEu1KT
436-
MOyCcxErthuaqmde7B5MUFay0MU+PPkDE3Uj8sA3xDtHFQE5KfnaWo61hwUVE6OS
437-
NKk8P1v4ylGr72SmdK2SKdz0FuQ+Es2BvAwHfBECgYAPVRckudv8Yx4/dXVkhBkM
438-
b5V7VUwWYq2Dmwzf83p2C3gqoXbO8d91pkIQhcc+LhC4umYisNFx5cuEfkzJXTBT
439-
zQWIuZVz5eekCOb+Egi/kBrheenpc+/7NXCx2km1zegN4dn2Njusb0XgLVFMvCkQ
440-
a3PRfBcOqez6+lxuQkb+NQ==
441-
-----END PRIVATE KEY-----
442-
`
443-
)

0 commit comments

Comments
 (0)