xref: /aosp_15_r20/tools/treble/hacksaw/bind/remoteserver_test.go (revision 105f628577ac4ba0e277a494fbb614ed8c12a994)
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