mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-08 00:07:30 +09:00
Issue #439 - Remove tests from toolkit/
This commit is contained in:
parent
3210cc7d95
commit
e5bacc6f6e
2362 changed files with 95 additions and 246993 deletions
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# 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/.
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
'..',
|
||||
]
|
||||
|
||||
if CONFIG['OS_ARCH'] == 'Linux':
|
||||
UNIFIED_SOURCES += [
|
||||
'TestProfileLock.cpp',
|
||||
]
|
||||
|
||||
FINAL_LIBRARY = 'xul-gtest'
|
||||
|
|
@ -4,11 +4,6 @@
|
|||
# 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/.
|
||||
|
||||
MOCHITEST_CHROME_MANIFESTS += ['test/chrome.ini']
|
||||
|
||||
if CONFIG['ENABLE_TESTS']:
|
||||
DIRS += ['gtest']
|
||||
|
||||
XPIDL_SOURCES += [
|
||||
'nsIProfileMigrator.idl',
|
||||
'nsIProfileUnlocker.idl',
|
||||
|
|
@ -18,26 +13,15 @@ XPIDL_SOURCES += [
|
|||
|
||||
XPIDL_MODULE = 'toolkitprofile'
|
||||
|
||||
UNIFIED_SOURCES += [
|
||||
'nsProfileLock.cpp'
|
||||
]
|
||||
UNIFIED_SOURCES += ['nsProfileLock.cpp']
|
||||
|
||||
if CONFIG['OS_ARCH'] == 'WINNT':
|
||||
UNIFIED_SOURCES += [
|
||||
'ProfileUnlockerWin.cpp'
|
||||
]
|
||||
UNIFIED_SOURCES += ['ProfileUnlockerWin.cpp']
|
||||
|
||||
UNIFIED_SOURCES += [
|
||||
'nsToolkitProfileService.cpp'
|
||||
]
|
||||
UNIFIED_SOURCES += ['nsToolkitProfileService.cpp']
|
||||
|
||||
LOCAL_INCLUDES += [
|
||||
'../xre',
|
||||
]
|
||||
LOCAL_INCLUDES += ['../xre']
|
||||
|
||||
FINAL_LIBRARY = 'xul'
|
||||
|
||||
JAR_MANIFESTS += ['jar.mn']
|
||||
|
||||
with Files('**'):
|
||||
BUG_COMPONENT = ('Toolkit', 'Startup and Profile System')
|
||||
|
|
|
|||
|
|
@ -1,7 +0,0 @@
|
|||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
"extends": [
|
||||
"../../../testing/mochitest/chrome.eslintrc.js"
|
||||
]
|
||||
};
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
[DEFAULT]
|
||||
|
||||
[test_create_profile.xul]
|
||||
|
|
@ -1,134 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://global/skin"?>
|
||||
<?xml-stylesheet type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css"?>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=543854
|
||||
-->
|
||||
<window title="Mozilla Bug 543854"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<script type="application/javascript"
|
||||
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
||||
|
||||
<!-- test results are displayed in the html:body -->
|
||||
<body xmlns="http://www.w3.org/1999/xhtml">
|
||||
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=543854"
|
||||
target="_blank">Mozilla Bug 543854</a>
|
||||
</body>
|
||||
|
||||
<!-- test code goes here -->
|
||||
<script type="application/javascript">
|
||||
<![CDATA[
|
||||
|
||||
/** Test for Bug 543854 **/
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
const Cc = Components.classes;
|
||||
const Ci = Components.interfaces;
|
||||
|
||||
const ASCIIName = "myprofile";
|
||||
const UnicodeName = "\u09A0\u09BE\u0995\u09C1\u09B0"; // A Bengali name
|
||||
|
||||
var gDirService;
|
||||
var gIOService;
|
||||
var gProfileService;
|
||||
|
||||
var gDefaultLocalProfileParent;
|
||||
|
||||
gDirService = Cc["@mozilla.org/file/directory_service;1"].
|
||||
getService(Ci.nsIProperties);
|
||||
|
||||
gIOService = Cc["@mozilla.org/network/io-service;1"].
|
||||
getService(Ci.nsIIOService);
|
||||
|
||||
gProfileService = Cc["@mozilla.org/toolkit/profile-service;1"].
|
||||
getService(Ci.nsIToolkitProfileService);
|
||||
|
||||
gDefaultLocalProfileParent = gDirService.get("DefProfLRt", Ci.nsIFile);
|
||||
|
||||
createProfile(ASCIIName);
|
||||
createProfile(UnicodeName);
|
||||
SimpleTest.finish();
|
||||
|
||||
/**
|
||||
* Read the contents of an nsIFile. Throws on error.
|
||||
|
||||
* @param file an nsIFile instance.
|
||||
* @return string contents.
|
||||
*/
|
||||
function readFile(file) {
|
||||
let fstream = Cc["@mozilla.org/network/file-input-stream;1"].
|
||||
createInstance(Ci.nsIFileInputStream);
|
||||
let sstream = Cc["@mozilla.org/scriptableinputstream;1"].
|
||||
createInstance(Components.interfaces.nsIScriptableInputStream);
|
||||
|
||||
const RO = 0x01;
|
||||
const READ_OTHERS = 4;
|
||||
|
||||
fstream.init(file, RO, READ_OTHERS, 0);
|
||||
sstream.init(fstream);
|
||||
let out = sstream.read(sstream.available());
|
||||
sstream.close();
|
||||
fstream.close();
|
||||
return out;
|
||||
}
|
||||
|
||||
function checkBounds(lowerBound, value, upperBound) {
|
||||
ok(lowerBound <= value, "value " + value +
|
||||
" is above lower bound " + lowerBound);
|
||||
ok(upperBound >= value, "value " + value +
|
||||
" is within upper bound " + upperBound);
|
||||
}
|
||||
|
||||
function createProfile(profileName) {
|
||||
// Filesystem precision is lower than Date precision.
|
||||
let lowerBound = Date.now() - 1000;
|
||||
|
||||
let profile = gProfileService.createProfile(null, profileName);
|
||||
|
||||
// check that the directory was created
|
||||
isnot(profile, null, "Profile " + profileName + " created");
|
||||
|
||||
let profileDir = profile.rootDir;
|
||||
|
||||
ok(profileDir.exists(), "Profile dir created");
|
||||
ok(profileDir.isDirectory(), "Profile dir is a directory");
|
||||
|
||||
let profileDirPath = profileDir.path;
|
||||
|
||||
is(profileDirPath.substr(profileDirPath.length - profileName.length),
|
||||
profileName, "Profile dir has expected name");
|
||||
|
||||
// Ensure that our timestamp file was created.
|
||||
let jsonFile = profileDir.clone();
|
||||
jsonFile.append("times.json");
|
||||
ok(jsonFile.path, "Path is " + jsonFile.path);
|
||||
ok(jsonFile.exists(), "Times file was created");
|
||||
ok(jsonFile.isFile(), "Times file is a file");
|
||||
let json = JSON.parse(readFile(jsonFile));
|
||||
|
||||
let upperBound = Date.now() + 1000;
|
||||
|
||||
let created = json.created;
|
||||
ok(created, "created is set");
|
||||
|
||||
// Check against real clock time.
|
||||
checkBounds(lowerBound, created, upperBound);
|
||||
|
||||
// Clean up the profile before local profile test.
|
||||
profile.remove(true);
|
||||
|
||||
// Create with non-null aRootDir
|
||||
profile = gProfileService.createProfile(profileDir, profileName);
|
||||
|
||||
let localProfileDir = profile.localDir;
|
||||
ok(gDefaultLocalProfileParent.contains(localProfileDir, false),
|
||||
"Local profile dir created in DefProfLRt");
|
||||
|
||||
// Clean up the profile.
|
||||
profile.remove(true);
|
||||
}
|
||||
|
||||
]]>
|
||||
</script>
|
||||
</window>
|
||||
Loading…
Add table
Add a link
Reference in a new issue