Verified Commit 1322b17d authored by Arthur Edelstein's avatar Arthur Edelstein Committed by Pier Angelo Vendrame
Browse files

Bug 12620: TorBrowser regression tests

Regression tests for Bug #2950: Make Permissions Manager memory-only

Regression tests for TB4: Tor Browser's Firefox preference overrides.

Note: many more functional tests could be made here

Regression tests for #2874: Block Components.interfaces from content

Bug 18923: Add a script to run all Tor Browser specific tests

Regression tests for Bug #16441: Suppress "Reset Tor Browser" prompt.
parent d99546f6
Loading
Loading
Loading
Loading

run-tbb-tests

0 → 100755
+66 −0
Original line number Diff line number Diff line
#!/bin/bash

# This script runs all the Mochitest tests that have been added or
# modified since the last ffxbld commit.
#
# It does not currently run XPCShell tests. We should change this if we
# start using this type or other types of tests.
#
# The logs of the tests are stored in the tbb-tests.log file.
# Ignored tests are listed in the tbb-tests-ignore.txt file.
#
# https://trac.torproject.org/projects/tor/ticket/18923

IFS=$'\n'

if [ -n "$USE_TESTS_LIST" ] && [ -f tbb-tests-list.txt ]
then
    echo "Using tests list from file tbb-tests-list.txt"
    tests=($(cat tbb-tests-list.txt))
else
    ffxbld_commit=$(git log -500 --format='oneline' | grep "TB3: Tor Browser's official .mozconfigs." \
                                        | head -1 | cut -d ' ' -f 1)

    tests=($(git diff --name-status "$ffxbld_commit" HEAD | \
        grep -e '^[AM].*/test_[^/]\+\.\(html\|xul\)$' \
             -e '^[AM].*/browser_[^/]\+\.js$' \
             | sed 's/^[AM]\s\+//'))
fi

echo 'The following tests will be run:'
for i in "${!tests[@]}"
do
    if [ -z "$USE_TESTS_LIST" ] \
        && grep -q "^${tests[$i]}$" tbb-tests-ignore.txt
    then
        unset "tests[$i]"
        continue
    fi
    echo "- ${tests[$i]}"
done

if [ -n "$WRITE_TESTS_LIST" ]
then
    rm -f tbb-tests-list.txt
    for i in "${!tests[@]}"
    do
        echo "${tests[$i]}" >> tbb-tests-list.txt
    done
    exit 0
fi

rm -f tbb-tests.log
echo $'\n''Starting tests'
# We need `security.nocertdb = false` because of #18087. That pref is
# forced to have the same value as `browser.privatebrowsing.autostart` in
# torbutton, so we just set `browser.privatebrowsing.autostart=false` here.
./mach mochitest --log-tbpl tbb-tests.log \
    --setpref network.file.path_blacklist='' \
    --setpref extensions.torbutton.use_nontor_proxy=true \
    --setpref browser.privatebrowsing.autostart=false \
                 "${tests[@]}"

echo "*************************"
echo "*************************"
echo "Summary of failed tests:"
grep --color=never TEST-UNEXPECTED-FAIL tbb-tests.log

tbb-tests-ignore.txt

0 → 100644
+13 −0
Original line number Diff line number Diff line
browser/extensions/onboarding/test/browser/browser_onboarding_accessibility.js
browser/extensions/onboarding/test/browser/browser_onboarding_keyboard.js
browser/extensions/onboarding/test/browser/browser_onboarding_notification.js
browser/extensions/onboarding/test/browser/browser_onboarding_notification_2.js
browser/extensions/onboarding/test/browser/browser_onboarding_notification_3.js
browser/extensions/onboarding/test/browser/browser_onboarding_notification_4.js
browser/extensions/onboarding/test/browser/browser_onboarding_notification_5.js
browser/extensions/onboarding/test/browser/browser_onboarding_notification_click_auto_complete_tour.js
browser/extensions/onboarding/test/browser/browser_onboarding_select_default_tour.js
browser/extensions/onboarding/test/browser/browser_onboarding_skip_tour.js
browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js
browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js

tbb-tests/browser.ini

0 → 100644
+5 −0
Original line number Diff line number Diff line
[DEFAULT]

[browser_tor_bug2950.js]
[browser_tor_omnibox.js]
[browser_tor_TB4.js]
+35 −0
Original line number Diff line number Diff line
// # Test for TB4: Tor Browser's Firefox preference overrides
// This is a minimal test to check whether the 000-tor-browser.js
// pref overrides are being used at all or not. More comprehensive
// pref tests are maintained in the tor-browser-bundle-testsuite project.

function test() {

let expectedPrefs = [
   // Homepage
   ["browser.startup.homepage", "about:tor"],

   // Disable the "Refresh" prompt that is displayed for stale profiles.
   ["browser.disableResetPrompt", true],

   // Version placeholder
   ["torbrowser.version", "dev-build"],
  ];

let getPref = function (prefName) {
  let type = Services.prefs.getPrefType(prefName);
  if (type === Services.prefs.PREF_INT) return Services.prefs.getIntPref(prefName);
  if (type === Services.prefs.PREF_BOOL) return Services.prefs.getBoolPref(prefName);
  if (type === Services.prefs.PREF_STRING) return Services.prefs.getCharPref(prefName);
  // Something went wrong.
  throw new Error("Can't access pref " + prefName);
};

let testPref = function([key, expectedValue]) {
  let foundValue = getPref(key);
  is(foundValue, expectedValue, "Pref '" + key + "' should be '" + expectedValue +"'.");
};  

expectedPrefs.map(testPref);

} // end function test()
+74 −0
Original line number Diff line number Diff line
// # Regression tests for tor Bug #2950, Make Permissions Manager memory-only
// Ensures that permissions.sqlite file in profile directory is not written to,
// even when we write a value to Firefox's permissions database.

// The requisite test() function.
function test() {

// Needed because of asynchronous part later in the test.
waitForExplicitFinish();

// Shortcut
let Ci = Components.interfaces;

// ## utility functions

// __principal(spec)__.
// Creates a principal instance from a spec
// (string address such as "https://www.torproject.org").
let principal = spec => Services.scriptSecurityManager.createContentPrincipalFromOrigin(spec);

// __setPermission(spec, key, value)__.
// Sets the site permission of type key to value, for the site located at address spec.
let setPermission = (spec, key, value) => SitePermissions.setForPrincipal(principal(spec), key, value);

// __getPermission(spec, key)__.
// Reads the site permission value for permission type key, for the site
// located at address spec.
let getPermission = (spec, key) => SitePermissions.getForPrincipal(principal(spec), key);

// __profileDirPath__.
// The Firefox Profile directory. Expected location of various persistent files.
let profileDirPath = Services.dirsvc.get("ProfD", Components.interfaces.nsIFile).path;

// __fileInProfile(fileName)__.
// Returns an nsIFile instance corresponding to a file in the Profile directory.
let fileInProfile = fileName => FileUtils.File(profileDirPath + "/" + fileName);

// ## Now let's run the test.

let SITE = "https://www.torproject.org",
    KEY = "popup";

let permissionsFile = fileInProfile("permissions.sqlite"),
                      lastModifiedTime = null,
                      newModifiedTime = null;
if (permissionsFile.exists()) {
  lastModifiedTime = permissionsFile.lastModifiedTime;
}
// Read the original value of the permission.
let originalValue = getPermission(SITE, KEY);

// We need to delay by at least 1000 ms, because that's the granularity
// of file time stamps, it seems.
window.setTimeout(
  function () {
    // Set the permission to a new value.
    setPermission(SITE, KEY, SitePermissions.BLOCK);
    // Now read back the permission value again.
    let newReadValue = getPermission(SITE, KEY);
    // Compare to confirm that the permission
    // value was successfully changed.
    Assert.notDeepEqual(originalValue, newReadValue, "Set a value in permissions db (perhaps in memory).");
    // If file existed or now exists, get the current time stamp.
    if (permissionsFile.exists()) {
      newModifiedTime = permissionsFile.lastModifiedTime;
    }
    // If file was created or modified since we began this test,
    // then permissions db is not memory only. Complain!
    is(lastModifiedTime, newModifiedTime, "Don't write to permissions.sqlite file on disk.");
    // We are done with the test.
    finish();
  }, 1100);

} // test()
Loading