Skip to content

Commit 2ded46d

Browse files
cc resource
1 parent 48f27ec commit 2ded46d

28 files changed

Lines changed: 1793 additions & 0 deletions

File tree

acceptance/clients/clients.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,6 +1097,34 @@ func NewERClient() (client *golangsdk.ServiceClient, err error) {
10971097
})
10981098
}
10991099

1100+
// NewCCClient returns an authenticated Cloud Connect v3 client.
1101+
func NewCCClient() (*golangsdk.ServiceClient, error) {
1102+
cc, err := CloudAndClient()
1103+
if err != nil {
1104+
return nil, err
1105+
}
1106+
1107+
client, err := openstack.NewCCServiceV3(cc.ProviderClient, golangsdk.EndpointOpts{
1108+
Region: cc.RegionName,
1109+
})
1110+
if err != nil {
1111+
return nil, err
1112+
}
1113+
1114+
domainClient, err := openstack.AuthenticatedClient(golangsdk.AuthOptions{
1115+
IdentityEndpoint: cc.AuthInfo.AuthURL,
1116+
Username: cc.AuthInfo.Username,
1117+
Password: cc.AuthInfo.Password,
1118+
DomainName: cc.AuthInfo.UserDomainName,
1119+
})
1120+
if err != nil {
1121+
return nil, fmt.Errorf("error creating domain-scoped client for CC: %w", err)
1122+
}
1123+
1124+
client.ProviderClient = domainClient
1125+
return client, nil
1126+
}
1127+
11001128
// NewHssClient returns authenticated HSS v5 client
11011129
func NewHssClient() (client *golangsdk.ServiceClient, err error) {
11021130
cc, err := CloudAndClient()
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package cc
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
8+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools"
9+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/capability"
10+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/central_network"
11+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/quota"
12+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
13+
th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
14+
)
15+
16+
func TestCentralNetworkLifeCycle(t *testing.T) {
17+
if os.Getenv("RUN_CC_LIFECYCLE") == "" {
18+
t.Skip("too slow to run in zuul")
19+
}
20+
client, err := clients.NewCCClient()
21+
th.AssertNoErr(t, err)
22+
23+
name := tools.RandomString("acctest_cc_cn-", 4)
24+
25+
created, err := central_network.Create(client, central_network.CreateOpts{
26+
Name: name,
27+
Description: "created by gophertelekomcloud acceptance test",
28+
})
29+
th.AssertNoErr(t, err)
30+
th.AssertEquals(t, name, created.Name)
31+
32+
t.Cleanup(func() {
33+
err = central_network.Delete(client, created.ID)
34+
th.AssertNoErr(t, err)
35+
})
36+
37+
got, err := central_network.Get(client, created.ID)
38+
th.AssertNoErr(t, err)
39+
th.AssertEquals(t, created.ID, got.ID)
40+
41+
updated, err := central_network.Update(client, central_network.UpdateOpts{
42+
CentralNetworkId: created.ID,
43+
Name: name + "-updated",
44+
Description: pointerto.String("updated description"),
45+
})
46+
th.AssertNoErr(t, err)
47+
th.AssertEquals(t, name+"-updated", updated.Name)
48+
}
49+
50+
func TestCentralNetworkList(t *testing.T) {
51+
client, err := clients.NewCCClient()
52+
th.AssertNoErr(t, err)
53+
54+
resp, err := central_network.List(client, central_network.ListOpts{})
55+
th.AssertNoErr(t, err)
56+
th.AssertEquals(t, len(resp.CentralNetworks), resp.PageInfo.CurrentCount)
57+
}
58+
59+
func TestCentralNetworkQuotaList(t *testing.T) {
60+
client, err := clients.NewCCClient()
61+
th.AssertNoErr(t, err)
62+
63+
resp, err := quota.List(client, quota.ListOpts{})
64+
th.AssertNoErr(t, err)
65+
th.AssertEquals(t, true, len(resp.Quotas) > 0)
66+
for _, q := range resp.Quotas {
67+
th.AssertEquals(t, true, q.QuotaKey != "")
68+
}
69+
}
70+
71+
func TestCentralNetworkCapabilityList(t *testing.T) {
72+
client, err := clients.NewCCClient()
73+
th.AssertNoErr(t, err)
74+
75+
resp, err := capability.List(client, capability.ListOpts{})
76+
th.AssertNoErr(t, err)
77+
th.AssertEquals(t, true, len(resp.Capabilities) > 0)
78+
for _, c := range resp.Capabilities {
79+
th.AssertEquals(t, true, c.Capability != "")
80+
}
81+
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package cc
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
8+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools"
9+
gcb "github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/global_connection_bandwidth"
10+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
11+
th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
12+
)
13+
14+
func TestGlobalConnectionBandwidthLifeCycle(t *testing.T) {
15+
if os.Getenv("RUN_CC_LIFECYCLE") == "" {
16+
t.Skip("too slow to run in zuul")
17+
}
18+
client, err := clients.NewCCClient()
19+
th.AssertNoErr(t, err)
20+
21+
name := tools.RandomString("acctest_cc_gcb-", 4)
22+
23+
created, err := gcb.Create(client, gcb.CreateOpts{
24+
Name: name,
25+
Description: "created by gophertelekomcloud acceptance test",
26+
Bordercross: pointerto.Bool(false),
27+
Type: "Region",
28+
ChargeMode: "bwd",
29+
Size: 5,
30+
})
31+
th.AssertNoErr(t, err)
32+
th.AssertEquals(t, name, created.Name)
33+
34+
t.Cleanup(func() {
35+
err = gcb.Delete(client, created.ID)
36+
th.AssertNoErr(t, err)
37+
})
38+
39+
got, err := gcb.Get(client, created.ID)
40+
th.AssertNoErr(t, err)
41+
th.AssertEquals(t, created.ID, got.ID)
42+
43+
updated, err := gcb.Update(client, gcb.UpdateOpts{
44+
ID: created.ID,
45+
Name: name + "-updated",
46+
Size: 10,
47+
})
48+
th.AssertNoErr(t, err)
49+
th.AssertEquals(t, name+"-updated", updated.Name)
50+
}
51+
52+
func TestGlobalConnectionBandwidthList(t *testing.T) {
53+
client, err := clients.NewCCClient()
54+
th.AssertNoErr(t, err)
55+
56+
resp, err := gcb.List(client, gcb.ListOpts{})
57+
th.AssertNoErr(t, err)
58+
th.AssertEquals(t, len(resp.GlobalConnectionBandwidths), resp.PageInfo.CurrentCount)
59+
}
60+
61+
func TestGlobalConnectionBandwidthConfigs(t *testing.T) {
62+
client, err := clients.NewCCClient()
63+
th.AssertNoErr(t, err)
64+
65+
resp, err := gcb.GetConfigs(client)
66+
th.AssertNoErr(t, err)
67+
th.AssertEquals(t, true, len(resp.Configs.ChargeMode) > 0)
68+
}
69+
70+
func TestGlobalConnectionBandwidthSites(t *testing.T) {
71+
client, err := clients.NewCCClient()
72+
th.AssertNoErr(t, err)
73+
74+
resp, err := gcb.ListSites(client, gcb.ListSitesOpts{})
75+
th.AssertNoErr(t, err)
76+
th.AssertEquals(t, len(resp.SiteInfos), resp.PageInfo.CurrentCount)
77+
for _, s := range resp.SiteInfos {
78+
th.AssertEquals(t, true, s.SiteCode != "")
79+
}
80+
}
81+
82+
func TestGlobalConnectionBandwidthSupportBindings(t *testing.T) {
83+
client, err := clients.NewCCClient()
84+
th.AssertNoErr(t, err)
85+
86+
_, err = gcb.ListSupportBindings(client, gcb.ListSupportBindingsOpts{
87+
BindingService: "CC",
88+
})
89+
th.AssertNoErr(t, err)
90+
}

acceptance/openstack/cc/helpers.go

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package cc
2+
3+
import (
4+
golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
5+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/central_network"
6+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/policy"
7+
)
8+
9+
func WaitForCentralNetworkAvailable(client *golangsdk.ServiceClient, secs int, id string) error {
10+
return golangsdk.WaitFor(secs, func() (bool, error) {
11+
cn, err := central_network.Get(client, id)
12+
if err != nil {
13+
return false, err
14+
}
15+
return cn.State == "AVAILABLE", nil
16+
})
17+
}
18+
19+
func WaitForPolicyAvailable(client *golangsdk.ServiceClient, secs int, centralNetworkId, policyId string) error {
20+
return golangsdk.WaitFor(secs, func() (bool, error) {
21+
list, err := policy.List(client, policy.ListOpts{CentralNetworkId: centralNetworkId})
22+
if err != nil {
23+
return false, err
24+
}
25+
for _, p := range list.CentralNetworkPolicies {
26+
if p.ID == policyId {
27+
return p.State == "AVAILABLE", nil
28+
}
29+
}
30+
31+
return true, nil
32+
})
33+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
package cc
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/clients"
8+
acceptanceer "github.com/opentelekomcloud/gophertelekomcloud/acceptance/openstack/er"
9+
"github.com/opentelekomcloud/gophertelekomcloud/acceptance/tools"
10+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/central_network"
11+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/connection"
12+
gcb "github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/global_connection_bandwidth"
13+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/cc/v3/policy"
14+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/common/pointerto"
15+
az "github.com/opentelekomcloud/gophertelekomcloud/openstack/er/v3/availability-zones"
16+
"github.com/opentelekomcloud/gophertelekomcloud/openstack/er/v3/instance"
17+
th "github.com/opentelekomcloud/gophertelekomcloud/testhelper"
18+
)
19+
20+
func TestCentralNetworkPolicyLifeCycle(t *testing.T) {
21+
if os.Getenv("RUN_CC_LIFECYCLE") == "" {
22+
t.Skip("too slow to run in zuul")
23+
}
24+
client, err := clients.NewCCClient()
25+
th.AssertNoErr(t, err)
26+
27+
erClient, err := clients.NewERClient()
28+
th.AssertNoErr(t, err)
29+
30+
azs, err := az.List(erClient, az.ListOpts{})
31+
th.AssertNoErr(t, err)
32+
th.AssertEquals(t, true, len(azs) > 0)
33+
azCode := azs[0].Code
34+
35+
erInstance, err := instance.Create(erClient, instance.CreateOpts{
36+
Name: tools.RandomString("acctest-cc-er-", 4),
37+
Description: "created by gophertelekomcloud acceptance test",
38+
Asn: 64512,
39+
EnableDefaultAssociation: pointerto.Bool(true),
40+
EnableDefaultPropagation: pointerto.Bool(true),
41+
AvailabilityZoneIDs: []string{azCode},
42+
})
43+
th.AssertNoErr(t, err)
44+
erID := erInstance.Instance.ID
45+
t.Cleanup(func() {
46+
th.AssertNoErr(t, instance.Delete(erClient, erID))
47+
th.AssertNoErr(t, acceptanceer.WaitForInstanceDeleted(erClient, 500, erID))
48+
})
49+
th.AssertNoErr(t, acceptanceer.WaitForInstanceAvailable(erClient, 300, erID))
50+
51+
got, err := instance.Get(erClient, erID)
52+
th.AssertNoErr(t, err)
53+
erTableID := got.Instance.DefaultAssociationRouteTableID
54+
projectID := got.Instance.ProjectID
55+
regionID := erClient.RegionID
56+
57+
name := tools.RandomString("acctest_cc_cn-", 4)
58+
cn, err := central_network.Create(client, central_network.CreateOpts{
59+
Name: name,
60+
Description: "created by gophertelekomcloud acceptance test",
61+
})
62+
th.AssertNoErr(t, err)
63+
t.Cleanup(func() {
64+
th.AssertNoErr(t, WaitForCentralNetworkAvailable(client, 300, cn.ID))
65+
th.AssertNoErr(t, central_network.Delete(client, cn.ID))
66+
})
67+
68+
policyOpts := policy.CreateOpts{
69+
CentralNetworkId: cn.ID,
70+
DefaultPlane: "default",
71+
Planes: []policy.PlaneDocument{
72+
{
73+
Name: "default",
74+
AssociateErTables: []policy.AssociateErTable{
75+
{
76+
ProjectId: projectID,
77+
RegionId: regionID,
78+
EnterpriseRouterId: erID,
79+
EnterpriseRouterTableId: erTableID,
80+
},
81+
},
82+
},
83+
},
84+
ErInstances: []policy.AssociateErInstance{
85+
{
86+
EnterpriseRouterId: erID,
87+
ProjectId: projectID,
88+
RegionId: regionID,
89+
},
90+
},
91+
}
92+
93+
created, err := policy.Create(client, policyOpts)
94+
th.AssertNoErr(t, err)
95+
th.AssertEquals(t, cn.ID, created.CentralNetworkId)
96+
97+
list, err := policy.List(client, policy.ListOpts{CentralNetworkId: cn.ID})
98+
th.AssertNoErr(t, err)
99+
th.AssertEquals(t, true, len(list.CentralNetworkPolicies) > 0)
100+
101+
_, err = policy.ListChangeSet(client, cn.ID, created.ID)
102+
th.AssertNoErr(t, err)
103+
104+
th.AssertNoErr(t, policy.Delete(client, cn.ID, created.ID))
105+
106+
applyPolicy, err := policy.Create(client, policyOpts)
107+
th.AssertNoErr(t, err)
108+
109+
applied, err := policy.Apply(client, cn.ID, applyPolicy.ID)
110+
th.AssertNoErr(t, err)
111+
th.AssertEquals(t, applyPolicy.ID, applied.CentralNetworkPolicy.ID)
112+
113+
th.AssertNoErr(t, WaitForPolicyAvailable(client, 300, cn.ID, applyPolicy.ID))
114+
th.AssertNoErr(t, WaitForCentralNetworkAvailable(client, 300, cn.ID))
115+
116+
conns, err := connection.List(client, connection.ListOpts{CentralNetworkId: cn.ID})
117+
th.AssertNoErr(t, err)
118+
119+
band, err := gcb.Create(client, gcb.CreateOpts{
120+
Name: tools.RandomString("acctest_cc_gcb-", 4),
121+
Description: "created by gophertelekomcloud acceptance test",
122+
Bordercross: pointerto.Bool(false),
123+
Type: "Region",
124+
ChargeMode: "bwd",
125+
Size: 5,
126+
})
127+
th.AssertNoErr(t, err)
128+
t.Cleanup(func() {
129+
th.AssertNoErr(t, gcb.Delete(client, band.ID))
130+
})
131+
132+
conn := conns.CentralNetworkConnections[0]
133+
updated, err := connection.Update(client, connection.UpdateOpts{
134+
CentralNetworkId: cn.ID,
135+
ConnectionId: conn.ID,
136+
BandwidthType: "BandwidthPackage",
137+
BandwidthSize: 5,
138+
GlobalConnectionBandwidthId: band.ID,
139+
})
140+
th.AssertNoErr(t, err)
141+
th.AssertEquals(t, band.ID, updated.GlobalConnectionBandwidthId)
142+
}

0 commit comments

Comments
 (0)