plugin_declaration_test.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. package plugin_entities
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/langgenius/dify-plugin-daemon/internal/utils/parser"
  6. "github.com/langgenius/dify-plugin-daemon/pkg/entities/constants"
  7. "github.com/langgenius/dify-plugin-daemon/pkg/entities/manifest_entities"
  8. )
  9. func preparePluginDeclaration() PluginDeclaration {
  10. return PluginDeclaration{
  11. PluginDeclarationWithoutAdvancedFields: PluginDeclarationWithoutAdvancedFields{
  12. Version: "0.0.1",
  13. Type: manifest_entities.PluginType,
  14. Description: I18nObject{
  15. EnUS: "test",
  16. },
  17. Name: "test",
  18. Icon: "test.svg",
  19. Label: I18nObject{
  20. EnUS: "test",
  21. },
  22. Author: "test",
  23. CreatedAt: time.Now(),
  24. Resource: PluginResourceRequirement{
  25. Memory: 1,
  26. Permission: &PluginPermissionRequirement{
  27. Tool: &PluginPermissionToolRequirement{
  28. Enabled: true,
  29. },
  30. Model: &PluginPermissionModelRequirement{
  31. Enabled: true,
  32. },
  33. Node: &PluginPermissionNodeRequirement{
  34. Enabled: true,
  35. },
  36. Storage: &PluginPermissionStorageRequirement{
  37. Enabled: true,
  38. Size: 1024,
  39. },
  40. },
  41. },
  42. Plugins: PluginExtensions{},
  43. Meta: PluginMeta{
  44. Version: "0.0.1",
  45. Arch: []constants.Arch{
  46. constants.AMD64,
  47. },
  48. Runner: PluginRunner{
  49. Language: constants.Python,
  50. Version: "3.12",
  51. Entrypoint: "main",
  52. },
  53. },
  54. },
  55. }
  56. }
  57. func TestPluginDeclarationFullTest(t *testing.T) {
  58. declaration := preparePluginDeclaration()
  59. declarationBytes := parser.MarshalJsonBytes(declaration)
  60. // unmarshal
  61. newDeclaration, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  62. if err != nil {
  63. t.Errorf("failed to unmarshal declaration: %s", err.Error())
  64. return
  65. }
  66. if newDeclaration.Version != declaration.Version {
  67. t.Errorf("version not equal")
  68. return
  69. }
  70. if newDeclaration.Type != declaration.Type {
  71. t.Errorf("type not equal")
  72. return
  73. }
  74. if newDeclaration.Name != declaration.Name {
  75. t.Errorf("name not equal")
  76. return
  77. }
  78. if newDeclaration.Author != declaration.Author {
  79. t.Errorf("author not equal")
  80. return
  81. }
  82. if newDeclaration.Resource.Memory != declaration.Resource.Memory {
  83. t.Errorf("memory not equal")
  84. return
  85. }
  86. if newDeclaration.Resource.Permission == nil {
  87. t.Errorf("permission is nil")
  88. return
  89. }
  90. if newDeclaration.Resource.Permission.Tool == nil {
  91. t.Errorf("tool permission is nil")
  92. return
  93. }
  94. if newDeclaration.Resource.Permission.Node == nil {
  95. t.Errorf("node permission is nil")
  96. return
  97. }
  98. if newDeclaration.Resource.Permission.Storage == nil {
  99. t.Errorf("storage permission is nil")
  100. return
  101. }
  102. }
  103. func TestPluginDeclarationIncorrectVersion(t *testing.T) {
  104. declaration := preparePluginDeclaration()
  105. declaration.Version = "1"
  106. declarationBytes := parser.MarshalJsonBytes(declaration)
  107. _, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  108. if err == nil {
  109. t.Errorf("failed to validate version")
  110. return
  111. }
  112. }
  113. func TestPluginUnsupportedLanguage(t *testing.T) {
  114. declaration := preparePluginDeclaration()
  115. declaration.Meta.Runner.Language = "test"
  116. declarationBytes := parser.MarshalJsonBytes(declaration)
  117. _, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  118. if err == nil {
  119. t.Errorf("failed to validate language")
  120. return
  121. }
  122. }
  123. func TestPluginUnsupportedArch(t *testing.T) {
  124. declaration := preparePluginDeclaration()
  125. declaration.Meta.Arch[0] = constants.Arch("test")
  126. declarationBytes := parser.MarshalJsonBytes(declaration)
  127. _, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  128. if err == nil {
  129. t.Errorf("failed to validate arch")
  130. return
  131. }
  132. }
  133. func TestPluginStorageSizeTooSmallOrTooLarge(t *testing.T) {
  134. declaration := preparePluginDeclaration()
  135. declaration.Resource.Permission.Storage.Size = 1023
  136. declarationBytes := parser.MarshalJsonBytes(declaration)
  137. _, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  138. if err == nil {
  139. t.Errorf("failed to validate storage size")
  140. return
  141. }
  142. declaration.Resource.Permission.Storage.Size = 1073741825
  143. declarationBytes = parser.MarshalJsonBytes(declaration)
  144. _, err = parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  145. if err == nil {
  146. t.Errorf("failed to validate storage size")
  147. return
  148. }
  149. }
  150. func TestPluginDeclarationIncorrectType(t *testing.T) {
  151. declaration := preparePluginDeclaration()
  152. declaration.Type = "test"
  153. declarationBytes := parser.MarshalJsonBytes(declaration)
  154. _, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  155. if err == nil {
  156. t.Errorf("failed to validate type")
  157. return
  158. }
  159. }
  160. func TestPluginDeclarationIncorrectName(t *testing.T) {
  161. declaration := preparePluginDeclaration()
  162. declaration.Name = ""
  163. declarationBytes := parser.MarshalJsonBytes(declaration)
  164. _, err := parser.UnmarshalJsonBytes[PluginDeclaration](declarationBytes)
  165. if err == nil {
  166. t.Errorf("failed to validate name")
  167. return
  168. }
  169. }