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  }