/
pause_test.go
106 lines (92 loc) · 2.94 KB
/
pause_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright 2021 VMware, Inc.
// SPDX-License-Identifier: Apache-2.0
package e2e
import (
"fmt"
"strings"
"testing"
"github.com/ghodss/yaml"
"github.com/vmware-tanzu/carvel-kapp-controller/pkg/apis/kappctrl/v1alpha1"
corev1 "k8s.io/api/core/v1"
)
func Test_AppPause(t *testing.T) {
env := BuildEnv(t)
logger := Logger{}
kapp := Kapp{t, env.Namespace, logger}
kubectl := Kubectl{t, env.Namespace, logger}
name := "app-pause"
cleanUp := func() {
// Need to make sure App is not paused
// so need to create as part of deletion.
appYaml := appYAML(name, env.Namespace, "original", false)
kapp.RunWithOpts([]string{"deploy", "-a", name, "-f", "-"}, RunOpts{StdinReader: strings.NewReader(appYaml)})
kapp.Run([]string{"delete", "-a", name})
}
cleanUp()
defer cleanUp()
// create originally as not paused otherwise
// App will not create original resources.
appYaml := appYAML(name, env.Namespace, "original", false)
_, err := kapp.RunWithOpts([]string{"deploy", "-a", name, "-f", "-"}, RunOpts{StdinReader: strings.NewReader(appYaml)})
if err != nil {
t.Fatalf("Expected initial app dfeploy to succeed, it did not: %v", err)
}
// update app
appYaml = appYAML(name, env.Namespace, "change", true)
_, err = kapp.RunWithOpts([]string{"deploy", "-a", name, "-f", "-"}, RunOpts{StdinReader: strings.NewReader(appYaml)})
if err != nil {
t.Fatalf("Expected initial app dfeploy to succeed, it did not: %v", err)
}
var cr v1alpha1.App
out, err := kubectl.RunWithOpts([]string{"get", "apps/" + name, "-o", "yaml"}, RunOpts{AllowError: true})
if err != nil {
t.Fatalf("failed to get App %s: %v", name, err)
}
err = yaml.Unmarshal([]byte(out), &cr)
if err != nil {
t.Fatalf("Failed to unmarshal: %s", err)
}
if cr.Status.FriendlyDescription != "Canceled/paused" {
t.Fatalf("expected App to have status Canceled/paused\nGot: %s", cr.Status.FriendlyDescription)
}
out, err = kubectl.RunWithOpts([]string{"get", "configmap/configmap", "-o", "yaml"}, RunOpts{AllowError: true})
if err != nil {
t.Fatalf("failed to get configmap/configmap")
}
var cm corev1.ConfigMap
err = yaml.Unmarshal([]byte(out), &cm)
if err != nil {
t.Fatalf("failed to unmarshal: %s", err)
}
if cm.Data["key"] != "original" {
t.Fatalf("configmap message was updated despite App being paused\nGot: %s", cm.Data["key"])
}
}
func appYAML(name, namespace, configMapValue string, paused bool) string {
sas := ServiceAccounts{namespace}
return fmt.Sprintf(`---
apiVersion: kappctrl.k14s.io/v1alpha1
kind: App
metadata:
name: %s
namespace: %s
annotations:
kapp.k14s.io/change-group: kappctrl-e2e.k14s.io/apps
spec:
serviceAccountName: kappctrl-e2e-ns-sa
paused: %t
fetch:
- inline:
paths:
file.yml: |
apiVersion: v1
kind: ConfigMap
metadata:
name: configmap
data:
key: %s
template:
- ytt: {}
deploy:
- kapp: {}`, name, namespace, paused, configMapValue) + sas.ForNamespaceYAML()
}