- Add `--run-as` option to specify user for system-wide timers - Add `--home` option to set the HOME environment variable - Add `--cwd` option to define the working directory - Update tests to validate new options and behavior
117 lines
3.5 KiB
TypeScript
117 lines
3.5 KiB
TypeScript
import {
|
|
assert,
|
|
assertStringIncludes,
|
|
} from 'https://deno.land/std@0.224.0/assert/mod.ts';
|
|
import { TimerOptions } from '../../types/mod.ts';
|
|
import { generateUnits } from '../unit-generator.ts';
|
|
|
|
Deno.test('generateUnits erzeugt Basis-Service und Timer korrekt', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/usr/bin/my-script',
|
|
calendar: 'daily',
|
|
};
|
|
const { serviceUnit, timerUnit } = generateUnits('myjob', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'ExecStart=/usr/bin/my-script');
|
|
assertStringIncludes(timerUnit, 'OnCalendar=daily');
|
|
assertStringIncludes(timerUnit, '[Install]');
|
|
});
|
|
|
|
Deno.test('generateUnits setzt Beschreibung aus Option', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
description: 'Meine Unit',
|
|
};
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'Description=Meine Unit');
|
|
});
|
|
|
|
Deno.test('generateUnits berücksichtigt after=', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
after: ['network-online.target', 'docker.service'],
|
|
};
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'After=network-online.target');
|
|
assertStringIncludes(serviceUnit, 'After=docker.service');
|
|
});
|
|
|
|
Deno.test('generateUnits berücksichtigt environment und logfile', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
environment: ['FOO=bar', 'DEBUG=1'],
|
|
logfile: '/var/log/job.log',
|
|
};
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'Environment=FOO=bar');
|
|
assertStringIncludes(serviceUnit, 'Environment=DEBUG=1');
|
|
assertStringIncludes(serviceUnit, 'StandardOutput=append:/var/log/job.log');
|
|
assertStringIncludes(serviceUnit, 'StandardError=append:/var/log/job.log');
|
|
});
|
|
|
|
Deno.test('generateUnits berücksichtigt runAs', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
runAs: 'myuser',
|
|
};
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'User=myuser');
|
|
});
|
|
|
|
Deno.test('generateUnits berücksichtigt home', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
home: '/home/myuser',
|
|
};
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'Environment=HOME=/home/myuser');
|
|
});
|
|
|
|
Deno.test('generateUnits berücksichtigt cwd', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
cwd: '/srv/app',
|
|
};
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(serviceUnit, 'WorkingDirectory=/srv/app');
|
|
});
|
|
|
|
Deno.test('generateUnits verwendet default.target bei User-Timern', () => {
|
|
const opts: TimerOptions = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
user: true,
|
|
};
|
|
const { timerUnit } = generateUnits('job', opts);
|
|
|
|
assertStringIncludes(timerUnit, 'WantedBy=default.target');
|
|
});
|
|
|
|
Deno.test('generateUnits ignoriert runAs bei --user', () => {
|
|
const opts = {
|
|
exec: '/bin/true',
|
|
calendar: 'daily',
|
|
user: true,
|
|
runAs: 'should-not-appear',
|
|
};
|
|
|
|
const { serviceUnit } = generateUnits('job', opts);
|
|
|
|
assert(
|
|
!serviceUnit.includes('User=should-not-appear'),
|
|
'User= sollte bei --user nicht enthalten sein',
|
|
);
|
|
});
|