Skip to content

Commit 0d68e69

Browse files
committed
Move terraform test helpers into internal package
Signed-off-by: Danny Kopping <danny@coder.com>
1 parent c30a900 commit 0d68e69

File tree

3 files changed

+44
-41
lines changed

3 files changed

+44
-41
lines changed

provisioner/terraform/testutil.go renamed to provisioner/terraform/internal/timings_test_utils.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -63,32 +63,6 @@ func TimingsAreEqual(t *testing.T, expected []*proto.Timing, actual []*proto.Tim
6363
return true
6464
}
6565

66-
func IngestAllSpans(t *testing.T, input []byte, aggregator *timingAggregator) {
67-
t.Helper()
68-
69-
scanner := bufio.NewScanner(bytes.NewBuffer(input))
70-
for scanner.Scan() {
71-
line := scanner.Bytes()
72-
log := parseTerraformLogLine(line)
73-
if log == nil {
74-
continue
75-
}
76-
77-
ts, span, err := extractTimingSpan(log)
78-
if err != nil {
79-
// t.Logf("%s: failed span extraction on line: %q", err, line)
80-
continue
81-
}
82-
83-
require.NotZerof(t, ts, "failed on line: %q", line)
84-
require.NotNilf(t, span, "failed on line: %q", line)
85-
86-
aggregator.ingest(ts, span)
87-
}
88-
89-
require.NoError(t, scanner.Err())
90-
}
91-
9266
func PrintTiming(t *testing.T, timing *proto.Timing) {
9367
t.Helper()
9468

provisioner/terraform/timings_internal_test.go

Lines changed: 34 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package terraform
22

33
import (
4+
"bufio"
5+
"bytes"
46
_ "embed"
57
"testing"
68

@@ -9,6 +11,7 @@ import (
911
"golang.org/x/tools/txtar"
1012

1113
"github.com/coder/coder/v2/coderd/database"
14+
terraform_internal "github.com/coder/coder/v2/provisioner/terraform/internal"
1215
"github.com/coder/coder/v2/provisionersdk/proto"
1316
)
1417

@@ -88,25 +91,51 @@ func TestAggregation(t *testing.T) {
8891
file.Name, database.AllProvisionerJobTimingStageValues())
8992

9093
agg := newTimingAggregator(stage)
91-
IngestAllSpans(t, file.Data, agg)
94+
ingestAllSpans(t, file.Data, agg)
9295
actualTimings = append(actualTimings, agg.aggregate()...)
9396
}
9497

9598
// Ensure that the expected timings were produced.
96-
expected := ParseTimingLines(t, expectedTimings.Data)
97-
StableSortTimings(t, actualTimings) // To reduce flakiness.
98-
if !assert.True(t, TimingsAreEqual(t, expected, actualTimings)) {
99+
expected := terraform_internal.ParseTimingLines(t, expectedTimings.Data)
100+
terraform_internal.StableSortTimings(t, actualTimings) // To reduce flakiness.
101+
if !assert.True(t, terraform_internal.TimingsAreEqual(t, expected, actualTimings)) {
99102
printExpectation(t, expected)
100103
}
101104
})
102105
}
103106
}
104107

108+
func ingestAllSpans(t *testing.T, input []byte, aggregator *timingAggregator) {
109+
t.Helper()
110+
111+
scanner := bufio.NewScanner(bytes.NewBuffer(input))
112+
for scanner.Scan() {
113+
line := scanner.Bytes()
114+
log := parseTerraformLogLine(line)
115+
if log == nil {
116+
continue
117+
}
118+
119+
ts, span, err := extractTimingSpan(log)
120+
if err != nil {
121+
// t.Logf("%s: failed span extraction on line: %q", err, line)
122+
continue
123+
}
124+
125+
require.NotZerof(t, ts, "failed on line: %q", line)
126+
require.NotNilf(t, span, "failed on line: %q", line)
127+
128+
aggregator.ingest(ts, span)
129+
}
130+
131+
require.NoError(t, scanner.Err())
132+
}
133+
105134
func printExpectation(t *testing.T, actual []*proto.Timing) {
106135
t.Helper()
107136

108137
t.Log("expected:")
109138
for _, a := range actual {
110-
PrintTiming(t, a)
139+
terraform_internal.PrintTiming(t, a)
111140
}
112141
}

provisioner/terraform/timings_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"github.com/stretchr/testify/require"
1010

1111
"github.com/coder/coder/v2/coderd/database"
12-
"github.com/coder/coder/v2/provisioner/terraform"
12+
terraform_internal "github.com/coder/coder/v2/provisioner/terraform/internal"
1313
"github.com/coder/coder/v2/provisionersdk/proto"
1414
"github.com/coder/coder/v2/testutil"
1515
)
@@ -92,19 +92,19 @@ func TestTimingsFromProvision(t *testing.T) {
9292
}
9393

9494
// Sort the timings stably to keep reduce flakiness.
95-
terraform.StableSortTimings(t, timings)
95+
terraform_internal.StableSortTimings(t, timings)
9696

9797
// Then: the received timings should match the expected values below.
9898
// NOTE: These timings have been encoded to JSON format to make the tests more readable.
99-
planTimings := terraform.ParseTimingLines(t, []byte(`{"start":"2024-08-15T08:26:39.194726Z", "end":"2024-08-15T08:26:39.195836Z", "action":"read", "source":"coder", "resource":"data.coder_parameter.memory_size", "stage":"plan", "state":"COMPLETED"}
99+
planTimings := terraform_internal.ParseTimingLines(t, []byte(`{"start":"2024-08-15T08:26:39.194726Z", "end":"2024-08-15T08:26:39.195836Z", "action":"read", "source":"coder", "resource":"data.coder_parameter.memory_size", "stage":"plan", "state":"COMPLETED"}
100100
{"start":"2024-08-15T08:26:39.194726Z", "end":"2024-08-15T08:26:39.195712Z", "action":"read", "source":"coder", "resource":"data.coder_provisioner.me", "stage":"plan", "state":"COMPLETED"}
101101
{"start":"2024-08-15T08:26:39.194726Z", "end":"2024-08-15T08:26:39.195820Z", "action":"read", "source":"coder", "resource":"data.coder_workspace.me", "stage":"plan", "state":"COMPLETED"}`))
102-
applyTimings := terraform.ParseTimingLines(t, []byte(`{"start":"2024-08-15T08:26:39.616546Z", "end":"2024-08-15T08:26:39.618045Z", "action":"create", "source":"coder", "resource":"coder_agent.main", "stage":"apply", "state":"COMPLETED"}
102+
applyTimings := terraform_internal.ParseTimingLines(t, []byte(`{"start":"2024-08-15T08:26:39.616546Z", "end":"2024-08-15T08:26:39.618045Z", "action":"create", "source":"coder", "resource":"coder_agent.main", "stage":"apply", "state":"COMPLETED"}
103103
{"start":"2024-08-15T08:26:39.626722Z", "end":"2024-08-15T08:26:39.669954Z", "action":"create", "source":"docker", "resource":"docker_image.main", "stage":"apply", "state":"COMPLETED"}
104104
{"start":"2024-08-15T08:26:39.627335Z", "end":"2024-08-15T08:26:39.660616Z", "action":"create", "source":"docker", "resource":"docker_volume.home_volume", "stage":"apply", "state":"COMPLETED"}
105105
{"start":"2024-08-15T08:26:39.682223Z", "end":"2024-08-15T08:26:40.186482Z", "action":"create", "source":"docker", "resource":"docker_container.workspace[0]", "stage":"apply", "state":"COMPLETED"}`))
106-
initTiming := terraform.ParseTimingLines(t, []byte(`{"start":"2000-01-01T01:01:01.123456Z", "end":"2000-01-01T01:01:01.123456Z", "action":"initializing terraform", "source":"terraform", "resource":"state file", "stage":"init", "state":"COMPLETED"}`))[0]
107-
graphTiming := terraform.ParseTimingLines(t, []byte(`{"start":"2000-01-01T01:01:01.123456Z", "end":"2000-01-01T01:01:01.123456Z", "action":"building terraform dependency graph", "source":"terraform", "resource":"state file", "stage":"graph", "state":"COMPLETED"}`))[0]
106+
initTiming := terraform_internal.ParseTimingLines(t, []byte(`{"start":"2000-01-01T01:01:01.123456Z", "end":"2000-01-01T01:01:01.123456Z", "action":"initializing terraform", "source":"terraform", "resource":"state file", "stage":"init", "state":"COMPLETED"}`))[0]
107+
graphTiming := terraform_internal.ParseTimingLines(t, []byte(`{"start":"2000-01-01T01:01:01.123456Z", "end":"2000-01-01T01:01:01.123456Z", "action":"building terraform dependency graph", "source":"terraform", "resource":"state file", "stage":"graph", "state":"COMPLETED"}`))[0]
108108

109109
require.Len(t, timings, len(planTimings)+len(applyTimings)+2)
110110

@@ -119,15 +119,15 @@ func TestTimingsFromProvision(t *testing.T) {
119119
switch tim.Stage {
120120
case string(database.ProvisionerJobTimingStageInit):
121121
tim.Start, tim.End = initTiming.Start, initTiming.End
122-
require.True(t, terraform.TimingsAreEqual(t, []*proto.Timing{initTiming}, []*proto.Timing{tim}))
122+
require.True(t, terraform_internal.TimingsAreEqual(t, []*proto.Timing{initTiming}, []*proto.Timing{tim}))
123123
case string(database.ProvisionerJobTimingStageGraph):
124124
tim.Start, tim.End = graphTiming.Start, graphTiming.End
125-
require.True(t, terraform.TimingsAreEqual(t, []*proto.Timing{graphTiming}, []*proto.Timing{tim}))
125+
require.True(t, terraform_internal.TimingsAreEqual(t, []*proto.Timing{graphTiming}, []*proto.Timing{tim}))
126126
case string(database.ProvisionerJobTimingStagePlan):
127-
require.True(t, terraform.TimingsAreEqual(t, []*proto.Timing{planTimings[pCursor]}, []*proto.Timing{tim}))
127+
require.True(t, terraform_internal.TimingsAreEqual(t, []*proto.Timing{planTimings[pCursor]}, []*proto.Timing{tim}))
128128
pCursor++
129129
case string(database.ProvisionerJobTimingStageApply):
130-
require.True(t, terraform.TimingsAreEqual(t, []*proto.Timing{applyTimings[aCursor]}, []*proto.Timing{tim}))
130+
require.True(t, terraform_internal.TimingsAreEqual(t, []*proto.Timing{applyTimings[aCursor]}, []*proto.Timing{tim}))
131131
aCursor++
132132
}
133133
}

0 commit comments

Comments
 (0)