diff options
author | Matt A. Tobin <email@mattatobin.com> | 2020-02-25 15:07:00 -0500 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2020-04-14 12:55:19 +0200 |
commit | eb70e6e3d0bff11c25f14b1196025791bf2308fb (patch) | |
tree | 5ef4ce17db83c74d7b05ec12c8f59e095a6dd5bd /toolkit/profile/gtest/TestProfileLock.cpp | |
parent | 32ead795290b3399d56b4708fc75b77d296f6a1a (diff) | |
download | UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar.gz UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar.lz UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.tar.xz UXP-eb70e6e3d0bff11c25f14b1196025791bf2308fb.zip |
Issue #439 - Remove tests from toolkit/
Diffstat (limited to 'toolkit/profile/gtest/TestProfileLock.cpp')
-rw-r--r-- | toolkit/profile/gtest/TestProfileLock.cpp | 116 |
1 files changed, 0 insertions, 116 deletions
diff --git a/toolkit/profile/gtest/TestProfileLock.cpp b/toolkit/profile/gtest/TestProfileLock.cpp deleted file mode 100644 index ac5117d74..000000000 --- a/toolkit/profile/gtest/TestProfileLock.cpp +++ /dev/null @@ -1,116 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "gtest/gtest.h" - -#include <sys/eventfd.h> -#include <sched.h> - -#include "nsCOMPtr.h" -#include "nsIFile.h" -#include "nsProfileLock.h" -#include "nsString.h" - -static void CleanParentLock(const char *tmpdir) -{ - // nsProfileLock doesn't clean up all its files - char permanent_lockfile[] = "/.parentlock"; - - char * parentlock_name; - size_t parentlock_name_size = strlen(tmpdir) + strlen(permanent_lockfile) + 1; - parentlock_name = (char*)malloc(parentlock_name_size); - - strcpy(parentlock_name, tmpdir); - strcat(parentlock_name, permanent_lockfile); - - EXPECT_EQ(0, unlink(parentlock_name)); - EXPECT_EQ(0, rmdir(tmpdir)); - free(parentlock_name); -} - -TEST(ProfileLock, BasicLock) -{ - char templ[] = "/tmp/profilelocktest.XXXXXX"; - char * tmpdir = mkdtemp(templ); - ASSERT_NE(tmpdir, nullptr); - - // This scope exits so the nsProfileLock destructor - // can clean up the files it leaves in tmpdir. - { - nsProfileLock myLock; - nsresult rv; - nsCOMPtr<nsIFile> dir(do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv)); - ASSERT_EQ(NS_SUCCEEDED(rv), true); - - rv = dir->InitWithNativePath(nsCString(tmpdir)); - ASSERT_EQ(NS_SUCCEEDED(rv), true); - - rv = myLock.Lock(dir, nullptr); - EXPECT_EQ(NS_SUCCEEDED(rv), true); - } - - CleanParentLock(tmpdir); -} - -TEST(ProfileLock, RetryLock) -{ - char templ[] = "/tmp/profilelocktest.XXXXXX"; - char * tmpdir = mkdtemp(templ); - ASSERT_NE(tmpdir, nullptr); - - { - nsProfileLock myLock; - nsProfileLock myLock2; - nsresult rv; - nsCOMPtr<nsIFile> dir(do_CreateInstance(NS_LOCAL_FILE_CONTRACTID, &rv)); - ASSERT_EQ(NS_SUCCEEDED(rv), true); - - rv = dir->InitWithNativePath(nsCString(tmpdir)); - ASSERT_EQ(NS_SUCCEEDED(rv), true); - - int eventfd_fd = eventfd(0, 0); - ASSERT_GE(eventfd_fd, 0); - - // fcntl advisory locks are per process, so it's hard - // to avoid using fork here. - pid_t childpid = fork(); - - if (childpid) { - // parent - - // blocking read causing us to lose the race - eventfd_t value; - EXPECT_EQ(0, eventfd_read(eventfd_fd, &value)); - - rv = myLock2.Lock(dir, nullptr); - EXPECT_EQ(NS_ERROR_FILE_ACCESS_DENIED, rv); - - // kill the child - EXPECT_EQ(0, kill(childpid, SIGTERM)); - - // reap zombie (required to collect the lock) - int status; - EXPECT_EQ(childpid, waitpid(childpid, &status, 0)); - - rv = myLock2.Lock(dir, nullptr); - EXPECT_EQ(NS_SUCCEEDED(rv), true); - } else { - // child - rv = myLock.Lock(dir, nullptr); - ASSERT_EQ(NS_SUCCEEDED(rv), true); - - // unblock parent - EXPECT_EQ(0, eventfd_write(eventfd_fd, 1)); - - // parent will kill us - for (;;) - sleep(1); - } - - close(eventfd_fd); - } - - CleanParentLock(tmpdir); -} |