Skip to content
This repository was archived by the owner on Aug 1, 2023. It is now read-only.

Commit 4b97ac2

Browse files
committed
Add acceptance test for portsbinding
1 parent f606159 commit 4b97ac2

File tree

3 files changed

+111
-4
lines changed

3 files changed

+111
-4
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package portsbinding
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// +build acceptance networking portsbinding
2+
3+
package portsbinding
4+
5+
import (
6+
"testing"
7+
8+
base "github.com/rackspace/gophercloud/acceptance/openstack/networking/v2"
9+
"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/portsbinding"
10+
"github.com/rackspace/gophercloud/openstack/networking/v2/networks"
11+
"github.com/rackspace/gophercloud/openstack/networking/v2/ports"
12+
"github.com/rackspace/gophercloud/openstack/networking/v2/subnets"
13+
th "github.com/rackspace/gophercloud/testhelper"
14+
)
15+
16+
func TestPortBinding(t *testing.T) {
17+
base.Setup(t)
18+
defer base.Teardown()
19+
20+
// Setup network
21+
t.Log("Setting up network")
22+
networkID, err := createNetwork()
23+
th.AssertNoErr(t, err)
24+
defer networks.Delete(base.Client, networkID)
25+
26+
// Setup subnet
27+
t.Logf("Setting up subnet on network %s", networkID)
28+
subnetID, err := createSubnet(networkID)
29+
th.AssertNoErr(t, err)
30+
defer subnets.Delete(base.Client, subnetID)
31+
32+
// Create port
33+
t.Logf("Create port based on subnet %s", subnetID)
34+
hostID := "localhost"
35+
portID := createPort(t, networkID, subnetID, hostID)
36+
37+
// Get port
38+
if portID == "" {
39+
t.Fatalf("In order to retrieve a port, the portID must be set")
40+
}
41+
p, err := portsbinding.Get(base.Client, portID).Extract()
42+
th.AssertNoErr(t, err)
43+
th.AssertEquals(t, p.ID, portID)
44+
th.AssertEquals(t, p.HostID, hostID)
45+
46+
// Update port
47+
newHostID := "openstack"
48+
updateOpts := portsbinding.UpdateOpts{
49+
HostID: newHostID,
50+
}
51+
p, err = portsbinding.Update(base.Client, portID, updateOpts).Extract()
52+
53+
th.AssertNoErr(t, err)
54+
th.AssertEquals(t, p.HostID, newHostID)
55+
56+
// Delete port
57+
res := ports.Delete(base.Client, portID)
58+
th.AssertNoErr(t, res.Err)
59+
}
60+
61+
func createPort(t *testing.T, networkID, subnetID, hostID string) string {
62+
enable := false
63+
opts := portsbinding.CreateOpts{
64+
CreateOptsBuilder: ports.CreateOpts{
65+
NetworkID: networkID,
66+
Name: "my_port",
67+
AdminStateUp: &enable,
68+
FixedIPs: []ports.IP{{SubnetID: subnetID}},
69+
},
70+
HostID: hostID,
71+
}
72+
73+
p, err := portsbinding.Create(base.Client, opts).Extract()
74+
th.AssertNoErr(t, err)
75+
th.AssertEquals(t, p.NetworkID, networkID)
76+
th.AssertEquals(t, p.Name, "my_port")
77+
th.AssertEquals(t, p.AdminStateUp, false)
78+
79+
return p.ID
80+
}
81+
82+
func createNetwork() (string, error) {
83+
res, err := networks.Create(base.Client, networks.CreateOpts{Name: "tmp_network", AdminStateUp: networks.Up}).Extract()
84+
return res.ID, err
85+
}
86+
87+
func createSubnet(networkID string) (string, error) {
88+
s, err := subnets.Create(base.Client, subnets.CreateOpts{
89+
NetworkID: networkID,
90+
CIDR: "192.168.199.0/24",
91+
IPVersion: subnets.IPv4,
92+
Name: "my_subnet",
93+
EnableDHCP: subnets.Down,
94+
AllocationPools: []subnets.AllocationPool{
95+
{Start: "192.168.199.2", End: "192.168.199.200"},
96+
},
97+
}).Extract()
98+
return s.ID, err
99+
}

openstack/networking/v2/extensions/portsbinding/requests.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,19 @@ type UpdateOpts struct {
7676

7777
// ToPortUpdateMap casts an UpdateOpts struct to a map.
7878
func (opts UpdateOpts) ToPortUpdateMap() (map[string]interface{}, error) {
79-
p, err := opts.UpdateOptsBuilder.ToPortUpdateMap()
80-
if err != nil {
81-
return nil, err
79+
var port map[string]interface{}
80+
if opts.UpdateOptsBuilder != nil {
81+
p, err := opts.UpdateOptsBuilder.ToPortUpdateMap()
82+
if err != nil {
83+
return nil, err
84+
}
85+
86+
port = p["port"].(map[string]interface{})
8287
}
8388

84-
port := p["port"].(map[string]interface{})
89+
if port == nil {
90+
port = make(map[string]interface{})
91+
}
8592

8693
if opts.HostID != "" {
8794
port["binding:host_id"] = opts.HostID

0 commit comments

Comments
 (0)