@@ -3,8 +3,13 @@ package tfparse_test
3
3
import (
4
4
"archive/tar"
5
5
"bytes"
6
+ "context"
7
+ "io"
8
+ "log"
6
9
"testing"
7
10
11
+ "cdr.dev/slog"
12
+ "cdr.dev/slog/sloggers/sloghuman"
8
13
"cdr.dev/slog/sloggers/slogtest"
9
14
"github.com/coder/coder/v2/archive"
10
15
"github.com/coder/coder/v2/provisioner/terraform/tfparse"
@@ -326,7 +331,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
326
331
}
327
332
}
328
333
329
- func createTar (t * testing.T , files map [string ]string ) []byte {
334
+ func createTar (t testing.TB , files map [string ]string ) []byte {
330
335
var buffer bytes.Buffer
331
336
writer := tar .NewWriter (& buffer )
332
337
for path , content := range files {
@@ -348,10 +353,64 @@ func createTar(t *testing.T, files map[string]string) []byte {
348
353
return buffer .Bytes ()
349
354
}
350
355
351
- func createZip (t * testing.T , files map [string ]string ) []byte {
356
+ func createZip (t testing.TB , files map [string ]string ) []byte {
352
357
ta := createTar (t , files )
353
358
tr := tar .NewReader (bytes .NewReader (ta ))
354
359
za , err := archive .CreateZipFromTar (tr , int64 (len (ta )))
355
360
require .NoError (t , err )
356
361
return za
357
362
}
363
+
364
+ func BenchmarkWorkspaceTagDefaultsFromFile (b * testing.B ) {
365
+ files := map [string ]string {
366
+ "main.tf" : `
367
+ provider "foo" {}
368
+ resource "foo_bar" "baz" {}
369
+ variable "region" {
370
+ type = string
371
+ default = "us"
372
+ }
373
+ data "coder_parameter" "az" {
374
+ name = "az"
375
+ type = "string"
376
+ default = "a"
377
+ }
378
+ data "coder_workspace_tags" "tags" {
379
+ tags = {
380
+ "platform" = "kubernetes",
381
+ "cluster" = "${"devel"}${"opers"}"
382
+ "region" = var.region
383
+ "az" = data.coder_parameter.az.value
384
+ }
385
+ }` ,
386
+ }
387
+ tarFile := createTar (b , files )
388
+ zipFile := createZip (b , files )
389
+ logger := discardLogger (b )
390
+ b .ResetTimer ()
391
+ b .Run ("Tar" , func (b * testing.B ) {
392
+ ctx := context .Background ()
393
+ for i := 0 ; i < b .N ; i ++ {
394
+ _ , err := tfparse .WorkspaceTagDefaultsFromFile (ctx , logger , tarFile , "application/x-tar" )
395
+ if err != nil {
396
+ b .Fatal (err )
397
+ }
398
+ }
399
+ })
400
+
401
+ b .Run ("Zip" , func (b * testing.B ) {
402
+ ctx := context .Background ()
403
+ for i := 0 ; i < b .N ; i ++ {
404
+ _ , err := tfparse .WorkspaceTagDefaultsFromFile (ctx , logger , zipFile , "application/zip" )
405
+ if err != nil {
406
+ b .Fatal (err )
407
+ }
408
+ }
409
+ })
410
+ }
411
+
412
+ func discardLogger (t testing.TB ) slog.Logger {
413
+ l := slog .Make (sloghuman .Sink (io .Discard ))
414
+ log .SetOutput (slog .Stdlib (context .Background (), l , slog .LevelInfo ).Writer ())
415
+ return l
416
+ }
0 commit comments