mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
builder: negative test support, fix for shykes's broken dockerfile
Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)
This commit is contained in:
parent
3f5f6b038f
commit
4122a981ae
3 changed files with 36 additions and 3 deletions
|
@ -8,10 +8,15 @@ package parser
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
dockerFileErrJSONNesting = errors.New("You may not nest arrays in Dockerfile statements.")
|
||||||
|
)
|
||||||
|
|
||||||
// ignore the current argument. This will still leave a command parsed, but
|
// ignore the current argument. This will still leave a command parsed, but
|
||||||
// will not incorporate the arguments into the ast.
|
// will not incorporate the arguments into the ast.
|
||||||
func parseIgnore(rest string) (*Node, error) {
|
func parseIgnore(rest string) (*Node, error) {
|
||||||
|
@ -86,6 +91,8 @@ func parseJSON(rest string) (*Node, error) {
|
||||||
|
|
||||||
for _, str := range myJson {
|
for _, str := range myJson {
|
||||||
switch str.(type) {
|
switch str.(type) {
|
||||||
|
case []interface{}:
|
||||||
|
return nil, dockerFileErrJSONNesting
|
||||||
case float64:
|
case float64:
|
||||||
str = strconv.FormatFloat(str.(float64), 'G', -1, 64)
|
str = strconv.FormatFloat(str.(float64), 'G', -1, 64)
|
||||||
}
|
}
|
||||||
|
@ -110,6 +117,8 @@ func parseMaybeJSON(rest string) (*Node, error) {
|
||||||
node, err := parseJSON(rest)
|
node, err := parseJSON(rest)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return node, nil
|
return node, nil
|
||||||
|
} else if err == dockerFileErrJSONNesting {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,10 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const testDir = "testfiles"
|
const testDir = "testfiles"
|
||||||
|
const negativeTestDir = "testfiles-negative"
|
||||||
|
|
||||||
func TestTestData(t *testing.T) {
|
func getDirs(t *testing.T, dir string) []os.FileInfo {
|
||||||
f, err := os.Open(testDir)
|
f, err := os.Open(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -22,7 +23,29 @@ func TestTestData(t *testing.T) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, dir := range dirs {
|
return dirs
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTestNegative(t *testing.T) {
|
||||||
|
for _, dir := range getDirs(t, negativeTestDir) {
|
||||||
|
dockerfile := filepath.Join(negativeTestDir, dir.Name(), "Dockerfile")
|
||||||
|
|
||||||
|
df, err := os.Open(dockerfile)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Dockerfile missing for %s: %s", dir.Name(), err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = Parse(df)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("No error parsing broken dockerfile for %s: %s", dir.Name(), err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
df.Close()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTestData(t *testing.T) {
|
||||||
|
for _, dir := range getDirs(t, testDir) {
|
||||||
dockerfile := filepath.Join(testDir, dir.Name(), "Dockerfile")
|
dockerfile := filepath.Join(testDir, dir.Name(), "Dockerfile")
|
||||||
resultfile := filepath.Join(testDir, dir.Name(), "result")
|
resultfile := filepath.Join(testDir, dir.Name(), "result")
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
CMD [ "echo", [ "nested json" ] ]
|
Loading…
Reference in a new issue