Skip to content

Commit

Permalink
test: Refactor smoke tests; improve CI and integration fork workflows (
Browse files Browse the repository at this point in the history
…#591)

* Add condition to send slack notification only on main repo

* Add tc to smoke test suite

* change smoke tests to record mode

* add cfw to remaining instances after execution

* improve smoke test workflow and add slack notifications

* improve smoke test workflow and add slack notifications

* update slack if condition

* update slack if condition

---------

Co-authored-by: Youjung Kim <[email protected]>
  • Loading branch information
ykim-akamai and ykim-akamai authored Oct 31, 2024
1 parent faea681 commit e84e404
Show file tree
Hide file tree
Showing 23 changed files with 178 additions and 64 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ jobs:
notify-slack:
runs-on: ubuntu-latest
needs: [test]
if: always() && github.ref == 'refs/heads/main' && github.event_name == 'push' # Run even if integration tests fail and only on main repository
if: ${{ (success() || failure()) && github.ref == 'refs/heads/main' && github.event_name == 'push' && github.repository == 'linode/linodego' }} # Run even if integration tests fail and only on main repository

steps:
- name: Notify Slack
Expand Down
73 changes: 58 additions & 15 deletions .github/workflows/integration_tests_pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,29 +36,15 @@ jobs:
with:
ref: ${{ inputs.sha }}

- name: Download kubectl and calicoctl for LKE clusters
run: |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://github.com/projectcalico/calico/releases/download/v3.25.0/calicoctl-linux-amd64"
chmod +x calicoctl-linux-amd64 kubectl
mv calicoctl-linux-amd64 /usr/local/bin/calicoctl
mv kubectl /usr/local/bin/kubectl
- run: make ARGS="-run ${{ inputs.module }}" fixtures
if: ${{ inputs.module != '' && steps.disallowed-char-check.outputs.match == '' }}
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}

- run: make fixtures
if: ${{ inputs.module == '' }}
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}

- name: Apply Calico Rules to LKE
if: always()
run: |
cd scripts && ./lke_calico_rules_e2e.sh
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}

- name: Get the hash value of the latest commit from the PR branch
uses: octokit/[email protected]
Expand Down Expand Up @@ -112,3 +98,60 @@ jobs:
conclusion: process.env.conclusion
});
return result;
apply-calico-rules:
runs-on: ubuntu-latest
needs: [integration-fork]
if: ${{ success() || failure() }}

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: 'recursive'

- name: Download kubectl and calicoctl for LKE clusters
run: |
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://github.com/projectcalico/calico/releases/download/v3.25.0/calicoctl-linux-amd64"
chmod +x calicoctl-linux-amd64 kubectl
mv calicoctl-linux-amd64 /usr/local/bin/calicoctl
mv kubectl /usr/local/bin/kubectl
- name: Apply Calico Rules to LKE
run: |
cd e2e_scripts/cloud_security_scripts/lke_calico_rules/ && ./lke_calico_rules_e2e.sh
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}

add-fw-to-remaining-instances:
runs-on: ubuntu-latest
needs: [integration-fork]
if: ${{ success() || failure() }}

steps:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'

- name: Install Linode CLI
run: |
pip install linode-cli
- name: Create Firewall and Attach to Instances
run: |
FIREWALL_ID=$(linode-cli firewalls create --label "e2e-fw-$(date +%s)" --rules.inbound_policy "DROP" --rules.outbound_policy "ACCEPT" --text --format=id --no-headers)
echo "Created Firewall with ID: $FIREWALL_ID"
for instance_id in $(linode-cli linodes list --format "id" --text --no-header); do
echo "Attaching firewall to instance: $instance_id"
if linode-cli firewalls device-create "$FIREWALL_ID" --id "$instance_id" --type linode; then
echo "Firewall attached to instance $instance_id successfully."
else
echo "An error occurred while attaching firewall to instance $instance_id. Skipping..."
fi
done
env:
LINODE_CLI_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}
28 changes: 0 additions & 28 deletions .github/workflows/nightly-smoke-tests.yml

This file was deleted.

98 changes: 98 additions & 0 deletions .github/workflows/nightly_smoke_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
name: Nightly Smoke Tests

on:
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
inputs:
sha:
description: 'Commit SHA to test'
required: false
default: ''
type: string

jobs:
smoke_tests:
if: github.repository == 'linode/linodego' || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: 'recursive'
ref: ${{ github.event.inputs.sha || github.ref }}

- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.x'

- name: Run smoke tests
id: smoke_tests
run: |
make smoketest
env:
LINODE_TOKEN: ${{ secrets.DX_LINODE_TOKEN }}

- name: Notify Slack
if: (success() || failure()) && github.repository == 'linode/linodego'
uses: slackapi/[email protected]
with:
channel-id: ${{ secrets.SLACK_CHANNEL_ID }}
payload: |
{
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": ":rocket: *${{ github.workflow }} Completed in: ${{ github.repository }}* :white_check_mark:"
}
},
{
"type": "divider"
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Build Result:*\n${{ steps.smoke_tests.outcome == 'success' && ':large_green_circle: Build Passed' || ':red_circle: Build Failed' }}"
},
{
"type": "mrkdwn",
"text": "*Branch:*\n`${{ github.ref_name }}`"
}
]
},
{
"type": "section",
"fields": [
{
"type": "mrkdwn",
"text": "*Commit Hash:*\n<${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sha }}>"
},
{
"type": "mrkdwn",
"text": "*Run URL:*\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run Details>"
}
]
},
{
"type": "divider"
},
{
"type": "context",
"elements": [
{
"type": "mrkdwn",
"text": "Triggered by: :bust_in_silhouette: `${{ github.actor }}`"
}
]
}
]
}
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
5 changes: 3 additions & 2 deletions test/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ testunit:
.PHONY: smoketest

smoketest:
@LINODE_FIXTURE_MODE="play" \
LINODE_TOKEN="awesometokenawesometokenawesometoken" \
@LINODE_FIXTURE_MODE="record" \
LINODE_TOKEN=$(LINODE_TOKEN) \
LINODE_API_VERSION="v4beta" \
LINODE_URL="$(LINODE_URL)" \
GO111MODULE="on" \
go test -v -run smoke ./integration/...

Expand Down
2 changes: 1 addition & 1 deletion test/integration/account_events_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/linode/linodego"
)

func TestAccountEvents_List(t *testing.T) {
func TestAccountEvents_List_smoke(t *testing.T) {
client, instance, teardown, err := setupInstance(t, "fixtures/TestAccountEvents_List", true)
defer teardown()
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion test/integration/databases_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func TestDatabase_Type(t *testing.T) {
}
}

func TestDatabase_List_smoke(t *testing.T) {
func TestDatabase_List(t *testing.T) {
client, database, teardown, err := setupPostgresDatabase(t, nil, "fixtures/TestDatabase_List")
if err != nil {
t.Error(err)
Expand Down
2 changes: 1 addition & 1 deletion test/integration/firewall_rules_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ var (
}
)

func TestFirewallRules_Get(t *testing.T) {
func TestFirewallRules_Get_smoke(t *testing.T) {
client, firewall, teardown, err := setupFirewall(t, []firewallModifier{func(createOpts *linodego.FirewallCreateOptions) {
createOpts.Rules = testFirewallRuleSet
}}, "fixtures/TestFirewallRules_Get")
Expand Down
2 changes: 1 addition & 1 deletion test/integration/firewalls_devices_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/linode/linodego"
)

func TestFirewallDevices_List(t *testing.T) {
func TestFirewallDevices_List_smoke(t *testing.T) {
client, instance, teardown, err := setupInstance(t, "fixtures/TestFirewallDevices_List", false)
if err != nil {
t.Error(err)
Expand Down
2 changes: 1 addition & 1 deletion test/integration/instance_config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ func TestInstance_ConfigInterfaces_Reorder(t *testing.T) {
}
}

func TestInstance_ConfigInterfaces_List(t *testing.T) {
func TestInstance_ConfigInterfaces_List_smoke(t *testing.T) {
client, _, _, instance, config, teardown := setupInstanceWith3Interfaces(
t,
"fixtures/TestInstance_ConfigInterfaces_List",
Expand Down
2 changes: 1 addition & 1 deletion test/integration/instances_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

type instanceModifier func(*linodego.Client, *linodego.InstanceCreateOptions)

func TestInstances_List(t *testing.T) {
func TestInstances_List_smoke(t *testing.T) {
client, instance, _, teardown, err := setupInstanceWithoutDisks(
t,
"fixtures/TestInstances_List", true,
Expand Down
2 changes: 1 addition & 1 deletion test/integration/lke_clusters_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func TestLKECluster_WaitForReady(t *testing.T) {
}
}

func TestLKECluster_GetFound(t *testing.T) {
func TestLKECluster_GetFound_smoke(t *testing.T) {
client, lkeCluster, teardown, err := setupLKECluster(t, []clusterModifier{func(createOpts *linodego.LKEClusterCreateOptions) {
createOpts.Label = "go-lke-test-found"
}}, "fixtures/TestLKECluster_GetFound")
Expand Down
2 changes: 1 addition & 1 deletion test/integration/longview_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/linode/linodego"
)

func TestLongviewClient_Get(t *testing.T) {
func TestLongviewClient_Get_smoke(t *testing.T) {
client, teardown := createTestClient(t, "fixtures/TestLongviewClient_Get")
defer teardown()

Expand Down
2 changes: 1 addition & 1 deletion test/integration/network_ips_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ func TestIPAddress_GetMissing(t *testing.T) {
}
}

func TestIPAddress_GetFound(t *testing.T) {
func TestIPAddress_GetFound_smoke(t *testing.T) {
client, instance, _, teardown, err := setupInstanceWithoutDisks(t, "fixtures/TestIPAddress_GetFound", true)
defer teardown()
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion test/integration/nodebalancer_firewalls_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"testing"
)

func TestNodeBalancerFirewalls_List(t *testing.T) {
func TestNodeBalancerFirewalls_List_smoke(t *testing.T) {
client, nodebalancer, teardown, err := setupNodeBalancer(t,
"fixtures/TestNodeBalancerFirewalls_List")
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion test/integration/nodebalancers_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var (
label = "go-test-def"
)

func TestNodeBalancer_Create_create(t *testing.T) {
func TestNodeBalancer_Create_create_smoke(t *testing.T) {
_, nodebalancer, teardown, err := setupNodeBalancer(t, "fixtures/TestNodeBalancer_Create")
defer teardown()

Expand Down
2 changes: 1 addition & 1 deletion test/integration/object_storage_bucket_certs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ HMuBpZsWkNKLh0hjC5i7YBZYtXGYPG2JCEE4mpiV8ClxTvmijsr8sYUOtnmIBXfG
`
)

func TestObjectStorageBucketCert(t *testing.T) {
func TestObjectStorageBucketCert_smoke(t *testing.T) {
client, fixtureTeardown := createTestClient(t, "fixtures/TestObjectStorageBucketCert")
bucket, err := client.CreateObjectStorageBucket(context.Background(), linodego.ObjectStorageBucketCreateOptions{
Cluster: "us-east-1",
Expand Down
2 changes: 1 addition & 1 deletion test/integration/placement_group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import (

type placementGroupModifier func(*linodego.Client, *linodego.PlacementGroupCreateOptions)

func TestPlacementGroup_basic(t *testing.T) {
func TestPlacementGroup_basic_smoke(t *testing.T) {
client, clientTeardown := createTestClient(t, "fixtures/TestPlacementGroup_basic")

// Create a PG
Expand Down
2 changes: 1 addition & 1 deletion test/integration/profile_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (
"testing"
)

func TestProfile_Get(t *testing.T) {
func TestProfile_Get_smoke(t *testing.T) {
client, teardown := createTestClient(t, "fixtures/TestProfile_Get")
defer teardown()

Expand Down
2 changes: 1 addition & 1 deletion test/integration/stackscripts_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
"github.com/linode/linodego"
)

func TestStackscripts_List(t *testing.T) {
func TestStackscripts_List_smoke(t *testing.T) {
client, teardown := createTestClient(t, "fixtures/TestStackscripts_List")
defer teardown()

Expand Down
2 changes: 1 addition & 1 deletion test/integration/tags_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (
. "github.com/linode/linodego"
)

func TestTag_Create_create(t *testing.T) {
func TestTag_Create_create_smoke(t *testing.T) {
client, instance, teardown, err := setupTaggedInstance(t, "fixtures/TestTag_Create")
defer teardown()
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion test/integration/vlans_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/linode/linodego"
)

func TestVLANs_List(t *testing.T) {
func TestVLANs_List_smoke(t *testing.T) {
vlanName := "go-vlan-test-list"
instancePrefix := "go-ins-test-list"

Expand Down
Loading

0 comments on commit e84e404

Please sign in to comment.