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

     1  package testing
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/gophercloud/gophercloud"
    10  	"github.com/gophercloud/gophercloud/openstack/blockstorage/v3/attachments"
    11  	th "github.com/gophercloud/gophercloud/testhelper"
    12  	fake "github.com/gophercloud/gophercloud/testhelper/client"
    13  )
    14  
    15  var (
    16  	attachedAt, _      = time.Parse(gophercloud.RFC3339MilliNoZ, "2015-09-16T09:28:52.000000")
    17  	detachedAt, _      = time.Parse(gophercloud.RFC3339MilliNoZ, "2015-09-16T09:28:52.000000")
    18  	expectedAttachment = &attachments.Attachment{
    19  		ID:             "05551600-a936-4d4a-ba42-79a037c1-c91a",
    20  		VolumeID:       "289da7f8-6440-407c-9fb4-7db01ec49164",
    21  		Instance:       "83ec2e3b-4321-422b-8706-a84185f52a0a",
    22  		AttachMode:     "rw",
    23  		Status:         "attaching",
    24  		AttachedAt:     attachedAt,
    25  		DetachedAt:     detachedAt,
    26  		ConnectionInfo: map[string]interface{}{},
    27  	}
    28  )
    29  
    30  func MockListResponse(t *testing.T) {
    31  	th.Mux.HandleFunc("/attachments/detail", func(w http.ResponseWriter, r *http.Request) {
    32  		th.TestMethod(t, r, "GET")
    33  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    34  
    35  		w.Header().Add("Content-Type", "application/json")
    36  		w.WriteHeader(http.StatusOK)
    37  
    38  		r.ParseForm()
    39  		marker := r.Form.Get("marker")
    40  		switch marker {
    41  		case "":
    42  			fmt.Fprintf(w, `
    43    {
    44      "attachments": [
    45          {
    46              "status": "attaching",
    47              "detached_at": "2015-09-16T09:28:52.000000",
    48              "connection_info": {},
    49              "attached_at": "2015-09-16T09:28:52.000000",
    50              "attach_mode": "rw",
    51              "instance": "83ec2e3b-4321-422b-8706-a84185f52a0a",
    52              "volume_id": "289da7f8-6440-407c-9fb4-7db01ec49164",
    53              "id": "05551600-a936-4d4a-ba42-79a037c1-c91a"
    54          }
    55      ],
    56  	"attachments_links": [
    57  	{
    58  		"href": "%s/attachments/detail?marker=1",
    59  		"rel": "next"
    60  	}
    61      ]
    62  }
    63    `, th.Server.URL)
    64  		case "1":
    65  			fmt.Fprintf(w, `{"volumes": []}`)
    66  		default:
    67  			t.Fatalf("Unexpected marker: [%s]", marker)
    68  		}
    69  	})
    70  }
    71  
    72  func MockGetResponse(t *testing.T) {
    73  	th.Mux.HandleFunc("/attachments/05551600-a936-4d4a-ba42-79a037c1-c91a", func(w http.ResponseWriter, r *http.Request) {
    74  		th.TestMethod(t, r, "GET")
    75  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
    76  
    77  		w.Header().Add("Content-Type", "application/json")
    78  		w.WriteHeader(http.StatusOK)
    79  		fmt.Fprintf(w, `
    80  {
    81      "attachment": {
    82          "status": "attaching",
    83          "detached_at": "2015-09-16T09:28:52.000000",
    84          "connection_info": {},
    85          "attached_at": "2015-09-16T09:28:52.000000",
    86          "attach_mode": "rw",
    87          "instance": "83ec2e3b-4321-422b-8706-a84185f52a0a",
    88          "volume_id": "289da7f8-6440-407c-9fb4-7db01ec49164",
    89          "id": "05551600-a936-4d4a-ba42-79a037c1-c91a"
    90      }
    91  }
    92        `)
    93  	})
    94  }
    95  
    96  func MockCreateResponse(t *testing.T) {
    97  	th.Mux.HandleFunc("/attachments", func(w http.ResponseWriter, r *http.Request) {
    98  		th.TestMethod(t, r, "POST")
    99  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   100  		th.TestHeader(t, r, "Content-Type", "application/json")
   101  		th.TestHeader(t, r, "Accept", "application/json")
   102  		th.TestJSONRequest(t, r, `
   103  {
   104      "attachment": {
   105          "instance_uuid": "83ec2e3b-4321-422b-8706-a84185f52a0a",
   106          "connector": {
   107              "initiator": "iqn.1993-08.org.debian: 01: cad181614cec",
   108              "ip": "192.168.1.20",
   109              "platform": "x86_64",
   110              "host": "tempest-1",
   111              "os_type": "linux2",
   112              "multipath": false,
   113              "mountpoint": "/dev/vdb",
   114              "mode": "rw"
   115          },
   116          "volume_uuid": "289da7f8-6440-407c-9fb4-7db01ec49164"
   117      }
   118  }
   119        `)
   120  
   121  		w.Header().Add("Content-Type", "application/json")
   122  		w.WriteHeader(http.StatusOK)
   123  
   124  		fmt.Fprintf(w, `
   125  {
   126      "attachment": {
   127          "status": "attaching",
   128          "detached_at": "2015-09-16T09:28:52.000000",
   129          "connection_info": {},
   130          "attached_at": "2015-09-16T09:28:52.000000",
   131          "attach_mode": "rw",
   132          "instance": "83ec2e3b-4321-422b-8706-a84185f52a0a",
   133          "volume_id": "289da7f8-6440-407c-9fb4-7db01ec49164",
   134          "id": "05551600-a936-4d4a-ba42-79a037c1-c91a"
   135      }
   136  }
   137      `)
   138  	})
   139  }
   140  
   141  func MockDeleteResponse(t *testing.T) {
   142  	th.Mux.HandleFunc("/attachments/05551600-a936-4d4a-ba42-79a037c1-c91a", func(w http.ResponseWriter, r *http.Request) {
   143  		th.TestMethod(t, r, "DELETE")
   144  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   145  		w.WriteHeader(http.StatusOK)
   146  	})
   147  }
   148  
   149  func MockUpdateResponse(t *testing.T) {
   150  	th.Mux.HandleFunc("/attachments/05551600-a936-4d4a-ba42-79a037c1-c91a", func(w http.ResponseWriter, r *http.Request) {
   151  		th.TestMethod(t, r, "PUT")
   152  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   153  
   154  		th.TestJSONRequest(t, r, `
   155  {
   156      "attachment": {
   157          "connector": {
   158              "initiator": "iqn.1993-08.org.debian: 01: cad181614cec",
   159              "ip": "192.168.1.20",
   160              "platform": "x86_64",
   161              "host": "tempest-1",
   162              "os_type": "linux2",
   163              "multipath": false,
   164              "mountpoint": "/dev/vdb",
   165              "mode": "rw"
   166          }
   167      }
   168  }
   169        `)
   170  
   171  		w.WriteHeader(http.StatusOK)
   172  		fmt.Fprintf(w, `
   173  {
   174      "attachment": {
   175          "status": "attaching",
   176          "detached_at": "2015-09-16T09:28:52.000000",
   177          "connection_info": {},
   178          "attached_at": "2015-09-16T09:28:52.000000",
   179          "attach_mode": "rw",
   180          "instance": "83ec2e3b-4321-422b-8706-a84185f52a0a",
   181          "volume_id": "289da7f8-6440-407c-9fb4-7db01ec49164",
   182          "id": "05551600-a936-4d4a-ba42-79a037c1-c91a"
   183      }
   184  }
   185          `)
   186  	})
   187  }
   188  
   189  func MockUpdateEmptyResponse(t *testing.T) {
   190  	th.Mux.HandleFunc("/attachments/05551600-a936-4d4a-ba42-79a037c1-c91a", func(w http.ResponseWriter, r *http.Request) {
   191  		th.TestMethod(t, r, "PUT")
   192  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   193  
   194  		th.TestJSONRequest(t, r, `
   195  {
   196      "attachment": {
   197          "connector": null
   198      }
   199  }
   200        `)
   201  
   202  		w.WriteHeader(http.StatusOK)
   203  		fmt.Fprintf(w, `
   204  {
   205      "attachment": {
   206          "status": "attaching",
   207          "detached_at": "2015-09-16T09:28:52.000000",
   208          "connection_info": {},
   209          "attached_at": "2015-09-16T09:28:52.000000",
   210          "attach_mode": "rw",
   211          "instance": "83ec2e3b-4321-422b-8706-a84185f52a0a",
   212          "volume_id": "289da7f8-6440-407c-9fb4-7db01ec49164",
   213          "id": "05551600-a936-4d4a-ba42-79a037c1-c91a"
   214      }
   215  }
   216          `)
   217  	})
   218  }
   219  
   220  var completeRequest = `
   221  {
   222      "os-complete": null
   223  }
   224  `
   225  
   226  func MockCompleteResponse(t *testing.T) {
   227  	th.Mux.HandleFunc("/attachments/05551600-a936-4d4a-ba42-79a037c1-c91a/action", func(w http.ResponseWriter, r *http.Request) {
   228  		th.TestMethod(t, r, "POST")
   229  		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
   230  		th.TestJSONRequest(t, r, completeRequest)
   231  		w.WriteHeader(http.StatusNoContent)
   232  	})
   233  }