refactor: plugins

This commit is contained in:
xiaojunnuo
2022-11-08 22:10:42 +08:00
parent d66bc33761
commit b04d4cb5c5
113 changed files with 2815 additions and 1 deletions
@@ -0,0 +1,10 @@
import { IAccessService } from "../../src/access/access-service";
import { AbstractAccess, HostAccess } from "../../src";
import { aliyunSecret } from "../user.secret";
export class AccessServiceTest implements IAccessService {
async getById(id: any): Promise<AbstractAccess> {
return {
...aliyunSecret,
} as HostAccess;
}
}
@@ -0,0 +1,15 @@
import { ContextFactory } from "../../src/core/context";
import { FileStorage } from "../../src/core/storage";
import { AccessServiceTest } from "./access-service-test";
import { logger } from "../../src/utils/util.log";
const contextFactory = new ContextFactory(new FileStorage());
const userContext = contextFactory.getContext("user", "test");
const pipelineContext = contextFactory.getContext("pipeline", "test");
export const pluginInitProps = {
accessService: new AccessServiceTest(),
pipelineContext: pipelineContext,
userContext: userContext,
logger: logger,
};
@@ -0,0 +1,66 @@
import { ConcurrencyStrategy, NextStrategy, Pipeline, RunStrategy } from "../../src";
let idIndex = 0;
function generateId() {
idIndex++;
return idIndex + "";
}
export const pipeline: Pipeline = {
version: 1,
id: generateId(),
title: "测试管道",
userId: 1,
triggers: [],
stages: [
{
id: generateId(),
title: "证书申请阶段",
concurrency: ConcurrencyStrategy.Serial,
next: NextStrategy.AllSuccess,
tasks: [
{
id: generateId(),
title: "申请证书任务",
steps: [
{
id: generateId(),
title: "申请证书",
type: "CertApply",
input: {
domains: ["*.docmirror.cn"],
email: "xiaojunnuo@qq.com",
dnsProviderType: "aliyun",
accessId: "111",
},
},
],
},
],
},
{
id: generateId(),
title: "证书部署阶段",
concurrency: ConcurrencyStrategy.Serial,
next: NextStrategy.AllSuccess,
tasks: [
{
id: generateId(),
title: "测试输出参数任务",
steps: [
{
id: generateId(),
title: "输出参数(echo插件)",
type: "EchoPlugin",
input: {
cert: "cert",
},
strategy: {
runStrategy: RunStrategy.SkipWhenSucceed,
},
},
],
},
],
},
],
};
@@ -0,0 +1,18 @@
//import { expect } from "chai";
import "mocha";
import { Executor, RunHistory } from "../../src";
import { pipeline } from "./pipeline.define";
import { AccessServiceTest } from "./access-service-test";
import { FileStorage } from "../../src/core/storage";
describe("pipeline", function () {
it("#pipeline", async function () {
this.timeout(120000);
function onChanged(history: RunHistory) {
console.log("changed:");
}
const executor = new Executor({ userId: "test", pipeline, onChanged, accessService: new AccessServiceTest(), storage: new FileStorage() });
await executor.run(1, "user");
// expect(define.name).eq("EchoPlugin");
});
});
@@ -0,0 +1,23 @@
import { expect } from "chai";
import "mocha";
import { CertApplyPlugin } from "../../../src/plugin";
import { pluginInitProps } from "../init.test";
describe("CertApply", function () {
it("#execute", async function () {
this.timeout(120000);
const plugin = new CertApplyPlugin();
// @ts-ignore
delete plugin.define;
await plugin.doInit(pluginInitProps);
const output = await plugin.execute({
domains: ["*.docmirror.cn", "docmirror.cn"],
email: "xiaojunnuo@qq.com",
dnsProviderType: "aliyun",
accessId: "111",
forceUpdate: true,
});
const cert = output.cert;
expect(plugin.getDefine().name).eq("CertApply");
expect(cert.crt != null).eq(true);
});
});
@@ -0,0 +1,23 @@
import { expect } from "chai";
import "mocha";
import { DeployCertToAliyunCDN } from "../../../src/plugin";
import { pluginInitProps } from "../init.test";
describe("DeployToAliyunCDN", function () {
it("#execute", async function () {
this.timeout(120000);
const plugin = new DeployCertToAliyunCDN();
// @ts-ignore
delete plugin.define;
await plugin.doInit(pluginInitProps);
const cert = await pluginInitProps.pipelineContext.get("cert");
await plugin.execute({
cert,
domainName: "certd-cdn-upload.docmirror.cn",
});
expect(plugin.getDefine().name).eq("DeployCertToAliyunCDN");
});
});