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

// 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)
}
}