Files
orca/src/main/daemon/daemon-lifecycle-event.test.ts
T
mirror 34fa2cd5ca
Skill update round trip / roundtrip (false, macos-latest, copy, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (false, macos-latest, symlink, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (false, ubuntu-latest, copy, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (false, ubuntu-latest, symlink, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (false, ubuntu-latest, symlink, latest) (push) Canceled after 0s
Skill update round trip / roundtrip (false, windows-latest, copy, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (false, windows-latest, symlink, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (true, macos-latest, copy, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (true, macos-latest, symlink, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (true, ubuntu-latest, copy, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (true, ubuntu-latest, symlink, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (true, windows-latest, copy, 1.5.17) (push) Canceled after 0s
Skill update round trip / roundtrip (true, windows-latest, symlink, 1.5.17) (push) Canceled after 0s
source snapshot 2026-09-02
2026-09-02 02:03:16 +08:00

77 lines
2.9 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from 'vitest'
import { bucketDaemonLiveSessionCount } from '../../shared/daemon-lifecycle-telemetry'
import { validate } from '../telemetry/validator'
const { trackMock } = vi.hoisted(() => ({ trackMock: vi.fn() }))
vi.mock('../telemetry/client', () => ({ track: trackMock }))
import { trackDaemonReplaced, trackDaemonRetired } from './daemon-lifecycle-event'
beforeEach(() => {
trackMock.mockClear()
})
describe('bucketDaemonLiveSessionCount', () => {
it('buckets counts and maps null to unknown', () => {
expect(bucketDaemonLiveSessionCount(null)).toBe('unknown')
expect(bucketDaemonLiveSessionCount(0)).toBe('0')
expect(bucketDaemonLiveSessionCount(1)).toBe('1')
expect(bucketDaemonLiveSessionCount(2)).toBe('2-5')
expect(bucketDaemonLiveSessionCount(5)).toBe('2-5')
expect(bucketDaemonLiveSessionCount(6)).toBe('6+')
expect(bucketDaemonLiveSessionCount(999)).toBe('6+')
})
})
// Revert-sensitive: asserts each emitter fires `daemon_lifecycle` with a payload the real
// runtime validator accepts. If the event, emitter, or schema is reverted, these fail.
describe('daemon lifecycle emitters', () => {
it('emits a validator-accepted replace payload', () => {
trackDaemonReplaced('stale_bundle', 0)
expect(trackMock).toHaveBeenCalledTimes(1)
const [name, props] = trackMock.mock.calls[0]
expect(name).toBe('daemon_lifecycle')
expect(props).toEqual({
transition: 'replaced',
reason: 'stale_bundle',
live_session_count_bucket: '0'
})
expect(validate('daemon_lifecycle', props).ok).toBe(true)
})
it('maps an unverifiable session count to the unknown bucket', () => {
trackDaemonReplaced('different_app_path', null)
const [, props] = trackMock.mock.calls[0]
expect(props).toEqual({
transition: 'replaced',
reason: 'different_app_path',
live_session_count_bucket: 'unknown'
})
expect(validate('daemon_lifecycle', props).ok).toBe(true)
})
// Why: both emitters run on the daemon launch/respawn path, where a throw would cost every terminal.
it('swallows a throwing telemetry client instead of failing the caller', () => {
trackMock.mockImplementationOnce(() => {
throw new Error('posthog exploded')
})
expect(() => trackDaemonReplaced('failed_health_check', null)).not.toThrow()
trackMock.mockImplementationOnce(() => {
throw new Error('posthog exploded')
})
expect(() => trackDaemonRetired('died_respawn')).not.toThrow()
})
it('emits a validator-accepted retirement payload', () => {
trackDaemonRetired('died_respawn')
const [name, props] = trackMock.mock.calls[0]
expect(name).toBe('daemon_lifecycle')
expect(props).toEqual({
transition: 'retired',
reason: 'died_respawn',
live_session_count_bucket: 'unknown'
})
expect(validate('daemon_lifecycle', props).ok).toBe(true)
})
})