pulumi/pkg/codegen/schema/loader_test.go

106 lines
2.7 KiB
Go

package schema
import (
"os"
"testing"
"github.com/pulumi/pulumi/sdk/v3/go/common/resource/plugin"
"github.com/pulumi/pulumi/sdk/v3/go/common/testing/diagtest"
"github.com/stretchr/testify/require"
)
func initLoader(b *testing.B, options pluginLoaderCacheOptions) ReferenceLoader {
cwd, err := os.Getwd()
require.NoError(b, err)
sink := diagtest.LogSink(b)
ctx, err := plugin.NewContext(sink, sink, nil, nil, cwd, nil, true, nil)
require.NoError(b, err)
loader := newPluginLoaderWithOptions(ctx.Host, options)
return loader
}
func BenchmarkLoadPackageReference(b *testing.B) {
cacheWarmingLoader := initLoader(b, pluginLoaderCacheOptions{})
// ensure the file cache exists for later tests:
_, err := cacheWarmingLoader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
b.Run("full-load", func(b *testing.B) {
for n := 0; n < b.N; n++ {
loader := initLoader(b, pluginLoaderCacheOptions{})
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
}
})
b.Run("full-cache", func(b *testing.B) {
loader := initLoader(b, pluginLoaderCacheOptions{})
b.StopTimer()
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
b.StartTimer()
for n := 0; n < b.N; n++ {
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
}
})
b.Run("mmap-cache", func(b *testing.B) {
// Disables in-memory cache (single instancing), retains mmap of files:
loader := initLoader(b, pluginLoaderCacheOptions{
disableEntryCache: true,
})
b.StopTimer()
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
b.StartTimer()
for n := 0; n < b.N; n++ {
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
}
})
b.Run("file-cache", func(b *testing.B) {
// Disables in-memory cache and mmaping of files:
loader := initLoader(b, pluginLoaderCacheOptions{
disableEntryCache: true,
disableMmap: true,
})
b.StopTimer()
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
b.StartTimer()
for n := 0; n < b.N; n++ {
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
}
})
b.Run("no-cache", func(b *testing.B) {
// Disables in-memory cache, mmaping, and using schema files:
loader := initLoader(b, pluginLoaderCacheOptions{
disableEntryCache: true,
disableMmap: true,
disableFileCache: true,
})
b.StopTimer()
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
b.StartTimer()
for n := 0; n < b.N; n++ {
_, err := loader.LoadPackageReference("azure-native", nil)
require.NoError(b, err)
}
})
}