add profiling, tracing to load testing (#971)
## Description add diagnostic records to load test runs ## Type of change - [x] 🤖 Test - [x] 💻 CI/Deployment ## Issue(s) * #902 ## Test Plan - [x] 💚 E2E
This commit is contained in:
parent
04a8d10f75
commit
011e24583f
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
@ -8,7 +8,7 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
# required to retrieve AWS credentials
|
# required to retrieve AWS credentials
|
||||||
id-token: write
|
id-token: write
|
||||||
contents: read
|
contents: write
|
||||||
pull-requests: read
|
pull-requests: read
|
||||||
|
|
||||||
# cancel currently running jobs if a new version of the branch is pushed
|
# cancel currently running jobs if a new version of the branch is pushed
|
||||||
@ -62,6 +62,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version-file: src/go.mod
|
go-version-file: src/go.mod
|
||||||
|
|
||||||
|
- run: mkdir testlog
|
||||||
|
|
||||||
# Install gotestfmt
|
# Install gotestfmt
|
||||||
- name: Set up gotestfmt
|
- name: Set up gotestfmt
|
||||||
if: needs.precheck.outputs.fileschanged == 'true'
|
if: needs.precheck.outputs.fileschanged == 'true'
|
||||||
@ -85,12 +87,13 @@ jobs:
|
|||||||
CORSO_CI_TESTS: true
|
CORSO_CI_TESTS: true
|
||||||
CORSO_M356_TEST_USER_ID: ${{ secrets.CORSO_M356_TEST_USER_ID }}
|
CORSO_M356_TEST_USER_ID: ${{ secrets.CORSO_M356_TEST_USER_ID }}
|
||||||
CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }}
|
CORSO_PASSPHRASE: ${{ secrets.INTEGRATION_TEST_CORSO_PASSPHRASE }}
|
||||||
RUDDERSTACK_CORSO_WRITE_KEY: ${{ secrets.RUDDERSTACK_CORSO_WRITE_KEY }}
|
|
||||||
RUDDERSTACK_CORSO_DATA_PLANE_URL: ${{ secrets.RUDDERSTACK_CORSO_DATA_PLANE_URL }}
|
|
||||||
TENANT_ID: ${{ secrets.TENANT_ID }}
|
TENANT_ID: ${{ secrets.TENANT_ID }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
go test -json -v ./... 2>&1 | tee /tmp/gotest.log | gotestfmt -hide successful-tests
|
go test \
|
||||||
|
-json \
|
||||||
|
-v \
|
||||||
|
./... 2>&1 | tee ./testlog/gotest.log | gotestfmt -hide successful-tests
|
||||||
|
|
||||||
# Upload the original go test log as an artifact for later review.
|
# Upload the original go test log as an artifact for later review.
|
||||||
- name: Upload test log
|
- name: Upload test log
|
||||||
@ -98,8 +101,9 @@ jobs:
|
|||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: test-log
|
name: test-log
|
||||||
path: /tmp/gotest.log
|
path: testlog/gotest.log
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
retention-days: 14
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------------------------------
|
||||||
# --- Source Code Linting ----------------------------------------------------------------------------
|
# --- Source Code Linting ----------------------------------------------------------------------------
|
||||||
|
|||||||
34
.github/workflows/load_test.yml
vendored
34
.github/workflows/load_test.yml
vendored
@ -7,7 +7,12 @@ on:
|
|||||||
permissions:
|
permissions:
|
||||||
# required to retrieve AWS credentials
|
# required to retrieve AWS credentials
|
||||||
id-token: write
|
id-token: write
|
||||||
contents: read
|
contents: write
|
||||||
|
|
||||||
|
# cancel currently running jobs if a new version of the branch is pushed
|
||||||
|
concurrency:
|
||||||
|
group: load_testing-${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
Load-Tests:
|
Load-Tests:
|
||||||
@ -24,6 +29,8 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version-file: src/go.mod
|
go-version-file: src/go.mod
|
||||||
|
|
||||||
|
- run: mkdir test_results
|
||||||
|
|
||||||
# Install gotestfmt
|
# Install gotestfmt
|
||||||
- name: Set up gotestfmt
|
- name: Set up gotestfmt
|
||||||
run: go install github.com/haveyoudebuggedit/gotestfmt/v2/cmd/gotestfmt@latest
|
run: go install github.com/haveyoudebuggedit/gotestfmt/v2/cmd/gotestfmt@latest
|
||||||
@ -47,16 +54,25 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
go test \
|
go test \
|
||||||
|
-count=1 \
|
||||||
-json \
|
-json \
|
||||||
-v \
|
-v \
|
||||||
-count=1 \
|
|
||||||
--timeout 12h \
|
--timeout 12h \
|
||||||
./... 2>&1 | tee /tmp/gotest.log | gotestfmt -hide successful-tests
|
-blockprofile=block.prof \
|
||||||
|
-cpuprofile=cpu.prof \
|
||||||
|
-memprofile=mem.prof \
|
||||||
|
-mutexprofile=mutex.prof \
|
||||||
|
-trace=trace.out \
|
||||||
|
-outputdir=test_results \
|
||||||
|
./pkg/repository/repository_load_test.go \
|
||||||
|
2>&1 | tee ./test_results/goloadtest.log | gotestfmt -hide successful-tests
|
||||||
|
|
||||||
# Upload the original go test log as an artifact for later review.
|
# package all artifacts for later review
|
||||||
- name: Upload test log
|
- name: Upload Log, Profilers, Traces
|
||||||
uses: actions/upload-artifact@v2
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
with:
|
with:
|
||||||
name: test-log
|
name: load-test-profiling
|
||||||
path: /tmp/gotest.log
|
path: src/test_results/*
|
||||||
if-no-files-found: error
|
if-no-files-found: error
|
||||||
|
retention-days: 14
|
||||||
|
|||||||
@ -9,9 +9,11 @@ import (
|
|||||||
"github.com/stretchr/testify/suite"
|
"github.com/stretchr/testify/suite"
|
||||||
|
|
||||||
"github.com/alcionai/corso/src/internal/common"
|
"github.com/alcionai/corso/src/internal/common"
|
||||||
|
"github.com/alcionai/corso/src/internal/connector/exchange"
|
||||||
"github.com/alcionai/corso/src/internal/operations"
|
"github.com/alcionai/corso/src/internal/operations"
|
||||||
"github.com/alcionai/corso/src/internal/tester"
|
"github.com/alcionai/corso/src/internal/tester"
|
||||||
"github.com/alcionai/corso/src/pkg/account"
|
"github.com/alcionai/corso/src/pkg/account"
|
||||||
|
"github.com/alcionai/corso/src/pkg/backup/details"
|
||||||
"github.com/alcionai/corso/src/pkg/control"
|
"github.com/alcionai/corso/src/pkg/control"
|
||||||
"github.com/alcionai/corso/src/pkg/logger"
|
"github.com/alcionai/corso/src/pkg/logger"
|
||||||
"github.com/alcionai/corso/src/pkg/repository"
|
"github.com/alcionai/corso/src/pkg/repository"
|
||||||
@ -105,9 +107,20 @@ func runBackupDetailsLoadTest(
|
|||||||
t.Run("backup_details_"+name, func(t *testing.T) {
|
t.Run("backup_details_"+name, func(t *testing.T) {
|
||||||
ds, b, err := r.BackupDetails(ctx, backupID)
|
ds, b, err := r.BackupDetails(ctx, backupID)
|
||||||
require.NoError(t, err, "retrieving details in backup "+backupID)
|
require.NoError(t, err, "retrieving details in backup "+backupID)
|
||||||
require.NotNil(t, ds, "backup details")
|
require.NotNil(t, ds, "backup details must exist")
|
||||||
require.NotNil(t, b, "backup")
|
require.NotNil(t, b, "backup must exist")
|
||||||
assert.Equal(t, b.ItemsWritten, len(ds.Entries))
|
|
||||||
|
sansfldr := []details.DetailsEntry{}
|
||||||
|
|
||||||
|
for _, ent := range ds.Entries {
|
||||||
|
if ent.Folder == nil {
|
||||||
|
sansfldr = append(sansfldr, ent)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert.Equal(t,
|
||||||
|
b.ItemsWritten, len(sansfldr),
|
||||||
|
"items written to backup must match the count of entries, minus folder entries")
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,6 +169,7 @@ func TestRepositoryLoadTestExchangeSuite(t *testing.T) {
|
|||||||
|
|
||||||
func (suite *RepositoryLoadTestExchangeSuite) SetupSuite() {
|
func (suite *RepositoryLoadTestExchangeSuite) SetupSuite() {
|
||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
t.Parallel()
|
||||||
suite.ctx, suite.repo, suite.acct, suite.st = initM365Repo(t)
|
suite.ctx, suite.repo, suite.acct, suite.st = initM365Repo(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,13 +193,12 @@ func (suite *RepositoryLoadTestExchangeSuite) TestExchange() {
|
|||||||
service = "exchange"
|
service = "exchange"
|
||||||
)
|
)
|
||||||
|
|
||||||
t.Parallel()
|
|
||||||
|
|
||||||
m356User := tester.M365UserID(t)
|
m356User := tester.M365UserID(t)
|
||||||
|
|
||||||
// backup
|
// backup
|
||||||
bsel := selectors.NewExchangeBackup()
|
bsel := selectors.NewExchangeBackup()
|
||||||
bsel.Include(bsel.Users([]string{m356User}))
|
bsel.Include(bsel.MailFolders([]string{m356User}, []string{exchange.DefaultMailFolder}))
|
||||||
|
// bsel.Include(bsel.Users([]string{m356User}))
|
||||||
// bsel.Include(bsel.Users(selectors.Any()))
|
// bsel.Include(bsel.Users(selectors.Any()))
|
||||||
|
|
||||||
b, err := r.NewBackup(ctx, bsel.Selector)
|
b, err := r.NewBackup(ctx, bsel.Selector)
|
||||||
@ -231,6 +244,7 @@ func TestRepositoryLoadTestOneDriveSuite(t *testing.T) {
|
|||||||
|
|
||||||
func (suite *RepositoryLoadTestOneDriveSuite) SetupSuite() {
|
func (suite *RepositoryLoadTestOneDriveSuite) SetupSuite() {
|
||||||
t := suite.T()
|
t := suite.T()
|
||||||
|
t.Parallel()
|
||||||
suite.ctx, suite.repo, suite.acct, suite.st = initM365Repo(t)
|
suite.ctx, suite.repo, suite.acct, suite.st = initM365Repo(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -254,11 +268,14 @@ func (suite *RepositoryLoadTestOneDriveSuite) TestOneDrive() {
|
|||||||
service = "one_drive"
|
service = "one_drive"
|
||||||
)
|
)
|
||||||
|
|
||||||
t.Parallel()
|
t.Skip("temp issue-902-live")
|
||||||
|
|
||||||
|
m356User := tester.M365UserID(t)
|
||||||
|
|
||||||
// backup
|
// backup
|
||||||
bsel := selectors.NewOneDriveBackup()
|
bsel := selectors.NewOneDriveBackup()
|
||||||
bsel.Include(bsel.Users(selectors.Any()))
|
bsel.Include(bsel.Users([]string{m356User}))
|
||||||
|
// bsel.Include(bsel.Users(selectors.Any()))
|
||||||
|
|
||||||
b, err := r.NewBackup(ctx, bsel.Selector)
|
b, err := r.NewBackup(ctx, bsel.Selector)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user