Merge pull request #186 from juergenthomann/share_folders

Allow shares that are not at the root
This commit is contained in:
Kubernetes Prow Robot 2021-04-13 19:22:42 -07:00 committed by GitHub
commit 9811fe4c6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 81 additions and 10 deletions

View File

@ -20,6 +20,7 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"regexp"
"strings" "strings"
"github.com/container-storage-interface/spec/lib/go/csi" "github.com/container-storage-interface/spec/lib/go/csi"
@ -359,15 +360,16 @@ func (cs *ControllerServer) getVolumeIDFromNfsVol(vol *nfsVolume) string {
// Given a CSI volume id, return a nfsVolume // Given a CSI volume id, return a nfsVolume
func (cs *ControllerServer) getNfsVolFromID(id string) (*nfsVolume, error) { func (cs *ControllerServer) getNfsVolFromID(id string) (*nfsVolume, error) {
tokens := strings.Split(id, "/") volRegex := regexp.MustCompile("^([^/]+)/(.*)/([^/]+)$")
if len(tokens) != totalIDElements { tokens := volRegex.FindStringSubmatch(id)
return nil, fmt.Errorf("volume id %q unexpected format: got %v token(s) instead of %v", id, len(tokens), totalIDElements) if tokens == nil {
return nil, fmt.Errorf("Could not split %q into server, baseDir and subDir", id)
} }
return &nfsVolume{ return &nfsVolume{
id: id, id: id,
server: tokens[idServer], server: tokens[1],
baseDir: tokens[idBaseDir], baseDir: tokens[2],
subDir: tokens[idSubDir], subDir: tokens[3],
}, nil }, nil
} }

View File

@ -20,6 +20,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"reflect" "reflect"
"strings"
"testing" "testing"
"fmt" "fmt"
@ -34,8 +35,10 @@ import (
const ( const (
testServer = "test-server" testServer = "test-server"
testBaseDir = "test-base-dir" testBaseDir = "test-base-dir"
testBaseDirNested = "test/base/dir"
testCSIVolume = "test-csi" testCSIVolume = "test-csi"
testVolumeID = "test-server/test-base-dir/test-csi" testVolumeID = "test-server/test-base-dir/test-csi"
testVolumeIDNested = "test-server/test/base/dir/test-csi"
) )
// for Windows support in the future // for Windows support in the future
@ -356,3 +359,69 @@ func TestControllerGetCapabilities(t *testing.T) {
}) })
} }
} }
func TestNfsVolFromId(t *testing.T) {
cases := []struct {
name string
req string
resp *nfsVolume
expectErr bool
}{
{
name: "ID only server",
req: testServer,
resp: nil,
expectErr: true,
},
{
name: "ID missing subDir",
req: strings.Join([]string{testServer, testBaseDir}, "/"),
resp: nil,
expectErr: true,
},
{
name: "valid request single baseDir",
req: testVolumeID,
resp: &nfsVolume{
id: testVolumeID,
server: testServer,
baseDir: testBaseDir,
subDir: testCSIVolume,
},
expectErr: false,
},
{
name: "valid request nested baseDir",
req: testVolumeIDNested,
resp: &nfsVolume{
id: testVolumeIDNested,
server: testServer,
baseDir: testBaseDirNested,
subDir: testCSIVolume,
},
expectErr: false,
},
}
for _, test := range cases {
test := test //pin
t.Run(test.name, func(t *testing.T) {
// Setup
cs := initTestController(t)
// Run
resp, err := cs.getNfsVolFromID(test.req)
// Verify
if !test.expectErr && err != nil {
t.Errorf("test %q failed: %v", test.name, err)
}
if test.expectErr && err == nil {
t.Errorf("test %q failed; got success", test.name)
}
if !reflect.DeepEqual(resp, test.resp) {
t.Errorf("test %q failed: got resp %+v, expected %+v", test.name, resp, test.resp)
}
})
}
}