From 854f600d3f7a6eeda41b69cc728251555bf26299 Mon Sep 17 00:00:00 2001 From: Levi Date: Thu, 19 Oct 2023 13:59:59 +0800 Subject: [PATCH] test: add extension script error case (#238) --- pkg/download/extension_test.go | 49 +++++++++++++++++++ .../testdata/extensions/extra/index.js | 18 +++++++ .../testdata/extensions/extra/manifest.json | 22 +++++++++ .../extensions/function_error/index.js | 16 ++++++ .../extensions/function_error/manifest.json | 21 ++++++++ .../testdata/extensions/script_error/index.js | 16 ++++++ .../extensions/script_error/manifest.json | 21 ++++++++ .../testdata/extensions/storage/manifest.json | 4 +- 8 files changed, 165 insertions(+), 2 deletions(-) create mode 100644 pkg/download/testdata/extensions/extra/index.js create mode 100644 pkg/download/testdata/extensions/extra/manifest.json create mode 100644 pkg/download/testdata/extensions/function_error/index.js create mode 100644 pkg/download/testdata/extensions/function_error/manifest.json create mode 100644 pkg/download/testdata/extensions/script_error/index.js create mode 100644 pkg/download/testdata/extensions/script_error/manifest.json diff --git a/pkg/download/extension_test.go b/pkg/download/extension_test.go index f40e24e9..502220c6 100644 --- a/pkg/download/extension_test.go +++ b/pkg/download/extension_test.go @@ -132,6 +132,55 @@ func TestDownloader_UpgradeExtension(t *testing.T) { }) } +func TestDownloader_ResolveWithExtra(t *testing.T) { + setupDownloader(func(downloader *Downloader) { + if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/extra", false); err != nil { + t.Fatal(err) + } + rr, err := downloader.Resolve(&base.Request{ + URL: "https://github.com/test", + }) + if err != nil { + t.Fatal(err) + } + if len(rr.Res.Files) != 2 { + t.Fatal("resolve error") + } + }) +} + +func TestDownloader_Extension_Errors(t *testing.T) { + setupDownloader(func(downloader *Downloader) { + if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/script_error", false); err != nil { + t.Fatal(err) + } + rr, err := downloader.Resolve(&base.Request{ + URL: "https://github.com/test", + }) + if err != nil { + t.Fatal(err) + } + if len(rr.Res.Files) == 2 { + t.Fatal("script error catch failed") + } + }) + + setupDownloader(func(downloader *Downloader) { + if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/function_error", false); err != nil { + t.Fatal(err) + } + rr, err := downloader.Resolve(&base.Request{ + URL: "https://github.com/test", + }) + if err != nil { + t.Fatal(err) + } + if len(rr.Res.Files) == 2 { + t.Fatal("function error catch failed") + } + }) +} + func TestDownloader_Extension_Settings(t *testing.T) { setupDownloader(func(downloader *Downloader) { if _, err := downloader.InstallExtensionByFolder("./testdata/extensions/settings_empty", false); err != nil { diff --git a/pkg/download/testdata/extensions/extra/index.js b/pkg/download/testdata/extensions/extra/index.js new file mode 100644 index 00000000..c781dcc4 --- /dev/null +++ b/pkg/download/testdata/extensions/extra/index.js @@ -0,0 +1,18 @@ +gopeed.events.onResolve(async function (ctx) { + ctx.res = { + name: "test", + files: Array(2).fill(true).map((_, i) => ({ + name: `test-${i}.txt`, + size: 1024, + req: { + url: ctx.req.url + "/" + i, + extra: { + headers: { + 'User-Agent': ctx.settings.ua, + }, + } + } + }), + ), + }; +}); diff --git a/pkg/download/testdata/extensions/extra/manifest.json b/pkg/download/testdata/extensions/extra/manifest.json new file mode 100644 index 00000000..258facc6 --- /dev/null +++ b/pkg/download/testdata/extensions/extra/manifest.json @@ -0,0 +1,22 @@ +{ + "name": "extra", + "title": "gopeed extension extra test", + "version": "0.0.1", + "scripts": [ + { + "event": "onResolve", + "matches": [ + "*://github.com/*" + ], + "entry": "index.js" + } + ], + "settings": [ + { + "name": "ua", + "title": "User-Agent", + "type": "string", + "value": "gopeed" + } + ] +} \ No newline at end of file diff --git a/pkg/download/testdata/extensions/function_error/index.js b/pkg/download/testdata/extensions/function_error/index.js new file mode 100644 index 00000000..e2c5ab1e --- /dev/null +++ b/pkg/download/testdata/extensions/function_error/index.js @@ -0,0 +1,16 @@ +gopeed.events.onResolve(async function (ctx) { + const aaa = {}; + gopeed.logger.info(aaa.bbb.ccc); + + ctx.res = { + name: "test", + files: Array(2).fill(true).map((_, i) => ({ + name: `test-${i}.txt`, + size: 1024, + req: { + url: ctx.req.url + "/" + i, + } + }), + ), + }; +}); diff --git a/pkg/download/testdata/extensions/function_error/manifest.json b/pkg/download/testdata/extensions/function_error/manifest.json new file mode 100644 index 00000000..65337859 --- /dev/null +++ b/pkg/download/testdata/extensions/function_error/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "function-error", + "title": "gopeed extension function error test", + "version": "0.0.1", + "scripts": [ + { + "event": "onResolve", + "matches": [ + "*://github.com/*" + ], + "entry": "index.js" + } + ], + "settings": [ + { + "name": "ua", + "title": "User-Agent", + "type": "string" + } + ] +} \ No newline at end of file diff --git a/pkg/download/testdata/extensions/script_error/index.js b/pkg/download/testdata/extensions/script_error/index.js new file mode 100644 index 00000000..cffc936c --- /dev/null +++ b/pkg/download/testdata/extensions/script_error/index.js @@ -0,0 +1,16 @@ +const aaa = {}; +gopeed.logger.info(aaa.bbb.ccc); + +gopeed.events.onResolve(async function (ctx) { + ctx.res = { + name: "test", + files: Array(2).fill(true).map((_, i) => ({ + name: `test-${i}.txt`, + size: 1024, + req: { + url: ctx.req.url + "/" + i, + } + }), + ), + }; +}); diff --git a/pkg/download/testdata/extensions/script_error/manifest.json b/pkg/download/testdata/extensions/script_error/manifest.json new file mode 100644 index 00000000..978745ba --- /dev/null +++ b/pkg/download/testdata/extensions/script_error/manifest.json @@ -0,0 +1,21 @@ +{ + "name": "script-error", + "title": "gopeed extension script error test", + "version": "0.0.1", + "scripts": [ + { + "event": "onResolve", + "matches": [ + "*://github.com/*" + ], + "entry": "index.js" + } + ], + "settings": [ + { + "name": "ua", + "title": "User-Agent", + "type": "string" + } + ] +} \ No newline at end of file diff --git a/pkg/download/testdata/extensions/storage/manifest.json b/pkg/download/testdata/extensions/storage/manifest.json index ab8ad2bc..5b8f41c9 100644 --- a/pkg/download/testdata/extensions/storage/manifest.json +++ b/pkg/download/testdata/extensions/storage/manifest.json @@ -1,6 +1,6 @@ { - "name": "basic", - "title": "gopeed extension basic test", + "name": "storage", + "title": "gopeed extension storage test", "version": "0.0.1", "scripts": [ {