* only set group when setting permissions * fix test * another test fix
196 lines
6.7 KiB
Go
196 lines
6.7 KiB
Go
package common
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/truecharts/apps/tests/helmunit"
|
|
"github.com/stretchr/testify/suite"
|
|
)
|
|
|
|
type PermissionsJobTestSuite struct {
|
|
suite.Suite
|
|
Chart helmunit.HelmChart
|
|
}
|
|
|
|
func (suite *PermissionsJobTestSuite) SetupSuite() {
|
|
suite.Chart = helmunit.New("common-test", "../../common-test")
|
|
suite.Chart.UpdateDependencies()
|
|
}
|
|
|
|
// We need this function to kick off the test suite, otherwise
|
|
// "go test" won't know about our tests
|
|
func TestPermissionsJob(t *testing.T) {
|
|
suite.Run(t, new(PermissionsJobTestSuite))
|
|
}
|
|
|
|
func (suite *PermissionsJobTestSuite) TestPresence() {
|
|
tests := map[string]struct {
|
|
values []string
|
|
expectedJob bool
|
|
}{
|
|
"Default": {
|
|
values: nil,
|
|
expectedJob: false,
|
|
},
|
|
"WithHostPathMount": {
|
|
values: []string{
|
|
"persistenceList[0].name=data",
|
|
"persistenceList[0].type=hostPath",
|
|
"persistenceList[0].enabled=true",
|
|
"persistenceList[0].mountPath=/data",
|
|
"persistenceList[0].setPermissions=true",
|
|
"persistenceList[0].hostPath=/tmp",
|
|
},
|
|
expectedJob: true,
|
|
},
|
|
}
|
|
for name, tc := range tests {
|
|
suite.Suite.Run(name, func() {
|
|
err := suite.Chart.Render(nil, tc.values, nil)
|
|
if err != nil {
|
|
suite.FailNow(err.Error())
|
|
}
|
|
|
|
jobManifest := suite.Chart.Hooks.Get("Job", "common-test-auto-permissions")
|
|
if tc.expectedJob {
|
|
suite.Assertions.NotEmpty(jobManifest)
|
|
} else {
|
|
suite.Assertions.Empty(jobManifest)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func (suite *PermissionsJobTestSuite) TestVolumesAndMounts() {
|
|
tests := map[string]struct {
|
|
values []string
|
|
expectedVolumes []string
|
|
}{
|
|
"MultiplepersistenceList": {
|
|
values: []string{
|
|
"persistenceList[0].name=data",
|
|
"persistenceList[0].type=hostPath",
|
|
"persistenceList[0].enabled=true",
|
|
"persistenceList[0].setPermissions=true",
|
|
"persistenceList[0].mountPath=/data",
|
|
"persistenceList[0].hostPath=/tmp",
|
|
"persistenceList[1].name=config",
|
|
"persistenceList[1].type=hostPath",
|
|
"persistenceList[1].enabled=true",
|
|
"persistenceList[1].setPermissions=true",
|
|
"persistenceList[1].mountPath=/config",
|
|
"persistenceList[1].hostPath=/tmp",
|
|
},
|
|
expectedVolumes: []string{"hostpathmounts-config", "hostpathmounts-data"},
|
|
},
|
|
}
|
|
for name, tc := range tests {
|
|
suite.Suite.Run(name, func() {
|
|
err := suite.Chart.Render(nil, tc.values, nil)
|
|
if err != nil {
|
|
suite.FailNow(err.Error())
|
|
}
|
|
|
|
jobManifest := suite.Chart.Hooks.Get("Job", "common-test-auto-permissions")
|
|
suite.Assertions.NotEmpty(jobManifest)
|
|
|
|
jobVolumes, _ := jobManifest.Path("spec.template.spec.volumes").Search("name").Children()
|
|
containers, _ := jobManifest.Path("spec.template.spec.containers").Children()
|
|
jobVolumeMounts, _ := containers[0].Path("volumeMounts").Search("name").Children()
|
|
if tc.expectedVolumes != nil {
|
|
actualVolumes := []string{}
|
|
actualVolumeMounts := []string{}
|
|
|
|
for _, v := range jobVolumes {
|
|
actualVolumes = append(actualVolumes, v.Data().(string))
|
|
}
|
|
for _, v := range jobVolumeMounts {
|
|
actualVolumeMounts = append(actualVolumeMounts, v.Data().(string))
|
|
}
|
|
|
|
suite.Assertions.EqualValues(tc.expectedVolumes, actualVolumeMounts)
|
|
suite.Assertions.EqualValues(tc.expectedVolumes, actualVolumes)
|
|
} else {
|
|
suite.Assertions.Empty(jobVolumes)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func (suite *PermissionsJobTestSuite) TestCommand() {
|
|
baseValues := []string{
|
|
"persistenceList[0].name=data",
|
|
"persistenceList[0].type=hostPath",
|
|
"persistenceList[0].enabled=true",
|
|
"persistenceList[0].setPermissions=true",
|
|
"persistenceList[0].mountPath=/data",
|
|
"persistenceList[0].hostPath=/tmp",
|
|
"persistenceList[1].name=config",
|
|
"persistenceList[1].type=hostPath",
|
|
"persistenceList[1].enabled=true",
|
|
"persistenceList[1].setPermissions=true",
|
|
"persistenceList[1].mountPath=/config",
|
|
"persistenceList[1].hostPath=/tmp",
|
|
}
|
|
tests := map[string]struct {
|
|
values []string
|
|
expectedCommand []string
|
|
}{
|
|
"DefaultPermissionsForMultipleMounts": {
|
|
values: baseValues,
|
|
expectedCommand: []string{
|
|
"/bin/sh", "-c", "chown -R :568 /config\nchown -R :568 /data\n",
|
|
},
|
|
},
|
|
"DefaultPermissionsForDisabledpodSecurityContext": {
|
|
values: append(baseValues,
|
|
"podSecurityContext.allowPrivilegeEscalation=false",
|
|
),
|
|
expectedCommand: []string{
|
|
"/bin/sh", "-c", "chown -R :568 /config\nchown -R :568 /data\n",
|
|
},
|
|
},
|
|
"PermissionsForFsGroup": {
|
|
values: append(baseValues,
|
|
"podSecurityContext.fsGroup=666",
|
|
),
|
|
expectedCommand: []string{
|
|
"/bin/sh", "-c", "chown -R :666 /config\nchown -R :666 /data\n",
|
|
},
|
|
},
|
|
"PermissionsForPgid": {
|
|
values: append(baseValues,
|
|
"env.PGID=666",
|
|
),
|
|
expectedCommand: []string{
|
|
"/bin/sh", "-c", "chown -R :666 /config\nchown -R :666 /data\n",
|
|
},
|
|
},
|
|
}
|
|
for name, tc := range tests {
|
|
suite.Suite.Run(name, func() {
|
|
err := suite.Chart.Render(nil, tc.values, nil)
|
|
if err != nil {
|
|
suite.FailNow(err.Error())
|
|
}
|
|
|
|
jobManifest := suite.Chart.Hooks.Get("Job", "common-test-auto-permissions")
|
|
suite.Assertions.NotEmpty(jobManifest)
|
|
|
|
containers, _ := jobManifest.Path("spec.template.spec.containers").Children()
|
|
command, _ := containers[0].Path("command").Children()
|
|
if tc.expectedCommand != nil {
|
|
actualCommand := []string{}
|
|
|
|
for _, v := range command {
|
|
actualCommand = append(actualCommand, v.Data().(string))
|
|
}
|
|
|
|
suite.Assertions.EqualValues(tc.expectedCommand, actualCommand)
|
|
} else {
|
|
suite.Assertions.Empty(command)
|
|
}
|
|
})
|
|
}
|
|
}
|