Skip to content

Commit 44bf8e8

Browse files
committed
[CI-v2] Add loadbalancer job with Github Action
* Deploy Octavia with Devstack * Run loadbalancer acceptance tests * Introduce IsReleasesAbove and IsReleasesBelow which return True if a release is above the current branch (or below). * Only test tls_versions in Victoria and beyond, not supported before. * Only add l7 parameters to QuotaUpdate in Victoria and beyond, not supported before. * Remove all the skips * Logs failures if any
1 parent 0557ce8 commit 44bf8e8

12 files changed

Lines changed: 121 additions & 112 deletions

File tree

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
name: functional-loadbalancer
2+
on:
3+
pull_request:
4+
paths:
5+
- '**loadbalancer**'
6+
schedule:
7+
- cron: '0 0 * * *'
8+
jobs:
9+
functional-loadbalancer:
10+
strategy:
11+
fail-fast: false
12+
matrix:
13+
name: ["master"]
14+
openstack_version: ["master"]
15+
ubuntu_version: ["20.04"]
16+
include:
17+
- name: "xena"
18+
openstack_version: "stable/xena"
19+
ubuntu_version: "20.04"
20+
- name: "wallaby"
21+
openstack_version: "stable/wallaby"
22+
ubuntu_version: "20.04"
23+
- name: "victoria"
24+
openstack_version: "stable/victoria"
25+
ubuntu_version: "20.04"
26+
- name: "ussuri"
27+
openstack_version: "stable/ussuri"
28+
ubuntu_version: "18.04"
29+
- name: "train"
30+
openstack_version: "stable/train"
31+
ubuntu_version: "18.04"
32+
runs-on: ubuntu-${{ matrix.ubuntu_version }}
33+
name: Deploy OpenStack ${{ matrix.name }} with Octavia and run loadbalancer acceptance tests
34+
steps:
35+
- name: Checkout Gophercloud
36+
uses: actions/checkout@v2
37+
- name: Deploy devstack
38+
uses: EmilienM/devstack-action@v0.6
39+
with:
40+
branch: ${{ matrix.openstack_version }}
41+
conf_overrides: |
42+
enable_plugin octavia https://opendev.org/openstack/octavia ${{ matrix.openstack_version }}
43+
enable_plugin neutron https://opendev.org/openstack/neutron ${{ matrix.openstack_version }}
44+
enabled_services: 'octavia,o-api,o-cw,o-hk,o-hm,o-da'
45+
- name: Checkout go
46+
uses: actions/setup-go@v2
47+
with:
48+
go-version: '^1.15'
49+
- name: Run Gophercloud acceptance tests
50+
run: ./script/acceptancetest
51+
env:
52+
DEVSTACK_PATH: ${{ github.workspace }}/devstack
53+
ACCEPTANCE_TESTS_FILTER: "^.*loadbalancer.*$"
54+
OS_BRANCH: ${{ matrix.openstack_version }}
55+
- name: Generate logs on failure
56+
run: ./script/collectlogs
57+
if: failure()
58+
- name: Upload logs artifacts on failure
59+
if: failure()
60+
uses: actions/upload-artifact@v2
61+
with:
62+
name: functional-loadbalancer-${{ matrix.name }}
63+
path: /tmp/devstack-logs/*

acceptance/clients/conditions.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,29 @@ func SkipReleasesAbove(t *testing.T, release string) {
111111
t.Skipf("this is not supported above %s, testing in %s", release, current_branch)
112112
}
113113
}
114+
115+
// IsReleasesAbove will return true on releases above a certain
116+
// one. The result is always true on master release. Releases are named such
117+
// as 'stable/mitaka', master, etc.
118+
func IsReleasesAbove(t *testing.T, release string) bool {
119+
current_branch := os.Getenv("OS_BRANCH")
120+
121+
// Assume master is always too new
122+
if current_branch == "master" || current_branch > release {
123+
return true
124+
}
125+
t.Logf("Target release %s is below the current branch %s", release, current_branch)
126+
return false
127+
}
128+
129+
// IsReleasesBelow will return true on releases below a certain
130+
// one. Releases are named such as 'stable/mitaka', master, etc.
131+
func IsReleasesBelow(t *testing.T, release string) bool {
132+
current_branch := os.Getenv("OS_BRANCH")
133+
134+
if current_branch != "master" && current_branch < release {
135+
return true
136+
}
137+
t.Logf("Target release %s is above the current branch %s", release, current_branch)
138+
return false
139+
}

acceptance/openstack/loadbalancer/v2/amphorae_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,6 @@ import (
1313

1414
func TestAmphoraeList(t *testing.T) {
1515
clients.RequireAdmin(t)
16-
clients.SkipRelease(t, "stable/mitaka")
17-
clients.SkipRelease(t, "stable/newton")
18-
clients.SkipRelease(t, "stable/ocata")
19-
clients.SkipRelease(t, "stable/pike")
20-
clients.SkipRelease(t, "stable/queens")
21-
clients.SkipRelease(t, "stable/rocky")
22-
2316
client, err := clients.NewLoadBalancerV2Client()
2417
if err != nil {
2518
t.Fatalf("Unable to create a loadbalancer client: %v", err)

acceptance/openstack/loadbalancer/v2/l7policies_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import (
1212
)
1313

1414
func TestL7PoliciesList(t *testing.T) {
15-
clients.SkipRelease(t, "stable/mitaka")
16-
clients.SkipRelease(t, "stable/newton")
17-
clients.SkipRelease(t, "stable/ocata")
18-
clients.SkipRelease(t, "stable/pike")
19-
clients.SkipRelease(t, "stable/queens")
20-
clients.SkipRelease(t, "stable/rocky")
21-
2215
client, err := clients.NewLoadBalancerV2Client()
2316
if err != nil {
2417
t.Fatalf("Unable to create a loadbalancer client: %v", err)

acceptance/openstack/loadbalancer/v2/listeners_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import (
1212
)
1313

1414
func TestListenersList(t *testing.T) {
15-
clients.SkipRelease(t, "stable/mitaka")
16-
clients.SkipRelease(t, "stable/newton")
17-
clients.SkipRelease(t, "stable/ocata")
18-
clients.SkipRelease(t, "stable/pike")
19-
clients.SkipRelease(t, "stable/queens")
20-
clients.SkipRelease(t, "stable/rocky")
21-
2215
client, err := clients.NewLoadBalancerV2Client()
2316
if err != nil {
2417
t.Fatalf("Unable to create a loadbalancer client: %v", err)

acceptance/openstack/loadbalancer/v2/loadbalancer.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"testing"
77

88
"github.com/gophercloud/gophercloud"
9+
"github.com/gophercloud/gophercloud/acceptance/clients"
910
"github.com/gophercloud/gophercloud/acceptance/tools"
1011
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/l7policies"
1112
"github.com/gophercloud/gophercloud/openstack/loadbalancer/v2/listeners"
@@ -57,6 +58,8 @@ func CreateListener(t *testing.T, client *gophercloud.ServiceClient, lb *loadbal
5758
// balancer on a random port with a random name. An error will be returned
5859
// if the listener could not be created.
5960
func CreateListenerHTTP(t *testing.T, client *gophercloud.ServiceClient, lb *loadbalancers.LoadBalancer) (*listeners.Listener, error) {
61+
tlsVersions := []listeners.TLSVersion{}
62+
tlsVersionsExp := []string(nil)
6063
listenerName := tools.RandomString("TESTACCT-", 8)
6164
listenerDescription := tools.RandomString("TESTACCT-DESC-", 8)
6265
listenerPort := tools.RandomInt(1, 100)
@@ -67,8 +70,11 @@ func CreateListenerHTTP(t *testing.T, client *gophercloud.ServiceClient, lb *loa
6770
"X-Forwarded-For": "true",
6871
}
6972

70-
tlsVersions := []listeners.TLSVersion{"TLSv1.2", "TLSv1.3"}
71-
tlsVersionsExp := []string{"TLSv1.2", "TLSv1.3"}
73+
// tls_version is only supported in microversion v2.17 introduced in victoria
74+
if clients.IsReleasesAbove(t, "stable/ussuri") {
75+
tlsVersions = []listeners.TLSVersion{"TLSv1.2", "TLSv1.3"}
76+
tlsVersionsExp = []string{"TLSv1.2", "TLSv1.3"}
77+
}
7278

7379
createOpts := listeners.CreateOpts{
7480
Name: listenerName,

acceptance/openstack/loadbalancer/v2/loadbalancers_test.go

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,6 @@ import (
1818
)
1919

2020
func TestLoadbalancersList(t *testing.T) {
21-
clients.SkipRelease(t, "stable/mitaka")
22-
clients.SkipRelease(t, "stable/newton")
23-
clients.SkipRelease(t, "stable/ocata")
24-
clients.SkipRelease(t, "stable/pike")
25-
clients.SkipRelease(t, "stable/queens")
26-
clients.SkipRelease(t, "stable/rocky")
27-
2821
client, err := clients.NewLoadBalancerV2Client()
2922
th.AssertNoErr(t, err)
3023

@@ -40,14 +33,6 @@ func TestLoadbalancersList(t *testing.T) {
4033
}
4134

4235
func TestLoadbalancersListByTags(t *testing.T) {
43-
clients.SkipRelease(t, "stable/mitaka")
44-
clients.SkipRelease(t, "stable/newton")
45-
clients.SkipRelease(t, "stable/ocata")
46-
clients.SkipRelease(t, "stable/pike")
47-
clients.SkipRelease(t, "stable/queens")
48-
clients.SkipRelease(t, "stable/rocky")
49-
t.Skip("Currently failing in OpenLab")
50-
5136
netClient, err := clients.NewNetworkV2Client()
5237
th.AssertNoErr(t, err)
5338

@@ -111,14 +96,6 @@ func TestLoadbalancersListByTags(t *testing.T) {
11196
}
11297

11398
func TestLoadbalancerHTTPCRUD(t *testing.T) {
114-
clients.SkipRelease(t, "stable/mitaka")
115-
clients.SkipRelease(t, "stable/newton")
116-
clients.SkipRelease(t, "stable/ocata")
117-
clients.SkipRelease(t, "stable/pike")
118-
clients.SkipRelease(t, "stable/queens")
119-
clients.SkipRelease(t, "stable/rocky")
120-
t.Skip("Currently failing in OpenLab")
121-
12299
netClient, err := clients.NewNetworkV2Client()
123100
th.AssertNoErr(t, err)
124101

@@ -168,14 +145,6 @@ func TestLoadbalancerHTTPCRUD(t *testing.T) {
168145
}
169146

170147
func TestLoadbalancersCRUD(t *testing.T) {
171-
clients.SkipRelease(t, "stable/mitaka")
172-
clients.SkipRelease(t, "stable/newton")
173-
clients.SkipRelease(t, "stable/ocata")
174-
clients.SkipRelease(t, "stable/pike")
175-
clients.SkipRelease(t, "stable/queens")
176-
clients.SkipRelease(t, "stable/rocky")
177-
t.Skip("Currently failing in OpenLab")
178-
179148
netClient, err := clients.NewNetworkV2Client()
180149
th.AssertNoErr(t, err)
181150

@@ -475,14 +444,6 @@ func TestLoadbalancersCRUD(t *testing.T) {
475444
}
476445

477446
func TestLoadbalancersCascadeCRUD(t *testing.T) {
478-
clients.SkipRelease(t, "stable/mitaka")
479-
clients.SkipRelease(t, "stable/newton")
480-
clients.SkipRelease(t, "stable/ocata")
481-
clients.SkipRelease(t, "stable/pike")
482-
clients.SkipRelease(t, "stable/queens")
483-
clients.SkipRelease(t, "stable/rocky")
484-
t.Skip("Currently failing in OpenLab")
485-
486447
netClient, err := clients.NewNetworkV2Client()
487448
th.AssertNoErr(t, err)
488449

@@ -597,14 +558,6 @@ func TestLoadbalancersCascadeCRUD(t *testing.T) {
597558
}
598559

599560
func TestLoadbalancersFullyPopulatedCRUD(t *testing.T) {
600-
clients.SkipRelease(t, "stable/mitaka")
601-
clients.SkipRelease(t, "stable/newton")
602-
clients.SkipRelease(t, "stable/ocata")
603-
clients.SkipRelease(t, "stable/pike")
604-
clients.SkipRelease(t, "stable/queens")
605-
clients.SkipRelease(t, "stable/rocky")
606-
t.Skip("Currently failing in OpenLab")
607-
608561
netClient, err := clients.NewNetworkV2Client()
609562
th.AssertNoErr(t, err)
610563

acceptance/openstack/loadbalancer/v2/monitors_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import (
1212
)
1313

1414
func TestMonitorsList(t *testing.T) {
15-
clients.SkipRelease(t, "stable/mitaka")
16-
clients.SkipRelease(t, "stable/newton")
17-
clients.SkipRelease(t, "stable/ocata")
18-
clients.SkipRelease(t, "stable/pike")
19-
clients.SkipRelease(t, "stable/queens")
20-
clients.SkipRelease(t, "stable/rocky")
21-
2215
client, err := clients.NewLoadBalancerV2Client()
2316
if err != nil {
2417
t.Fatalf("Unable to create a loadbalancer client: %v", err)

acceptance/openstack/loadbalancer/v2/pools_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import (
1212
)
1313

1414
func TestPoolsList(t *testing.T) {
15-
clients.SkipRelease(t, "stable/mitaka")
16-
clients.SkipRelease(t, "stable/newton")
17-
clients.SkipRelease(t, "stable/ocata")
18-
clients.SkipRelease(t, "stable/pike")
19-
clients.SkipRelease(t, "stable/queens")
20-
clients.SkipRelease(t, "stable/rocky")
21-
2215
client, err := clients.NewLoadBalancerV2Client()
2316
if err != nil {
2417
t.Fatalf("Unable to create a loadbalancer client: %v", err)

acceptance/openstack/loadbalancer/v2/providers_test.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import (
1212
)
1313

1414
func TestProvidersList(t *testing.T) {
15-
clients.SkipRelease(t, "stable/mitaka")
16-
clients.SkipRelease(t, "stable/newton")
17-
clients.SkipRelease(t, "stable/ocata")
18-
clients.SkipRelease(t, "stable/pike")
19-
clients.SkipRelease(t, "stable/queens")
20-
clients.SkipRelease(t, "stable/rocky")
21-
2215
client, err := clients.NewLoadBalancerV2Client()
2316
if err != nil {
2417
t.Fatalf("Unable to create a loadbalancer client: %v", err)

0 commit comments

Comments
 (0)