You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
2.9 KiB
112 lines
2.9 KiB
// Copyright 2020 Google LLC
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package bind
|
|
|
|
import (
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestServerBind(t *testing.T) {
|
|
mountTempDir, err := ioutil.TempDir("", "mount")
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
fakeBinder := NewFakePathBinder()
|
|
server := NewServer(fakeBinder)
|
|
roSourceDir := path.Join(mountTempDir, "path/to/readonly/source")
|
|
if err = os.MkdirAll(roSourceDir, os.ModePerm); err != nil {
|
|
t.Error(err)
|
|
}
|
|
roDestDir := path.Join(mountTempDir, "path/to/hacksaw/readonly/destination")
|
|
if err = os.MkdirAll(roDestDir, os.ModePerm); err != nil {
|
|
t.Error(err)
|
|
}
|
|
bindROArgs := BindReadOnlyArgs{
|
|
Source: roSourceDir,
|
|
Destination: roDestDir,
|
|
}
|
|
var bindROReply BindReadOnlyReply
|
|
if err := server.BindReadOnly(&bindROArgs, &bindROReply); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if bindROReply.Err != "" {
|
|
t.Error(bindROReply.Err)
|
|
}
|
|
rwSourceDir := path.Join(mountTempDir, "path/to/readwrite/source")
|
|
if err = os.MkdirAll(rwSourceDir, os.ModePerm); err != nil {
|
|
t.Error(err)
|
|
}
|
|
rwDestDir := path.Join(mountTempDir, "path/to/hacksaw/readwrite/destination")
|
|
if err = os.MkdirAll(rwDestDir, os.ModePerm); err != nil {
|
|
t.Error(err)
|
|
}
|
|
bindRWArgs := BindReadWriteArgs{
|
|
Source: rwSourceDir,
|
|
Destination: rwDestDir,
|
|
}
|
|
var bindRWReply BindReadWriteReply
|
|
if err := server.BindReadWrite(&bindRWArgs, &bindRWReply); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if bindRWReply.Err != "" {
|
|
t.Error(bindRWReply.Err)
|
|
}
|
|
var listArgs ListArgs
|
|
var listReply ListReply
|
|
err = server.List(&listArgs, &listReply)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if listReply.Err != "" {
|
|
t.Error(listReply.Err)
|
|
}
|
|
expectedList := []string{
|
|
roDestDir,
|
|
rwDestDir,
|
|
}
|
|
if !reflect.DeepEqual(listReply.BindList, expectedList) {
|
|
t.Errorf("Bind list %v is different than expected bind %v",
|
|
listReply.BindList, expectedList)
|
|
}
|
|
unbindArgs := UnbindArgs{
|
|
Destination: rwDestDir,
|
|
}
|
|
var unbindReply UnbindReply
|
|
if err := server.Unbind(&unbindArgs, &unbindReply); err != nil {
|
|
t.Error(err)
|
|
}
|
|
if unbindReply.Err != "" {
|
|
t.Error(unbindReply.Err)
|
|
}
|
|
err = server.List(&listArgs, &listReply)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
if listReply.Err != "" {
|
|
t.Error(listReply.Err)
|
|
}
|
|
expectedList = []string{
|
|
roDestDir,
|
|
}
|
|
if !reflect.DeepEqual(listReply.BindList, expectedList) {
|
|
t.Errorf("Bind list %v is different than expected bind %v",
|
|
listReply.BindList, expectedList)
|
|
}
|
|
}
|