@@ -6,16 +6,15 @@ package integration
6
6
7
7
import (
8
8
"testing"
9
- "time"
10
9
11
10
"github.com/AlekSi/pointer"
12
11
"github.com/stretchr/testify/assert"
13
12
"github.com/stretchr/testify/require"
14
- "github.com/talos-systems/talos/pkg/machinery/client"
15
- clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config"
16
- "github.com/talos-systems/talos/pkg/machinery/config"
13
+ talosclientconfig "github.com/talos-systems/talos/pkg/machinery/client/config"
14
+ machineconfig "github.com/talos-systems/talos/pkg/machinery/config"
17
15
"github.com/talos-systems/talos/pkg/machinery/config/configloader"
18
- "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1"
16
+ "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/generate"
17
+ "gopkg.in/yaml.v2"
19
18
corev1 "k8s.io/api/core/v1"
20
19
"k8s.io/apimachinery/pkg/types"
21
20
)
@@ -30,76 +29,106 @@ func TestIntegration(t *testing.T) {
30
29
cluster := createCluster (ctx , t , c , namespaceName )
31
30
machine := createMachine (ctx , t , c , cluster )
32
31
talosConfig := createTalosConfig (ctx , t , c , machine )
32
+ waitForReady (ctx , t , c , talosConfig )
33
33
34
- // wait for TalosConfig to be reconciled
35
- for ctx .Err () == nil {
36
- key := types.NamespacedName {
37
- Namespace : namespaceName ,
38
- Name : talosConfig .Name ,
39
- }
40
-
41
- err := c .Get (ctx , key , talosConfig )
34
+ // check talosConfig
35
+ {
36
+ assert .Equal (t , machine .Name + "-bootstrap-data" , pointer .GetString (talosConfig .Status .DataSecretName ), "%+v" , talosConfig )
37
+ clientConfig , err := talosclientconfig .FromString (talosConfig .Status .TalosConfig )
42
38
require .NoError (t , err )
43
-
44
- if talosConfig .Status .Ready {
45
- break
46
- }
47
-
48
- t .Log ("Waiting ..." )
49
- sleepCtx (ctx , 5 * time .Second )
39
+ creds := validateClientConfig (t , clientConfig )
40
+ talosCA := parsePEMCertificate (t , creds .CA )
41
+ _ = talosCA
42
+ // t.Logf("Talos CA:\n%s", spew.Sdump(talosCA))
50
43
}
51
44
52
- assert .Equal (t , machine .Name + "-bootstrap-data" , pointer .GetString (talosConfig .Status .DataSecretName ), "%+v" , talosConfig )
53
-
54
- clientConfig , err := clientconfig .FromString (talosConfig .Status .TalosConfig )
55
- require .NoError (t , err )
56
- assert .Len (t , clientConfig .Contexts , 1 )
57
- assert .NotEmpty (t , clientConfig .Context )
58
- context := clientConfig .Contexts [clientConfig .Context ]
59
- require .NotNil (t , context )
60
-
61
- assert .Empty (t , context .Endpoints )
62
- assert .Empty (t , context .Nodes )
63
- creds , err := client .CredentialsFromConfigContext (context )
64
- require .NoError (t , err )
65
- assert .NotEmpty (t , creds .CA )
66
-
45
+ // get <cluster>-ca secret
67
46
var caSecret corev1.Secret
68
47
key := types.NamespacedName {
69
48
Namespace : namespaceName ,
70
49
Name : cluster .Name + "-ca" ,
71
50
}
72
51
require .NoError (t , c .Get (ctx , key , & caSecret ))
73
- assert .Len (t , caSecret .Data , 2 )
74
- assert .Equal (t , corev1 .SecretTypeOpaque , caSecret .Type ) // TODO why not SecretTypeTLS?
75
- assert .NotEmpty (t , creds .Crt .Certificate , caSecret .Data [corev1 .TLSCertKey ]) // TODO decode and load
76
- assert .NotEmpty (t , caSecret .Data [corev1 .TLSPrivateKeyKey ])
77
52
53
+ // check <cluster>-ca secret
54
+ {
55
+ assert .Len (t , caSecret .Data , 2 )
56
+ assert .Equal (t , corev1 .SecretTypeOpaque , caSecret .Type ) // TODO why not SecretTypeTLS?
57
+ assert .NotEmpty (t , caSecret .Data [corev1 .TLSCertKey ])
58
+ assert .NotEmpty (t , caSecret .Data [corev1 .TLSPrivateKeyKey ])
59
+ kubeCA := parsePEMCertificate (t , caSecret .Data [corev1 .TLSCertKey ])
60
+ _ = kubeCA
61
+ // t.Logf("kubeCA:\n%s", spew.Sdump(kubeCA))
62
+ }
63
+
64
+ // get <cluster>-talos secret
78
65
var talosSecret corev1.Secret
79
66
key = types.NamespacedName {
80
67
Namespace : namespaceName ,
81
68
Name : cluster .Name + "-talos" ,
82
69
}
83
70
require .NoError (t , c .Get (ctx , key , & talosSecret ))
84
- assert .Len (t , talosSecret .Data , 3 )
85
- assert .NotEmpty (t , talosSecret .Data ["certs" ]) // TODO more tests
86
- assert .NotEmpty (t , talosSecret .Data ["kubeSecrets" ])
87
- assert .NotEmpty (t , talosSecret .Data ["trustdInfo" ])
88
71
72
+ // check <cluster>-talos secret
73
+ {
74
+ assert .Len (t , talosSecret .Data , 3 )
75
+ assert .NotEmpty (t , talosSecret .Data ["certs" ])
76
+ assert .NotEmpty (t , talosSecret .Data ["kubeSecrets" ])
77
+ assert .NotEmpty (t , talosSecret .Data ["trustdInfo" ])
78
+ }
79
+
80
+ // get <machine>-bootstrap-data secret
89
81
var bootstrapDataSecret corev1.Secret
90
82
key = types.NamespacedName {
91
83
Namespace : namespaceName ,
92
84
Name : machine .Name + "-bootstrap-data" ,
93
85
}
94
86
require .NoError (t , c .Get (ctx , key , & bootstrapDataSecret ))
95
- assert .Len (t , bootstrapDataSecret .Data , 1 )
96
- provider , err := configloader .NewFromBytes (bootstrapDataSecret .Data ["value" ])
97
- require .NoError (t , err )
98
87
99
- provider .(* v1alpha1.Config ).ClusterConfig .ControlPlane .Endpoint .Host = "FIXME"
88
+ // check <machine>-bootstrap-data secret
89
+ var provider machineconfig.Provider
90
+ {
91
+ assert .Len (t , bootstrapDataSecret .Data , 1 )
92
+ var err error
93
+ provider , err = configloader .NewFromBytes (bootstrapDataSecret .Data ["value" ])
94
+ require .NoError (t , err )
95
+ _ , err = provider .Validate (runtimeMode {false }, machineconfig .WithStrict ())
96
+ require .NoError (t , err )
97
+ }
98
+
99
+ // cross-checks
100
+ {
101
+ secretsBundle := generate .NewSecretsBundleFromConfig (generate .NewClock (), provider )
102
+
103
+ var certs generate.Certs
104
+ require .NoError (t , yaml .Unmarshal (talosSecret .Data ["certs" ], & certs ))
105
+ assert .NotEmpty (t , certs .Admin )
106
+ certs .Admin = nil
107
+ assert .Equal (t , secretsBundle .Certs , & certs )
108
+ assert .Equal (t , caSecret .Data [corev1 .TLSCertKey ], certs .K8s .Crt )
109
+
110
+ var kubeSecrets generate.Secrets
111
+ require .NoError (t , yaml .Unmarshal (talosSecret .Data ["kubeSecrets" ], & kubeSecrets ))
112
+ assert .Equal (t , secretsBundle .Secrets , & kubeSecrets )
113
+
114
+ var trustdInfo generate.TrustdInfo
115
+ require .NoError (t , yaml .Unmarshal (talosSecret .Data ["trustdInfo" ], & trustdInfo ))
116
+ assert .Equal (t , secretsBundle .TrustdInfo , & trustdInfo )
117
+ }
118
+
119
+ // create the second machine
120
+ machine2 := createMachine (ctx , t , c , cluster )
121
+ talosConfig2 := createTalosConfig (ctx , t , c , machine2 )
122
+ waitForReady (ctx , t , c , talosConfig2 )
123
+
124
+ // get <machine>-bootstrap-data secret
125
+ var bootstrapDataSecret2 corev1.Secret
126
+ key = types.NamespacedName {
127
+ Namespace : namespaceName ,
128
+ Name : machine2 .Name + "-bootstrap-data" ,
129
+ }
130
+ require .NoError (t , c .Get (ctx , key , & bootstrapDataSecret2 ))
100
131
101
- // TODO more tests
102
- _ , err = provider .Validate (runtimeMode {false }, config .WithStrict ())
103
- require .NoError (t , err )
132
+ assert .Equal (t , bootstrapDataSecret .Data , bootstrapDataSecret2 .Data ) // ?!
104
133
})
105
134
}
0 commit comments