github.com/aquasecurity/trivy-iac@v0.8.1-0.20240127024015-3d8e412cf0ab/test/performance_test.go (about)

     1  package test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io/fs"
     7  	"testing"
     8  
     9  	"github.com/aquasecurity/defsec/pkg/rules"
    10  
    11  	"github.com/aquasecurity/trivy-iac/pkg/scanners/terraform/executor"
    12  	"github.com/aquasecurity/trivy-iac/pkg/scanners/terraform/parser"
    13  	"github.com/aquasecurity/trivy-iac/test/testutil"
    14  )
    15  
    16  func BenchmarkCalculate(b *testing.B) {
    17  
    18  	f, err := createBadBlocks()
    19  	if err != nil {
    20  		b.Fatal(err)
    21  	}
    22  
    23  	b.ResetTimer()
    24  	for i := 0; i < b.N; i++ {
    25  		p := parser.New(f, "", parser.OptionStopOnHCLError(true))
    26  		if err := p.ParseFS(context.TODO(), "project"); err != nil {
    27  			b.Fatal(err)
    28  		}
    29  		modules, _, err := p.EvaluateAll(context.TODO())
    30  		if err != nil {
    31  			b.Fatal(err)
    32  		}
    33  		_, _, _ = executor.New().Execute(modules)
    34  	}
    35  }
    36  
    37  func createBadBlocks() (fs.FS, error) {
    38  
    39  	files := make(map[string]string)
    40  
    41  	files["/project/main.tf"] = `
    42  module "something" {
    43  	source = "../modules/problem"
    44  }
    45  `
    46  
    47  	for _, rule := range rules.GetRegistered() {
    48  		if rule.GetRule().Terraform == nil {
    49  			continue
    50  		}
    51  		for i, bad := range rule.GetRule().Terraform.BadExamples {
    52  			filename := fmt.Sprintf("/modules/problem/%s-%d.tf", rule.GetRule().LongID(), i)
    53  			files[filename] = bad
    54  		}
    55  	}
    56  
    57  	f := testutil.CreateFS(&testing.T{}, files)
    58  	return f, nil
    59  }