github.com/secure-build/gitlab-runner@v12.5.0+incompatible/executors/docker/internal/volumes/utils_test.go (about)

     1  package volumes
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	"github.com/stretchr/testify/require"
     8  
     9  	"gitlab.com/gitlab-org/gitlab-runner/executors/docker/internal/volumes/parser"
    10  )
    11  
    12  type isHostMountedVolumeTestCases map[string]isHostMountedVolumeTestCase
    13  
    14  type isHostMountedVolumeTestCase struct {
    15  	dir            string
    16  	volumes        []string
    17  	expectedResult bool
    18  	expectedError  error
    19  }
    20  
    21  func testIsHostMountedVolume(t *testing.T, volumesParser parser.Parser, testCases isHostMountedVolumeTestCases) {
    22  	for testName, testCase := range testCases {
    23  		t.Run(testName, func(t *testing.T) {
    24  			result, err := IsHostMountedVolume(volumesParser, testCase.dir, testCase.volumes...)
    25  			assert.Equal(t, testCase.expectedResult, result)
    26  			if testCase.expectedError == nil {
    27  				assert.NoError(t, err)
    28  			} else {
    29  				assert.EqualError(t, err, testCase.expectedError.Error())
    30  			}
    31  		})
    32  	}
    33  }
    34  
    35  func TestIsHostMountedVolume_Linux(t *testing.T) {
    36  	testCases := isHostMountedVolumeTestCases{
    37  		"empty volumes": {
    38  			dir:            "/test/to/checked/dir",
    39  			volumes:        []string{},
    40  			expectedResult: false,
    41  		},
    42  		"no host volumes": {
    43  			dir:            "/test/to/checked/dir",
    44  			volumes:        []string{"/tests/to"},
    45  			expectedResult: false,
    46  		},
    47  		"dir not within volumes": {
    48  			dir:            "/test/to/checked/dir",
    49  			volumes:        []string{"/host:/root"},
    50  			expectedResult: false,
    51  		},
    52  		"dir within volumes": {
    53  			dir:            "/test/to/checked/dir",
    54  			volumes:        []string{"/host:/test/to"},
    55  			expectedResult: true,
    56  		},
    57  		"error on parsing": {
    58  			dir:           "/test/to/checked/dir",
    59  			volumes:       []string{""},
    60  			expectedError: parser.NewInvalidVolumeSpecErr(""),
    61  		},
    62  	}
    63  
    64  	testIsHostMountedVolume(t, parser.NewLinuxParser(), testCases)
    65  }
    66  
    67  func TestManagedList_Add(t *testing.T) {
    68  	tests := map[string]struct {
    69  		path          string
    70  		expectedError error
    71  	}{
    72  		"add non-duplicated path": {
    73  			path: "/new/path",
    74  		},
    75  		"add duplicated path": {
    76  			path:          "/duplicate",
    77  			expectedError: NewErrVolumeAlreadyDefined("/duplicate"),
    78  		},
    79  		"add child path": {
    80  			path: "/duplicate/child",
    81  		},
    82  	}
    83  
    84  	for testName, test := range tests {
    85  		t.Run(testName, func(t *testing.T) {
    86  			m := pathList{}
    87  			err := m.Add("/duplicate")
    88  			require.NoError(t, err)
    89  
    90  			err = m.Add(test.path)
    91  			assert.Equal(t, test.expectedError, err)
    92  		})
    93  	}
    94  }