~abp998/gwacl/subscription

« back to all changes in this revision

Viewing changes to deletedisk_test.go

  • Committer: Gavin Panella
  • Date: 2013-04-17 11:07:11 UTC
  • mfrom: (91 gwacl)
  • mto: This revision was merged to the branch mainline in revision 92.
  • Revision ID: gavin@gromper.net-20130417110711-du1sqvfb2qzczs9v
Merge trunk, resolving 1 conflict.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2013 Canonical Ltd.  This software is licensed under the
 
2
// GNU Lesser General Public License version 3 (see the file COPYING).
 
3
 
 
4
package gwacl
 
5
 
 
6
import (
 
7
    "fmt"
 
8
    . "launchpad.net/gocheck"
 
9
    "net/http"
 
10
    "time"
 
11
)
 
12
 
 
13
type deleteDiskSuite struct{}
 
14
 
 
15
var _ = Suite(&deleteDiskSuite{})
 
16
 
 
17
// Real-world error messages and names.
 
18
const (
 
19
    diskInUseErrorTemplate = "BadRequest - A disk with name %s is currently in use by virtual machine gwaclrolemvo1yab running within hosted service gwacl623yosxtppsa9577xy5, deployment gwaclmachinewes4n64f. (http code 400: Bad Request)"
 
20
    diskName               = "gwacldiske5w7lkj"
 
21
    diskDoesNotExistError  = "DELETE request failed: ResourceNotFound - The disk with the specified name does not exist. (http code 404: Not Found)"
 
22
)
 
23
 
 
24
func (suite *deleteDiskSuite) TestIsInUseError(c *C) {
 
25
    var testValues = []struct {
 
26
        errorString    string
 
27
        diskName       string
 
28
        expectedResult bool
 
29
    }{
 
30
        {fmt.Sprintf(diskInUseErrorTemplate, diskName), diskName, true},
 
31
        {fmt.Sprintf(diskInUseErrorTemplate, diskName), "another-disk", false},
 
32
        {"unknown error", diskName, false},
 
33
        {diskDoesNotExistError, diskName, false},
 
34
    }
 
35
    for _, test := range testValues {
 
36
        c.Check(isInUseError(test.errorString, test.diskName), Equals, test.expectedResult)
 
37
    }
 
38
}
 
39
 
 
40
func (suite *deleteDiskSuite) TestIsDoneReturnsTrueIfNilError(c *C) {
 
41
    poller := diskDeletePoller{nil, ""}
 
42
    randomResponse := x509Response{StatusCode: http.StatusAccepted}
 
43
    done, err := poller.isDone(&randomResponse, nil)
 
44
    c.Check(done, Equals, true)
 
45
    c.Check(err, IsNil)
 
46
}
 
47
 
 
48
func (suite *deleteDiskSuite) TestIsDoneReturnsFalseIfDiskInUseError(c *C) {
 
49
    diskName := "gwacldiske5w7lkj"
 
50
    diskInUseError := fmt.Errorf(diskInUseErrorTemplate, diskName)
 
51
    poller := diskDeletePoller{nil, diskName}
 
52
    done, err := poller.isDone(nil, diskInUseError)
 
53
    c.Check(done, Equals, false)
 
54
    c.Check(err, IsNil)
 
55
}
 
56
 
 
57
func (suite *deleteDiskSuite) TestIsDoneReturnsTrueIfAnotherError(c *C) {
 
58
    anotherError := fmt.Errorf("Unknown error")
 
59
    poller := diskDeletePoller{nil, "disk-name"}
 
60
    done, err := poller.isDone(nil, anotherError)
 
61
    c.Check(done, Equals, true)
 
62
    c.Check(err, Equals, anotherError)
 
63
}
 
64
 
 
65
func (suite *deleteDiskSuite) TestPollCallsDeleteDisk(c *C) {
 
66
    api := makeAPI(c)
 
67
    recordedRequests := setUpDispatcher("operationID")
 
68
    diskName := "gwacldiske5w7lkj"
 
69
    poller := diskDeletePoller{api, diskName}
 
70
 
 
71
    response, err := poller.poll()
 
72
 
 
73
    c.Assert(response, IsNil)
 
74
    c.Assert(err, IsNil)
 
75
    expectedURL := api.session.composeURL("services/disks/" + diskName)
 
76
    checkOneRequest(c, recordedRequests, expectedURL, []byte{}, "DELETE")
 
77
}
 
78
 
 
79
func (suite *deleteDiskSuite) TestManagementAPIDeleteDiskPolls(c *C) {
 
80
    firstResponse := DispatcherResponse{
 
81
        response:    &x509Response{},
 
82
        errorObject: fmt.Errorf(diskInUseErrorTemplate, diskName)}
 
83
    secondResponse := DispatcherResponse{
 
84
        response:    &x509Response{StatusCode: http.StatusOK},
 
85
        errorObject: nil}
 
86
    responses := []DispatcherResponse{firstResponse, secondResponse}
 
87
    rigPreparedResponseDispatcher(responses)
 
88
    recordedRequests := make([]*x509Request, 0)
 
89
    rigRecordingDispatcher(&recordedRequests)
 
90
 
 
91
    api := makeAPI(c)
 
92
    diskName := "gwacldiske5w7lkj"
 
93
    poller := diskDeletePoller{api, diskName}
 
94
 
 
95
    response, err := performPolling(poller, time.Nanosecond, time.Minute)
 
96
 
 
97
    c.Assert(response, IsNil)
 
98
    c.Assert(err, IsNil)
 
99
    expectedURL := api.session.composeURL("services/disks/" + diskName)
 
100
    c.Check(len(recordedRequests), Equals, 2)
 
101
    checkRequest(c, recordedRequests[0], expectedURL, []byte{}, "DELETE")
 
102
    checkRequest(c, recordedRequests[1], expectedURL, []byte{}, "DELETE")
 
103
}