@mytmpvpn/mytmpvpn-client
Version:
MyTmpVpn Client Library
230 lines (229 loc) • 11.7 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const loglevel_1 = __importDefault(require("loglevel"));
const vpnlib = __importStar(require("@mytmpvpn/mytmpvpn-common/models/vpn"));
const appconfig = __importStar(require("../src/appconfig"));
const common_1 = require("./common");
const auth_1 = require("../src/auth");
describe('Testing createVpn APIs', () => {
let client;
const appConfig = appconfig.loadDefaultAppConfig();
const userProfile = (0, auth_1.createTestUserProfile)();
beforeAll(async () => {
client = await (0, common_1.createAuthUser)(appConfig, userProfile);
}, 600000);
afterAll(async () => {
await (0, common_1.deleteCleanUpAllAndDeleteAuthUser)(client, appConfig, userProfile);
}, 600000);
it("should create one new vpn for a given user with minimum number of peanuts", async () => {
const vpnConfigLimits = await client.getVpnConfigLimits();
const vpnConfig = (0, common_1.getGoodPeanutsConfig)(vpnConfigLimits);
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, vpnConfig);
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
expect(newVpn).toBeDefined();
expect(newVpn.geonamesId).toEqual(common_1.VPN_GEONAMES_ID);
expect(newVpn.state).toBeDefined();
expect([vpnlib.VpnState.Creating, vpnlib.VpnState.Created, vpnlib.VpnState.Provisioning].includes(newVpn.state));
expect(vpnlib.toRank(newVpn.state) >= vpnlib.toRank(vpnlib.VpnState.Creating)).toBe(true);
const newVpns = await client.listVpns();
expect(newVpns.map(vpn => vpn.vpnId)).toContainEqual(newVpn.vpnId);
await (0, common_1.cleanUp)(client, newVpn);
});
it("should create one new vpn for a given user with number of peanuts set to -1 and enough peanuts in the account", async () => {
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, {
maxPeanuts: -1,
type: vpnlib.VpnType.WireGuard
});
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
expect(newVpn).toBeDefined();
expect(newVpn.geonamesId).toEqual(common_1.VPN_GEONAMES_ID);
expect(newVpn.state).toBeDefined();
expect([vpnlib.VpnState.Creating, vpnlib.VpnState.Created, vpnlib.VpnState.Provisioning].includes(newVpn.state));
expect(vpnlib.toRank(newVpn.state) >= vpnlib.toRank(vpnlib.VpnState.Creating)).toBe(true);
const newVpns = await client.listVpns();
loglevel_1.default.debug(`vpns returned: ${JSON.stringify(newVpns)}`);
expect(newVpns.map(vpn => vpn.vpnId)).toContainEqual(newVpn.vpnId);
await (0, common_1.cleanUp)(client, newVpn);
});
it("should create one new vpn for a given user with number of peanuts set to 0 and enough peanuts in the account", async () => {
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, {
maxPeanuts: 0,
type: vpnlib.VpnType.WireGuard
});
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
expect(newVpn).toBeDefined();
expect(newVpn.geonamesId).toEqual(common_1.VPN_GEONAMES_ID);
expect(newVpn.state).toBeDefined();
expect([vpnlib.VpnState.Creating, vpnlib.VpnState.Created, vpnlib.VpnState.Provisioning].includes(newVpn.state));
expect(vpnlib.toRank(newVpn.state) >= vpnlib.toRank(vpnlib.VpnState.Creating)).toBe(true);
const newVpns = await client.listVpns();
expect(newVpns.map(vpn => vpn.vpnId)).toContainEqual(newVpn.vpnId);
await (0, common_1.cleanUp)(client, newVpn);
});
it("should not create a vpn if given peanuts is less than minimum", async () => {
const vpnConfigLimits = await client.getVpnConfigLimits();
try {
const vpnConfig = (0, common_1.getTooFewPeanutsConfig)(vpnConfigLimits);
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, vpnConfig);
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
fail("Should not reach here");
}
catch (err) {
expect(err).not.toEqual("Should not reach here");
expect(err.response).toBeDefined(),
`Expected err.response to be defined. Received error: ${JSON.stringify(err)}`;
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(400);
expect(err.response.data.error).toContain("Minimum number of peanuts should be");
}
});
it("should not create a vpn if given peanuts is more that the current balance", async () => {
const balance = await client.getPeanutsBalance();
try {
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, {
maxPeanuts: balance * 10,
type: vpnlib.VpnType.WireGuard
});
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
fail("Should not reach here");
}
catch (err) {
expect(err).not.toEqual("Should not reach here");
expect(err.response).toBeDefined();
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(400);
expect(err.response.data.error).toContain(`Not enough peanuts, you specified: `);
}
});
it("should not create a vpn if deleteAfter is in the past", async () => {
try {
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, {
maxPeanuts: -1,
type: vpnlib.VpnType.WireGuard,
deleteAfter: -5 * 60
});
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
fail("Should not reach here");
}
catch (err) {
expect(err).not.toEqual("Should not reach here");
expect(err.response).toBeDefined();
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(400);
expect(err.response.data.error).toContain(`deleteAfter must be greater than `);
}
});
it("should not create a vpn if deleteAfter is not in the future enough", async () => {
try {
const vpnConfigLimits = await client.getVpnConfigLimits();
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, {
maxPeanuts: -1,
type: vpnlib.VpnType.WireGuard,
deleteAfter: vpnConfigLimits.deleteAfterFieldMinValue / 2
});
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
fail("Should not reach here");
}
catch (err) {
expect(err).not.toEqual("Should not reach here");
expect(err.response).toBeDefined();
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(400);
expect(err.response.data.error).toContain(`deleteAfter must be greater than `);
}
});
it("should not create a vpn if deleteAfter is too far in the future", async () => {
try {
const vpnConfigLimits = await client.getVpnConfigLimits();
const newVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, {
maxPeanuts: -1,
type: vpnlib.VpnType.WireGuard,
deleteAfter: vpnConfigLimits.deleteAfterFieldMaxValue * 2
});
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(newVpn)}`);
fail("Should not reach here");
}
catch (err) {
expect(err).not.toEqual("Should not reach here");
expect(err.response).toBeDefined();
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(400);
expect(err.response.data.error).toContain(`deleteAfter must be lesser than `);
}
});
it("should reach quota on maximum number of Vpns that can be created", async () => {
const locationsNb = (await client.listLocations()).length;
const vpns = await client.listVpns();
expect(vpns).toBeDefined();
const orginalLengths = vpns.length;
const runningVpns = vpns.filter(vpn => [
vpnlib.VpnState.Creating,
vpnlib.VpnState.Created,
vpnlib.VpnState.Provisioning,
vpnlib.VpnState.Running
]
.includes(vpn.state));
loglevel_1.default.debug(`runningVpns: ${JSON.stringify(runningVpns)}`);
const vpnConfig = (0, common_1.getMaxPeanutsConfig)(await client.getVpnConfigLimits());
const allowed = (await client.getUserConfig()).vpnsQuota - runningVpns.length;
const succeded = [];
for (let i = 0; i < allowed; i++) {
const vpn = await client.createVpn(common_1.VPN_GEONAMES_ID, vpnConfig);
loglevel_1.default.debug(`vpn returned: ${JSON.stringify(vpn)}`);
expect(vpn).toBeDefined();
succeded.push(vpn);
}
loglevel_1.default.log(`Number of created vpns: ${JSON.stringify(succeded.length)}`);
try {
const unexpectedVpn = await client.createVpn(common_1.VPN_GEONAMES_ID, vpnConfig);
loglevel_1.default.debug(`unexpectedVpn: ${JSON.stringify(unexpectedVpn)}`);
fail("Should not reach here");
}
catch (err) {
expect(err).not.toEqual("Should not reach here");
const util = require('util');
// Provide a clear message that inspect the error if err.response is not defined
if (err.response === undefined) {
loglevel_1.default.log(`err: ${util.inspect(err, { showHidden: false, depth: null })}`);
}
expect(err.response).toBeDefined();
expect(err.response.status).toBeDefined();
expect(err.response.data).toBeDefined();
expect(err.response.status).toBe(400);
expect(err.response.data.error).toContain('Quota reached');
}
// Let's clean-up here
await client.waitAndDeleteAll(succeded.map(vpn => vpn.vpnId));
});
});