github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/acceptance/openstack/csbs/v1/policies_test.go (about) 1 package v1 2 3 import ( 4 "testing" 5 6 golangsdk "github.com/opentelekomcloud/gophertelekomcloud" 7 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients" 8 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack" 9 "github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools" 10 "github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto" 11 "github.com/opentelekomcloud/gophertelekomcloud/openstack/csbs/v1/backup" 12 "github.com/opentelekomcloud/gophertelekomcloud/openstack/csbs/v1/policies" 13 th "github.com/opentelekomcloud/gophertelekomcloud/testhelper" 14 ) 15 16 func TestPoliciesList(t *testing.T) { 17 client, err := clients.NewCsbsV1Client() 18 th.AssertNoErr(t, err) 19 20 backupPolicies, err := policies.List(client, policies.ListOpts{}) 21 th.AssertNoErr(t, err) 22 23 for _, policy := range backupPolicies { 24 tools.PrintResource(t, policy) 25 } 26 } 27 28 func TestPoliciesLifeCycle(t *testing.T) { 29 client, err := clients.NewCsbsV1Client() 30 th.AssertNoErr(t, err) 31 32 computeClient, err := clients.NewComputeV1Client() 33 th.AssertNoErr(t, err) 34 35 ecs := openstack.CreateCloudServer(t, computeClient, openstack.GetCloudServerCreateOpts(t)) 36 t.Cleanup(func() { openstack.DeleteCloudServer(t, computeClient, ecs.ID) }) 37 38 // Create CSBSv1 policy 39 policy := createCSBSPolicy(t, client, ecs.ID) 40 tools.PrintResource(t, policy) 41 42 err = updateCSBSPolicy(client, policy.ID) 43 th.AssertNoErr(t, err) 44 45 policyUpdate, err := policies.Get(client, policy.ID) 46 th.AssertNoErr(t, err) 47 tools.PrintResource(t, policyUpdate) 48 } 49 50 func createCSBSPolicy(t *testing.T, client *golangsdk.ServiceClient, serverId string) *policies.BackupPolicy { 51 t.Logf("Attempting to create CSBSv1 policy") 52 53 createOpts := policies.CreateOpts{ 54 Description: tools.RandomString("description-init-", 10), 55 Name: tools.RandomString("policy-init-", 5), 56 Parameters: policies.PolicyParam{ 57 Common: map[string]string{}, 58 }, 59 Resources: []policies.Resource{ 60 { 61 Id: serverId, 62 Type: "OS::Nova::Server", 63 Name: "resource1", 64 }, 65 }, 66 ProviderId: backup.ProviderID, 67 ScheduledOperations: []policies.ScheduledOperation{ 68 { 69 Enabled: false, 70 OperationType: "backup", 71 OperationDefinition: policies.OperationDefinition{ 72 MaxBackups: pointerto.Int(2), 73 YearBackups: 2, 74 MonthBackups: 2, 75 WeekBackups: 2, 76 DayBackups: 2, 77 TimeZone: "UTC+01:00", 78 Permanent: false, 79 }, 80 Trigger: policies.Trigger{ 81 Properties: policies.TriggerProperties{ 82 Pattern: "BEGIN:VCALENDAR\r\nBEGIN:VEVENT\r\nRRULE:FREQ=WEEKLY;BYDAY=TH;BYHOUR=12;BYMINUTE=27\r\nEND:VEVENT\r\nEND:VCALENDAR\r\n", 83 }, 84 }, 85 }, 86 }, 87 } 88 89 policy, err := policies.Create(client, createOpts) 90 th.AssertNoErr(t, err) 91 t.Cleanup(func() { deleteCSBSPolicy(t, client, policy.ID) }) 92 93 err = waitForCSBSPolicyActive(client, 600, policy.ID) 94 th.AssertNoErr(t, err) 95 96 t.Logf("Created CSBSv1 Policy: %s", policy.ID) 97 return policy 98 } 99 100 func deleteCSBSPolicy(t *testing.T, client *golangsdk.ServiceClient, policyId string) { 101 t.Logf("Attempting to delete CSBSv1: %s", policyId) 102 103 err := policies.Delete(client, policyId) 104 th.AssertNoErr(t, err) 105 106 err = waitForCSBSPolicyDelete(client, 600, policyId) 107 th.AssertNoErr(t, err) 108 109 t.Logf("Deleted CSBSv1 Policy: %s", policyId) 110 } 111 112 func updateCSBSPolicy(client *golangsdk.ServiceClient, policyId string) error { 113 policyNameUpdate := tools.RandomString("policy-update-", 5) 114 policyDescriptionUpdate := tools.RandomString("description-update-", 10) 115 updateOpts := policies.UpdateOpts{ 116 Description: policyDescriptionUpdate, 117 Name: policyNameUpdate, 118 } 119 120 _, err := policies.Update(client, policyId, updateOpts) 121 if err != nil { 122 return err 123 } 124 return nil 125 } 126 127 func waitForCSBSPolicyActive(client *golangsdk.ServiceClient, secs int, policyId string) error { 128 return golangsdk.WaitFor(secs, func() (bool, error) { 129 policy, err := policies.Get(client, policyId) 130 if err != nil { 131 return false, err 132 } 133 134 if policy.Status == "suspended" { 135 return true, nil 136 } 137 return false, nil 138 }) 139 } 140 141 func waitForCSBSPolicyDelete(client *golangsdk.ServiceClient, secs int, policyId string) error { 142 return golangsdk.WaitFor(secs, func() (bool, error) { 143 _, err := policies.Get(client, policyId) 144 if _, ok := err.(golangsdk.ErrDefault404); ok { 145 return true, nil 146 } 147 return false, nil 148 }) 149 }