1*105f6285SAndroid Build Coastguard Worker// Copyright 2020 Google LLC 2*105f6285SAndroid Build Coastguard Worker// 3*105f6285SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*105f6285SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*105f6285SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*105f6285SAndroid Build Coastguard Worker// 7*105f6285SAndroid Build Coastguard Worker// https://www.apache.org/licenses/LICENSE-2.0 8*105f6285SAndroid Build Coastguard Worker// 9*105f6285SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*105f6285SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*105f6285SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*105f6285SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*105f6285SAndroid Build Coastguard Worker// limitations under the License. 14*105f6285SAndroid Build Coastguard Worker 15*105f6285SAndroid Build Coastguard Workerpackage bind 16*105f6285SAndroid Build Coastguard Worker 17*105f6285SAndroid Build Coastguard Workerimport ( 18*105f6285SAndroid Build Coastguard Worker "io/ioutil" 19*105f6285SAndroid Build Coastguard Worker "os" 20*105f6285SAndroid Build Coastguard Worker "path" 21*105f6285SAndroid Build Coastguard Worker "reflect" 22*105f6285SAndroid Build Coastguard Worker "testing" 23*105f6285SAndroid Build Coastguard Worker) 24*105f6285SAndroid Build Coastguard Worker 25*105f6285SAndroid Build Coastguard Workerfunc TestServerBind(t *testing.T) { 26*105f6285SAndroid Build Coastguard Worker mountTempDir, err := ioutil.TempDir("", "mount") 27*105f6285SAndroid Build Coastguard Worker if err != nil { 28*105f6285SAndroid Build Coastguard Worker t.Error(err) 29*105f6285SAndroid Build Coastguard Worker } 30*105f6285SAndroid Build Coastguard Worker fakeBinder := NewFakePathBinder() 31*105f6285SAndroid Build Coastguard Worker server := NewServer(fakeBinder) 32*105f6285SAndroid Build Coastguard Worker roSourceDir := path.Join(mountTempDir, "path/to/readonly/source") 33*105f6285SAndroid Build Coastguard Worker if err = os.MkdirAll(roSourceDir, os.ModePerm); err != nil { 34*105f6285SAndroid Build Coastguard Worker t.Error(err) 35*105f6285SAndroid Build Coastguard Worker } 36*105f6285SAndroid Build Coastguard Worker roDestDir := path.Join(mountTempDir, "path/to/hacksaw/readonly/destination") 37*105f6285SAndroid Build Coastguard Worker if err = os.MkdirAll(roDestDir, os.ModePerm); err != nil { 38*105f6285SAndroid Build Coastguard Worker t.Error(err) 39*105f6285SAndroid Build Coastguard Worker } 40*105f6285SAndroid Build Coastguard Worker bindROArgs := BindReadOnlyArgs{ 41*105f6285SAndroid Build Coastguard Worker Source: roSourceDir, 42*105f6285SAndroid Build Coastguard Worker Destination: roDestDir, 43*105f6285SAndroid Build Coastguard Worker } 44*105f6285SAndroid Build Coastguard Worker var bindROReply BindReadOnlyReply 45*105f6285SAndroid Build Coastguard Worker if err := server.BindReadOnly(&bindROArgs, &bindROReply); err != nil { 46*105f6285SAndroid Build Coastguard Worker t.Error(err) 47*105f6285SAndroid Build Coastguard Worker } 48*105f6285SAndroid Build Coastguard Worker if bindROReply.Err != "" { 49*105f6285SAndroid Build Coastguard Worker t.Error(bindROReply.Err) 50*105f6285SAndroid Build Coastguard Worker } 51*105f6285SAndroid Build Coastguard Worker rwSourceDir := path.Join(mountTempDir, "path/to/readwrite/source") 52*105f6285SAndroid Build Coastguard Worker if err = os.MkdirAll(rwSourceDir, os.ModePerm); err != nil { 53*105f6285SAndroid Build Coastguard Worker t.Error(err) 54*105f6285SAndroid Build Coastguard Worker } 55*105f6285SAndroid Build Coastguard Worker rwDestDir := path.Join(mountTempDir, "path/to/hacksaw/readwrite/destination") 56*105f6285SAndroid Build Coastguard Worker if err = os.MkdirAll(rwDestDir, os.ModePerm); err != nil { 57*105f6285SAndroid Build Coastguard Worker t.Error(err) 58*105f6285SAndroid Build Coastguard Worker } 59*105f6285SAndroid Build Coastguard Worker bindRWArgs := BindReadWriteArgs{ 60*105f6285SAndroid Build Coastguard Worker Source: rwSourceDir, 61*105f6285SAndroid Build Coastguard Worker Destination: rwDestDir, 62*105f6285SAndroid Build Coastguard Worker } 63*105f6285SAndroid Build Coastguard Worker var bindRWReply BindReadWriteReply 64*105f6285SAndroid Build Coastguard Worker if err := server.BindReadWrite(&bindRWArgs, &bindRWReply); err != nil { 65*105f6285SAndroid Build Coastguard Worker t.Error(err) 66*105f6285SAndroid Build Coastguard Worker } 67*105f6285SAndroid Build Coastguard Worker if bindRWReply.Err != "" { 68*105f6285SAndroid Build Coastguard Worker t.Error(bindRWReply.Err) 69*105f6285SAndroid Build Coastguard Worker } 70*105f6285SAndroid Build Coastguard Worker var listArgs ListArgs 71*105f6285SAndroid Build Coastguard Worker var listReply ListReply 72*105f6285SAndroid Build Coastguard Worker err = server.List(&listArgs, &listReply) 73*105f6285SAndroid Build Coastguard Worker if err != nil { 74*105f6285SAndroid Build Coastguard Worker t.Error(err) 75*105f6285SAndroid Build Coastguard Worker } 76*105f6285SAndroid Build Coastguard Worker if listReply.Err != "" { 77*105f6285SAndroid Build Coastguard Worker t.Error(listReply.Err) 78*105f6285SAndroid Build Coastguard Worker } 79*105f6285SAndroid Build Coastguard Worker expectedList := []string{ 80*105f6285SAndroid Build Coastguard Worker roDestDir, 81*105f6285SAndroid Build Coastguard Worker rwDestDir, 82*105f6285SAndroid Build Coastguard Worker } 83*105f6285SAndroid Build Coastguard Worker if !reflect.DeepEqual(listReply.BindList, expectedList) { 84*105f6285SAndroid Build Coastguard Worker t.Errorf("Bind list %v is different than expected bind %v", 85*105f6285SAndroid Build Coastguard Worker listReply.BindList, expectedList) 86*105f6285SAndroid Build Coastguard Worker } 87*105f6285SAndroid Build Coastguard Worker unbindArgs := UnbindArgs{ 88*105f6285SAndroid Build Coastguard Worker Destination: rwDestDir, 89*105f6285SAndroid Build Coastguard Worker } 90*105f6285SAndroid Build Coastguard Worker var unbindReply UnbindReply 91*105f6285SAndroid Build Coastguard Worker if err := server.Unbind(&unbindArgs, &unbindReply); err != nil { 92*105f6285SAndroid Build Coastguard Worker t.Error(err) 93*105f6285SAndroid Build Coastguard Worker } 94*105f6285SAndroid Build Coastguard Worker if unbindReply.Err != "" { 95*105f6285SAndroid Build Coastguard Worker t.Error(unbindReply.Err) 96*105f6285SAndroid Build Coastguard Worker } 97*105f6285SAndroid Build Coastguard Worker err = server.List(&listArgs, &listReply) 98*105f6285SAndroid Build Coastguard Worker if err != nil { 99*105f6285SAndroid Build Coastguard Worker t.Error(err) 100*105f6285SAndroid Build Coastguard Worker } 101*105f6285SAndroid Build Coastguard Worker if listReply.Err != "" { 102*105f6285SAndroid Build Coastguard Worker t.Error(listReply.Err) 103*105f6285SAndroid Build Coastguard Worker } 104*105f6285SAndroid Build Coastguard Worker expectedList = []string{ 105*105f6285SAndroid Build Coastguard Worker roDestDir, 106*105f6285SAndroid Build Coastguard Worker } 107*105f6285SAndroid Build Coastguard Worker if !reflect.DeepEqual(listReply.BindList, expectedList) { 108*105f6285SAndroid Build Coastguard Worker t.Errorf("Bind list %v is different than expected bind %v", 109*105f6285SAndroid Build Coastguard Worker listReply.BindList, expectedList) 110*105f6285SAndroid Build Coastguard Worker } 111*105f6285SAndroid Build Coastguard Worker} 112