File: poddisruptionbudget_test.go

package info (click to toggle)
golang-k8s-sigs-kustomize-api 0.20.1%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,768 kB
  • sloc: makefile: 206; sh: 67
file content (125 lines) | stat: -rw-r--r-- 2,760 bytes parent folder | download | duplicates (2)
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
// Copyright 2020 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0

package krusty_test

import (
	"testing"

	kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
)

func TestPodDisruptionBudgetBasics(t *testing.T) {
	th := kusttest_test.MakeHarness(t)
	th.WriteF("pdbLiteral.yaml", `
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: pdbLiteral
spec:
  maxUnavailable: 90
`)
	th.WriteF("pdbPercentage.yaml", `
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: pdbPercentage
spec:
  maxUnavailable: 90%
`)
	th.WriteK(".", `
resources:
- pdbLiteral.yaml
- pdbPercentage.yaml
`)
	m := th.Run(".", th.MakeDefaultOptions())
	// In a PodDisruptionBudget, the fields maxUnavailable
	// minAvailable are mutually exclusive, and both can hold
	// either an integer, i.e. 10, or string that has to be
	// an int followed by a percent sign, e.g. 10%.
	th.AssertActualEqualsExpected(m, `
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: pdbLiteral
spec:
  maxUnavailable: 90
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: pdbPercentage
spec:
  maxUnavailable: 90%
`)
}

func TestPodDisruptionBudgetMerging(t *testing.T) {
	th := kusttest_test.MakeHarness(t)
	th.WriteF("pdb-patch.yaml", `
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: generic-pdb
spec:
  maxUnavailable: 1
`)
	th.WriteF("my_file.yaml", `
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: championships-api
  labels:
    faceit-pdb: default
spec:
  maxUnavailable: 100%
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: championships-api-2
  labels:
    faceit-pdb: default
spec:
  maxUnavailable: 100%
`)
	th.WriteK(".", `
patches:
- path: pdb-patch.yaml
  target:
    kind: PodDisruptionBudget
    labelSelector: faceit-pdb=default

resources:
- my_file.yaml
`)
	m := th.Run(".", th.MakeDefaultOptions())
	// In a PodDisruptionBudget, the fields maxUnavailable
	// minAvailable are mutually exclusive, and both can hold
	// either an integer, i.e. 10, or string that has to be
	// an int followed by a percent sign, e.g. 10%.
	// In the former case - bare integer - they should NOT be quoted
	// as the api server will reject it.  In the latter case with
	// the percent sign, quotes can be added and the API server will
	// accept it, but they don't have to be added.
	th.AssertActualEqualsExpected(
		m, `
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  labels:
    faceit-pdb: default
  name: championships-api
spec:
  maxUnavailable: 1
---
apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  labels:
    faceit-pdb: default
  name: championships-api-2
spec:
  maxUnavailable: 1
`)
}