You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

133 lines
4.6 KiB

  1. package model
  2. import (
  3. "testing"
  4. "github.com/glebarez/sqlite"
  5. "github.com/stretchr/testify/assert"
  6. "github.com/stretchr/testify/require"
  7. "gorm.io/gorm"
  8. "gorm.io/gorm/logger"
  9. )
  10. func setupChannelAssetCredentialDB(t *testing.T) *gorm.DB {
  11. t.Helper()
  12. db, err := gorm.Open(sqlite.Open("file:channel_asset_credentials?mode=memory&cache=shared"), &gorm.Config{
  13. Logger: logger.Default.LogMode(logger.Silent),
  14. })
  15. require.NoError(t, err)
  16. sqlDB, err := db.DB()
  17. require.NoError(t, err)
  18. sqlDB.SetMaxOpenConns(1)
  19. originalDB := DB
  20. DB = db
  21. t.Cleanup(func() {
  22. DB = originalDB
  23. require.NoError(t, sqlDB.Close())
  24. })
  25. return db
  26. }
  27. func TestChannelAssetCredentialUpsertKeepsOneCredentialPerChannel(t *testing.T) {
  28. db := setupChannelAssetCredentialDB(t)
  29. require.NoError(t, db.AutoMigrate(&ChannelAssetCredential{}))
  30. require.NoError(t, UpsertChannelAssetCredential(&ChannelAssetCredential{
  31. ChannelId: 61,
  32. AccessKey: "ak-old",
  33. SecretKey: "sk-old",
  34. PoolID: "pool-old",
  35. }))
  36. require.NoError(t, UpsertChannelAssetCredential(&ChannelAssetCredential{
  37. ChannelId: 61,
  38. AccessKey: "ak-new",
  39. SecretKey: "sk-new",
  40. PoolID: "pool-new",
  41. }))
  42. credential, err := GetChannelAssetCredential(61)
  43. require.NoError(t, err)
  44. require.NotNil(t, credential)
  45. assert.Equal(t, "ak-new", credential.AccessKey)
  46. assert.Equal(t, "sk-new", credential.SecretKey)
  47. assert.Equal(t, "pool-new", credential.PoolID)
  48. var count int64
  49. require.NoError(t, db.Model(&ChannelAssetCredential{}).Where("channel_id = ?", 61).Count(&count).Error)
  50. assert.Equal(t, int64(1), count)
  51. }
  52. func TestChannelAssetCredentialSummariesDoNotContainSecrets(t *testing.T) {
  53. db := setupChannelAssetCredentialDB(t)
  54. require.NoError(t, db.AutoMigrate(&ChannelAssetCredential{}))
  55. require.NoError(t, UpsertChannelAssetCredential(&ChannelAssetCredential{
  56. ChannelId: 61,
  57. AccessKey: "ak-secret",
  58. SecretKey: "sk-secret",
  59. PoolID: "pool-61",
  60. }))
  61. summaries, err := GetChannelAssetCredentialSummaries([]int{61, 62})
  62. require.NoError(t, err)
  63. require.Contains(t, summaries, 61)
  64. assert.Equal(t, "pool-61", summaries[61].PoolID)
  65. assert.NotContains(t, summaries, 62)
  66. }
  67. func TestChannelDeleteRemovesOnlyItsAssetCredential(t *testing.T) {
  68. db := setupChannelAssetCredentialDB(t)
  69. require.NoError(t, db.AutoMigrate(&Channel{}, &Ability{}, &ChannelAssetCredential{}))
  70. for _, id := range []int{61, 62} {
  71. require.NoError(t, db.Create(&Channel{Id: id, Key: "key", Name: "channel", Group: "default", Models: "model"}).Error)
  72. require.NoError(t, UpsertChannelAssetCredential(&ChannelAssetCredential{ChannelId: id, AccessKey: "ak", SecretKey: "sk"}))
  73. }
  74. require.NoError(t, (&Channel{Id: 61}).Delete())
  75. credential, err := GetChannelAssetCredential(61)
  76. require.NoError(t, err)
  77. assert.Nil(t, credential)
  78. credential, err = GetChannelAssetCredential(62)
  79. require.NoError(t, err)
  80. assert.NotNil(t, credential)
  81. }
  82. func TestDeleteDisabledChannelRemovesAssetCredentials(t *testing.T) {
  83. db := setupChannelAssetCredentialDB(t)
  84. require.NoError(t, db.AutoMigrate(&Channel{}, &Ability{}, &ChannelAssetCredential{}))
  85. require.NoError(t, db.Create(&Channel{Id: 61, Key: "key", Name: "disabled", Group: "default", Models: "model", Status: 2}).Error)
  86. require.NoError(t, db.Create(&Channel{Id: 62, Key: "key", Name: "enabled", Group: "default", Models: "model", Status: 1}).Error)
  87. for _, id := range []int{61, 62} {
  88. require.NoError(t, UpsertChannelAssetCredential(&ChannelAssetCredential{ChannelId: id, AccessKey: "ak", SecretKey: "sk"}))
  89. }
  90. _, err := DeleteDisabledChannel()
  91. require.NoError(t, err)
  92. credential, err := GetChannelAssetCredential(61)
  93. require.NoError(t, err)
  94. assert.Nil(t, credential)
  95. credential, err = GetChannelAssetCredential(62)
  96. require.NoError(t, err)
  97. assert.NotNil(t, credential)
  98. }
  99. func TestDeleteChannelByStatusRemovesAssetCredentials(t *testing.T) {
  100. db := setupChannelAssetCredentialDB(t)
  101. require.NoError(t, db.AutoMigrate(&Channel{}, &Ability{}, &ChannelAssetCredential{}))
  102. require.NoError(t, db.Create(&Channel{Id: 61, Key: "key", Name: "disabled", Group: "default", Models: "model", Status: 2}).Error)
  103. require.NoError(t, db.Create(&Channel{Id: 62, Key: "key", Name: "enabled", Group: "default", Models: "model", Status: 1}).Error)
  104. for _, id := range []int{61, 62} {
  105. require.NoError(t, UpsertChannelAssetCredential(&ChannelAssetCredential{ChannelId: id, AccessKey: "ak", SecretKey: "sk"}))
  106. }
  107. _, err := DeleteChannelByStatus(2)
  108. require.NoError(t, err)
  109. credential, err := GetChannelAssetCredential(61)
  110. require.NoError(t, err)
  111. assert.Nil(t, credential)
  112. credential, err = GetChannelAssetCredential(62)
  113. require.NoError(t, err)
  114. assert.NotNil(t, credential)
  115. }