@@ -2,11 +2,13 @@ package config
22
33import (
44 "embed"
5+ "os"
56 "path/filepath"
67 "strings"
78 "testing"
89
910 k0sconfig "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1"
11+ "github.com/replicatedhq/embedded-cluster/pkg/release"
1012 "github.com/replicatedhq/embedded-cluster/pkg/runtimeconfig"
1113 "github.com/stretchr/testify/assert"
1214 "github.com/stretchr/testify/require"
@@ -101,3 +103,122 @@ func TestRenderK0sConfig(t *testing.T) {
101103 assert .Equal (t , DefaultServiceNodePortRange , cfg .Spec .API .ExtraArgs ["service-node-port-range" ])
102104 assert .Contains (t , cfg .Spec .API .SANs , "kubernetes.default.svc.cluster.local" )
103105}
106+
107+ func TestInstallFlags (t * testing.T ) {
108+ // Create a pair of temporary k0s config files
109+ k0sCfg := k0sconfig .DefaultClusterConfig ()
110+ k0sDefaultConfigBytes , err := k8syaml .Marshal (k0sCfg )
111+ require .NoError (t , err )
112+
113+ defaultTmpFile , err := os .CreateTemp ("" , "k0s-*.yaml" )
114+ require .NoError (t , err )
115+ defer os .Remove (defaultTmpFile .Name ())
116+
117+ err = os .WriteFile (defaultTmpFile .Name (), k0sDefaultConfigBytes , 0644 )
118+ require .NoError (t , err )
119+
120+ k0sCfg .Spec .WorkerProfiles = []k0sconfig.WorkerProfile {
121+ {
122+ Name : "test-profile" ,
123+ },
124+ }
125+ k0sProfileConfigBytes , err := k8syaml .Marshal (k0sCfg )
126+ require .NoError (t , err )
127+
128+ profileTmpFile , err := os .CreateTemp ("" , "k0s-*.yaml" )
129+ require .NoError (t , err )
130+ defer os .Remove (profileTmpFile .Name ())
131+
132+ err = os .WriteFile (profileTmpFile .Name (), k0sProfileConfigBytes , 0644 )
133+ require .NoError (t , err )
134+
135+ tests := []struct {
136+ name string
137+ nodeIP string
138+ releaseData map [string ][]byte
139+ expectedFlags []string
140+ expectedError bool
141+ expectedErrMsg string
142+ k0sConfigPath string
143+ }{
144+ {
145+ name : "default configuration" ,
146+ nodeIP : "192.168.1.10" ,
147+ k0sConfigPath : defaultTmpFile .Name (),
148+ releaseData : map [string ][]byte {},
149+ expectedFlags : []string {
150+ "install" ,
151+ "controller" ,
152+ "--labels" , "kots.io/embedded-cluster-role-0=controller,kots.io/embedded-cluster-role=total-1" ,
153+ "--enable-worker" ,
154+ "--no-taints" ,
155+ "-c" , runtimeconfig .PathToK0sConfig (),
156+ "--kubelet-extra-args" , "--node-ip=192.168.1.10" ,
157+ "--data-dir" , runtimeconfig .EmbeddedClusterK0sSubDir (),
158+ "--disable-components" , "konnectivity-server" ,
159+ "--enable-dynamic-config" ,
160+ },
161+ expectedError : false ,
162+ },
163+ {
164+ name : "custom controller role name with worker profile" ,
165+ nodeIP : "192.168.1.10" ,
166+ k0sConfigPath : profileTmpFile .Name (),
167+ releaseData : map [string ][]byte {
168+ "cluster-config.yaml" : []byte (`
169+ apiVersion: embeddedcluster.replicated.com/v1beta1
170+ kind: Config
171+ metadata:
172+ name: embedded-cluster
173+ spec:
174+ roles:
175+ controller:
176+ name: custom-controller
177+ labels:
178+ environment: test
179+ ` ),
180+ },
181+ expectedFlags : []string {
182+ "install" ,
183+ "controller" ,
184+ "--labels" , "environment=test,kots.io/embedded-cluster-role-0=custom-controller,kots.io/embedded-cluster-role=total-1" ,
185+ "--enable-worker" ,
186+ "--no-taints" ,
187+ "-c" , runtimeconfig .PathToK0sConfig (),
188+ "--profile=test-profile" ,
189+ "--kubelet-extra-args" , "--node-ip=192.168.1.10" ,
190+ "--data-dir" , runtimeconfig .EmbeddedClusterK0sSubDir (),
191+ "--disable-components" , "konnectivity-server" ,
192+ "--enable-dynamic-config" ,
193+ },
194+ expectedError : false ,
195+ },
196+ }
197+
198+ for _ , tt := range tests {
199+ t .Run (tt .name , func (t * testing.T ) {
200+ // Setup test data
201+ err := release .SetReleaseDataForTests (tt .releaseData )
202+ require .NoError (t , err )
203+
204+ // Set the override for the k0s config path
205+ k0sConfigPathOverride = tt .k0sConfigPath
206+
207+ // Cleanup after test
208+ t .Cleanup (func () {
209+ release .SetReleaseDataForTests (nil )
210+ k0sConfigPathOverride = ""
211+ })
212+
213+ // Run test
214+ flags , err := InstallFlags (tt .nodeIP )
215+ if tt .expectedError {
216+ require .Error (t , err )
217+ assert .Contains (t , err .Error (), tt .expectedErrMsg )
218+ } else {
219+ require .NoError (t , err )
220+ assert .Equal (t , tt .expectedFlags , flags )
221+ }
222+ })
223+ }
224+ }
0 commit comments