pepr 0.38.0 → 0.38.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/cli.js +13 -13
  2. package/dist/controller.js +1 -1
  3. package/package.json +5 -3
  4. package/src/lib/assets/pods.ts +6 -6
  5. package/src/lib/assets/yaml.ts +6 -6
  6. package/dist/cli/init/utils.test.d.ts +0 -2
  7. package/dist/cli/init/utils.test.d.ts.map +0 -1
  8. package/dist/cli/init/walkthrough.test.d.ts +0 -2
  9. package/dist/cli/init/walkthrough.test.d.ts.map +0 -1
  10. package/dist/lib/adjudicators.test.d.ts +0 -2
  11. package/dist/lib/adjudicators.test.d.ts.map +0 -1
  12. package/dist/lib/assets/helm.test.d.ts +0 -2
  13. package/dist/lib/assets/helm.test.d.ts.map +0 -1
  14. package/dist/lib/assets/pods.test.d.ts +0 -2
  15. package/dist/lib/assets/pods.test.d.ts.map +0 -1
  16. package/dist/lib/capability.test.d.ts +0 -2
  17. package/dist/lib/capability.test.d.ts.map +0 -1
  18. package/dist/lib/controller/store.test.d.ts +0 -2
  19. package/dist/lib/controller/store.test.d.ts.map +0 -1
  20. package/dist/lib/errors.test.d.ts +0 -2
  21. package/dist/lib/errors.test.d.ts.map +0 -1
  22. package/dist/lib/filter.test.d.ts +0 -3
  23. package/dist/lib/filter.test.d.ts.map +0 -1
  24. package/dist/lib/finalizer.test.d.ts +0 -2
  25. package/dist/lib/finalizer.test.d.ts.map +0 -1
  26. package/dist/lib/helpers.test.d.ts +0 -2
  27. package/dist/lib/helpers.test.d.ts.map +0 -1
  28. package/dist/lib/included-files.test.d.ts +0 -2
  29. package/dist/lib/included-files.test.d.ts.map +0 -1
  30. package/dist/lib/logger.test.d.ts +0 -2
  31. package/dist/lib/logger.test.d.ts.map +0 -1
  32. package/dist/lib/metrics.test.d.ts +0 -2
  33. package/dist/lib/metrics.test.d.ts.map +0 -1
  34. package/dist/lib/module.test.d.ts +0 -2
  35. package/dist/lib/module.test.d.ts.map +0 -1
  36. package/dist/lib/mutate-request.test.d.ts +0 -2
  37. package/dist/lib/mutate-request.test.d.ts.map +0 -1
  38. package/dist/lib/queue.test.d.ts +0 -2
  39. package/dist/lib/queue.test.d.ts.map +0 -1
  40. package/dist/lib/schedule.test.d.ts +0 -15
  41. package/dist/lib/schedule.test.d.ts.map +0 -1
  42. package/dist/lib/storage.test.d.ts +0 -2
  43. package/dist/lib/storage.test.d.ts.map +0 -1
  44. package/dist/lib/tls.test.d.ts +0 -2
  45. package/dist/lib/tls.test.d.ts.map +0 -1
  46. package/dist/lib/utils.test.d.ts +0 -2
  47. package/dist/lib/utils.test.d.ts.map +0 -1
  48. package/dist/lib/validate-request.test.d.ts +0 -2
  49. package/dist/lib/validate-request.test.d.ts.map +0 -1
  50. package/dist/lib/watch-processor.test.d.ts +0 -2
  51. package/dist/lib/watch-processor.test.d.ts.map +0 -1
  52. package/dist/sdk/sdk.test.d.ts +0 -2
  53. package/dist/sdk/sdk.test.d.ts.map +0 -1
  54. package/src/cli/init/utils.test.ts +0 -19
  55. package/src/cli/init/walkthrough.test.ts +0 -102
  56. package/src/lib/adjudicators.test.ts +0 -1236
  57. package/src/lib/assets/helm.test.ts +0 -64
  58. package/src/lib/assets/pods.test.ts +0 -553
  59. package/src/lib/capability.test.ts +0 -655
  60. package/src/lib/controller/store.test.ts +0 -131
  61. package/src/lib/errors.test.ts +0 -85
  62. package/src/lib/filter.test.ts +0 -691
  63. package/src/lib/finalizer.test.ts +0 -236
  64. package/src/lib/helpers.test.ts +0 -1486
  65. package/src/lib/included-files.test.ts +0 -22
  66. package/src/lib/logger.test.ts +0 -18
  67. package/src/lib/metrics.test.ts +0 -132
  68. package/src/lib/module.test.ts +0 -126
  69. package/src/lib/mutate-request.test.ts +0 -187
  70. package/src/lib/queue.test.ts +0 -152
  71. package/src/lib/schedule.test.ts +0 -217
  72. package/src/lib/storage.test.ts +0 -216
  73. package/src/lib/tls.test.ts +0 -18
  74. package/src/lib/utils.test.ts +0 -69
  75. package/src/lib/validate-request.test.ts +0 -121
  76. package/src/lib/watch-processor.test.ts +0 -417
  77. package/src/sdk/sdk.test.ts +0 -276
@@ -1,236 +0,0 @@
1
- // SPDX-License-Identifier: Apache-2.0
2
- // SPDX-FileCopyrightText: 2023-Present The Pepr Authors
3
-
4
- import { beforeEach, describe, expect, it, jest } from "@jest/globals";
5
- import { addFinalizer, removeFinalizer } from "./finalizer";
6
- import { KubernetesObject, K8s, GenericClass, RegisterKind } from "kubernetes-fluent-client";
7
- import { K8sInit } from "kubernetes-fluent-client/dist/fluent/types";
8
- import { AdmissionRequest, Operation } from "./types";
9
- import { PeprMutateRequest } from "./mutate-request";
10
- import { Binding } from "./types";
11
-
12
- jest.mock("kubernetes-fluent-client");
13
- const mockK8s = jest.mocked(K8s);
14
- const mockRegisterKind = jest.mocked(RegisterKind);
15
-
16
- const PEPR_FINALIZER = "pepr.dev/finalizer";
17
-
18
- describe("addFinalizer", () => {
19
- let request: PeprMutateRequest<KubernetesObject>;
20
-
21
- const fakeAdmissionRequest = (op: Operation): AdmissionRequest<KubernetesObject> => {
22
- const obj = {
23
- apiVersion: "v1",
24
- kind: "Pod",
25
- metadata: {
26
- name: "test-pod",
27
- labels: {
28
- "existing-label": "true",
29
- },
30
- annotations: {
31
- "existing-annotation": "true",
32
- },
33
- },
34
- };
35
-
36
- return {
37
- operation: op,
38
- object: obj,
39
- oldObject: obj,
40
- dryRun: false,
41
- uid: "uid",
42
- name: "name",
43
- kind: { group: "", version: "v1", kind: "Pod" },
44
- resource: { group: "", version: "v1", resource: "pods" },
45
- userInfo: {},
46
- };
47
- };
48
-
49
- describe("on create", () => {
50
- const op = Operation.CREATE;
51
-
52
- beforeEach(() => {
53
- request = new PeprMutateRequest(fakeAdmissionRequest(op));
54
- });
55
-
56
- it("adds pepr finalizer when no other finalizers are present", () => {
57
- expect(request.Raw.metadata?.finalizers).toBeUndefined();
58
-
59
- // impure function (acts via side effect instead of return result) --
60
- // i.e. it directly modifies the passed-in request object
61
- addFinalizer(request);
62
-
63
- expect(request.Raw.metadata!.finalizers).toContain(PEPR_FINALIZER);
64
- });
65
-
66
- it("adds pepr finalizer when other finalizers are present", () => {
67
- const original = ["i.am.a/macguffin", "i.am.one/too"];
68
- request.Raw.metadata!.finalizers = [...original];
69
-
70
- addFinalizer(request);
71
-
72
- const expected = [...original, PEPR_FINALIZER];
73
- expect(request.Raw.metadata!.finalizers).toHaveLength(expected.length);
74
- expect(request.Raw.metadata!.finalizers).toEqual(expect.arrayContaining(expected));
75
- });
76
-
77
- it("does not add another pepr finalizer when one is already present", () => {
78
- const original = ["i.am.a/macguffin", "i.am.one/too", PEPR_FINALIZER];
79
- request.Raw.metadata!.finalizers = [...original];
80
-
81
- addFinalizer(request);
82
-
83
- const expected = [...original];
84
- expect(request.Raw.metadata!.finalizers).toHaveLength(expected.length);
85
- expect(request.Raw.metadata!.finalizers).toEqual(expect.arrayContaining(expected));
86
- });
87
- });
88
-
89
- describe("on update", () => {
90
- const op = Operation.UPDATE;
91
-
92
- beforeEach(() => {
93
- request = new PeprMutateRequest(fakeAdmissionRequest(op));
94
- });
95
-
96
- it("adds pepr finalizer when no other finalizers are present", () => {
97
- expect(request.Raw.metadata?.finalizers).toBeUndefined();
98
-
99
- addFinalizer(request);
100
-
101
- expect(request.Raw.metadata!.finalizers).toContain(PEPR_FINALIZER);
102
- });
103
-
104
- it("adds pepr finalizer when other finalizers are present", () => {
105
- const original = ["i.am.a/macguffin", "i.am.one/too"];
106
- request.Raw.metadata!.finalizers = [...original];
107
-
108
- addFinalizer(request);
109
-
110
- const expected = [...original, PEPR_FINALIZER];
111
- expect(request.Raw.metadata!.finalizers).toHaveLength(expected.length);
112
- expect(request.Raw.metadata!.finalizers).toEqual(expect.arrayContaining(expected));
113
- });
114
-
115
- it("does not add another pepr finalizer when one is already present", () => {
116
- const original = ["i.am.a/macguffin", "i.am.one/too", PEPR_FINALIZER];
117
- request.Raw.metadata!.finalizers = [...original];
118
-
119
- addFinalizer(request);
120
-
121
- const expected = [...original];
122
- expect(request.Raw.metadata!.finalizers).toHaveLength(expected.length);
123
- expect(request.Raw.metadata!.finalizers).toEqual(expect.arrayContaining(expected));
124
- });
125
-
126
- it("does not add pepr finalizer if a deletetionTimestamp is present", () => {
127
- const original = ["i.am.a/macguffin", "i.am.one/too"];
128
- request.Raw.metadata!.finalizers = [...original];
129
- request.Raw.metadata!.deletionTimestamp = new Date();
130
-
131
- addFinalizer(request);
132
-
133
- const expected = [...original];
134
- expect(request.Raw.metadata!.finalizers).toHaveLength(expected.length);
135
- expect(request.Raw.metadata!.finalizers).toEqual(expect.arrayContaining(expected));
136
- });
137
- });
138
-
139
- describe("on delete", () => {
140
- const op = Operation.DELETE;
141
-
142
- beforeEach(() => {
143
- request = new PeprMutateRequest(fakeAdmissionRequest(op));
144
- });
145
-
146
- it("does not add pepr finalizer", () => {
147
- const original = ["i.am.a/macguffin", "i.am.one/too"];
148
- request.Raw.metadata!.finalizers = [...original];
149
-
150
- addFinalizer(request);
151
-
152
- const expected = [...original];
153
- expect(request.Raw.metadata!.finalizers).toHaveLength(expected.length);
154
- expect(request.Raw.metadata!.finalizers).toEqual(expect.arrayContaining(expected));
155
- });
156
- });
157
- });
158
-
159
- describe("removeFinalizer", () => {
160
- const mockPatch = jest.fn();
161
-
162
- const fakeBinding = () =>
163
- ({
164
- model: {},
165
- kind: {},
166
- }) as unknown as Binding;
167
-
168
- const fakeObject = () =>
169
- ({
170
- metadata: {
171
- namespace: "test-namespace",
172
- name: "test-name",
173
- },
174
- }) as KubernetesObject;
175
-
176
- describe("when RegisterKind fails", () => {
177
- beforeEach(() => {
178
- jest.resetAllMocks();
179
-
180
- mockK8s.mockImplementation(<T extends GenericClass, K extends KubernetesObject>() => {
181
- return { Patch: mockPatch } as unknown as K8sInit<T, K>;
182
- });
183
-
184
- mockRegisterKind.mockImplementation(() => {
185
- throw "oops";
186
- });
187
- });
188
-
189
- it("does NOT send a JSON Patch to remove pepr finalizers", async () => {
190
- const object = fakeObject();
191
- const binding = fakeBinding();
192
-
193
- await removeFinalizer(binding, object);
194
-
195
- expect(mockPatch.mock.calls).toHaveLength(0);
196
- });
197
- });
198
-
199
- describe("when RegisterKind succeeds", () => {
200
- beforeEach(() => {
201
- jest.resetAllMocks();
202
-
203
- mockPatch.mockImplementation(ops => {
204
- return { ops };
205
- });
206
-
207
- mockK8s.mockImplementation(<T extends GenericClass, K extends KubernetesObject>() => {
208
- return { Patch: mockPatch } as unknown as K8sInit<T, K>;
209
- });
210
-
211
- mockRegisterKind.mockImplementation(() => {});
212
- });
213
-
214
- it("sends a JSON Patch to remove pepr finalizers", async () => {
215
- const originalFinalizers = ["ignore.me/now", "ignore.me/too", PEPR_FINALIZER];
216
- const adjustedFinalizers = originalFinalizers.filter(f => f !== PEPR_FINALIZER);
217
-
218
- const object = fakeObject();
219
- object.metadata!.finalizers = [...originalFinalizers];
220
- const binding = fakeBinding();
221
-
222
- await removeFinalizer(binding, object);
223
-
224
- const expected = [
225
- {
226
- op: "replace",
227
- path: `/metadata/finalizers`,
228
- value: adjustedFinalizers,
229
- },
230
- ];
231
- expect(mockPatch.mock.calls).toHaveLength(1);
232
- expect(mockPatch.mock.calls[0]).toHaveLength(1);
233
- expect(mockPatch.mock.calls[0][0]).toEqual(expected);
234
- });
235
- });
236
- });