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 }