Compare commits

...

8 commits

Author SHA1 Message Date
Pat Gavlin b45c31043b Use pulumictl cover merge instead of covmerge
Depends on https://github.com/pulumi/pulumictl/pull/42.
2021-11-24 11:15:38 -08:00
Pat Gavlin d2825522f2 [github] Enable code coverage collection.
- Set the `PULUMI_TEST_COVERAGE_PATH` environment variable during tests
- Use the codecov action to upload coverage data at the end of each leg
2021-11-24 11:00:03 -08:00
Pat Gavlin 9d233c0140 [coverage] Add a tool to merge Go coverage data.
Merging coverage data makes it easier to consume via the existing Go
tools and makes for a smaller upload to coverage reporters like
codecov.io.
2021-11-24 10:59:06 -08:00
Pat Gavlin 008ac014d4 [testing/dotnet] Support gathering coverage data.
Use the `coverlet` collector to gather and report coverage data.
Coverage is only gathered and reported if the
`PULUMI_TEST_COVERAGE_PATH` environment variable is set.
2021-11-24 10:59:05 -08:00
Pat Gavlin 96746ddeab [testing/python] Support gathering coverage data.
Use the `coverage` tool during tests to gather code coverage data and
conditionally write the results under PULUMI_TEST_COVERAGE_PATH.
2021-11-24 10:58:46 -08:00
Pat Gavlin 960a044abc [testing/nodejs] Support gathering coverage data.
- Update istanbul and mocha to their most recent versions. The istanbul
  CLI has been replaced by the nyc CLI. This is required in order to
  exclude tests from test sets and to exclude certain files (closure
  cases) from instrumentation.
- Add support for gathering and reporting coverage data under the
  `PULUMI_TEST_COVERAGE_PATH` environment variable.
2021-11-24 10:58:46 -08:00
Pat Gavlin c72bd3568a [testing] Support gathering coverage data.
- Add infrastructure for running integration tests using a
  coverage-instrumented CLI.
- Add infrastructure for running Go tests with code coverage enabled.

All coverage profiles are emitted into a single directory. Coverage is
enabled if the `PULUMI_TEST_COVERAGE_PATH` environment variable set.
2021-11-24 10:58:46 -08:00
Pat Gavlin 6ffea35ddc [cli] Support gathering code coverage data.
Add support for gathering code coverage data from a special build of
the Pulumi CLI. This build takes advantage of `go test` and `TestMain`
to build a coverage-instrumented binary.
2021-11-24 10:58:45 -08:00
21 changed files with 229 additions and 46 deletions

View file

@ -31,7 +31,7 @@ jobs:
language: ["nodejs", "python", "dotnet"]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -86,7 +86,7 @@ jobs:
go-version: [1.17.x]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Checkout Repo
@ -149,7 +149,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -218,8 +218,11 @@ jobs:
- name: Set PULUMI_TEST_SUBSET env var
run: |
echo "PULUMI_TEST_SUBSET=${{ matrix.test-subset }}" >> $GITHUB_ENV
- name: Enable code coverage
run: |
echo "PULUMI_TEST_COVERAGE_PATH=$(pwd)/coverage" >> $GITHUB_ENV
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -285,6 +288,17 @@ jobs:
PULUMI_NODE_MODULES: ${{ runner.temp }}/opt/pulumi/node_modules
PULUMI_LOCAL_NUGET: ${{ runner.temp }}/opt/pulumi/nuget
PULUMI_ROOT: ${{ runner.temp }}/opt/pulumi
- name: Merge Go coverage data
run: |
pulumictl cover merge -in ./coverage -out ./coverage/go-all.txt
rm ./coverage/*.cov
- name: Upload code coverage
uses: codecov/codecov-action@v2
with:
directory: coverage
files: '*'
fail_ci_if_error: true
verbose: true
windows-build:
name: Windows Build + Test + Publish
strategy:
@ -314,7 +328,7 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}

View file

@ -31,7 +31,7 @@ jobs:
language: ["nodejs", "python", "dotnet"]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -85,7 +85,7 @@ jobs:
go-version: [1.17.x]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Checkout Repo
@ -132,7 +132,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -196,7 +196,7 @@ jobs:
runs-on: ${{ matrix.platform }}
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -291,7 +291,7 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}

View file

@ -123,7 +123,7 @@ jobs:
language: ["nodejs", "python", "dotnet"]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -177,7 +177,7 @@ jobs:
go-version: [1.17.x]
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Checkout Repo
@ -225,7 +225,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -295,7 +295,7 @@ jobs:
run: |
echo "PULUMI_TEST_SUBSET=${{ matrix.test-subset }}" >> $GITHUB_ENV
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -397,7 +397,7 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}

View file

@ -71,7 +71,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -159,8 +159,11 @@ jobs:
- name: Set PULUMI_TEST_SUBSET env var
run: |
echo "PULUMI_TEST_SUBSET=${{ matrix.test-subset }}" >> $GITHUB_ENV
- name: Enable code coverage
run: |
echo "PULUMI_TEST_COVERAGE_PATH=$(pwd)/coverage" >> $GITHUB_ENV
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}
@ -236,6 +239,17 @@ jobs:
PULUMI_NODE_MODULES: ${{ runner.temp }}/opt/pulumi/node_modules
PULUMI_LOCAL_NUGET: ${{ runner.temp }}/opt/pulumi/nuget
PULUMI_ROOT: ${{ runner.temp }}/opt/pulumi
- name: Merge Go coverage data
run: |
pulumictl cover merge -in ./coverage -out ./coverage/go-all.txt
rm ./coverage/*.cov
- name: Upload code coverage
uses: codecov/codecov-action@v2
with:
directory: coverage
files: '*'
fail_ci_if_error: true
verbose: true
- name: Summarize Test Time by Package
run: |
mkdir -p test-results
@ -270,7 +284,7 @@ jobs:
with:
node-version: ${{ matrix.node-version }}
- name: Set up Go ${{ matrix.go-version }}
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: ${{ matrix.go-version }}
- name: Set up Python ${{ matrix.python-version }}

View file

@ -40,7 +40,7 @@ jobs:
fail-fast: false
steps:
- name: Install Go
uses: actions/setup-go@v1
uses: actions/setup-go@v2
with:
go-version: 1.17.x
- name: Install Node.js

1
.gitignore vendored
View file

@ -10,6 +10,7 @@
coverage.cov
*.coverprofile
**/obj/
coverage/
**/.idea/
*.iml

View file

@ -31,18 +31,31 @@ generate::
$(call STEP_MESSAGE)
echo "This command does not do anything anymore. It will be removed in a future version."
ifeq ($(PULUMI_TEST_COVERAGE_PATH),)
build::
cd pkg && go install -ldflags "-X github.com/pulumi/pulumi/pkg/v3/version.Version=${VERSION}" ${PROJECT}
install::
cd pkg && GOBIN=$(PULUMI_BIN) go install -ldflags "-X github.com/pulumi/pulumi/pkg/v3/version.Version=${VERSION}" ${PROJECT}
else
build:: build_cover
mkdir -p $(PULUMI_TEST_COVERAGE_PATH)
install:: install_cover
endif
build_debug::
cd pkg && go install -gcflags="all=-N -l" -ldflags "-X github.com/pulumi/pulumi/pkg/v3/version.Version=${VERSION}" ${PROJECT}
build_cover::
cd pkg && go test -coverpkg github.com/pulumi/pulumi/pkg/v3/...,github.com/pulumi/pulumi/sdk/v3/... -cover -c -o $(shell go env GOPATH)/bin/pulumi -ldflags "-X github.com/pulumi/pulumi/pkg/v3/version.Version=${VERSION}" ${PROJECT}
install_cover:: build_cover
cp $(shell go env GOPATH)/bin/pulumi $(PULUMI_BIN)
developer_docs::
cd developer-docs && make html
install::
cd pkg && GOBIN=$(PULUMI_BIN) go install -ldflags "-X github.com/pulumi/pulumi/pkg/v3/version.Version=${VERSION}" ${PROJECT}
install_all:: install
dist:: build

View file

@ -0,0 +1,81 @@
package main
import (
"flag"
"fmt"
"io"
"os"
"path"
"testing"
"github.com/pulumi/pulumi/sdk/v3/go/common/util/contract"
"github.com/spf13/pflag"
)
type noTestDeps int
func (noTestDeps) ImportPath() string { return "" }
func (noTestDeps) MatchString(pat, str string) (bool, error) { return false, nil }
func (noTestDeps) SetPanicOnExit0(bool) {}
func (noTestDeps) StartCPUProfile(io.Writer) error { return nil }
func (noTestDeps) StopCPUProfile() {}
func (noTestDeps) StartTestLog(io.Writer) {}
func (noTestDeps) StopTestLog() error { return nil }
func (noTestDeps) WriteProfileTo(string, io.Writer, int) error { return nil }
// flushProfiles flushes test profiles to disk.
func flushProfiles() {
// Redirect Stdout/err temporarily so the testing code doesn't output the
// regular:
// PASS
// coverage: 21.4% of statements
oldstdout, oldstderr := os.Stdout, os.Stderr
defer func() {
os.Stdout, os.Stderr = oldstdout, oldstderr
}()
os.Stdout, _ = os.Open(os.DevNull)
os.Stderr, _ = os.Open(os.DevNull)
cmdLine := flag.CommandLine
defer func() { flag.CommandLine = cmdLine }()
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
err := flag.CommandLine.Parse(nil)
contract.IgnoreError(err)
m := testing.MainStart(noTestDeps(0), nil, nil, nil)
m.Run()
}
func addGoFlag(pf *pflag.FlagSet, f *flag.Flag) {
if pf.Lookup(f.Name) != nil || len(f.Name) == 1 && pf.ShorthandLookup(f.Name) != nil {
return
}
pf.AddGoFlag(f)
}
func TestMain(m *testing.M) {
// If the binary is invoked as `pulumi`, we are being asked to run the coverage-instrumented program. Otherwise,
// we are running tests as usual.
if path.Base(os.Args[0]) != "pulumi" {
flag.Parse()
os.Exit(m.Run())
}
defer panicHandler()
// Copy the test flags into the Pulumi command's flags.
cmd := NewPulumiCmd()
flag.CommandLine.VisitAll(func(f *flag.Flag) {
addGoFlag(cmd.PersistentFlags(), f)
})
// Now, execute the Pulumi command and dump coverage data if requested.
err := cmd.Execute()
flushProfiles()
if err != nil {
_, err = fmt.Fprintf(os.Stderr, "An error occurred: %v\n", err)
contract.IgnoreError(err)
os.Exit(1)
}
}

View file

@ -43,6 +43,7 @@ require (
github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 // indirect
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
github.com/spf13/cobra v1.0.0
github.com/spf13/pflag v1.0.3
github.com/stretchr/testify v1.6.1
github.com/tklauser/go-sysconf v0.3.8 // indirect
github.com/tweekmonster/luser v0.0.0-20161003172636-3fa38070dbd7
@ -54,6 +55,7 @@ require (
golang.org/x/net v0.0.0-20210505214959-0714010a04ed
golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
golang.org/x/tools v0.1.0
google.golang.org/api v0.46.0
google.golang.org/genproto v0.0.0-20210506142907-4a47615972c2
google.golang.org/grpc v1.37.0

View file

@ -228,6 +228,12 @@ type ProgramTestOptions struct {
// file.
Tracing string
// If non-empty, specifies the value of the `--test.coverprofile` flag to pass to the Pulumi CLI. As with the
// Tracing field, the `{command}` template will expand to the current command name.
//
// If PULUMI_TEST_COVERAGE_PATH is set, this defaults to $PULUMI_TEST_COVERAGE_PATH/{command}-[random suffix].out
CoverProfile string
// NoParallel will opt the test out of being ran in parallel.
NoParallel bool
@ -447,6 +453,9 @@ func (opts ProgramTestOptions) With(overrides ProgramTestOptions) ProgramTestOpt
if overrides.Tracing != "" {
opts.Tracing = overrides.Tracing
}
if overrides.CoverProfile != "" {
opts.CoverProfile = overrides.CoverProfile
}
if overrides.NoParallel {
opts.NoParallel = overrides.NoParallel
}
@ -606,6 +615,16 @@ func prepareProgram(t *testing.T, opts *ProgramTestOptions) {
if opts.Tracing == "" {
opts.Tracing = os.Getenv("PULUMI_TEST_TRACE_ENDPOINT")
}
if opts.CoverProfile == "" {
if cov := os.Getenv("PULUMI_TEST_COVERAGE_PATH"); cov != "" {
var b [4]byte
if _, err := cryptorand.Read(b[:]); err != nil {
t.Errorf("could not read random bytes: %v", err)
}
opts.CoverProfile = filepath.Join(cov, "{command}-"+hex.EncodeToString(b[:])+".cov")
}
}
}
// ProgramTest runs a lifecycle of Pulumi commands in a program working directory, using the `pulumi` and `yarn`
@ -746,6 +765,9 @@ func (pt *ProgramTester) pulumiCmd(name string, args []string) ([]string, error)
if tracing := pt.opts.Tracing; tracing != "" {
cmd = append(cmd, "--tracing", strings.ReplaceAll(tracing, "{command}", name))
}
if cov := pt.opts.CoverProfile; cov != "" {
cmd = append(cmd, "--test.coverprofile", strings.ReplaceAll(cov, "{command}", name))
}
return cmd, nil
}

View file

@ -44,7 +44,13 @@ if not packages:
sys.exit(0)
options_and_packages = options(options_and_packages) + packages
options = options(options_and_packages)
cov = os.environ.get('PULUMI_TEST_COVERAGE_PATH', None)
if cov is not None:
options = options + [f'-coverprofile={cov}/go-test-{os.urandom(4).hex()}.cov', '-coverpkg=github.com/pulumi/pulumi/pkg/v3/...,github.com/pulumi/pulumi/sdk/v3/...']
options_and_packages = options + packages
if shutil.which('gotestsum') is not None:

View file

@ -18,6 +18,12 @@ ensure::
# We want to dotnet restore all projects on startup so that omnisharp doesn't complain about lots of missing types on startup.
dotnet restore dotnet.sln
ifneq ($(PULUMI_TEST_COVERAGE_PATH),)
TEST_COVERAGE_ARGS := /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura /p:CoverletOutput=$(PULUMI_TEST_COVERAGE_PATH)
else
TEST_COVERAGE_ARGS := /p:CollectCoverage=false /p:CoverletOutput=$(PULUMI_TEST_COVERAGE_PATH)
endif
build::
# From the nuget docs:
#
@ -45,11 +51,11 @@ install:: build install_plugin
dotnet_test:: $(TEST_ALL_DEPS)
# include the version prefix/suffix to avoid generating a separate nupkg file
$(RUN_TESTSUITE) dotnet-test dotnet test --no-build --filter --filter FullyQualifiedName\\!~Pulumi.Automation.Tests /p:Version=${DOTNET_VERSION}
$(RUN_TESTSUITE) dotnet-test dotnet test --no-build --filter FullyQualifiedName\!~Pulumi.Automation.Tests /p:Version=${DOTNET_VERSION} ${TEST_COVERAGE_ARGS}/dotnet.xml
auto_test:: $(TEST_ALL_DEPS)
# include the version prefix/suffix to avoid generating a separate nupkg file
$(RUN_TESTSUITE) auto-dotnet dotnet test --no-build --filter --filter FullyQualifiedName~Pulumi.Automation.Tests /p:Version=${DOTNET_VERSION}
$(RUN_TESTSUITE) auto-dotnet dotnet test --no-build --filter FullyQualifiedName~Pulumi.Automation.Tests /p:Version=${DOTNET_VERSION} ${TEST_COVERAGE_ARGS}/dotnet-auto.xml
test_fast:: dotnet_test
$(GO_TEST_FAST) ${PROJECT_PKGS}

View file

@ -7,6 +7,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="3.1.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.3.0" />
<PackageReference Include="Moq" Version="4.13.1" />
<PackageReference Include="xunit" Version="2.4.1" />

View file

@ -63,6 +63,13 @@ func Flush() {
glog.Flush()
}
func maybeSetFlag(name, value string) {
if f := flag.Lookup(name); f != nil {
err := f.Value.Set(value)
assertNoError(err)
}
}
// InitLogging ensures the logging library has been initialized with the given settings.
func InitLogging(logToStderr bool, verbose int, logFlow bool) {
// Remember the settings in case someone inquires.
@ -78,12 +85,10 @@ func InitLogging(logToStderr bool, verbose int, logFlow bool) {
assertNoError(err)
}
if logToStderr {
err := flag.Lookup("logtostderr").Value.Set("true")
assertNoError(err)
maybeSetFlag("logtostderr", "true")
}
if verbose > 0 {
err := flag.Lookup("v").Value.Set(strconv.Itoa(verbose))
assertNoError(err)
maybeSetFlag("v", strconv.Itoa(verbose))
}
}

View file

@ -4,3 +4,4 @@
/node_modules/
/custom_node/
/runtime/native/node_dev/
.nyc_output/

View file

@ -46,25 +46,28 @@ install_plugin:: build
install:: install_package install_plugin
istanbul_tests:: $(TEST_ALL_DEPS)
$(RUN_TESTSUITE) istanbul ./node_modules/.bin/istanbul test --print none _mocha -- --timeout 120000 --exclude 'bin/tests/automation/**/*.spec.js' 'bin/tests/**/*.spec.js'
./node_modules/.bin/istanbul report text-summary
./node_modules/.bin/istanbul report text
$(RUN_TESTSUITE) istanbul-with-mocks ./node_modules/.bin/istanbul test --print none _mocha -- 'bin/tests_with_mocks/**/*.spec.js'
unit_tests:: $(TEST_ALL_DEPS)
$(RUN_TESTSUITE) unit-nodejs ./node_modules/.bin/nyc -x 'bin/tests/runtime/*ClosureCases*.js' -s mocha --timeout 120000 --exclude 'bin/tests/automation/**/*.spec.js' --exclude 'bin/tests/runtime/closureLoader.spec.js' 'bin/tests/**/*.spec.js'
$(RUN_TESTSUITE) unit-nodejs mocha --timeout 120000 'bin/tests/runtime/closureLoader.spec.js'
$(RUN_TESTSUITE) unit-with-mocks-nodejs ./node_modules/.bin/nyc -s mocha 'bin/tests_with_mocks/**/*.spec.js'
auto_tests:: $(TEST_ALL_DEPS)
$(RUN_TESTSUITE) auto-nodejs ./node_modules/.bin/istanbul test --print none _mocha -- --timeout 120000 'bin/tests/automation/**/*.spec.js'
./node_modules/.bin/istanbul report text-summary
./node_modules/.bin/istanbul report text
$(RUN_TESTSUITE) auto-nodejs ./node_modules/.bin/nyc -s mocha --timeout 120000 'bin/tests/automation/**/*.spec.js'
sxs_tests:: $(TEST_ALL_DEPS)
pushd tests/sxs_ts_3.6 && yarn ; tsc ; popd
pushd tests/sxs_ts_latest && yarn ; tsc ; popd
test_fast:: sxs_tests istanbul_tests
test_fast:: sxs_tests unit_tests
ifneq ($(PULUMI_TEST_COVERAGE_PATH),)
if [ -e .nyc_output ]; then ./node_modules/.bin/nyc report -r cobertura --report-dir $(PULUMI_TEST_COVERAGE_PATH); fi
endif
$(GO_TEST_FAST) ${PROJECT_PKGS}
test_all:: sxs_tests istanbul_tests auto_tests
test_all:: sxs_tests unit_tests auto_tests
ifneq ($(PULUMI_TEST_COVERAGE_PATH),)
if [ -e .nyc_output ]; then ./node_modules/.bin/nyc report -r cobertura --report-dir $(PULUMI_TEST_COVERAGE_PATH); fi
endif
$(GO_TEST) ${PROJECT_PKGS}
dist:: build

View file

@ -39,13 +39,16 @@
"eslint": "^7.32.0",
"eslint-plugin-header": "^3.1.1",
"eslint-plugin-import": "^2.23.4",
"istanbul": "^0.4.5",
"mocha": "^3.5.0"
"nyc": "^15.1.0",
"mocha": "^9.0.0"
},
"pulumi": {
"comment": "Do not remove. Marks this as as a deployment-time-only package"
},
"engines": {
"node": ">=8.13.0 || >=10.10.0"
},
"mocha": {
"require": ["ts-node/register", "source-map-support/register"]
}
}

View file

@ -6,7 +6,7 @@
"module": "commonjs",
"moduleResolution": "node",
"declaration": true,
"sourceMap": false,
"sourceMap": true,
"stripInternal": true,
"experimentalDecorators": true,
"pretty": true,

View file

@ -4,3 +4,4 @@
/env/
/*.egg-info
.venv/
.coverage

View file

@ -50,14 +50,20 @@ test_fast:: $(TEST_ALL_DEPS)
$(GO_TEST) ${PROJECT_PKGS}
pipenv install -e ./env/src
# TODO the ignored test seems to fail in pytest but not unittest. Need to trackdown why
$(RUN_TESTSUITE) python/lib/test pipenv run pytest lib/test --ignore lib/test/automation --ignore lib/test/langhost/resource_thens/test_resource_thens.py
$(RUN_TESTSUITE) python/lib/test/langhost/resource_thens pipenv run python -m unittest lib/test/langhost/resource_thens/test_resource_thens.py
$(RUN_TESTSUITE) python/lib/test pipenv run coverage run -m pytest lib/test --ignore lib/test/automation --ignore lib/test/langhost/resource_thens/test_resource_thens.py
$(RUN_TESTSUITE) python/lib/test/langhost/resource_thens pipenv run coverage run -m unittest lib/test/langhost/resource_thens/test_resource_thens.py
# Using python -m also adds lib/test_with_mocks to sys.path which avoids package resolution issues.
pushd lib/test_with_mocks; $(RUN_TESTSUITE) python/lib/test_with_mocks pipenv run python -m pytest; popd
pushd lib/test_with_mocks; $(RUN_TESTSUITE) python/lib/test_with_mocks pipenv run coverage run -m pytest; popd
ifneq ($(PULUMI_TEST_COVERAGE_PATH),)
if [ -e .coverage ]; then pipenv run coverage xml -o $(PULUMI_TEST_COVERAGE_PATH)/python-fast.xml; fi
endif
test_auto:: test_fast $(TEST_ALL_DEPS)
# Note that this target depends on test-fast for the call to `pipenv run pip install`
$(RUN_TESTSUITE) auto-python pipenv run pytest lib/test/automation
$(RUN_TESTSUITE) auto-python pipenv run coverage run -m pytest lib/test/automation
ifneq ($(PULUMI_TEST_COVERAGE_PATH),)
if [ -e .coverage ]; then pipenv run coverage xml -o $(PULUMI_TEST_COVERAGE_PATH)/python-auto.xml; fi
endif
test_all:: test_fast test_auto

View file

@ -21,3 +21,4 @@ types-six = "*"
types-pyyaml = "*"
types-protobuf = "*"
pytest-asyncio = "*"
coverage = ">=6.0.2"