feat: create temp remote with remote configuration (#117)

This commit is contained in:
heafalan
2019-07-08 13:01:40 +02:00
committed by badrAZ
parent 4e9d143996
commit 445b13ec29
3 changed files with 49 additions and 9 deletions

View File

@@ -9,8 +9,10 @@
[templates]
default = ''
[remotes]
default = ''
[srs]
default = ''
# resources created before all tests and deleted at the end.
[preCreatedResources]
[preCreatedResources.remotes]
default = { name = '', url = '' }

View File

@@ -6,6 +6,13 @@ import { find, forOwn } from "lodash";
import config from "./_config";
const ARGS_BY_TYPE = {
remotes: {
getCreationArgs: conf => ["remote.create", conf],
getDeletionArgs: res => ["remote.delete", { id: res.id }],
},
};
const getDefaultCredentials = () => {
const { email, password } = config.xoConnection;
return { email, password };
@@ -18,6 +25,7 @@ class XoConnection extends Xo {
const objects = (this._objects = new XoCollection());
const watchers = (this._watchers = {});
this._tempResourceDisposers = [];
this._durableResourceDisposers = [];
this.on("notification", ({ method, params }) => {
if (method !== "all") {
@@ -123,21 +131,48 @@ class XoConnection extends Xo {
return id;
}
async createRequiredResources() {
const requiredResources = {};
const resourcesToCreate = config.preCreatedResources;
for (const typeOfResources in resourcesToCreate) {
const { getCreationArgs, getDeletionArgs } = ARGS_BY_TYPE[
typeOfResources
];
const resources = resourcesToCreate[typeOfResources];
for (const resource in resources) {
const result = await this.call(...getCreationArgs(resources[resource]));
this._durableResourceDisposers.push(...getDeletionArgs(result));
requiredResources[typeOfResources] = {
...requiredResources[typeOfResources],
[resource]: result,
};
}
}
return requiredResources;
}
async getSchedule(predicate) {
return find(await this.call("schedule.getAll"), predicate);
}
async deleteTempResources() {
const disposers = this._tempResourceDisposers;
async _cleanDisposers(disposers) {
for (let n = disposers.length - 1; n > 0; ) {
const params = disposers[n--];
const method = disposers[n--];
await this.call(method, params).catch(error => {
console.warn("deleteTempResources", method, params, error);
console.warn("_cleanDisposers", method, params, error);
});
}
disposers.length = 0;
}
async deleteTempResources() {
await this._cleanDisposers(this._tempResourceDisposers);
}
async deleteDurableResources() {
await this._cleanDisposers(this._durableResourceDisposers);
}
}
const getConnection = credentials => {
@@ -146,16 +181,19 @@ const getConnection = credentials => {
};
let xo;
let resources;
beforeAll(async () => {
xo = await getConnection();
resources = await xo.createRequiredResources();
});
afterAll(async () => {
await xo.deleteDurableResources();
await xo.close();
xo = null;
});
afterEach(() => xo.deleteTempResources());
export { xo as default };
export { xo as default, resources };
export const testConnection = ({ credentials }) =>
getConnection(credentials).then(connection => connection.close());

View File

@@ -4,7 +4,7 @@ import { noSuchObject } from "xo-common/api-errors";
import config from "../_config";
import randomId from "../_randomId";
import xo from "../_xoConnection";
import xo, { resources } from "../_xoConnection";
const DEFAULT_SCHEDULE = {
name: "scheduleTest",
@@ -233,7 +233,7 @@ describe("backupNg", () => {
const { id: jobId } = await xo.createTempBackupNgJob({
...defaultBackupNg,
remotes: {
id: config.remotes.default,
id: resources.remotes.default.id,
},
schedules: {
[scheduleTempId]: DEFAULT_SCHEDULE,