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