xref: /aosp_15_r20/build/soong/cmd/sbox/sbox_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
1*333d2b36SAndroid Build Coastguard Worker// Copyright 2022 Google Inc. All rights reserved.
2*333d2b36SAndroid Build Coastguard Worker//
3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License");
4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License.
5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at
6*333d2b36SAndroid Build Coastguard Worker//
7*333d2b36SAndroid Build Coastguard Worker//     http://www.apache.org/licenses/LICENSE-2.0
8*333d2b36SAndroid Build Coastguard Worker//
9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software
10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS,
11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and
13*333d2b36SAndroid Build Coastguard Worker// limitations under the License.
14*333d2b36SAndroid Build Coastguard Worker
15*333d2b36SAndroid Build Coastguard Workerpackage main
16*333d2b36SAndroid Build Coastguard Worker
17*333d2b36SAndroid Build Coastguard Workerimport (
18*333d2b36SAndroid Build Coastguard Worker	"io/ioutil"
19*333d2b36SAndroid Build Coastguard Worker	"os"
20*333d2b36SAndroid Build Coastguard Worker	"path/filepath"
21*333d2b36SAndroid Build Coastguard Worker	"strings"
22*333d2b36SAndroid Build Coastguard Worker	"testing"
23*333d2b36SAndroid Build Coastguard Worker)
24*333d2b36SAndroid Build Coastguard Worker
25*333d2b36SAndroid Build Coastguard Workerfunc Test_filesHaveSameContents(t *testing.T) {
26*333d2b36SAndroid Build Coastguard Worker
27*333d2b36SAndroid Build Coastguard Worker	tests := []struct {
28*333d2b36SAndroid Build Coastguard Worker		name     string
29*333d2b36SAndroid Build Coastguard Worker		a        string
30*333d2b36SAndroid Build Coastguard Worker		b        string
31*333d2b36SAndroid Build Coastguard Worker		missingA bool
32*333d2b36SAndroid Build Coastguard Worker		missingB bool
33*333d2b36SAndroid Build Coastguard Worker
34*333d2b36SAndroid Build Coastguard Worker		equal bool
35*333d2b36SAndroid Build Coastguard Worker	}{
36*333d2b36SAndroid Build Coastguard Worker		{
37*333d2b36SAndroid Build Coastguard Worker			name:  "empty",
38*333d2b36SAndroid Build Coastguard Worker			a:     "",
39*333d2b36SAndroid Build Coastguard Worker			b:     "",
40*333d2b36SAndroid Build Coastguard Worker			equal: true,
41*333d2b36SAndroid Build Coastguard Worker		},
42*333d2b36SAndroid Build Coastguard Worker		{
43*333d2b36SAndroid Build Coastguard Worker			name:  "equal",
44*333d2b36SAndroid Build Coastguard Worker			a:     "foo",
45*333d2b36SAndroid Build Coastguard Worker			b:     "foo",
46*333d2b36SAndroid Build Coastguard Worker			equal: true,
47*333d2b36SAndroid Build Coastguard Worker		},
48*333d2b36SAndroid Build Coastguard Worker		{
49*333d2b36SAndroid Build Coastguard Worker			name:  "unequal",
50*333d2b36SAndroid Build Coastguard Worker			a:     "foo",
51*333d2b36SAndroid Build Coastguard Worker			b:     "bar",
52*333d2b36SAndroid Build Coastguard Worker			equal: false,
53*333d2b36SAndroid Build Coastguard Worker		},
54*333d2b36SAndroid Build Coastguard Worker		{
55*333d2b36SAndroid Build Coastguard Worker			name:  "unequal different sizes",
56*333d2b36SAndroid Build Coastguard Worker			a:     "foo",
57*333d2b36SAndroid Build Coastguard Worker			b:     "foobar",
58*333d2b36SAndroid Build Coastguard Worker			equal: false,
59*333d2b36SAndroid Build Coastguard Worker		},
60*333d2b36SAndroid Build Coastguard Worker		{
61*333d2b36SAndroid Build Coastguard Worker			name:  "equal large",
62*333d2b36SAndroid Build Coastguard Worker			a:     strings.Repeat("a", 2*1024*1024),
63*333d2b36SAndroid Build Coastguard Worker			b:     strings.Repeat("a", 2*1024*1024),
64*333d2b36SAndroid Build Coastguard Worker			equal: true,
65*333d2b36SAndroid Build Coastguard Worker		},
66*333d2b36SAndroid Build Coastguard Worker		{
67*333d2b36SAndroid Build Coastguard Worker			name:  "equal large unaligned",
68*333d2b36SAndroid Build Coastguard Worker			a:     strings.Repeat("a", 2*1024*1024+10),
69*333d2b36SAndroid Build Coastguard Worker			b:     strings.Repeat("a", 2*1024*1024+10),
70*333d2b36SAndroid Build Coastguard Worker			equal: true,
71*333d2b36SAndroid Build Coastguard Worker		},
72*333d2b36SAndroid Build Coastguard Worker		{
73*333d2b36SAndroid Build Coastguard Worker			name:  "unequal large",
74*333d2b36SAndroid Build Coastguard Worker			a:     strings.Repeat("a", 2*1024*1024),
75*333d2b36SAndroid Build Coastguard Worker			b:     strings.Repeat("a", 2*1024*1024-1) + "b",
76*333d2b36SAndroid Build Coastguard Worker			equal: false,
77*333d2b36SAndroid Build Coastguard Worker		},
78*333d2b36SAndroid Build Coastguard Worker		{
79*333d2b36SAndroid Build Coastguard Worker			name:  "unequal large unaligned",
80*333d2b36SAndroid Build Coastguard Worker			a:     strings.Repeat("a", 2*1024*1024+10),
81*333d2b36SAndroid Build Coastguard Worker			b:     strings.Repeat("a", 2*1024*1024+9) + "b",
82*333d2b36SAndroid Build Coastguard Worker			equal: false,
83*333d2b36SAndroid Build Coastguard Worker		},
84*333d2b36SAndroid Build Coastguard Worker		{
85*333d2b36SAndroid Build Coastguard Worker			name:     "missing a",
86*333d2b36SAndroid Build Coastguard Worker			missingA: true,
87*333d2b36SAndroid Build Coastguard Worker			b:        "foo",
88*333d2b36SAndroid Build Coastguard Worker			equal:    false,
89*333d2b36SAndroid Build Coastguard Worker		},
90*333d2b36SAndroid Build Coastguard Worker		{
91*333d2b36SAndroid Build Coastguard Worker			name:     "missing b",
92*333d2b36SAndroid Build Coastguard Worker			a:        "foo",
93*333d2b36SAndroid Build Coastguard Worker			missingB: true,
94*333d2b36SAndroid Build Coastguard Worker			equal:    false,
95*333d2b36SAndroid Build Coastguard Worker		},
96*333d2b36SAndroid Build Coastguard Worker	}
97*333d2b36SAndroid Build Coastguard Worker	for _, tt := range tests {
98*333d2b36SAndroid Build Coastguard Worker		t.Run(tt.name, func(t *testing.T) {
99*333d2b36SAndroid Build Coastguard Worker			tempDir, err := os.MkdirTemp("", "testFilesHaveSameContents")
100*333d2b36SAndroid Build Coastguard Worker			if err != nil {
101*333d2b36SAndroid Build Coastguard Worker				t.Fatalf("failed to create temp dir: %s", err)
102*333d2b36SAndroid Build Coastguard Worker			}
103*333d2b36SAndroid Build Coastguard Worker			defer os.RemoveAll(tempDir)
104*333d2b36SAndroid Build Coastguard Worker
105*333d2b36SAndroid Build Coastguard Worker			fileA := filepath.Join(tempDir, "a")
106*333d2b36SAndroid Build Coastguard Worker			fileB := filepath.Join(tempDir, "b")
107*333d2b36SAndroid Build Coastguard Worker
108*333d2b36SAndroid Build Coastguard Worker			if !tt.missingA {
109*333d2b36SAndroid Build Coastguard Worker				err := ioutil.WriteFile(fileA, []byte(tt.a), 0666)
110*333d2b36SAndroid Build Coastguard Worker				if err != nil {
111*333d2b36SAndroid Build Coastguard Worker					t.Fatalf("failed to write %s: %s", fileA, err)
112*333d2b36SAndroid Build Coastguard Worker				}
113*333d2b36SAndroid Build Coastguard Worker			}
114*333d2b36SAndroid Build Coastguard Worker
115*333d2b36SAndroid Build Coastguard Worker			if !tt.missingB {
116*333d2b36SAndroid Build Coastguard Worker				err := ioutil.WriteFile(fileB, []byte(tt.b), 0666)
117*333d2b36SAndroid Build Coastguard Worker				if err != nil {
118*333d2b36SAndroid Build Coastguard Worker					t.Fatalf("failed to write %s: %s", fileB, err)
119*333d2b36SAndroid Build Coastguard Worker				}
120*333d2b36SAndroid Build Coastguard Worker			}
121*333d2b36SAndroid Build Coastguard Worker
122*333d2b36SAndroid Build Coastguard Worker			if got := filesHaveSameContents(fileA, fileB); got != tt.equal {
123*333d2b36SAndroid Build Coastguard Worker				t.Errorf("filesHaveSameContents() = %v, want %v", got, tt.equal)
124*333d2b36SAndroid Build Coastguard Worker			}
125*333d2b36SAndroid Build Coastguard Worker		})
126*333d2b36SAndroid Build Coastguard Worker	}
127*333d2b36SAndroid Build Coastguard Worker}
128