github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/cbr/v3/helpers.go (about) 1 package v3 2 3 import ( 4 "fmt" 5 "testing" 6 7 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack" 8 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools" 9 "github.com/opentelekomcloud/gophertelekomcloud/openstack/cbr/v3/vaults" 10 11 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 12 "github.com/opentelekomcloud/gophertelekomcloud/openstack/cbr/v3/backups" 13 "github.com/opentelekomcloud/gophertelekomcloud/openstack/cbr/v3/checkpoint" 14 th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" 15 ) 16 17 func CreateCheckpoint(t *testing.T, client *golangsdk.ServiceClient, createOpts checkpoint.CreateOpts) *checkpoint.Checkpoint { 18 backup, err := checkpoint.Create(client, createOpts) 19 th.AssertNoErr(t, err) 20 21 err = golangsdk.WaitFor(600, func() (bool, error) { 22 checkp, err := checkpoint.Get(client, backup.ID) 23 if err != nil { 24 return false, err 25 } 26 if checkp.Status == "available" { 27 return true, nil 28 } 29 if checkp.Status == "error" { 30 return false, fmt.Errorf("error creating a checkpoint") 31 } 32 return false, nil 33 }) 34 th.AssertNoErr(t, err) 35 36 return backup 37 } 38 39 func RestoreBackup(t *testing.T, client *golangsdk.ServiceClient, id string, opts backups.RestoreBackupOpts) error { 40 errRest := backups.RestoreBackup(client, id, opts) 41 th.AssertNoErr(t, errRest) 42 43 err := golangsdk.WaitFor(600, func() (bool, error) { 44 back, err := backups.Get(client, id) 45 if err != nil { 46 return false, err 47 } 48 if back.Status == "available" { 49 return true, nil 50 } 51 if back.Status == "error" { 52 return false, fmt.Errorf("error restoring a backup") 53 } 54 return false, nil 55 }) 56 th.AssertNoErr(t, err) 57 58 return nil 59 } 60 61 func waitForBackupDelete(client *golangsdk.ServiceClient, secs int, id string) error { 62 return golangsdk.WaitFor(secs, func() (bool, error) { 63 _, err := backups.Get(client, id) 64 if err != nil { 65 if _, ok := err.(golangsdk.ErrDefault404); ok { 66 return true, nil 67 } 68 return false, err 69 } 70 71 return false, nil 72 }) 73 } 74 75 func CreateCBR(t *testing.T, client *golangsdk.ServiceClient) (*vaults.Vault, vaults.AssociateResourcesOpts, checkpoint.CreateOpts, *checkpoint.Checkpoint) { 76 // Create Vault for further backup 77 opts := vaults.CreateOpts{ 78 Billing: &vaults.BillingCreate{ 79 ConsistentLevel: "crash_consistent", 80 ObjectType: "disk", 81 ProtectType: "backup", 82 Size: 100, 83 }, 84 Description: "gophertelemocloud testing vault", 85 Name: tools.RandomString("cbr-test-", 5), 86 Resources: []vaults.ResourceCreate{}, 87 } 88 vault, err := vaults.Create(client, opts) 89 th.AssertNoErr(t, err) 90 t.Cleanup(func() { 91 th.AssertNoErr(t, vaults.Delete(client, vault.ID)) 92 }) 93 94 // Create Volume 95 volume := openstack.CreateVolume(t) 96 t.Cleanup(func() { 97 openstack.DeleteVolume(t, volume.ID) 98 }) 99 100 // Associate server to the vault 101 aOpts := vaults.AssociateResourcesOpts{ 102 Resources: []vaults.ResourceCreate{ 103 { 104 ID: volume.ID, 105 Type: "OS::Cinder::Volume", 106 }, 107 }, 108 } 109 associated, err := vaults.AssociateResources(client, vault.ID, aOpts) 110 th.AssertNoErr(t, err) 111 th.AssertEquals(t, 1, len(associated)) 112 113 // Create vault checkpoint 114 optsVault := checkpoint.CreateOpts{ 115 VaultID: vault.ID, 116 Parameters: checkpoint.CheckpointParam{ 117 Description: "go created backup", 118 Incremental: true, 119 Name: tools.RandomString("go-checkpoint", 5), 120 }, 121 } 122 checkp := CreateCheckpoint(t, client, optsVault) 123 return vault, aOpts, optsVault, checkp 124 }