packager_test.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package plugin_packager
  2. import (
  3. _ "embed"
  4. "os"
  5. "testing"
  6. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/decoder"
  7. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/packager"
  8. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/signer"
  9. "github.com/langgenius/dify-plugin-daemon/internal/core/plugin_packager/verifier"
  10. )
  11. //go:embed manifest.yaml
  12. var manifest []byte
  13. func TestPackagerAndVerifier(t *testing.T) {
  14. // create a temp directory
  15. if err := os.Mkdir("temp", 0755); err != nil {
  16. t.Errorf("failed to create temp directory: %s", err.Error())
  17. return
  18. }
  19. defer func() {
  20. os.RemoveAll("temp")
  21. os.Remove("temp")
  22. }()
  23. // create manifest
  24. if err := os.WriteFile("temp/manifest.yaml", manifest, 0644); err != nil {
  25. t.Errorf("failed to write manifest: %s", err.Error())
  26. return
  27. }
  28. origin_decoder, err := decoder.NewFSPluginDecoder("temp")
  29. if err != nil {
  30. t.Errorf("failed to create decoder: %s", err.Error())
  31. return
  32. }
  33. packager := packager.NewPackager(origin_decoder)
  34. // pack
  35. zip, err := packager.Pack()
  36. if err != nil {
  37. t.Errorf("failed to pack: %s", err.Error())
  38. return
  39. }
  40. // sign
  41. signed, err := signer.SignPlugin(zip)
  42. if err != nil {
  43. t.Errorf("failed to sign: %s", err.Error())
  44. return
  45. }
  46. signed_decoder, err := decoder.NewZipPluginDecoder(signed)
  47. if err != nil {
  48. t.Errorf("failed to create zip decoder: %s", err.Error())
  49. return
  50. }
  51. // verify
  52. err = verifier.VerifyPlugin(signed_decoder)
  53. if err != nil {
  54. t.Errorf("failed to verify: %s", err.Error())
  55. return
  56. }
  57. }
  58. func TestWrongSign(t *testing.T) {
  59. // create a temp directory
  60. if err := os.Mkdir("temp", 0755); err != nil {
  61. t.Errorf("failed to create temp directory: %s", err.Error())
  62. return
  63. }
  64. defer func() {
  65. os.RemoveAll("temp")
  66. os.Remove("temp")
  67. }()
  68. // create manifest
  69. if err := os.WriteFile("temp/manifest.yaml", manifest, 0644); err != nil {
  70. t.Errorf("failed to write manifest: %s", err.Error())
  71. return
  72. }
  73. origin_decoder, err := decoder.NewFSPluginDecoder("temp")
  74. if err != nil {
  75. t.Errorf("failed to create decoder: %s", err.Error())
  76. return
  77. }
  78. packager := packager.NewPackager(origin_decoder)
  79. // pack
  80. zip, err := packager.Pack()
  81. if err != nil {
  82. t.Errorf("failed to pack: %s", err.Error())
  83. return
  84. }
  85. // sign
  86. signed, err := signer.SignPlugin(zip)
  87. if err != nil {
  88. t.Errorf("failed to sign: %s", err.Error())
  89. return
  90. }
  91. // modify the signed file, signature is at the end of the file
  92. signed[len(signed)-1] = 0
  93. signed[len(signed)-2] = 0
  94. // create a new decoder
  95. signed_decoder, err := decoder.NewZipPluginDecoder(signed)
  96. if err != nil {
  97. t.Errorf("failed to create zip decoder: %s", err.Error())
  98. return
  99. }
  100. // verify
  101. err = verifier.VerifyPlugin(signed_decoder)
  102. if err == nil {
  103. t.Errorf("should fail to verify")
  104. return
  105. }
  106. }