Merge pull request #186 from juergenthomann/share_folders
Allow shares that are not at the root
This commit is contained in:
commit
9811fe4c6f
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -32,10 +33,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
testServer = "test-server"
|
testServer = "test-server"
|
||||||
testBaseDir = "test-base-dir"
|
testBaseDir = "test-base-dir"
|
||||||
testCSIVolume = "test-csi"
|
testBaseDirNested = "test/base/dir"
|
||||||
testVolumeID = "test-server/test-base-dir/test-csi"
|
testCSIVolume = "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)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user