github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/dockerfile/parser/parser_test.go (about) 1 package parser 2 3 import ( 4 "strings" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func Test_Parser(t *testing.T) { 12 input := `FROM ubuntu:18.04 13 COPY . /app 14 RUN make /app 15 CMD python /app/app.py 16 ` 17 18 df, err := New().parse("Dockerfile", strings.NewReader(input)) 19 require.NoError(t, err) 20 21 assert.Equal(t, 1, len(df.Stages)) 22 23 require.Len(t, df.Stages, 1) 24 25 assert.Equal(t, "ubuntu:18.04", df.Stages[0].Name) 26 commands := df.Stages[0].Commands 27 assert.Equal(t, 4, len(commands)) 28 29 // FROM ubuntu:18.04 30 assert.Equal(t, "from", commands[0].Cmd) 31 assert.Equal(t, "ubuntu:18.04", commands[0].Value[0]) 32 assert.Equal(t, "Dockerfile", commands[0].Path) 33 assert.Equal(t, 1, commands[0].StartLine) 34 assert.Equal(t, 1, commands[0].EndLine) 35 36 // COPY . /app 37 assert.Equal(t, "copy", commands[1].Cmd) 38 assert.Equal(t, ". /app", strings.Join(commands[1].Value, " ")) 39 assert.Equal(t, "Dockerfile", commands[1].Path) 40 assert.Equal(t, 2, commands[1].StartLine) 41 assert.Equal(t, 2, commands[1].EndLine) 42 43 // RUN make /app 44 assert.Equal(t, "run", commands[2].Cmd) 45 assert.Equal(t, "make /app", commands[2].Value[0]) 46 assert.Equal(t, "Dockerfile", commands[2].Path) 47 assert.Equal(t, 3, commands[2].StartLine) 48 assert.Equal(t, 3, commands[2].EndLine) 49 50 // CMD python /app/app.py 51 assert.Equal(t, "cmd", commands[3].Cmd) 52 assert.Equal(t, "python /app/app.py", commands[3].Value[0]) 53 assert.Equal(t, "Dockerfile", commands[3].Path) 54 assert.Equal(t, 4, commands[3].StartLine) 55 assert.Equal(t, 4, commands[3].EndLine) 56 }