Files
openchamber/packages/web/server/lib/tunnels/executable-search.test.js
T

97 lines
2.7 KiB
JavaScript

import { describe, expect, it } from 'bun:test';
import {
createExecutableSearchEnv,
findExecutableOnPath,
getExecutableSearchDirectories,
resolveExecutableLaunchTarget,
} from './executable-search.js';
describe('getExecutableSearchDirectories', () => {
it('adds the WindowsApps app-alias directory on Windows', () => {
const directories = getExecutableSearchDirectories({
platform: 'win32',
env: {
PATH: 'C:\\Tools',
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
},
});
expect(directories).toContain('C:\\Users\\Ada\\AppData\\Local\\Microsoft\\WindowsApps');
});
it('reads Windows Path casing when PATH is not present', () => {
const directories = getExecutableSearchDirectories({
platform: 'win32',
env: {
Path: 'C:\\Tools;C:\\MoreTools',
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
},
});
expect(directories[0]).toBe('C:\\Tools');
expect(directories[1]).toBe('C:\\MoreTools');
});
});
describe('findExecutableOnPath', () => {
it('finds Windows Store app execution aliases even when PATH omits WindowsApps', () => {
const aliasPath = 'C:\\Users\\Ada\\AppData\\Local\\Microsoft\\WindowsApps\\ngrok.exe';
const fsLike = {
statSync: (candidate) => {
if (candidate === aliasPath) {
return { isFile: () => true };
}
throw new Error('not found');
},
accessSync: () => {},
};
const resolved = findExecutableOnPath('ngrok', {
platform: 'win32',
env: {
PATH: 'C:\\Tools',
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
PATHEXT: '.EXE;.CMD',
},
fsLike,
});
expect(resolved).toBe(aliasPath);
});
});
describe('resolveExecutableLaunchTarget', () => {
it('returns a Windows launch target with WindowsApps on PATH when stat lookup fails', () => {
const target = resolveExecutableLaunchTarget('ngrok', {
platform: 'win32',
env: {
PATH: 'C:\\Windows\\System32',
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
},
fsLike: {
statSync: () => { throw new Error('EACCES'); },
accessSync: () => {},
},
});
expect(target?.command).toBe('ngrok');
expect(target?.env.Path).toContain('C:\\Users\\Ada\\AppData\\Local\\Microsoft\\WindowsApps');
});
});
describe('createExecutableSearchEnv', () => {
it('keeps Windows PATH variants in sync', () => {
const env = createExecutableSearchEnv({
platform: 'win32',
env: {
PATH: 'C:\\Windows\\System32',
LOCALAPPDATA: 'C:\\Users\\Ada\\AppData\\Local',
},
});
expect(env.PATH).toBe(env.Path);
expect(env.path).toBe(env.Path);
});
});