@@ -138,30 +138,34 @@ TEST(PolicyBuilderTest, WrongTypeIgnored) {
138138}
139139
140140TEST (PolicyBuilderTest, ApisWithPathValidation) {
141- const std::initializer_list<std::pair<absl::string_view, absl::StatusCode>>
142- kTestCases = {
143- {" /a" , absl::StatusCode::kOk },
144- {" /a/b/c/d" , absl::StatusCode::kOk },
145- {" /a/b/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" , absl::StatusCode::kOk },
146- {" " , absl::StatusCode::kInvalidArgument },
147- // Fails because we reject paths starting with '..'
148- {" .." , absl::StatusCode::kInvalidArgument },
149- {" ..a" , absl::StatusCode::kInvalidArgument },
150- {" ../a" , absl::StatusCode::kInvalidArgument },
151- // Fails because is not absolute
152- {" a" , absl::StatusCode::kInvalidArgument },
153- {" a/b" , absl::StatusCode::kInvalidArgument },
154- {" a/b/c" , absl::StatusCode::kInvalidArgument },
155- // Fails because '..' in path
156- {" /a/b/c/../d" , absl::StatusCode::kInvalidArgument },
157- // Fails because '.' in path
158- {" /a/b/c/./d" , absl::StatusCode::kInvalidArgument },
159- // Fails because '//' in path
160- {" /a/b/c//d" , absl::StatusCode::kInvalidArgument },
161- // Fails because path ends with '/'
162- {" /a/b/c/d/" , absl::StatusCode::kInvalidArgument },
163- };
164- for (auto const & [path, status] : kTestCases ) {
141+ // Fails because /usr is a directory, not a file.
142+ EXPECT_THAT (PolicyBuilder ().AddFile (" /usr" ).TryBuild (),
143+ StatusIs (absl::StatusCode::kInvalidArgument ));
144+ EXPECT_THAT (PolicyBuilder ().AddFileAt (" /usr" , " /input" ).TryBuild (),
145+ StatusIs (absl::StatusCode::kInvalidArgument ));
146+ // Fails because /usr/bin/find is a file, not a directory.
147+ EXPECT_THAT (PolicyBuilder ().AddDirectory (" /usr/bin/find" ).TryBuild (),
148+ StatusIs (absl::StatusCode::kInvalidArgument ));
149+ EXPECT_THAT (
150+ PolicyBuilder ().AddDirectoryAt (" /usr/bin/find" , " /input" ).TryBuild (),
151+ StatusIs (absl::StatusCode::kInvalidArgument ));
152+ const std::initializer_list<absl::string_view> kInvalidPathTestCases = {
153+ " " ,
154+ // Fails because we reject paths starting with '..'
155+ " .." , " ..a" , " ../a" ,
156+ // Fails because is not absolute
157+ " a" , " a/b" , " a/b/c" ,
158+ // Fails because '..' in path
159+ " /a/b/c/../d" ,
160+ // Fails because '.' in path
161+ " /a/b/c/./d" ,
162+ // Fails because '//' in path
163+ " /a/b/c//d" ,
164+ // Fails because path ends with '/'
165+ " /a/b/c/d/" ,
166+ };
167+ for (absl::string_view path : kInvalidPathTestCases ) {
168+ absl::StatusCode status = absl::StatusCode::kInvalidArgument ;
165169 EXPECT_THAT (PolicyBuilder ().AddFile (path).TryBuild (), StatusIs (status));
166170 EXPECT_THAT (PolicyBuilder ().AddFileAt (path, " /input" ).TryBuild (),
167171 StatusIs (status));
@@ -171,16 +175,32 @@ TEST(PolicyBuilderTest, ApisWithPathValidation) {
171175 StatusIs (status));
172176 }
173177
178+ // Succeeds because it attempts to mount a file
179+ EXPECT_THAT (PolicyBuilder ().AddFile (" /usr/bin/find" ).TryBuild (), IsOk ());
180+ EXPECT_THAT (PolicyBuilder ().AddFileAt (" /usr/bin/find" , " /input" ).TryBuild (),
181+ IsOk ());
182+
174183 // Fails because it attempts to mount to '/' inside
175184 EXPECT_THAT (PolicyBuilder ().AddFile (" /" ).TryBuild (),
176- StatusIs (absl::StatusCode::kInternal ));
185+ StatusIs (absl::StatusCode::kInvalidArgument ));
177186 EXPECT_THAT (PolicyBuilder ().AddDirectory (" /" ).TryBuild (),
178187 StatusIs (absl::StatusCode::kInternal ));
179188
180189 // Succeeds because it attempts to mount to '/' inside
181- EXPECT_THAT (PolicyBuilder ().AddFileAt (" /a" , " /input" ).TryBuild (), IsOk ());
182- EXPECT_THAT (PolicyBuilder ().AddDirectoryAt (" /a" , " /input" ).TryBuild (),
190+ EXPECT_THAT (PolicyBuilder ().AddDirectoryAt (" /usr" , " /input" ).TryBuild (),
191+ IsOk ());
192+ }
193+
194+ TEST (PolicyBuilderTest, AddIfExists) {
195+ EXPECT_THAT (PolicyBuilder ().AddFile (" /nonexistent_file" ).TryBuild (),
196+ StatusIs (absl::StatusCode::kInvalidArgument ));
197+ EXPECT_THAT (PolicyBuilder ().AddFileIfExists (" /nonexistent_file" ).TryBuild (),
183198 IsOk ());
199+ EXPECT_THAT (PolicyBuilder ().AddDirectory (" /nonexistent_dir" ).TryBuild (),
200+ StatusIs (absl::StatusCode::kInvalidArgument ));
201+ EXPECT_THAT (
202+ PolicyBuilder ().AddDirectoryIfExists (" /nonexistent_dir" ).TryBuild (),
203+ IsOk ());
184204}
185205
186206TEST (PolicyBuilderTest, TestAnchorPathAbsolute) {
0 commit comments