1d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath/*
2d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * Copyright (C) 2014 The Android Open Source Project
3d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath *
4d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * Licensed under the Apache License, Version 2.0 (the "License");
5d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * you may not use this file except in compliance with the License.
6d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * You may obtain a copy of the License at
7d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath *
8d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath *      http://www.apache.org/licenses/LICENSE-2.0
9d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath *
10d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * Unless required by applicable law or agreed to in writing, software
11d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * distributed under the License is distributed on an "AS IS" BASIS,
12d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * See the License for the specific language governing permissions and
14d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath * limitations under the License.
15d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath */
16d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
17d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath#include "scoped_flock.h"
18d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
19e63db27db913f1a88e2095a1ee8239b2bb9124e8Ian Rogers#include "common_runtime_test.h"
20d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
21d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamathnamespace art {
22d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
23d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamathclass ScopedFlockTest : public CommonRuntimeTest {};
24d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
25d1c606f280797be81e2592c483869a6ec836a9f3Narayan KamathTEST_F(ScopedFlockTest, TestLocking) {
26d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  ScratchFile scratch_file;
27d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  std::string error_msg;
28d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
29d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  // NOTE: Locks applied using flock(2) and fcntl(2) are oblivious
30d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  // to each other, so attempting to query locks set by flock using
31d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  // using fcntl(,F_GETLK,) will not work. see kernel doc at
32d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  // Documentation/filesystems/locks.txt.
33d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  ScopedFlock file_lock;
34d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  ASSERT_TRUE(file_lock.Init(scratch_file.GetFilename().c_str(),
35d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath                             &error_msg));
36d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
37d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath  ASSERT_FALSE(file_lock.Init("/guaranteed/not/to/exist", &error_msg));
38d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath}
39d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath
40d1c606f280797be81e2592c483869a6ec836a9f3Narayan Kamath}  // namespace art
41