mirror of
https://github.com/Azure/k8s-deploy.git
synced 2026-04-08 22:32:16 +08:00
* Added timeout to the rollout status and tests for it * Fixed integration test errors * Fix for blue green integration test * Probable fix for integration errors * No jobs run error fixed * Changed timeout to file level constant * Added parsing logic for timeout * Made tests more concise * implemented timeout validation check in an extracted utils mod * Changed function name to parseDuration * Removed timeout parameter from getResource --------- Co-authored-by: David Gamero <david340804@gmail.com> Co-authored-by: Suneha Bose <123775811+bosesuneha@users.noreply.github.com>
196 lines
5.9 KiB
TypeScript
196 lines
5.9 KiB
TypeScript
import {getManifestObjects} from './blueGreenHelper'
|
|
import {Kubectl} from '../../types/kubectl'
|
|
import {BlueGreenRejectResult} from '../../types/blueGreenTypes'
|
|
|
|
import * as TSutils from '../../utilities/trafficSplitUtils'
|
|
import {
|
|
rejectBlueGreenIngress,
|
|
rejectBlueGreenService,
|
|
rejectBlueGreenSMI
|
|
} from './reject'
|
|
import * as bgHelper from './blueGreenHelper'
|
|
import * as routeHelper from './route'
|
|
|
|
const ingressFilepath = ['test/unit/manifests/test-ingress-new.yml']
|
|
const kubectl = new Kubectl('')
|
|
const TEST_TIMEOUT_SHORT = '60s'
|
|
const TEST_TIMEOUT_LONG = '120s'
|
|
|
|
jest.mock('../../types/kubectl')
|
|
|
|
describe('reject tests', () => {
|
|
let testObjects
|
|
|
|
beforeEach(() => {
|
|
//@ts-ignore
|
|
Kubectl.mockClear()
|
|
testObjects = getManifestObjects(ingressFilepath)
|
|
})
|
|
|
|
test('reject blue/green ingress', async () => {
|
|
const value = await rejectBlueGreenIngress(kubectl, testObjects)
|
|
|
|
const bgDeployment = value.routeResult
|
|
const deleteResult = value.deleteResult
|
|
|
|
expect(deleteResult).toHaveLength(2)
|
|
for (const obj of deleteResult) {
|
|
if (obj.kind == 'Service') {
|
|
expect(obj.name).toBe('nginx-service-green')
|
|
}
|
|
if (obj.kind == 'Deployment') {
|
|
expect(obj.name).toBe('nginx-deployment-green')
|
|
}
|
|
}
|
|
|
|
expect(bgDeployment.objects).toHaveLength(1)
|
|
expect(bgDeployment.objects[0].metadata.name).toBe('nginx-ingress')
|
|
})
|
|
|
|
test('reject blue/green ingress with timeout', async () => {
|
|
// Mock routeBlueGreenIngressUnchanged and deleteGreenObjects
|
|
jest
|
|
.spyOn(routeHelper, 'routeBlueGreenIngressUnchanged')
|
|
.mockResolvedValue({
|
|
deployResult: {
|
|
execResult: {stdout: '', stderr: '', exitCode: 0},
|
|
manifestFiles: []
|
|
},
|
|
objects: [
|
|
{
|
|
kind: 'Ingress',
|
|
metadata: {
|
|
name: 'nginx-ingress',
|
|
labels: new Map<string, string>()
|
|
},
|
|
spec: {}
|
|
}
|
|
]
|
|
})
|
|
|
|
jest.spyOn(bgHelper, 'deleteGreenObjects').mockResolvedValue([
|
|
{name: 'nginx-service-green', kind: 'Service'},
|
|
{name: 'nginx-deployment-green', kind: 'Deployment'}
|
|
])
|
|
|
|
const value = await rejectBlueGreenIngress(
|
|
kubectl,
|
|
testObjects,
|
|
TEST_TIMEOUT_LONG
|
|
)
|
|
|
|
const bgDeployment = value.routeResult
|
|
const deleteResult = value.deleteResult
|
|
|
|
expect(deleteResult).toHaveLength(2)
|
|
for (const obj of deleteResult) {
|
|
if (obj.kind === 'Service') {
|
|
expect(obj.name).toBe('nginx-service-green')
|
|
}
|
|
if (obj.kind === 'Deployment') {
|
|
expect(obj.name).toBe('nginx-deployment-green')
|
|
}
|
|
}
|
|
|
|
expect(bgDeployment.objects).toHaveLength(1)
|
|
expect(bgDeployment.objects[0].metadata.name).toBe('nginx-ingress')
|
|
|
|
// Verify deleteGreenObjects is called with timeout
|
|
expect(bgHelper.deleteGreenObjects).toHaveBeenCalledWith(
|
|
kubectl,
|
|
[].concat(
|
|
testObjects.deploymentEntityList,
|
|
testObjects.serviceEntityList
|
|
),
|
|
TEST_TIMEOUT_LONG
|
|
)
|
|
expect(routeHelper.routeBlueGreenIngressUnchanged).toHaveBeenCalledWith(
|
|
kubectl,
|
|
testObjects.serviceNameMap,
|
|
testObjects.ingressEntityList,
|
|
TEST_TIMEOUT_LONG
|
|
)
|
|
})
|
|
|
|
test('reject blue/green service', async () => {
|
|
jest.spyOn(bgHelper, 'deleteGreenObjects').mockResolvedValue([
|
|
{name: 'nginx-service-green', kind: 'Service'},
|
|
{name: 'nginx-deployment-green', kind: 'Deployment'}
|
|
])
|
|
|
|
const value = await rejectBlueGreenService(
|
|
kubectl,
|
|
testObjects,
|
|
TEST_TIMEOUT_SHORT
|
|
)
|
|
|
|
const deleteResult = value.deleteResult
|
|
|
|
expect(deleteResult).toHaveLength(2)
|
|
expect(deleteResult).toContainEqual({
|
|
name: 'nginx-service-green',
|
|
kind: 'Service'
|
|
})
|
|
expect(deleteResult).toContainEqual({
|
|
name: 'nginx-deployment-green',
|
|
kind: 'Deployment'
|
|
})
|
|
})
|
|
|
|
test('reject blue/green service with timeout', async () => {
|
|
// Mock routeBlueGreenService and deleteGreenObjects
|
|
jest.spyOn(routeHelper, 'routeBlueGreenService').mockResolvedValue({
|
|
deployResult: {
|
|
execResult: {stdout: '', stderr: '', exitCode: 0},
|
|
manifestFiles: []
|
|
},
|
|
objects: [
|
|
{
|
|
kind: 'Service',
|
|
metadata: {
|
|
name: 'nginx-service',
|
|
labels: new Map<string, string>()
|
|
},
|
|
spec: {}
|
|
}
|
|
]
|
|
})
|
|
|
|
jest
|
|
.spyOn(bgHelper, 'deleteGreenObjects')
|
|
.mockResolvedValue([
|
|
{name: 'nginx-deployment-green', kind: 'Deployment'}
|
|
])
|
|
|
|
const value = await rejectBlueGreenService(
|
|
kubectl,
|
|
testObjects,
|
|
TEST_TIMEOUT_LONG
|
|
)
|
|
|
|
const bgDeployment = value.routeResult
|
|
const deleteResult = value.deleteResult
|
|
|
|
// Verify deleteGreenObjects is called with timeout
|
|
expect(bgHelper.deleteGreenObjects).toHaveBeenCalledWith(
|
|
kubectl,
|
|
testObjects.deploymentEntityList,
|
|
TEST_TIMEOUT_LONG
|
|
)
|
|
|
|
// Assertions for routeResult and deleteResult
|
|
expect(deleteResult).toHaveLength(1)
|
|
expect(deleteResult[0].name).toBe('nginx-deployment-green')
|
|
expect(bgDeployment.objects).toHaveLength(1)
|
|
expect(bgDeployment.objects[0].metadata.name).toBe('nginx-service')
|
|
})
|
|
|
|
test('reject blue/green SMI', async () => {
|
|
jest
|
|
.spyOn(TSutils, 'getTrafficSplitAPIVersion')
|
|
.mockImplementation(() => Promise.resolve('v1alpha3'))
|
|
const rejectResult = await rejectBlueGreenSMI(kubectl, testObjects)
|
|
expect(rejectResult.deleteResult).toHaveLength(2)
|
|
})
|
|
})
|