github.com/gophercloud/gophercloud@v1.11.0/openstack/blockstorage/extensions/backups/testing/fixtures_test.go (about)

     1  package testing
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"net/http"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/backups"
    11  	th "github.com/gophercloud/gophercloud/testhelper"
    12  	fake "github.com/gophercloud/gophercloud/testhelper/client"
    13  )
    14  
    15  const ListResponse = `
    16  {
    17    "backups": [
    18      {
    19        "id": "289da7f8-6440-407c-9fb4-7db01ec49164",
    20        "name": "backup-001"
    21      },
    22      {
    23        "id": "96c3bda7-c82a-4f50-be73-ca7621794835",
    24        "name": "backup-002"
    25      }
    26    ],
    27    "backups_links": [
    28      {
    29        "href": "%s/backups?marker=1",
    30        "rel": "next"
    31      }
    32    ]
    33  }
    34  `
    35  
    36  const ListDetailResponse = `
    37  {
    38    "backups": [
    39      {
    40        "id": "289da7f8-6440-407c-9fb4-7db01ec49164",
    41        "name": "backup-001",
    42        "volume_id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c",
    43        "description": "Daily Backup",
    44        "status": "available",
    45        "size": 30,
    46        "created_at": "2017-05-30T03:35:03.000000"
    47      },
    48      {
    49        "id": "96c3bda7-c82a-4f50-be73-ca7621794835",
    50        "name": "backup-002",
    51        "volume_id": "76b8950a-8594-4e5b-8dce-0dfa9c696358",
    52        "description": "Weekly Backup",
    53        "status": "available",
    54        "size": 25,
    55        "created_at": "2017-05-30T03:35:03.000000"
    56      }
    57    ],
    58    "backups_links": [
    59      {
    60        "href": "%s/backups/detail?marker=1",
    61        "rel": "next"
    62      }
    63    ]
    64  }
    65  `
    66  
    67  const GetResponse = `
    68  {
    69    "backup": {
    70      "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
    71      "name": "backup-001",
    72      "description": "Daily backup",
    73      "volume_id": "521752a6-acf6-4b2d-bc7a-119f9148cd8c",
    74      "status": "available",
    75      "size": 30,
    76      "created_at": "2017-05-30T03:35:03.000000"
    77    }
    78  }
    79  `
    80  const CreateRequest = `
    81  {
    82    "backup": {
    83      "volume_id": "1234",
    84      "name": "backup-001"
    85    }
    86  }
    87  `
    88  
    89  const CreateResponse = `
    90  {
    91    "backup": {
    92      "volume_id": "1234",
    93      "name": "backup-001",
    94      "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
    95      "description": "Daily backup",
    96      "volume_id": "1234",
    97      "status": "available",
    98      "size": 30,
    99      "created_at": "2017-05-30T03:35:03.000000"
   100    }
   101  }
   102  `
   103  
   104  const RestoreRequest = `
   105  {
   106    "restore": {
   107      "name": "vol-001",
   108      "volume_id": "1234"
   109    }
   110  }
   111  `
   112  
   113  const RestoreResponse = `
   114  {
   115    "restore": {
   116      "backup_id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
   117      "volume_id": "1234",
   118      "volume_name": "vol-001"
   119    }
   120  }
   121  `
   122  
   123  const ExportResponse = `
   124  {
   125    "backup-record": {
   126      "backup_service": "cinder.backup.drivers.swift.SwiftBackupDriver",
   127      "backup_url": "eyJpZCI6ImQzMjAxOWQzLWJjNmUtNDMxOS05YzFkLTY3MjJmYzEzNmEyMiIsInZvbHVtZV9pZCI6ImNmOWJjNmZhLWM1YmMtNDFmNi1iYzRlLTZlNzZjMGJlYTk1OSIsInNuYXBzaG90X2lkIjpudWxsLCJzdGF0dXMiOiJhdmFpbGFibGUiLCJzaXplIjoxLCJvYmplY3RfY291bnQiOjIsImNvbnRhaW5lciI6Im15LXRlc3QtYmFja3VwIiwic2VydmljZV9tZXRhZGF0YSI6InZvbHVtZV9jZjliYzZmYS1jNWJjLTQxZjYtYmM0ZS02ZTc2YzBiZWE5NTkvMjAyMDAzMTExOTI4NTUvYXpfcmVnaW9uYl9iYWNrdXBfYjg3YmIxZTUtMGQ0ZS00NDVlLWE1NDgtNWFlNzQyNTYyYmFjIiwic2VydmljZSI6ImNpbmRlci5iYWNrdXAuZHJpdmVycy5zd2lmdC5Td2lmdEJhY2t1cERyaXZlciIsImhvc3QiOiJjaW5kZXItYmFja3VwLWhvc3QxIiwidXNlcl9pZCI6IjkzNTE0ZTA0LWEwMjYtNGY2MC04MTc2LTM5NWM4NTk1MDFkZCIsInRlbXBfc25hcHNob3RfaWQiOm51bGwsInRlbXBfdm9sdW1lX2lkIjpudWxsLCJyZXN0b3JlX3ZvbHVtZV9pZCI6bnVsbCwibnVtX2RlcGVuZGVudF9iYWNrdXBzIjpudWxsLCJlbmNyeXB0aW9uX2tleV9pZCI6bnVsbCwicGFyZW50X2lkIjpudWxsLCJkZWxldGVkIjpmYWxzZSwiZGlzcGxheV9uYW1lIjpudWxsLCJkaXNwbGF5X2Rlc2NyaXB0aW9uIjpudWxsLCJkcml2ZXJfaW5mbyI6bnVsbCwiZmFpbF9yZWFzb24iOm51bGwsInByb2plY3RfaWQiOiIxNGYxYzFmNWQxMmI0NzU1Yjk0ZWRlZjc4ZmY4YjMyNSIsIm1ldGFkYXRhIjp7fSwiYXZhaWxhYmlsaXR5X3pvbmUiOiJyZWdpb24xYiIsImNyZWF0ZWRfYXQiOiIyMDIwLTAzLTExVDE5OjI1OjI0WiIsInVwZGF0ZWRfYXQiOiIyMDIwLTAzLTExVDE5OjI5OjA4WiIsImRlbGV0ZWRfYXQiOm51bGwsImRhdGFfdGltZXN0YW1wIjoiMjAyMC0wMy0xMVQxOToyNToyNFoifQ=="
   128    }
   129  }
   130  `
   131  
   132  const ImportRequest = ExportResponse
   133  
   134  const ImportResponse = `
   135  {
   136    "backup": {
   137      "id": "d32019d3-bc6e-4319-9c1d-6722fc136a22",
   138      "links": [
   139        {
   140          "href": "https://volume/v2/14f1c1f5d12b4755b94edef78ff8b325/backups/d32019d3-bc6e-4319-9c1d-6722fc136a22",
   141          "rel": "self"
   142        },
   143        {
   144          "href": "https://volume/14f1c1f5d12b4755b94edef78ff8b325/backups/d32019d3-bc6e-4319-9c1d-6722fc136a22",
   145          "rel": "bookmark"
   146        }
   147      ],
   148      "name": null
   149    }
   150  }
   151  `
   152  
   153  var (
   154  	status           = "available"
   155  	availabilityZone = "region1b"
   156  	host             = "cinder-backup-host1"
   157  	serviceMetadata  = "volume_cf9bc6fa-c5bc-41f6-bc4e-6e76c0bea959/20200311192855/az_regionb_backup_b87bb1e5-0d4e-445e-a548-5ae742562bac"
   158  	size             = 1
   159  	objectCount      = 2
   160  	container        = "my-test-backup"
   161  	service          = "cinder.backup.drivers.swift.SwiftBackupDriver"
   162  	backupImport     = backups.ImportBackup{
   163  		ID:               "d32019d3-bc6e-4319-9c1d-6722fc136a22",
   164  		Status:           &status,
   165  		AvailabilityZone: &availabilityZone,
   166  		VolumeID:         "cf9bc6fa-c5bc-41f6-bc4e-6e76c0bea959",
   167  		UpdatedAt:        time.Date(2020, 3, 11, 19, 29, 8, 0, time.UTC),
   168  		Host:             &host,
   169  		UserID:           "93514e04-a026-4f60-8176-395c859501dd",
   170  		ServiceMetadata:  &serviceMetadata,
   171  		Size:             &size,
   172  		ObjectCount:      &objectCount,
   173  		Container:        &container,
   174  		Service:          &service,
   175  		CreatedAt:        time.Date(2020, 3, 11, 19, 25, 24, 0, time.UTC),
   176  		DataTimestamp:    time.Date(2020, 3, 11, 19, 25, 24, 0, time.UTC),
   177  		ProjectID:        "14f1c1f5d12b4755b94edef78ff8b325",
   178  		Metadata:         make(map[string]string),
   179  	}
   180  	backupURL, _ = json.Marshal(backupImport)
   181  )
   182  
   183  func MockListResponse(t *testing.T) {
   184  	th.Mux.HandleFunc("/backups", func(w http.ResponseWriter, r *http.Request) {
   185  		th.TestMethod(t, r, "GET")
   186  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   187  
   188  		w.Header().Add("Content-Type", "application/json")
   189  		w.WriteHeader(http.StatusOK)
   190  
   191  		r.ParseForm()
   192  		marker := r.Form.Get("marker")
   193  		switch marker {
   194  		case "":
   195  			fmt.Fprintf(w, ListResponse, th.Server.URL)
   196  		case "1":
   197  			fmt.Fprintf(w, `{"backups": []}`)
   198  		default:
   199  			t.Fatalf("Unexpected marker: [%s]", marker)
   200  		}
   201  	})
   202  }
   203  
   204  func MockListDetailResponse(t *testing.T) {
   205  	th.Mux.HandleFunc("/backups/detail", func(w http.ResponseWriter, r *http.Request) {
   206  		th.TestMethod(t, r, "GET")
   207  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   208  
   209  		w.Header().Add("Content-Type", "application/json")
   210  		w.WriteHeader(http.StatusOK)
   211  
   212  		r.ParseForm()
   213  		marker := r.Form.Get("marker")
   214  		switch marker {
   215  		case "":
   216  			fmt.Fprintf(w, ListDetailResponse, th.Server.URL)
   217  		case "1":
   218  			fmt.Fprintf(w, `{"backups": []}`)
   219  		default:
   220  			t.Fatalf("Unexpected marker: [%s]", marker)
   221  		}
   222  	})
   223  }
   224  
   225  func MockGetResponse(t *testing.T) {
   226  	th.Mux.HandleFunc("/backups/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) {
   227  		th.TestMethod(t, r, "GET")
   228  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   229  
   230  		w.Header().Add("Content-Type", "application/json")
   231  		w.WriteHeader(http.StatusOK)
   232  		fmt.Fprintf(w, GetResponse)
   233  	})
   234  }
   235  
   236  func MockCreateResponse(t *testing.T) {
   237  	th.Mux.HandleFunc("/backups", func(w http.ResponseWriter, r *http.Request) {
   238  		th.TestMethod(t, r, "POST")
   239  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   240  		th.TestHeader(t, r, "Content-Type", "application/json")
   241  		th.TestHeader(t, r, "Accept", "application/json")
   242  		th.TestJSONRequest(t, r, CreateRequest)
   243  
   244  		w.Header().Add("Content-Type", "application/json")
   245  		w.WriteHeader(http.StatusAccepted)
   246  
   247  		fmt.Fprintf(w, CreateResponse)
   248  	})
   249  }
   250  
   251  func MockRestoreResponse(t *testing.T) {
   252  	th.Mux.HandleFunc("/backups/d32019d3-bc6e-4319-9c1d-6722fc136a22/restore", func(w http.ResponseWriter, r *http.Request) {
   253  		th.TestMethod(t, r, "POST")
   254  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   255  		th.TestHeader(t, r, "Content-Type", "application/json")
   256  		th.TestHeader(t, r, "Accept", "application/json")
   257  		th.TestJSONRequest(t, r, RestoreRequest)
   258  
   259  		w.Header().Add("Content-Type", "application/json")
   260  		w.WriteHeader(http.StatusAccepted)
   261  
   262  		fmt.Fprintf(w, RestoreResponse)
   263  	})
   264  }
   265  
   266  func MockDeleteResponse(t *testing.T) {
   267  	th.Mux.HandleFunc("/backups/d32019d3-bc6e-4319-9c1d-6722fc136a22", func(w http.ResponseWriter, r *http.Request) {
   268  		th.TestMethod(t, r, "DELETE")
   269  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   270  		w.WriteHeader(http.StatusNoContent)
   271  	})
   272  }
   273  
   274  func MockExportResponse(t *testing.T) {
   275  	th.Mux.HandleFunc("/backups/d32019d3-bc6e-4319-9c1d-6722fc136a22/export_record", func(w http.ResponseWriter, r *http.Request) {
   276  		th.TestMethod(t, r, "GET")
   277  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   278  		th.TestHeader(t, r, "Accept", "application/json")
   279  
   280  		w.Header().Add("Content-Type", "application/json")
   281  		w.WriteHeader(http.StatusOK)
   282  
   283  		fmt.Fprintf(w, ExportResponse)
   284  	})
   285  }
   286  
   287  func MockImportResponse(t *testing.T) {
   288  	th.Mux.HandleFunc("/backups/import_record", func(w http.ResponseWriter, r *http.Request) {
   289  		th.TestMethod(t, r, "POST")
   290  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   291  		th.TestHeader(t, r, "Content-Type", "application/json")
   292  		th.TestHeader(t, r, "Accept", "application/json")
   293  		th.TestJSONRequest(t, r, ImportRequest)
   294  
   295  		w.Header().Add("Content-Type", "application/json")
   296  		w.WriteHeader(http.StatusCreated)
   297  
   298  		fmt.Fprintf(w, ImportResponse)
   299  	})
   300  }