Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1e6c04c

Browse files
committed
fixup testS
1 parent2b748d8 commit1e6c04c

File tree

2 files changed

+91
-84
lines changed

2 files changed

+91
-84
lines changed

‎provisioner/terraform/tfparse/previewtags.go

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ import (
44
"context"
55
"fmt"
66
"io/fs"
7-
"strings"
87

98
"github.com/hashicorp/hcl/v2"
109

1110
"github.com/coder/coder/v2/codersdk"
1211
"github.com/coder/preview"
13-
"github.com/coder/preview/hclext"
1412
previewtypes"github.com/coder/preview/types"
1513
)
1614

@@ -62,37 +60,35 @@ func TagValidationResponse(tag previewtypes.Tag) codersdk.ValidationError {
6260
}
6361
}
6462

65-
invalidErr:="Tag %s is not valid, it must be a non-null string value."
66-
if!tag.Key.Valid() {
63+
// TODO: It would be really nice to pull out the variable references to help identify the source of
64+
// the unknown or invalid tag.
65+
unknownErr:="Tag %s is not known, it likely refers to a variable that is not set or has no default."
66+
if!tag.Key.IsKnown() {
6767
return codersdk.ValidationError{
6868
Field:name,
69-
Detail:fmt.Sprintf(invalidErr,key),
69+
Detail:fmt.Sprintf(unknownErr,key),
7070
}
7171
}
7272

73-
if!tag.Value.Valid() {
73+
if!tag.Value.IsKnown() {
7474
return codersdk.ValidationError{
7575
Field:name,
76-
Detail:fmt.Sprintf(invalidErr,value),
76+
Detail:fmt.Sprintf(unknownErr,value),
7777
}
7878
}
7979

80-
unknownErr:="Tag %s is not known, it likely refers to a variable that is not set or has no default. References: [%s]"
81-
if!tag.Key.IsKnown() {
82-
vars:=hclext.ReferenceNames(tag.Key.ValueExpr)
83-
80+
invalidErr:="Tag %s is not valid, it must be a non-null string value."
81+
if!tag.Key.Valid() {
8482
return codersdk.ValidationError{
8583
Field:name,
86-
Detail:fmt.Sprintf(unknownErr,key,strings.Join(vars,", ")),
84+
Detail:fmt.Sprintf(invalidErr,key),
8785
}
8886
}
8987

90-
if!tag.Value.IsKnown() {
91-
vars:=hclext.ReferenceNames(tag.Value.ValueExpr)
92-
88+
if!tag.Value.Valid() {
9389
return codersdk.ValidationError{
9490
Field:name,
95-
Detail:fmt.Sprintf(unknownErr,value,strings.Join(vars,", ")),
91+
Detail:fmt.Sprintf(invalidErr,value),
9692
}
9793
}
9894

‎provisioner/terraform/tfparse/tfparse_test.go

Lines changed: 79 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import (
66
"context"
77
"io"
88
"log"
9-
"strings"
109
"testing"
1110

1211
"github.com/spf13/afero"
1312
"github.com/spf13/afero/zipfs"
13+
"github.com/stretchr/testify/assert"
1414
"github.com/stretchr/testify/require"
1515

1616
"cdr.dev/slog"
@@ -25,26 +25,30 @@ import (
2525
funcTest_WorkspaceTagDefaultsFromFile(t*testing.T) {
2626
t.Parallel()
2727

28+
const (
29+
unknownTag="Tag value is not known"
30+
invalidValueType="Invalid value type for tag"
31+
)
32+
2833
for_,tc:=range []struct {
29-
namestring
30-
filesmap[string]string
31-
expectTagsmap[string]string
32-
expectErrorstring
34+
namestring
35+
filesmap[string]string
36+
expectTagsmap[string]string
37+
expectedFailedTagsmap[string]string
3338
}{
34-
{
35-
name:"empty",
36-
files:map[string]string{},
37-
expectTags:map[string]string{},
38-
expectError:"",
39-
},
39+
//{
40+
//name: "empty",
41+
//files: map[string]string{},
42+
//expectTags: map[string]string{},
43+
//expectError: "",
44+
//},
4045
{
4146
name:"single text file",
4247
files:map[string]string{
4348
"file.txt":`
4449
hello world`,
4550
},
46-
expectTags:map[string]string{},
47-
expectError:"",
51+
expectTags:map[string]string{},
4852
},
4953
{
5054
name:"main.tf with no workspace_tags",
@@ -67,8 +71,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
6771
default = "a"
6872
}`,
6973
},
70-
expectTags:map[string]string{},
71-
expectError:"",
74+
expectTags:map[string]string{},
7275
},
7376
{
7477
name:"main.tf with empty workspace tags",
@@ -126,8 +129,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
126129
}
127130
}`,
128131
},
129-
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
130-
expectError:"",
132+
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
131133
},
132134
{
133135
name:"main.tf with parameter that has default value from dynamic value",
@@ -162,8 +164,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
162164
}
163165
}`,
164166
},
165-
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
166-
expectError:"",
167+
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
167168
},
168169
{
169170
name:"main.tf with parameter that has default value from another parameter",
@@ -199,7 +200,12 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
199200
}
200201
}`,
201202
},
202-
expectError:"Unknown variable; There is no variable named\"data\".",
203+
expectTags:map[string]string{
204+
"platform":"kubernetes",
205+
"cluster":"developers",
206+
"region":"us",
207+
"az":"a",
208+
},
203209
},
204210
{
205211
name:"main.tf with multiple valid workspace tags",
@@ -244,8 +250,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
244250
}
245251
}`,
246252
},
247-
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a","foo":"bar"},
248-
expectError:"",
253+
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a","foo":"bar"},
249254
},
250255
{
251256
name:"main.tf with missing parameter default value for workspace tags",
@@ -275,7 +280,10 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
275280
}
276281
}`,
277282
},
278-
expectTags:map[string]string{"cluster":"developers","az":"","platform":"kubernetes","region":"us"},
283+
expectTags:map[string]string{"cluster":"developers","platform":"kubernetes","region":"us"},
284+
expectedFailedTags:map[string]string{
285+
"az":"Tag value is not known, it likely refers to a variable that is not set or has no default.",
286+
},
279287
},
280288
{
281289
name:"main.tf with missing parameter default value outside workspace tags",
@@ -310,8 +318,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
310318
}
311319
}`,
312320
},
313-
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
314-
expectError:``,
321+
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
315322
},
316323
{
317324
name:"main.tf with missing variable default value outside workspace tags",
@@ -345,8 +352,7 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
345352
}
346353
}`,
347354
},
348-
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
349-
expectError:``,
355+
expectTags:map[string]string{"platform":"kubernetes","cluster":"developers","region":"us","az":"a"},
350356
},
351357
{
352358
name:"main.tf with disallowed data source for workspace tags",
@@ -383,8 +389,15 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
383389
}
384390
}`,
385391
},
386-
expectTags:nil,
387-
expectError:`invalid workspace tag value "data.local_file.hostname.content": only the "coder_parameter" data source is supported here`,
392+
expectTags:map[string]string{
393+
"platform":"kubernetes",
394+
"cluster":"developers",
395+
"region":"us",
396+
"az":"a",
397+
},
398+
expectedFailedTags:map[string]string{
399+
"hostname":unknownTag,
400+
},
388401
},
389402
{
390403
name:"main.tf with disallowed resource for workspace tags",
@@ -418,9 +431,13 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
418431
}
419432
}`,
420433
},
421-
expectTags:nil,
422-
// TODO: this error isn't great, but it has the desired effect.
423-
expectError:`There is no variable named "foo_bar"`,
434+
expectTags:map[string]string{
435+
"platform":"kubernetes",
436+
"cluster":"developers",
437+
"region":"us",
438+
"az":"a",
439+
"foobarbaz":"foobar",
440+
},
424441
},
425442
{
426443
name:"main.tf with allowed functions in workspace tags",
@@ -493,8 +510,15 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
493510
}
494511
}`,
495512
},
496-
expectTags:nil,
497-
expectError:`function "pathexpand" may not be used here`,
513+
expectTags:map[string]string{
514+
"platform":"kubernetes",
515+
"cluster":"developers",
516+
"region":"us",
517+
"az":"a",
518+
},
519+
expectedFailedTags:map[string]string{
520+
"some_path":unknownTag,
521+
},
498522
},
499523
{
500524
name:"supported types",
@@ -558,14 +582,17 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
558582
"stringvar":"a",
559583
"numvar":"1",
560584
"boolvar":"true",
561-
"listvar":`["a"]`,
562-
"mapvar":`{"a":"b"}`,
563585
"stringparam":"a",
564586
"numparam":"1",
565587
"boolparam":"true",
566-
"listparam":`["a", "b"]`,
588+
"listparam":`["a", "b"]`,// OK because params are cast to strings
589+
//"listvar": `["a"]`,
590+
//"mapvar": `{"a":"b"}`,
591+
},
592+
expectedFailedTags:map[string]string{
593+
"listvar":invalidValueType,
594+
"mapvar":invalidValueType,
567595
},
568-
expectError:``,
569596
},
570597
{
571598
name:"overlapping var name",
@@ -606,21 +633,12 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
606633
tags:=output.WorkspaceTags
607634
tagMap:=tags.Tags()
608635
failedTags:=tags.UnusableTags()
609-
iftc.expectError!="" {
610-
found:=false
611-
require.True(t,len(failedTags)>0,"Expected unusable tags")
612-
for_,tag:=rangefailedTags {
613-
verr:=tfparse.TagValidationResponse(tag)
614-
ifstrings.Contains(verr.Error(),tc.expectError) {
615-
found=true
616-
break
617-
}
618-
}
619-
620-
require.True(t,found,"Expected error to contain: "+tc.expectError)
621-
}else {
622-
require.True(t,len(failedTags)==0,"Expected no unusable tags")
623-
require.Equal(t,tc.expectTags,tagMap)
636+
assert.Equal(t,tc.expectTags,tagMap,"expected tags to match, must always provide something")
637+
for_,tag:=rangefailedTags {
638+
verr:=tfparse.TagValidationResponse(tag)
639+
expectedErr,ok:=tc.expectedFailedTags[tag.KeyString()]
640+
require.Truef(t,ok,"assertion for failed tag required: %s, %s",tag.KeyString(),verr.Error())
641+
require.Contains(t,verr.Error(),expectedErr)
624642
}
625643
})
626644

@@ -638,21 +656,14 @@ func Test_WorkspaceTagDefaultsFromFile(t *testing.T) {
638656
require.False(t,diags.HasErrors(),diags.Error())
639657

640658
tags:=output.WorkspaceTags
641-
iftc.expectError!="" {
642-
found:=false
643-
require.True(t,len(tags.UnusableTags())>0,"Expected unusable tags")
644-
for_,tag:=rangetags.UnusableTags() {
645-
verr:=tfparse.TagValidationResponse(tag)
646-
ifstrings.Contains(verr.Error(),tc.expectError) {
647-
found=true
648-
break
649-
}
650-
}
651-
652-
require.True(t,found,"Expected error to contain: "+tc.expectError)
653-
}else {
654-
require.True(t,len(tags.UnusableTags())==0,"Expected no unusable tags")
655-
require.Equal(t,tc.expectTags,tags.Tags())
659+
tagMap:=tags.Tags()
660+
failedTags:=tags.UnusableTags()
661+
assert.Equal(t,tc.expectTags,tagMap,"expected tags to match, must always provide something")
662+
for_,tag:=rangefailedTags {
663+
verr:=tfparse.TagValidationResponse(tag)
664+
expectedErr,ok:=tc.expectedFailedTags[tag.KeyString()]
665+
assert.Truef(t,ok,"assertion for failed tag required: %s, %s",tag.KeyString(),verr.Error())
666+
assert.Contains(t,verr.Error(),expectedErr)
656667
}
657668
})
658669
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp