You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
2.5 KiB

import { ExitCode, InternalService, Microservice, MicroserviceState } from "../../src";
class MockService<M extends Microservice> extends InternalService<M> {
public NAME = "Mock Service";
public hasBooted = false;
public hasStarted = false;
public hasShutdown = false;
public override async boot() { this.hasBooted = true; }
public override async start() { this.hasStarted = true; }
public override async shutdown() { this.hasShutdown = true; }
}
class MockServiceBootFail<M extends Microservice> extends InternalService<M> {
public NAME = "Boot Fail";
public override async boot() {
throw new Error();
}
}
class MockServiceStartFail<M extends Microservice> extends InternalService<M> {
public NAME = "Start Fail";
public override async start() {
throw new Error();
}
}
class MockServiceShutdownFail<M extends Microservice> extends InternalService<M> {
public NAME = "Shutdown Fail";
public override async shutdown() {
throw new Error();
}
}
describe("Microservice/Internal Service Integration", () => {
test("Check that internal service state methods have been executed", async () => {
let microservice = new Microservice();
microservice.installService(MockService);
let executing = microservice.exec();
microservice.on("ready", () => microservice.quit());
await executing;
expect(microservice.service(MockService).hasBooted).toBe(true);
expect(microservice.service(MockService).hasStarted).toBe(true);
expect(microservice.service(MockService).hasShutdown).toBe(true);
});
test("Trigger boot failure", async () => {
let microservice = new Microservice();
microservice.installService(MockServiceBootFail);
let exitCode = await microservice.exec();
expect(exitCode).toEqual(ExitCode.BootError);
expect(microservice.state).toEqual(MicroserviceState.Finished);
});
test("Trigger start failure", async () => {
let microservice = new Microservice();
microservice.installService(MockServiceStartFail);
let exitCode = await microservice.exec();
expect(exitCode).toEqual(ExitCode.StartupError);
expect(microservice.state).toEqual(MicroserviceState.Finished);
});
test("Trigger shutdown failure", async () => {
let microservice = new Microservice();
microservice.installService(MockServiceShutdownFail);
let execPromise = microservice.exec();
microservice.on("ready", () => microservice.quit());
let exitCode = await execPromise;
expect(exitCode).toEqual(ExitCode.ShutdownError);
expect(microservice.state).toEqual(MicroserviceState.Finished);
});
});