@mytmpvpn/mytmpvpn-client
Version:
MyTmpVpn Client Library
111 lines (110 loc) • 6.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const loglevel_1 = require("loglevel");
const vpnlib = require("@mytmpvpn/mytmpvpn-common/models/vpn");
const appconfig = require("../src/appconfig");
const common_1 = require("./common");
describe('Testing deleteVpn APIs', () => {
var client;
const appConfig = appconfig.loadDefaultAppConfig();
const userProfile = (0, common_1.createUserProfile)();
beforeAll(async () => {
client = await (0, common_1.createAuthUser)(appConfig, userProfile);
}, 600000);
afterAll(async () => {
await (0, common_1.deleteCleanUpAllAndDeleteAuthUser)(client, appConfig, userProfile);
}, 600000);
it("should error when deleting unknown vpn", async () => {
let badVpnToDelete = "9999000000000000@us-west-2";
try {
const response = await client.deleteVpn(badVpnToDelete);
loglevel_1.default.debug(`response: ${JSON.stringify(response)}`);
fail("Should not reach here");
}
catch (err) {
expect(err.response).toBeDefined();
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(404);
expect(err.response.data).toContain(badVpnToDelete);
}
});
it("should accept deleting already deleted vpn", async () => {
const vpnConfig = (0, common_1.getGoodPeanutsConfig)(await client.getVpnConfigLimits());
const vpn = await client.createVpnSync(common_1.VPN_REGION, vpnConfig);
loglevel_1.default.debug(`vpn created: ${JSON.stringify(vpn)}`);
expect(vpn).toBeDefined();
expect(vpn.vpnId).toBeDefined();
expect(vpn.state).toEqual(vpnlib.VpnState.Running);
let response = await client.deleteVpn(vpn.vpnId);
loglevel_1.default.debug(`response: ${JSON.stringify(response)}`);
expect(response.vpn.vpnId).toBeDefined();
expect(response.vpn.vpnId).toEqual(vpn.vpnId);
let current = await client.waitUntilVpnStateIs(response.vpn.vpnId, vpnlib.VpnState.Deprovisioning);
loglevel_1.default.debug(`current: ${JSON.stringify(current)}`);
expect(current.vpnId).toBeDefined();
expect(current.vpnId).toEqual(vpn.vpnId);
expect(vpnlib.toRank(current.state)).toBeGreaterThanOrEqual(vpnlib.toRank(vpnlib.VpnState.Deprovisioning));
response = await client.deleteVpn(vpn.vpnId);
loglevel_1.default.debug(`response: ${JSON.stringify(response)}`);
expect(response.vpn.vpnId).toBeDefined();
expect(response.vpn.vpnId).toEqual(vpn.vpnId);
current = await client.waitUntilVpnStateIs(response.vpn.vpnId, vpnlib.VpnState.Deleted);
loglevel_1.default.debug(`current: ${JSON.stringify(current)}`);
expect(current.vpnId).toBeDefined();
expect(current.vpnId).toEqual(vpn.vpnId);
expect(current.state).toEqual(vpnlib.VpnState.Deleted);
response = await client.deleteVpn(vpn.vpnId);
loglevel_1.default.debug(`response: ${JSON.stringify(response)}`);
expect(response.vpn.vpnId).toBeDefined();
expect(response.vpn.vpnId).toEqual(vpn.vpnId);
});
it("should delete after given deleteAfter", async () => {
const vpnConfigLimits = await client.getVpnConfigLimits();
const vpn = await client.createVpnSync(common_1.VPN_REGION, {
maxPeanuts: -1,
type: vpnlib.VpnType.WireGuard,
deleteAfter: vpnConfigLimits.deleteAfterFieldMinValue
});
loglevel_1.default.log(`vpn: ${JSON.stringify(vpn)}`);
expect(vpn).toBeDefined();
let current = await client.waitUntilVpnStateIs(vpn.vpnId, vpnlib.VpnState.Running);
loglevel_1.default.log(`current: ${JSON.stringify(current)}`);
expect(current.vpnId).toBeDefined();
expect(current.vpnId).toEqual(vpn.vpnId);
// The waiting time is tricky to get right as it's best effort.
// 1. We are waiting for the monitoring to catch up once the VPN is in Running state but it
// could take up to 5 minutes to catch up. In testing we expect monitoring to be less than
// this (1 minute ideally).
// 2. As of 2025-05, the monitoring computes the time from the "createAt" field.
// That is *not* when the instance has been provisioned and running.
// 3. As of 2025-05, the waitUntilVpnStatIs() function is based on polling. So when the Vpn is
// in Running state, it has probably been for a while already.
// Given this, we will wait for the monitoring to catch up.
// This should ideally be 1 min in testing environments (and 5 minutes in prod).
const timeoutInSeconds = 60;
// It can take couple of minutes to deprovision, so we don't expect the state to be Delete
// under the given timeout. Anything that is beyond Deprovisioning is fine.
current = await client.waitUntilVpnStateIs(vpn.vpnId, vpnlib.VpnState.Deprovisioning, timeoutInSeconds);
loglevel_1.default.log(`current: ${JSON.stringify(current)}`);
expect(current.vpnId).toBeDefined();
expect(current.vpnId).toEqual(vpn.vpnId);
});
it("should delete after given maxPeanuts", async () => {
const vpnConfig = (0, common_1.getMinPeanutsConfig)(await client.getVpnConfigLimits());
const vpn = await client.createVpnSync(common_1.VPN_REGION, vpnConfig);
loglevel_1.default.log(`vpn: ${JSON.stringify(vpn)}`);
expect(vpn).toBeDefined();
let current = await client.waitUntilVpnStateIs(vpn.vpnId, vpnlib.VpnState.Running);
loglevel_1.default.log(`current: ${JSON.stringify(current)}`);
expect(current.vpnId).toBeDefined();
expect(current.vpnId).toEqual(vpn.vpnId);
// Let's wait enough time for this to happen as we gave only minimum number of peanuts
// this is best-effort.
current = await client.waitUntilVpnStateIs(vpn.vpnId, vpnlib.VpnState.Deleted, 10 * 60);
loglevel_1.default.log(`current: ${JSON.stringify(current)}`);
expect(current.vpnId).toBeDefined();
expect(current.vpnId).toEqual(vpn.vpnId);
expect(current.state).toEqual(vpnlib.VpnState.Deleted);
});
});