43426e96ac
Extend docker_container parent rule to accept vm and proxmox nodes in addition to docker_host and lxc, covering nested virtualization topologies (Docker on a VM, Docker directly on Proxmox host). ha-relevant: yes
77 lines
2.4 KiB
TypeScript
77 lines
2.4 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
|
import { resolveVirtualEdgeParent } from '../virtualEdgeParent'
|
|
|
|
describe('resolveVirtualEdgeParent', () => {
|
|
it('nests lxc under proxmox (container-mode parent)', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'lxc1', type: 'lxc' },
|
|
{ id: 'px1', type: 'proxmox' },
|
|
)
|
|
expect(res).toEqual({ childId: 'lxc1', parentId: 'px1' })
|
|
})
|
|
|
|
it('nests vm under proxmox regardless of edge direction', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'px1', type: 'proxmox' },
|
|
{ id: 'vm1', type: 'vm' },
|
|
)
|
|
expect(res).toEqual({ childId: 'vm1', parentId: 'px1' })
|
|
})
|
|
|
|
it('nests docker_container under docker_host', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'dc1', type: 'docker_container' },
|
|
{ id: 'dh1', type: 'docker_host' },
|
|
)
|
|
expect(res).toEqual({ childId: 'dc1', parentId: 'dh1' })
|
|
})
|
|
|
|
it('nests docker_container under lxc (reverse direction)', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'lxc1', type: 'lxc' },
|
|
{ id: 'dc1', type: 'docker_container' },
|
|
)
|
|
expect(res).toEqual({ childId: 'dc1', parentId: 'lxc1' })
|
|
})
|
|
|
|
it('nests docker_container under lxc (forward direction)', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'dc1', type: 'docker_container' },
|
|
{ id: 'lxc1', type: 'lxc' },
|
|
)
|
|
expect(res).toEqual({ childId: 'dc1', parentId: 'lxc1' })
|
|
})
|
|
|
|
it('nests docker_container under vm', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'dc1', type: 'docker_container' },
|
|
{ id: 'vm1', type: 'vm' },
|
|
)
|
|
expect(res).toEqual({ childId: 'dc1', parentId: 'vm1' })
|
|
})
|
|
|
|
it('nests docker_container under proxmox (reverse direction)', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'px1', type: 'proxmox' },
|
|
{ id: 'dc1', type: 'docker_container' },
|
|
)
|
|
expect(res).toEqual({ childId: 'dc1', parentId: 'px1' })
|
|
})
|
|
|
|
it('returns null when docker_container links to unsupported parent type', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'dc1', type: 'docker_container' },
|
|
{ id: 'srv1', type: 'server' },
|
|
)
|
|
expect(res).toBeNull()
|
|
})
|
|
|
|
it('returns null for unrelated type pairs', () => {
|
|
const res = resolveVirtualEdgeParent(
|
|
{ id: 'srv1', type: 'server' },
|
|
{ id: 'rt1', type: 'router' },
|
|
)
|
|
expect(res).toBeNull()
|
|
})
|
|
})
|