Skip to content

Commit 6210a90

Browse files
authored
chore(test): add restart service model e2e test (#3097)
Signed-off-by: Vladimir Lazar <[email protected]>
1 parent 121b41c commit 6210a90

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

tests/playwright/src/ai-lab-extension.spec.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,24 @@ test.describe.serial(`AI Lab extension installation and verification`, () => {
324324
}).toPass({ timeout: 600_000, intervals: [5_000] });
325325
});
326326

327+
test(`Restart model service for ${modelName}`, async () => {
328+
test.skip(modelName === 'ggerganov/whisper.cpp');
329+
test.setTimeout(180_000);
330+
331+
await modelServiceDetailsPage.stopService();
332+
await playExpect(modelServiceDetailsPage.startServiceButton).toBeEnabled({ timeout: 120_000 });
333+
await playExpect
334+
// eslint-disable-next-line sonarjs/no-nested-functions
335+
.poll(async () => await modelServiceDetailsPage.getServiceState(), { timeout: 120_000 })
336+
.toBe('');
337+
338+
await modelServiceDetailsPage.startService();
339+
await playExpect
340+
// eslint-disable-next-line sonarjs/no-nested-functions
341+
.poll(async () => await modelServiceDetailsPage.getServiceState(), { timeout: 120_000 })
342+
.toBe('RUNNING');
343+
});
344+
327345
test(`Delete model service for ${modelName}`, async () => {
328346
test.setTimeout(150_000);
329347
const modelServicePage = await modelServiceDetailsPage.deleteService();

tests/playwright/src/model/ai-lab-service-details-page.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ export class AILabServiceDetailsPage extends AILabBasePage {
2929
readonly codeSnippet: Locator;
3030
readonly deleteServiceButton: Locator;
3131
readonly stopServiceButton: Locator;
32+
readonly startServiceButton: Locator;
3233

3334
constructor(page: Page, webview: Page) {
3435
super(page, webview, 'Service details');
@@ -38,6 +39,7 @@ export class AILabServiceDetailsPage extends AILabBasePage {
3839
this.codeSnippet = this.webview.getByLabel('Code Snippet', { exact: true });
3940
this.deleteServiceButton = this.webview.getByRole('button', { name: 'Delete service' });
4041
this.stopServiceButton = this.webview.getByRole('button', { name: 'Stop service' });
42+
this.startServiceButton = this.webview.getByRole('button', { name: 'Start service' });
4143
}
4244

4345
async waitForLoad(): Promise<void> {
@@ -51,6 +53,16 @@ export class AILabServiceDetailsPage extends AILabBasePage {
5153
return new AiModelServicePage(this.page, this.webview);
5254
}
5355

56+
async stopService(): Promise<void> {
57+
await playExpect(this.stopServiceButton).toBeEnabled();
58+
await this.stopServiceButton.click();
59+
}
60+
61+
async startService(): Promise<void> {
62+
await playExpect(this.startServiceButton).toBeEnabled();
63+
await this.startServiceButton.click();
64+
}
65+
5466
async getInferenceServerPort(): Promise<string> {
5567
const split = (await this.endpointURL.textContent())?.split(':');
5668
const port = split ? split[split.length - 1].split('/')[0] : '';

0 commit comments

Comments
 (0)