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  }