Skip to content

Commit 28a7d76

Browse files
author
Ciro S. Costa
authored
Validates cast before applying transformation (#12)
* bumps version * Adds input cast validation to `transformer` Whenever a cast is consumed from `transformer`, a cast validation is now performed. This commit makes even more natural to develop the commands as the developer doesn't need to worry about receiving invalid casts. Naturally, that's the expectation - there might exist a case when a a command could potentially *want* to receive an invalid cast (which is not the situation right now).
1 parent e550d5c commit 28a7d76

File tree

3 files changed

+89
-1
lines changed

3 files changed

+89
-1
lines changed

VERSION

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.0.5
1+
0.0.6

commands/transformer/transformer.go

+7
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ func (m *Transformer) Transform() (err error) {
106106
return
107107
}
108108

109+
_, err = cast.Validate(decodedCast)
110+
if err != nil {
111+
err = errors.Wrapf(err,
112+
"invalid input cast")
113+
return
114+
}
115+
109116
err = m.transformation.Transform(decodedCast)
110117
if err != nil {
111118
err = errors.Wrapf(err,

commands/transformer/transformer_test.go

+81
Original file line numberDiff line numberDiff line change
@@ -111,4 +111,85 @@ var _ = Describe("Transformer", func() {
111111
})
112112
})
113113
})
114+
115+
Describe("transform", func() {
116+
var (
117+
trans *transformer.Transformer
118+
input string
119+
output = "/dev/null"
120+
err error
121+
)
122+
123+
JustBeforeEach(func() {
124+
trans, err = transformer.New(
125+
&DummyTransformation{},
126+
input,
127+
output)
128+
Expect(err).To(Succeed())
129+
})
130+
131+
AfterEach(func() {
132+
os.Remove(input)
133+
})
134+
135+
Context("with malformed input", func() {
136+
BeforeEach(func() {
137+
input, err = createTempFileWithContent("malformed")
138+
Expect(err).To(Succeed())
139+
})
140+
141+
It("fails", func() {
142+
err = trans.Transform()
143+
Expect(err).ToNot(Succeed())
144+
})
145+
})
146+
147+
Context("with malformed event stream", func() {
148+
BeforeEach(func() {
149+
input, err = createTempFileWithContent(`{"version": 2, "width": 123, "height": 123}
150+
[1, "o", "aaa"]
151+
[3, "o", "ccc"]
152+
[2, "o", "bbb"]`)
153+
Expect(err).To(Succeed())
154+
})
155+
156+
It("fails", func() {
157+
err = trans.Transform()
158+
Expect(err).ToNot(Succeed())
159+
})
160+
})
161+
162+
Context("with well formed event stream", func() {
163+
BeforeEach(func() {
164+
input, err = createTempFileWithContent(`{"version": 2, "width": 123, "height": 123}
165+
[1, "o", "aaa"]
166+
[2, "o", "bbb"]
167+
[3, "o", "ccc"]`)
168+
Expect(err).To(Succeed())
169+
})
170+
171+
It("succeeds", func() {
172+
err = trans.Transform()
173+
Expect(err).To(Succeed())
174+
})
175+
})
176+
})
114177
})
178+
179+
func createTempFileWithContent(content string) (res string, err error) {
180+
var file *os.File
181+
182+
file, err = ioutil.TempFile("", "")
183+
if err != nil {
184+
return
185+
}
186+
defer file.Close()
187+
188+
_, err = file.Write([]byte(content))
189+
if err != nil {
190+
return
191+
}
192+
193+
res = file.Name()
194+
return
195+
}

0 commit comments

Comments
 (0)