Merge pull request #246 from jamiehannaford/os-neutron-fix

Fixes to Neutron LBaaS
diff --git a/acceptance/openstack/compute/v2/flavors_test.go b/acceptance/openstack/compute/v2/flavors_test.go
index 9c8e322..cf547f2 100644
--- a/acceptance/openstack/compute/v2/flavors_test.go
+++ b/acceptance/openstack/compute/v2/flavors_test.go
@@ -1,4 +1,4 @@
-// +build acceptance
+// +build acceptance compute flavors
 
 package v2
 
diff --git a/acceptance/openstack/compute/v2/images_test.go b/acceptance/openstack/compute/v2/images_test.go
index 6166fc8..ceab22f 100644
--- a/acceptance/openstack/compute/v2/images_test.go
+++ b/acceptance/openstack/compute/v2/images_test.go
@@ -1,4 +1,4 @@
-// +build acceptance
+// +build acceptance compute images
 
 package v2
 
diff --git a/acceptance/openstack/compute/v2/servers_test.go b/acceptance/openstack/compute/v2/servers_test.go
index cb413c1..2c47a86 100644
--- a/acceptance/openstack/compute/v2/servers_test.go
+++ b/acceptance/openstack/compute/v2/servers_test.go
@@ -1,4 +1,4 @@
-// +build acceptance
+// +build acceptance compute servers
 
 package v2
 
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/common.go b/acceptance/openstack/networking/v2/extensions/lbaas/common.go
index a9db1af..27dfe5f 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/common.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/common.go
@@ -61,7 +61,7 @@
 
 func CreateMonitor(t *testing.T) string {
 	m, err := monitors.Create(base.Client, monitors.CreateOpts{
-		Delay:         5,
+		Delay:         10,
 		Timeout:       10,
 		MaxRetries:    3,
 		Type:          monitors.TypeHTTP,
diff --git a/acceptance/openstack/networking/v2/extensions/lbaas/monitor_test.go b/acceptance/openstack/networking/v2/extensions/lbaas/monitor_test.go
index 57e860c..9056fff 100644
--- a/acceptance/openstack/networking/v2/extensions/lbaas/monitor_test.go
+++ b/acceptance/openstack/networking/v2/extensions/lbaas/monitor_test.go
@@ -51,7 +51,7 @@
 }
 
 func updateMonitor(t *testing.T, monitorID string) {
-	opts := monitors.UpdateOpts{Delay: 5, Timeout: 10, MaxRetries: 3}
+	opts := monitors.UpdateOpts{Delay: 10, Timeout: 10, MaxRetries: 3}
 	m, err := monitors.Update(base.Client, monitorID, opts).Extract()
 
 	th.AssertNoErr(t, err)
diff --git a/acceptance/openstack/networking/v2/extensions/security_test.go b/acceptance/openstack/networking/v2/extensions/security_test.go
index fc9227f..33c9c4b 100644
--- a/acceptance/openstack/networking/v2/extensions/security_test.go
+++ b/acceptance/openstack/networking/v2/extensions/security_test.go
@@ -60,6 +60,9 @@
 
 	// delete security group rule
 	deleteSecRule(t, ruleID)
+
+	// delete security group
+	deleteSecGroup(t, groupID)
 }
 
 func createSecGroup(t *testing.T) string {
diff --git a/openstack/networking/v2/extensions/lbaas/monitors/requests.go b/openstack/networking/v2/extensions/lbaas/monitors/requests.go
index 9f8ac9a..bbcce23 100644
--- a/openstack/networking/v2/extensions/lbaas/monitors/requests.go
+++ b/openstack/networking/v2/extensions/lbaas/monitors/requests.go
@@ -64,6 +64,7 @@
 	errMaxRetriesRequired    = fmt.Errorf("MaxRetries is required")
 	errURLPathRequired       = fmt.Errorf("URL path is required")
 	errExpectedCodesRequired = fmt.Errorf("ExpectedCodes is required")
+	errDelayMustGETimeout    = fmt.Errorf("Delay must be greater than or equal to timeout")
 )
 
 // CreateOpts contains all the values needed to create a new health monitor.
@@ -141,6 +142,9 @@
 			res.Err = errExpectedCodesRequired
 		}
 	}
+	if opts.Delay < opts.Timeout {
+		res.Err = errDelayMustGETimeout
+	}
 	if res.Err != nil {
 		return res
 	}
@@ -227,6 +231,12 @@
 
 // Update is an operation which modifies the attributes of the specified monitor.
 func Update(c *gophercloud.ServiceClient, id string, opts UpdateOpts) UpdateResult {
+	var res UpdateResult
+
+	if opts.Delay > 0 && opts.Timeout > 0 && opts.Delay < opts.Timeout {
+		res.Err = errDelayMustGETimeout
+	}
+
 	type monitor struct {
 		Delay         int     `json:"delay"`
 		Timeout       int     `json:"timeout"`
@@ -251,8 +261,6 @@
 		AdminStateUp:  opts.AdminStateUp,
 	}}
 
-	var res UpdateResult
-
 	_, res.Err = perigee.Request("PUT", resourceURL(c, id), perigee.Options{
 		MoreHeaders: c.Provider.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
diff --git a/openstack/networking/v2/extensions/lbaas/monitors/requests_test.go b/openstack/networking/v2/extensions/lbaas/monitors/requests_test.go
index 5c5a1d2..79a99bf 100644
--- a/openstack/networking/v2/extensions/lbaas/monitors/requests_test.go
+++ b/openstack/networking/v2/extensions/lbaas/monitors/requests_test.go
@@ -100,6 +100,30 @@
 	}
 }
 
+func TestDelayMustBeGreaterOrEqualThanTimeout(t *testing.T) {
+	_, err := Create(fake.ServiceClient(), CreateOpts{
+		Type:          "HTTP",
+		Delay:         1,
+		Timeout:       10,
+		MaxRetries:    5,
+		URLPath:       "/check",
+		ExpectedCodes: "200-299",
+	}).Extract()
+
+	if err == nil {
+		t.Fatalf("Expected error, got none")
+	}
+
+	_, err = Update(fake.ServiceClient(), "453105b9-1754-413f-aab1-55f1af620750", UpdateOpts{
+		Delay:   1,
+		Timeout: 10,
+	}).Extract()
+
+	if err == nil {
+		t.Fatalf("Expected error, got none")
+	}
+}
+
 func TestCreate(t *testing.T) {
 	th.SetupHTTP()
 	defer th.TeardownHTTP()