|
1 | 1 | import { CoreV1Api, V1Service } from '@kubernetes/client-node' |
2 | | -import { getCloudttyActiveTime, getLogTime, groupK8sServices, toK8sService } from './k8s-operations' |
| 2 | +import { getCloudttyActiveTime, getLogTime, mergeCanaryServices, toK8sService } from './k8s-operations' |
3 | 3 |
|
4 | 4 | // Mock the KubeConfig |
5 | 5 | jest.mock('@kubernetes/client-node', () => { |
@@ -30,9 +30,9 @@ describe('toK8sService', () => { |
30 | 30 | expect(result).toEqual({ name: 'my-svc', ports: [8080], managedByKnative: false }) |
31 | 31 | }) |
32 | 32 |
|
33 | | - test('uses app.kubernetes.io/name label as canonical name', () => { |
34 | | - const svc = makeService({ metadata: { name: 'my-svc-v1', labels: { 'app.kubernetes.io/name': 'my-svc' } } }) |
35 | | - expect(toK8sService(svc)?.name).toBe('my-svc') |
| 33 | + test('returns the raw service name', () => { |
| 34 | + const svc = makeService({ metadata: { name: 'my-svc-v1', labels: {} } }) |
| 35 | + expect(toK8sService(svc)?.name).toBe('my-svc-v1') |
36 | 36 | }) |
37 | 37 |
|
38 | 38 | test('filters out knative private services', () => { |
@@ -60,40 +60,45 @@ describe('toK8sService', () => { |
60 | 60 | }) |
61 | 61 | }) |
62 | 62 |
|
63 | | -describe('groupK8sServices', () => { |
64 | | - test('returns services unchanged when no duplicates', () => { |
| 63 | +describe('mergeCanaryServices', () => { |
| 64 | + test('returns services unchanged when no canary variants present', () => { |
65 | 65 | const services = [ |
66 | 66 | { name: 'svc-a', ports: [80], managedByKnative: false }, |
67 | 67 | { name: 'svc-b', ports: [8080], managedByKnative: false }, |
68 | 68 | ] |
69 | | - expect(groupK8sServices(services)).toEqual(services) |
| 69 | + expect(mergeCanaryServices(services)).toEqual(services) |
70 | 70 | }) |
71 | 71 |
|
72 | | - test('merges canary variants with the same canonical name', () => { |
| 72 | + test('groups -v1 and -v2 variants into a single entry with the base name', () => { |
73 | 73 | const services = [ |
74 | | - { name: 'my-svc', ports: [80], managedByKnative: false }, |
75 | | - { name: 'my-svc', ports: [80], managedByKnative: false }, |
| 74 | + { name: 'my-svc-v1', ports: [80], managedByKnative: false }, |
| 75 | + { name: 'my-svc-v2', ports: [80], managedByKnative: false }, |
76 | 76 | ] |
77 | | - expect(groupK8sServices(services)).toEqual([{ name: 'my-svc', ports: [80], managedByKnative: false }]) |
| 77 | + expect(mergeCanaryServices(services)).toEqual([{ name: 'my-svc', ports: [80], managedByKnative: false }]) |
78 | 78 | }) |
79 | 79 |
|
80 | | - test('deduplicates ports across merged services', () => { |
| 80 | + test('does not strip suffix when only one variant exists', () => { |
| 81 | + const services = [{ name: 'my-svc-v1', ports: [80], managedByKnative: false }] |
| 82 | + expect(mergeCanaryServices(services)).toEqual([{ name: 'my-svc-v1', ports: [80], managedByKnative: false }]) |
| 83 | + }) |
| 84 | + |
| 85 | + test('deduplicates ports when merging canary variants', () => { |
81 | 86 | const services = [ |
82 | | - { name: 'my-svc', ports: [80, 443], managedByKnative: false }, |
83 | | - { name: 'my-svc', ports: [443, 8080], managedByKnative: false }, |
| 87 | + { name: 'my-svc-v1', ports: [80, 443], managedByKnative: false }, |
| 88 | + { name: 'my-svc-v2', ports: [443, 8080], managedByKnative: false }, |
84 | 89 | ] |
85 | | - const result = groupK8sServices(services) |
| 90 | + const result = mergeCanaryServices(services) |
86 | 91 | expect(result).toHaveLength(1) |
87 | 92 | expect(result[0].ports).toEqual(expect.arrayContaining([80, 443, 8080])) |
88 | 93 | expect(result[0].ports).toHaveLength(3) |
89 | 94 | }) |
90 | 95 |
|
91 | | - test('propagates managedByKnative if any service in the group has it set', () => { |
| 96 | + test('propagates managedByKnative if any variant in the group has it set', () => { |
92 | 97 | const services = [ |
93 | | - { name: 'my-svc', ports: [80], managedByKnative: false }, |
94 | | - { name: 'my-svc', ports: [80], managedByKnative: true }, |
| 98 | + { name: 'my-svc-v1', ports: [80], managedByKnative: false }, |
| 99 | + { name: 'my-svc-v2', ports: [80], managedByKnative: true }, |
95 | 100 | ] |
96 | | - expect(groupK8sServices(services)[0].managedByKnative).toBe(true) |
| 101 | + expect(mergeCanaryServices(services)[0].managedByKnative).toBe(true) |
97 | 102 | }) |
98 | 103 | }) |
99 | 104 |
|
|
0 commit comments