Files
hetznercloud/test/test.ts
T

72 lines
2.4 KiB
TypeScript
Raw Normal View History

import { expect, tap } from '@git.zone/tstest/tapbundle';
2024-02-17 21:55:25 +01:00
import * as hetznercloud from '../ts/index.js';
import * as qenv from '@push.rocks/qenv';
const testQenv = new qenv.Qenv('./', './.nogit/');
2024-01-29 13:55:55 +01:00
let testAccount: hetznercloud.HetznerAccount | undefined;
let liveApiAvailable = false;
let liveApiSkipReason = 'HETZNER_API_TOKEN has not been validated.';
2024-02-17 21:55:25 +01:00
tap.test('should create a valid hetzer account', async (toolsArg) => {
const token = await testQenv.getEnvVarOnDemand('HETZNER_API_TOKEN');
if (!token) {
liveApiSkipReason = 'HETZNER_API_TOKEN is not configured.';
toolsArg.skip(liveApiSkipReason);
return;
}
testAccount = new hetznercloud.HetznerAccount(token);
2024-02-17 21:55:25 +01:00
expect(testAccount).toBeInstanceOf(hetznercloud.HetznerAccount);
});
tap.test('should be able to list all servers', async (toolsArg) => {
if (!testAccount) {
toolsArg.skip(liveApiSkipReason);
return;
}
const account = testAccount;
const tokenCheckResponse = await account.request('GET', '/servers', {});
if (tokenCheckResponse.statusCode === 401 || tokenCheckResponse.statusCode === 403) {
liveApiSkipReason = 'HETZNER_API_TOKEN was rejected by the Hetzner API.';
toolsArg.skip(liveApiSkipReason);
return;
}
if (tokenCheckResponse.statusCode < 200 || tokenCheckResponse.statusCode >= 300) {
throw new Error(`Hetzner API returned status ${tokenCheckResponse.statusCode}`);
}
liveApiAvailable = true;
const servers = await account.getServers();
2024-02-17 21:55:25 +01:00
expect(servers).toBeArray();
console.log(JSON.stringify(servers, null, 2));
2024-02-18 01:17:15 +01:00
});
2024-02-17 21:55:25 +01:00
2024-02-18 01:17:15 +01:00
const testserver = tap.test('should be able to create a server', async (toolsArg) => {
if (!liveApiAvailable || !testAccount) {
toolsArg.skip(liveApiSkipReason);
return;
}
2024-02-17 21:55:25 +01:00
const newServer = await testAccount.createServer({
name: 'testserver',
2024-02-17 21:59:10 +01:00
location: 'nbg1',
2024-02-18 01:17:15 +01:00
type: 'cpx41',
labels: {
servezoneId: 'testzone',
},
2024-02-17 21:55:25 +01:00
});
expect(newServer).toBeInstanceOf(hetznercloud.HetznerServer);
console.log(newServer);
2024-02-18 01:17:15 +01:00
await toolsArg.delayFor(10000);
return newServer;
});
tap.test('should be able to delete a server', async (toolsArg) => {
if (!liveApiAvailable) {
toolsArg.skip(liveApiSkipReason);
return;
}
2024-02-18 01:17:15 +01:00
const testServer: hetznercloud.HetznerServer =
await (testserver.testResultPromise as Promise<hetznercloud.HetznerServer>);
await testServer.delete();
2024-02-18 01:17:15 +01:00
});
2024-01-29 13:55:55 +01:00
export default tap.start();