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  }