orca/src/main/runtime/runtime-metadata.test.ts

87 lines
2.3 KiB
TypeScript

import { mkdtempSync, statSync } from 'fs'
import { tmpdir } from 'os'
import { join } from 'path'
import { afterEach, describe, expect, it } from 'vitest'
import { getRuntimeMetadataPath } from '../../shared/runtime-bootstrap'
import { clearRuntimeMetadata, readRuntimeMetadata, writeRuntimeMetadata } from './runtime-metadata'
const tempDirs: string[] = []
describe('runtime metadata', () => {
afterEach(() => {
for (const dir of tempDirs.splice(0)) {
clearRuntimeMetadata(dir)
}
})
it('writes and reads runtime metadata atomically', () => {
const userDataPath = mkdtempSync(join(tmpdir(), 'orca-runtime-metadata-'))
tempDirs.push(userDataPath)
writeRuntimeMetadata(userDataPath, {
runtimeId: 'rt_123',
pid: 42,
transport: {
kind: 'unix',
endpoint: '/tmp/orca.sock'
},
authToken: 'secret',
startedAt: 100
})
expect(readRuntimeMetadata(userDataPath)).toEqual({
runtimeId: 'rt_123',
pid: 42,
transport: {
kind: 'unix',
endpoint: '/tmp/orca.sock'
},
authToken: 'secret',
startedAt: 100
})
})
it('clears the runtime metadata file', () => {
const userDataPath = mkdtempSync(join(tmpdir(), 'orca-runtime-metadata-'))
tempDirs.push(userDataPath)
writeRuntimeMetadata(userDataPath, {
runtimeId: 'rt_123',
pid: 42,
transport: null,
authToken: null,
startedAt: 100
})
clearRuntimeMetadata(userDataPath)
expect(readRuntimeMetadata(userDataPath)).toBeNull()
expect(getRuntimeMetadataPath(userDataPath)).toContain('orca-runtime.json')
})
it.runIf(process.platform !== 'win32')(
'restricts runtime metadata permissions to the current user on Unix',
() => {
const userDataPath = mkdtempSync(join(tmpdir(), 'orca-runtime-metadata-'))
tempDirs.push(userDataPath)
writeRuntimeMetadata(userDataPath, {
runtimeId: 'rt_123',
pid: 42,
transport: {
kind: 'unix',
endpoint: '/tmp/orca.sock'
},
authToken: 'secret',
startedAt: 100
})
const metadataMode = statSync(getRuntimeMetadataPath(userDataPath)).mode & 0o777
const directoryMode = statSync(userDataPath).mode & 0o777
expect(metadataMode).toBe(0o600)
expect(directoryMode).toBe(0o700)
}
)
})