blob: 7bfd75039f70b4b5da4ce8be551c1765d5de9ba1 [file] [log] [blame]
Spandan Dasa3639e62021-05-25 19:14:02 +00001// Copyright 2021 Google Inc. All rights reserved.
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package build
16
17import (
18 "os"
19 "testing"
20)
21
22func TestMain(m *testing.M) {
23 // set src dir of sandbox
24 sandboxConfig.srcDir = "/my/src/dir"
25 os.Exit(m.Run())
26}
27
28func TestMountFlagsSrcDir(t *testing.T) {
29 testCases := []struct {
30 srcDirIsRO bool
31 expectedSrcDirFlag string
32 }{
33 {
34 srcDirIsRO: false,
35 expectedSrcDirFlag: "-B",
36 },
37 {
38 srcDirIsRO: true,
39 expectedSrcDirFlag: "-R",
40 },
41 }
42 for _, testCase := range testCases {
43 c := testCmd()
44 c.config.sandboxConfig.SetSrcDirIsRO(testCase.srcDirIsRO)
45 c.wrapSandbox()
46 if !isExpectedMountFlag(c.Args, sandboxConfig.srcDir, testCase.expectedSrcDirFlag) {
47 t.Error("Mount flag of srcDir is not correct")
48 }
49 }
50}
51
52func TestMountFlagsSrcDirRWAllowlist(t *testing.T) {
53 testCases := []struct {
54 srcDirRWAllowlist []string
55 }{
56 {
57 srcDirRWAllowlist: []string{},
58 },
59 {
60 srcDirRWAllowlist: []string{"my/path"},
61 },
62 {
63 srcDirRWAllowlist: []string{"my/path1", "my/path2"},
64 },
65 }
66 for _, testCase := range testCases {
67 c := testCmd()
68 c.config.sandboxConfig.SetSrcDirIsRO(true)
69 c.config.sandboxConfig.SetSrcDirRWAllowlist(testCase.srcDirRWAllowlist)
70 c.wrapSandbox()
71 for _, allowlistPath := range testCase.srcDirRWAllowlist {
72 if !isExpectedMountFlag(c.Args, allowlistPath, "-B") {
73 t.Error("Mount flag of srcDirRWAllowlist is not correct, expect -B")
74 }
75 }
76 }
77}
78
79// utils for setting up test
80func testConfig() Config {
81 // create a minimal testConfig
82 env := Environment([]string{})
83 sandboxConfig := SandboxConfig{}
84 return Config{&configImpl{environ: &env,
85 sandboxConfig: &sandboxConfig}}
86}
87
88func testCmd() *Cmd {
89 return Command(testContext(), testConfig(), "sandbox_test", "path/to/nsjail")
90}
91
92func isExpectedMountFlag(cmdArgs []string, dirName string, expectedFlag string) bool {
93 indexOfSrcDir := index(cmdArgs, dirName)
94 return cmdArgs[indexOfSrcDir-1] == expectedFlag
95}
96
97func index(arr []string, target string) int {
98 for idx, element := range arr {
99 if element == target {
100 return idx
101 }
102 }
103 panic("element could not be located in input array")
104}