1
1
package tflint
2
2
3
3
import (
4
- "encoding/gob"
5
4
"errors"
6
5
"io/ioutil"
7
6
"net"
@@ -39,6 +38,24 @@ func (*mockServer) Attributes(req *AttributesRequest, resp *AttributesResponse)
39
38
return nil
40
39
}
41
40
41
+ func (* mockServer ) Blocks (req * BlocksRequest , resp * BlocksResponse ) error {
42
+ * resp = BlocksResponse {Blocks : []* Block {
43
+ {
44
+ Type : "resource" ,
45
+ Labels : []string {"aws_instance" , "foo" },
46
+ Body : []byte (`instance_type = "t2.micro"` ),
47
+ BodyRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 3 }, End : hcl.Pos {Line : 2 , Column : 28 }},
48
+ DefRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 1 }, End : hcl.Pos {Line : 1 , Column : 29 }},
49
+ TypeRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 1 }, End : hcl.Pos {Line : 1 , Column : 8 }},
50
+ LabelRanges : []hcl.Range {
51
+ {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 10 }, End : hcl.Pos {Line : 3 , Column : 23 }},
52
+ {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 25 }, End : hcl.Pos {Line : 3 , Column : 29 }},
53
+ },
54
+ },
55
+ }, Err : nil }
56
+ return nil
57
+ }
58
+
42
59
func (* mockServer ) EvalExpr (req * EvalExprRequest , resp * EvalExprResponse ) error {
43
60
* resp = EvalExprResponse {Val : cty .StringVal ("1" ), Err : nil }
44
61
return nil
@@ -49,8 +66,6 @@ func (s *mockServer) EmitIssue(req *EmitIssueRequest, resp *interface{}) error {
49
66
}
50
67
51
68
func startMockServer (t * testing.T ) (* Client , * mockServer ) {
52
- gob .Register (& hclsyntax.LiteralValueExpr {})
53
-
54
69
addy , err := net .ResolveTCPAddr ("tcp" , "0.0.0.0:42586" )
55
70
if err != nil {
56
71
t .Fatal (err )
@@ -106,6 +121,64 @@ func Test_WalkResourceAttributes(t *testing.T) {
106
121
}
107
122
}
108
123
124
+ func Test_WalkResourceBlocks (t * testing.T ) {
125
+ client , server := startMockServer (t )
126
+ defer server .Listener .Close ()
127
+
128
+ walked := []* hcl.Block {}
129
+ walker := func (block * hcl.Block ) error {
130
+ walked = append (walked , block )
131
+ return nil
132
+ }
133
+
134
+ if err := client .WalkResourceBlocks ("foo" , "bar" , walker ); err != nil {
135
+ t .Fatal (err )
136
+ }
137
+
138
+ expected := []* hcl.Block {
139
+ {
140
+ Type : "resource" ,
141
+ Labels : []string {"aws_instance" , "foo" },
142
+ Body : & hclsyntax.Body {
143
+ Attributes : hclsyntax.Attributes {
144
+ "instance_type" : {
145
+ Name : "instance_type" ,
146
+ Expr : & hclsyntax.TemplateExpr {
147
+ Parts : []hclsyntax.Expression {
148
+ & hclsyntax.LiteralValueExpr {
149
+ SrcRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 20 }, End : hcl.Pos {Line : 2 , Column : 28 }},
150
+ },
151
+ },
152
+ SrcRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 19 }, End : hcl.Pos {Line : 2 , Column : 29 }},
153
+ },
154
+ SrcRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 3 }, End : hcl.Pos {Line : 2 , Column : 29 }},
155
+ NameRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 3 }, End : hcl.Pos {Line : 2 , Column : 16 }},
156
+ EqualsRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 17 }, End : hcl.Pos {Line : 2 , Column : 18 }},
157
+ },
158
+ },
159
+ Blocks : hclsyntax.Blocks {},
160
+ SrcRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 3 }, End : hcl.Pos {Line : 2 , Column : 29 }},
161
+ EndRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 2 , Column : 29 }, End : hcl.Pos {Line : 2 , Column : 29 }},
162
+ },
163
+ DefRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 1 }, End : hcl.Pos {Line : 1 , Column : 29 }},
164
+ TypeRange : hcl.Range {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 1 }, End : hcl.Pos {Line : 1 , Column : 8 }},
165
+ LabelRanges : []hcl.Range {
166
+ {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 10 }, End : hcl.Pos {Line : 3 , Column : 23 }},
167
+ {Filename : "example.tf" , Start : hcl.Pos {Line : 1 , Column : 25 }, End : hcl.Pos {Line : 3 , Column : 29 }},
168
+ },
169
+ },
170
+ }
171
+
172
+ opts := []cmp.Option {
173
+ cmpopts .IgnoreUnexported (hclsyntax.Body {}),
174
+ cmpopts .IgnoreFields (hclsyntax.LiteralValueExpr {}, "Val" ),
175
+ cmpopts .IgnoreFields (hcl.Pos {}, "Byte" ),
176
+ }
177
+ if ! cmp .Equal (expected , walked , opts ... ) {
178
+ t .Fatalf ("Diff: %s" , cmp .Diff (expected , walked , opts ... ))
179
+ }
180
+ }
181
+
109
182
func Test_EvaluateExpr (t * testing.T ) {
110
183
client , server := startMockServer (t )
111
184
defer server .Listener .Close ()
0 commit comments