feat(vaults): add migration for boltdb

This commit is contained in:
Denis Gukov 2024-10-31 00:45:23 +05:00
parent 4795e37113
commit 143594d80b
3 changed files with 124 additions and 0 deletions

View File

@ -47,6 +47,8 @@ func (d *BoltDb) ApplyMigration(m db.Migration) (err error) {
err = migration_2_10_16{migration{d.db}}.Apply()
case "2.10.24":
err = migration_2_10_24{migration{d.db}}.Apply()
case "2.10.33":
err = migration_2_10_33{migration{d.db}}.Apply()
}
if err != nil {

View File

@ -0,0 +1,38 @@
package bolt
type migration_2_10_33 struct {
migration
}
func (d migration_2_10_33) Apply() (err error) {
projectIDs, err := d.getProjectIDs()
if err != nil {
return
}
vaults := make(map[string]map[string]map[string]interface{})
for _, projectID := range projectIDs {
var err2 error
vaults[projectID], err2 = d.getObjects(projectID, "template_vault")
if err2 != nil {
return err2
}
}
for projectID, projectVaults := range vaults {
for repoID, vault := range projectVaults {
if vault["type"] != nil && vault["type"] != "" {
continue
}
vault["type"] = "password"
err = d.setObject(projectID, "template_vault", repoID, vault)
if err != nil {
return err
}
}
}
return
}

View File

@ -0,0 +1,84 @@
package bolt
import (
"encoding/json"
"go.etcd.io/bbolt"
"testing"
)
func TestMigration_2_10_33_Apply(t *testing.T) {
store := CreateTestStore()
err := store.db.Update(func(tx *bbolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte("project"))
if err != nil {
return err
}
err = b.Put([]byte("0000000001"), []byte("{}"))
if err != nil {
return err
}
r, err := tx.CreateBucketIfNotExists([]byte("project__template_vault_0000000001"))
if err != nil {
return err
}
err = r.Put([]byte("0000000001"),
[]byte("{\"id\":\"1\",\"project_id\":\"1\"}"))
return err
})
if err != nil {
t.Fatal(err)
}
err = migration_2_10_33{migration{store.db}}.Apply()
if err != nil {
t.Fatal(err)
}
var repo map[string]interface{}
err = store.db.View(func(tx *bbolt.Tx) error {
b := tx.Bucket([]byte("project__template_vault_0000000001"))
str := string(b.Get([]byte("0000000001")))
return json.Unmarshal([]byte(str), &repo)
})
if err != nil {
t.Fatal(err)
}
if repo["type"] == nil {
t.Fatal("app must be set")
}
if repo["type"].(string) != "password" {
t.Fatal("invalid app: " + repo["type"].(string))
}
}
func TestMigration_2_10_33_Apply2(t *testing.T) {
store := CreateTestStore()
err := store.db.Update(func(tx *bbolt.Tx) error {
b, err := tx.CreateBucketIfNotExists([]byte("project"))
if err != nil {
return err
}
err = b.Put([]byte("0000000001"), []byte("{}"))
return err
})
if err != nil {
t.Fatal(err)
}
err = migration_2_10_33{migration{store.db}}.Apply()
if err != nil {
t.Fatal(err)
}
}