persistence_test.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package persistence
  2. import (
  3. "encoding/hex"
  4. "os"
  5. "testing"
  6. "github.com/langgenius/dify-plugin-daemon/internal/types/app"
  7. "github.com/langgenius/dify-plugin-daemon/internal/utils/cache"
  8. "github.com/langgenius/dify-plugin-daemon/internal/utils/strings"
  9. )
  10. func TestPersistenceStoreAndLoad(t *testing.T) {
  11. err := cache.InitRedisClient("localhost:6379", "difyai123456")
  12. if err != nil {
  13. t.Fatalf("Failed to init redis client: %v", err)
  14. }
  15. defer cache.Close()
  16. InitPersistence(&app.Config{
  17. PersistenceStorageType: "local",
  18. PersistenceStorageLocalPath: "./persistence_storage",
  19. })
  20. key := strings.RandomString(10)
  21. if err := persistence.Save("tenant_id", "plugin_checksum", key, []byte("data")); err != nil {
  22. t.Fatalf("Failed to save data: %v", err)
  23. }
  24. data, err := persistence.Load("tenant_id", "plugin_checksum", key)
  25. if err != nil {
  26. t.Fatalf("Failed to load data: %v", err)
  27. }
  28. if string(data) != "data" {
  29. t.Fatalf("Data mismatch: %s", data)
  30. }
  31. // check if the file exists
  32. if _, err := os.Stat("./persistence_storage/tenant_id/plugin_checksum/" + key); os.IsNotExist(err) {
  33. t.Fatalf("File not found: %v", err)
  34. }
  35. // check if cache is updated
  36. cache_data, err := cache.GetString("persistence:cache:tenant_id:plugin_checksum:" + key)
  37. if err != nil {
  38. t.Fatalf("Failed to get cache data: %v", err)
  39. }
  40. cache_data_bytes, err := hex.DecodeString(cache_data)
  41. if err != nil {
  42. t.Fatalf("Failed to decode cache data: %v", err)
  43. }
  44. if string(cache_data_bytes) != "data" {
  45. t.Fatalf("Cache data mismatch: %s", cache_data)
  46. }
  47. }
  48. func TestPersistenceSaveAndLoadWithLongKey(t *testing.T) {
  49. err := cache.InitRedisClient("localhost:6379", "difyai123456")
  50. if err != nil {
  51. t.Fatalf("Failed to init redis client: %v", err)
  52. }
  53. defer cache.Close()
  54. InitPersistence(&app.Config{
  55. PersistenceStorageType: "local",
  56. PersistenceStorageLocalPath: "./persistence_storage",
  57. })
  58. key := strings.RandomString(65)
  59. if err := persistence.Save("tenant_id", "plugin_checksum", key, []byte("data")); err == nil {
  60. t.Fatalf("Expected error, got nil")
  61. }
  62. }
  63. func TestPersistenceDelete(t *testing.T) {
  64. err := cache.InitRedisClient("localhost:6379", "difyai123456")
  65. if err != nil {
  66. t.Fatalf("Failed to init redis client: %v", err)
  67. }
  68. defer cache.Close()
  69. InitPersistence(&app.Config{
  70. PersistenceStorageType: "local",
  71. PersistenceStorageLocalPath: "./persistence_storage",
  72. })
  73. key := strings.RandomString(10)
  74. if err := persistence.Save("tenant_id", "plugin_checksum", key, []byte("data")); err != nil {
  75. t.Fatalf("Failed to save data: %v", err)
  76. }
  77. if err := persistence.Delete("tenant_id", "plugin_checksum", key); err != nil {
  78. t.Fatalf("Failed to delete data: %v", err)
  79. }
  80. // check if the file exists
  81. if _, err := os.Stat("./persistence_storage/tenant_id/plugin_checksum/" + key); !os.IsNotExist(err) {
  82. t.Fatalf("File not deleted: %v", err)
  83. }
  84. // check if cache is updated
  85. _, err = cache.GetString("persistence:cache:tenant_id:plugin_checksum:" + key)
  86. if err != cache.ErrNotFound {
  87. t.Fatalf("Cache data not deleted: %v", err)
  88. }
  89. }