@@ -2,8 +2,12 @@ package dependencies
22
33import (
44 "context"
5+ "github.com/loft-sh/devspace/pkg/devspace/kubectl/selector"
6+ corev1 "k8s.io/api/core/v1"
7+ "k8s.io/apimachinery/pkg/util/wait"
58 "os"
69 "path/filepath"
10+ "time"
711
812 "github.com/loft-sh/devspace/cmd"
913 "github.com/loft-sh/devspace/cmd/flags"
@@ -35,7 +39,6 @@ var _ = DevSpaceDescribe("dependencies", func() {
3539 })
3640
3741 ginkgo .It ("should skip equal dependencies" , func () {
38- ginkgo .Skip ("couldn't find pipeline" )
3942 tempDir , err := framework .CopyToTempDir ("tests/dependencies/testdata/overlapping" )
4043 framework .ExpectNoError (err )
4144 defer framework .CleanupTempDir (initialDir , tempDir )
@@ -85,21 +88,6 @@ var _ = DevSpaceDescribe("dependencies", func() {
8588 framework .ExpectEqual (config .Path (), filepath .Join (tempDir , "devspace.yaml" ))
8689 })
8790
88- ginkgo .It ("should resolve dependencies with dev configuration and hooks" , func () {
89- ginkgo .Skip ("dependencies[*].dev.replacePods,dependencies[*].dev.sync and dependencies[*].dev.ports is not supported anymore in v6" )
90- tempDir , err := framework .CopyToTempDir ("tests/dependencies/testdata/dev-sync" )
91- framework .ExpectNoError (err )
92- defer framework .CleanupTempDir (initialDir , tempDir )
93-
94- // load it from the regular path first
95- _ , dependencies , err := framework .LoadConfig (f , kubeClient .Client (), filepath .Join (tempDir , "devspace.yaml" ))
96- framework .ExpectNoError (err )
97-
98- // check if dependencies were loaded correctly
99- framework .ExpectEqual (len (dependencies ), 1 )
100- framework .ExpectEqual (dependencies [0 ].Name (), "dep1" )
101- })
102-
10391 ginkgo .It ("should resolve dependencies with local path and nested structure" , func () {
10492 tempDir , err := framework .CopyToTempDir ("tests/dependencies/testdata/nested" )
10593 framework .ExpectNoError (err )
@@ -201,84 +189,85 @@ var _ = DevSpaceDescribe("dependencies", func() {
201189 framework .ExpectErrorMatch (err , "dependencies[nested].profiles and dependencies[nested].profile & dependencies[nested].profileParents cannot be used together" )
202190 })
203191
204- // ginkgo.It("should resolve dependencies with dependencies.dev.replacePods", func() {
205- // ginkgo.Skip(" couldn't find pipeline")
206- // fmt.Println("dependencies[*].dev.replacePods,dependencies[*].dev.sync and dependencies[*].dev.ports is not supported anymore in v6")
207- // tempDir, err := framework.CopyToTempDir("tests/dependencies/testdata/dev-replacepods")
208- // framework.ExpectNoError(err)
209- // defer framework.CleanupTempDir(initialDir, tempDir)
210-
211- // // load it from the regular path first
212- // _, dependencies, err := framework.LoadConfig(f, kubeClient.Client(), filepath.Join(tempDir, "devspace.yaml"))
213- // framework.ExpectNoError(err)
214-
215- // // check if dependencies were loaded correctly
216- // framework.ExpectEqual(len(dependencies), 1)
217- // framework.ExpectEqual(dependencies[0].Name(), "dep")
218-
219- // ns, err := kubeClient.CreateNamespace("dep-replacepods")
220- // framework.ExpectNoError(err)
221- // defer framework.ExpectDeleteNamespace(kubeClient, ns)
222-
223- // // create a new dev command
224- // devCmd := &cmd.DevCmd{
225- // GlobalFlags: &flags.GlobalFlags{
226- // NoWarn: true,
227- // Namespace: ns,
228- // },
229- // Portforwarding: true,
230- // Sync: true,
231- // }
232- // err = devCmd.Run(f, []string{"sh", "-c", "exit"})
233- // framework.ExpectNoError(err)
234-
235- // // check if replica set exists & pod got replaced correctly
236- // list, err := kubeClient.Client().KubeClient().AppsV1().ReplicaSets(ns).List(context.TODO(), metav1.ListOptions{LabelSelector: podreplace.ReplicaSetLabel + "=true"})
237- // framework.ExpectNoError(err)
238- // framework.ExpectEqual(len(list.Items), 1)
239-
240- // // wait until a pod has started
241- // var pods *corev1.PodList
242- // err = wait.Poll(time.Second, time.Minute, func() (done bool, err error) {
243- // pods, err = kubeClient.RawClient().CoreV1().Pods(ns).List(context.TODO(), metav1.ListOptions{LabelSelector: selector.ReplacedLabel})
244- // if err != nil {
245- // return false, err
246- // }
247-
248- // return len(pods.Items) == 1, nil
249- // })
250- // framework.ExpectNoError(err)
251- // framework.ExpectEqual(pods.Items[0].Spec.Containers[0].Image, "alpine:latest")
252-
253- // // now purge the deployment, dependency and make sure the replica set is deleted as well
254- // purgeCmd := &cmd.PurgeCmd{
255- // GlobalFlags: &flags.GlobalFlags{
256- // NoWarn: true,
257- // Namespace: ns,
258- // },
259- // All: true,
260- // }
261- // err = purgeCmd.Run(f)
262- // framework.ExpectNoError(err)
263-
264- // // wait until all pods are killed
265- // err = wait.Poll(time.Second, time.Minute, func() (done bool, err error) {
266- // pods, err = kubeClient.RawClient().CoreV1().Pods(ns).List(context.TODO(), metav1.ListOptions{LabelSelector: selector.ReplacedLabel})
267- // if err != nil {
268- // return false, err
269- // }
270- // return len(pods.Items) == 0, nil
271- // })
272- // framework.ExpectNoError(err)
273-
274- // // make sure no replaced replica set exists anymore
275- // list, err = kubeClient.Client().KubeClient().AppsV1().ReplicaSets(ns).List(context.TODO(), metav1.ListOptions{LabelSelector: podreplace.ReplicaSetLabel + "=true"})
276- // framework.ExpectNoError(err)
277- // framework.ExpectEqual(len(list.Items), 0)
278- // })
192+ ginkgo .It ("should resolve dependencies with dependencies replacePods" , func () {
193+ tempDir , err := framework .CopyToTempDir ("tests/dependencies/testdata/dev-replacepods" )
194+ framework .ExpectNoError (err )
195+ defer framework .CleanupTempDir (initialDir , tempDir )
196+
197+ // load it from the regular path first
198+ _ , dependencies , err := framework .LoadConfig (f , kubeClient .Client (), filepath .Join (tempDir , "devspace.yaml" ))
199+ framework .ExpectNoError (err )
200+
201+ // check if dependencies were loaded correctly
202+ framework .ExpectEqual (len (dependencies ), 1 )
203+ framework .ExpectEqual (dependencies [0 ].Name (), "dep" )
204+
205+ ns , err := kubeClient .CreateNamespace ("dep-replacepods" )
206+ framework .ExpectNoError (err )
207+ defer framework .ExpectDeleteNamespace (kubeClient , ns )
208+
209+ // create a new dev command
210+ cancelCtx , cancel := context .WithCancel (context .Background ())
211+ defer cancel ()
212+ devCmd := & cmd.DevCmd {
213+ GlobalFlags : & flags.GlobalFlags {
214+ NoWarn : true ,
215+ Namespace : ns ,
216+ },
217+ Portforwarding : true ,
218+ Sync : true ,
219+ Ctx : cancelCtx ,
220+ }
221+ err = devCmd .Run (f )
222+ framework .ExpectNoError (err )
223+ cancel ()
224+
225+ // check if replica set exists & pod got replaced correctly
226+ list , err := kubeClient .Client ().KubeClient ().AppsV1 ().Deployments (ns ).List (context .TODO (), metav1.ListOptions {LabelSelector : selector .ReplacedLabel + "=true" })
227+ framework .ExpectNoError (err )
228+ framework .ExpectEqual (len (list .Items ), 1 )
229+
230+ // wait until a pod has started
231+ var pods * corev1.PodList
232+ err = wait .Poll (time .Second , time .Minute , func () (done bool , err error ) {
233+ pods , err = kubeClient .RawClient ().CoreV1 ().Pods (ns ).List (context .TODO (), metav1.ListOptions {LabelSelector : selector .ReplacedLabel })
234+ if err != nil {
235+ return false , err
236+ }
237+
238+ return len (pods .Items ) == 1 , nil
239+ })
240+ framework .ExpectNoError (err )
241+ framework .ExpectEqual (pods .Items [0 ].Spec .Containers [0 ].Image , "alpine:latest" )
242+
243+ // now purge the deployment, dependency and make sure the replica set is deleted as well
244+ purgeCmd := & cmd.PurgeCmd {
245+ GlobalFlags : & flags.GlobalFlags {
246+ NoWarn : true ,
247+ Namespace : ns ,
248+ },
249+ All : true ,
250+ }
251+ err = purgeCmd .Run (f )
252+ framework .ExpectNoError (err )
253+
254+ // wait until all pods are killed
255+ err = wait .Poll (time .Second , time .Minute , func () (done bool , err error ) {
256+ pods , err = kubeClient .RawClient ().CoreV1 ().Pods (ns ).List (context .TODO (), metav1.ListOptions {LabelSelector : selector .ReplacedLabel })
257+ if err != nil {
258+ return false , err
259+ }
260+ return len (pods .Items ) == 0 , nil
261+ })
262+ framework .ExpectNoError (err )
263+
264+ // make sure no replaced replica set exists anymore
265+ list , err = kubeClient .Client ().KubeClient ().AppsV1 ().Deployments (ns ).List (context .TODO (), metav1.ListOptions {LabelSelector : selector .ReplacedLabel + "=true" })
266+ framework .ExpectNoError (err )
267+ framework .ExpectEqual (len (list .Items ), 0 )
268+ })
279269
280270 ginkgo .It ("should resolve cyclic dependencies" , func () {
281- ginkgo .Skip (" dependencies[*].dev.replacePods,dependencies[*].dev.sync and dependencies[*].dev.ports is not supported anymore in v6" )
282271 tempDir , err := framework .CopyToTempDir ("tests/dependencies/testdata/cyclic" )
283272 framework .ExpectNoError (err )
284273 defer framework .CleanupTempDir (initialDir , tempDir )
@@ -290,6 +279,5 @@ var _ = DevSpaceDescribe("dependencies", func() {
290279 // check if dependencies were loaded correctly
291280 framework .ExpectEqual (len (dependencies ), 1 )
292281 framework .ExpectEqual (dependencies [0 ].Name (), "dependency" )
293-
294282 })
295283})
0 commit comments