@@ -8,99 +8,98 @@ import (
8
8
"testing"
9
9
"time"
10
10
11
+ "github.com/AlekSi/pointer"
12
+ "github.com/stretchr/testify/assert"
11
13
"github.com/stretchr/testify/require"
12
- metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
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"
17
+ "github.com/talos-systems/talos/pkg/machinery/config/configloader"
18
+ "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1"
19
+ corev1 "k8s.io/api/core/v1"
13
20
"k8s.io/apimachinery/pkg/types"
14
- "k8s.io/client-go/kubernetes/scheme"
15
- capiv1 "sigs.k8s.io/cluster-api/api/v1alpha3"
16
- "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
17
-
18
- bootstrapv1alpha3 "github.com/talos-systems/cluster-api-bootstrap-provider-talos/api/v1alpha3"
19
- // +kubebuilder:scaffold:imports
20
21
)
21
22
22
23
func TestIntegration (t * testing.T ) {
23
24
ctx , c := setupSuite (t )
24
25
25
- // namespaced objects
26
- var (
27
- clusterName = "test-cluster"
28
- machineName = "test-machine"
29
- dataSecretName = "test-secret"
30
- talosConfigName = "test-config"
31
- )
32
-
33
26
t .Run ("Basic" , func (t * testing.T ) {
34
27
t .Parallel ()
35
- namespaceName := setupTest (ctx , t , c )
36
-
37
- cluster := & capiv1.Cluster {
38
- ObjectMeta : metav1.ObjectMeta {
39
- Namespace : namespaceName ,
40
- Name : clusterName ,
41
- },
42
- Spec : capiv1.ClusterSpec {
43
- ClusterNetwork : & capiv1.ClusterNetwork {
44
- Pods : & capiv1.NetworkRanges {
45
- CIDRBlocks : []string {"192.168.0.0/16" },
46
- },
47
- ServiceDomain : "cluster.local" ,
48
- Services : & capiv1.NetworkRanges {
49
- CIDRBlocks : []string {"10.128.0.0/12" },
50
- },
51
- },
52
- },
53
- }
54
- require .NoError (t , c .Create (ctx , cluster ), "can't create a cluster" )
55
-
56
- cluster .Status .InfrastructureReady = true
57
- require .NoError (t , c .Status ().Update (ctx , cluster ))
58
-
59
- machine := & capiv1.Machine {
60
- ObjectMeta : metav1.ObjectMeta {
61
- Namespace : namespaceName ,
62
- Name : machineName ,
63
- },
64
- Spec : capiv1.MachineSpec {
65
- ClusterName : cluster .Name ,
66
- Bootstrap : capiv1.Bootstrap {
67
- DataSecretName : & dataSecretName ,
68
- },
69
- },
70
- }
71
-
72
- require .NoError (t , controllerutil .SetOwnerReference (cluster , machine , scheme .Scheme ))
73
- require .NoError (t , c .Create (ctx , machine ))
74
-
75
- config := & bootstrapv1alpha3.TalosConfig {
76
- ObjectMeta : metav1.ObjectMeta {
77
- Namespace : namespaceName ,
78
- Name : talosConfigName ,
79
- },
80
- Spec : bootstrapv1alpha3.TalosConfigSpec {
81
- GenerateType : "init" ,
82
- },
83
- }
84
- require .NoError (t , controllerutil .SetOwnerReference (machine , config , scheme .Scheme ))
85
28
86
- err := c .Create (ctx , config )
87
- require .NoError (t , err )
29
+ namespaceName := setupTest (ctx , t , c )
30
+ cluster := createCluster (ctx , t , c , namespaceName )
31
+ machine := createMachine (ctx , t , c , cluster )
32
+ talosConfig := createTalosConfig (ctx , t , c , machine )
88
33
34
+ // wait for TalosConfig to be reconciled
89
35
for ctx .Err () == nil {
90
36
key := types.NamespacedName {
91
37
Namespace : namespaceName ,
92
- Name : talosConfigName ,
38
+ Name : talosConfig . Name ,
93
39
}
94
40
95
- err = c .Get (ctx , key , config )
41
+ err : = c .Get (ctx , key , talosConfig )
96
42
require .NoError (t , err )
97
43
98
- if config .Status .Ready {
44
+ if talosConfig .Status .Ready {
99
45
break
100
46
}
101
47
102
- t .Logf ("Config: %+v" , config )
103
- time .Sleep (5 * time .Second )
48
+ t .Log ("Waiting ..." )
49
+ sleepCtx (ctx , 5 * time .Second )
50
+ }
51
+
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
+
67
+ var caSecret corev1.Secret
68
+ key := types.NamespacedName {
69
+ Namespace : namespaceName ,
70
+ Name : cluster .Name + "-ca" ,
71
+ }
72
+ 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
+
78
+ var talosSecret corev1.Secret
79
+ key = types.NamespacedName {
80
+ Namespace : namespaceName ,
81
+ Name : cluster .Name + "-talos" ,
104
82
}
83
+ 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
+
89
+ var bootstrapDataSecret corev1.Secret
90
+ key = types.NamespacedName {
91
+ Namespace : namespaceName ,
92
+ Name : machine .Name + "-bootstrap-data" ,
93
+ }
94
+ 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
+
99
+ provider .(* v1alpha1.Config ).ClusterConfig .ControlPlane .Endpoint .Host = "FIXME"
100
+
101
+ // TODO more tests
102
+ _ , err = provider .Validate (runtimeMode {false }, config .WithStrict ())
103
+ require .NoError (t , err )
105
104
})
106
105
}
0 commit comments