packager_test.go 3.1 KB

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