浏览代码

tests: packager, signer and verifier

Yeuoly 11 月之前
父节点
当前提交
5c961bfaac
共有 2 个文件被更改,包括 155 次插入0 次删除
  1. 29 0
      internal/core/plugin_packager/manifest.yaml
  2. 126 0
      internal/core/plugin_packager/packager_test.go

+ 29 - 0
internal/core/plugin_packager/manifest.yaml

@@ -0,0 +1,29 @@
+version: 0.0.1
+type: plugin
+author: "Yeuoly"
+name: "Neko"
+created_at: "2024-07-12T08:03:44.658609186Z"
+resource:
+  memory: 1048576
+  storage: 1048576
+  permission:
+    tool:
+      enabled: true
+    model:
+      enabled: true
+      llm: true
+plugins:
+  - "webhooks/neko.yaml"
+  - "webhooks/duck.yaml"
+execution:
+  install: install.sh
+  launch: launch.sh
+meta:
+  version: 0.0.1
+  arch:
+    - "amd64"
+    - "arm64"
+  runner:
+    language: "python"
+    version: "3.12"
+    entrypoint: "main"

+ 126 - 0
internal/core/plugin_packager/packager_test.go

@@ -0,0 +1,126 @@
+package plugin_packager
+
+import (
+	_ "embed"
+	"os"
+	"testing"
+
+	"github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/decoder"
+	"github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/packager"
+	"github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/signer"
+	"github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/verifier"
+)
+
+//go:embed manifest.yaml
+var manifest []byte
+
+func TestPackagerAndVerifier(t *testing.T) {
+	// create a temp directory
+	if err := os.Mkdir("temp", 0755); err != nil {
+		t.Errorf("failed to create temp directory: %s", err.Error())
+		return
+	}
+	defer func() {
+		os.RemoveAll("temp")
+		os.Remove("temp")
+	}()
+
+	// create manifest
+	if err := os.WriteFile("temp/manifest.yaml", manifest, 0644); err != nil {
+		t.Errorf("failed to write manifest: %s", err.Error())
+		return
+	}
+
+	origin_decoder, err := decoder.NewFSPluginDecoder("temp")
+	if err != nil {
+		t.Errorf("failed to create decoder: %s", err.Error())
+		return
+	}
+
+	packager := packager.NewPackager(origin_decoder)
+
+	// pack
+	zip, err := packager.Pack()
+	if err != nil {
+		t.Errorf("failed to pack: %s", err.Error())
+		return
+	}
+
+	// sign
+	signed, err := signer.SignPlugin(zip)
+	if err != nil {
+		t.Errorf("failed to sign: %s", err.Error())
+		return
+	}
+
+	signed_decoder, err := decoder.NewZipPluginDecoder(signed)
+	if err != nil {
+		t.Errorf("failed to create zip decoder: %s", err.Error())
+		return
+	}
+
+	// verify
+	err = verifier.VerifyPlugin(signed_decoder)
+	if err != nil {
+		t.Errorf("failed to verify: %s", err.Error())
+		return
+	}
+}
+
+func TestWrongSign(t *testing.T) {
+	// create a temp directory
+	if err := os.Mkdir("temp", 0755); err != nil {
+		t.Errorf("failed to create temp directory: %s", err.Error())
+		return
+	}
+	defer func() {
+		os.RemoveAll("temp")
+		os.Remove("temp")
+	}()
+
+	// create manifest
+	if err := os.WriteFile("temp/manifest.yaml", manifest, 0644); err != nil {
+		t.Errorf("failed to write manifest: %s", err.Error())
+		return
+	}
+
+	origin_decoder, err := decoder.NewFSPluginDecoder("temp")
+	if err != nil {
+		t.Errorf("failed to create decoder: %s", err.Error())
+		return
+	}
+
+	packager := packager.NewPackager(origin_decoder)
+
+	// pack
+	zip, err := packager.Pack()
+	if err != nil {
+		t.Errorf("failed to pack: %s", err.Error())
+		return
+	}
+
+	// sign
+	signed, err := signer.SignPlugin(zip)
+	if err != nil {
+		t.Errorf("failed to sign: %s", err.Error())
+		return
+	}
+
+	// modify the signed file, signature is at the end of the file
+	signed[len(signed)-1] = 0
+	signed[len(signed)-2] = 0
+
+	// create a new decoder
+	signed_decoder, err := decoder.NewZipPluginDecoder(signed)
+	if err != nil {
+		t.Errorf("failed to create zip decoder: %s", err.Error())
+		return
+	}
+
+	// verify
+	err = verifier.VerifyPlugin(signed_decoder)
+	if err == nil {
+		t.Errorf("should fail to verify")
+		return
+	}
+}