mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-17 13:19:52 +01:00
Merge branch 'account-logging' into 'master'
Log contents of account directory for debugging See merge request briar/briar!1096
This commit is contained in:
@@ -9,7 +9,6 @@ import org.briarproject.bramble.api.account.AccountManager;
|
|||||||
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
import org.briarproject.bramble.api.crypto.CryptoComponent;
|
||||||
import org.briarproject.bramble.api.db.DatabaseConfig;
|
import org.briarproject.bramble.api.db.DatabaseConfig;
|
||||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||||
import org.briarproject.bramble.util.IoUtils;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -20,6 +19,9 @@ import javax.annotation.Nullable;
|
|||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
import static android.os.Build.VERSION.SDK_INT;
|
import static android.os.Build.VERSION.SDK_INT;
|
||||||
|
import static java.util.logging.Level.INFO;
|
||||||
|
import static org.briarproject.bramble.util.IoUtils.deleteFileOrDir;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.logFileOrDir;
|
||||||
|
|
||||||
class AndroidAccountManager extends AccountManagerImpl
|
class AndroidAccountManager extends AccountManagerImpl
|
||||||
implements AccountManager {
|
implements AccountManager {
|
||||||
@@ -41,6 +43,16 @@ class AndroidAccountManager extends AccountManagerImpl
|
|||||||
appContext = app.getApplicationContext();
|
appContext = app.getApplicationContext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean accountExists() {
|
||||||
|
boolean exists = super.accountExists();
|
||||||
|
if (!exists && LOG.isLoggable(INFO)) {
|
||||||
|
LOG.info("Account does not exist. Contents of account directory:");
|
||||||
|
logFileOrDir(LOG, INFO, getDataDir());
|
||||||
|
}
|
||||||
|
return exists;
|
||||||
|
}
|
||||||
|
|
||||||
// Locking: stateChangeLock
|
// Locking: stateChangeLock
|
||||||
@Override
|
@Override
|
||||||
@Nullable
|
@Nullable
|
||||||
@@ -74,9 +86,17 @@ class AndroidAccountManager extends AccountManagerImpl
|
|||||||
@Override
|
@Override
|
||||||
public void deleteAccount() {
|
public void deleteAccount() {
|
||||||
synchronized (stateChangeLock) {
|
synchronized (stateChangeLock) {
|
||||||
|
if (LOG.isLoggable(INFO)) {
|
||||||
|
LOG.info("Contents of account directory before deleting:");
|
||||||
|
logFileOrDir(LOG, INFO, getDataDir());
|
||||||
|
}
|
||||||
super.deleteAccount();
|
super.deleteAccount();
|
||||||
SharedPreferences defaultPrefs = getDefaultSharedPreferences();
|
SharedPreferences defaultPrefs = getDefaultSharedPreferences();
|
||||||
deleteAppData(prefs, defaultPrefs);
|
deleteAppData(prefs, defaultPrefs);
|
||||||
|
if (LOG.isLoggable(INFO)) {
|
||||||
|
LOG.info("Contents of account directory after deleting:");
|
||||||
|
logFileOrDir(LOG, INFO, getDataDir());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,7 +114,7 @@ class AndroidAccountManager extends AccountManagerImpl
|
|||||||
}
|
}
|
||||||
// Delete files, except lib and shared_prefs directories
|
// Delete files, except lib and shared_prefs directories
|
||||||
Set<File> files = new HashSet<>();
|
Set<File> files = new HashSet<>();
|
||||||
File dataDir = new File(appContext.getApplicationInfo().dataDir);
|
File dataDir = getDataDir();
|
||||||
@Nullable
|
@Nullable
|
||||||
File[] fileArray = dataDir.listFiles();
|
File[] fileArray = dataDir.listFiles();
|
||||||
if (fileArray == null) {
|
if (fileArray == null) {
|
||||||
@@ -121,13 +141,17 @@ class AndroidAccountManager extends AccountManagerImpl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
IoUtils.deleteFileOrDir(file);
|
deleteFileOrDir(file);
|
||||||
}
|
}
|
||||||
// Recreate the cache dir as some OpenGL drivers expect it to exist
|
// Recreate the cache dir as some OpenGL drivers expect it to exist
|
||||||
if (!new File(dataDir, "cache").mkdirs())
|
if (!new File(dataDir, "cache").mkdirs())
|
||||||
LOG.warning("Could not recreate cache dir");
|
LOG.warning("Could not recreate cache dir");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private File getDataDir() {
|
||||||
|
return new File(appContext.getApplicationInfo().dataDir);
|
||||||
|
}
|
||||||
|
|
||||||
private void addIfNotNull(Set<File> files, @Nullable File file) {
|
private void addIfNotNull(Set<File> files, @Nullable File file) {
|
||||||
if (file != null) files.add(file);
|
if (file != null) files.add(file);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ public class AndroidAccountManagerTest extends BrambleMockTestCase {
|
|||||||
will(returnValue(editor));
|
will(returnValue(editor));
|
||||||
oneOf(editor).commit();
|
oneOf(editor).commit();
|
||||||
will(returnValue(true));
|
will(returnValue(true));
|
||||||
oneOf(app).getApplicationInfo();
|
allowing(app).getApplicationInfo();
|
||||||
will(returnValue(applicationInfo));
|
will(returnValue(applicationInfo));
|
||||||
oneOf(app).getFilesDir();
|
oneOf(app).getFilesDir();
|
||||||
will(returnValue(filesDir));
|
will(returnValue(filesDir));
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.briarproject.bramble.util;
|
package org.briarproject.bramble.util;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
@@ -19,6 +20,7 @@ public class LogUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Logs the duration of a task.
|
* Logs the duration of a task.
|
||||||
|
*
|
||||||
* @param logger the logger to use
|
* @param logger the logger to use
|
||||||
* @param task a description of the task
|
* @param task a description of the task
|
||||||
* @param start the start time of the task, as returned by {@link #now()}
|
* @param start the start time of the task, as returned by {@link #now()}
|
||||||
@@ -33,4 +35,26 @@ public class LogUtils {
|
|||||||
public static void logException(Logger logger, Level level, Throwable t) {
|
public static void logException(Logger logger, Level level, Throwable t) {
|
||||||
if (logger.isLoggable(level)) logger.log(level, t.toString(), t);
|
if (logger.isLoggable(level)) logger.log(level, t.toString(), t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void logFileOrDir(Logger logger, Level level, File f) {
|
||||||
|
if (logger.isLoggable(level)) {
|
||||||
|
if (f.isFile()) {
|
||||||
|
logWithType(logger, level, f, "F");
|
||||||
|
} else if (f.isDirectory()) {
|
||||||
|
logWithType(logger, level, f, "D");
|
||||||
|
File[] children = f.listFiles();
|
||||||
|
if (children != null) {
|
||||||
|
for (File child : children)
|
||||||
|
logFileOrDir(logger, level, child);
|
||||||
|
}
|
||||||
|
} else if (f.exists()) {
|
||||||
|
logWithType(logger, level, f, "?");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void logWithType(Logger logger, Level level, File f,
|
||||||
|
String type) {
|
||||||
|
logger.log(level, type + " " + f.getAbsolutePath() + " " + f.length());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,9 +20,11 @@ import java.util.logging.Logger;
|
|||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import static java.util.logging.Level.INFO;
|
||||||
import static java.util.logging.Level.WARNING;
|
import static java.util.logging.Level.WARNING;
|
||||||
import static java.util.logging.Logger.getLogger;
|
import static java.util.logging.Logger.getLogger;
|
||||||
import static org.briarproject.bramble.db.JdbcUtils.tryToClose;
|
import static org.briarproject.bramble.db.JdbcUtils.tryToClose;
|
||||||
|
import static org.briarproject.bramble.util.LogUtils.logFileOrDir;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Contains all the H2-specific code for the database.
|
* Contains all the H2-specific code for the database.
|
||||||
@@ -61,8 +63,18 @@ class H2Database extends JdbcDatabase {
|
|||||||
public boolean open(SecretKey key, @Nullable MigrationListener listener)
|
public boolean open(SecretKey key, @Nullable MigrationListener listener)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
this.key = key;
|
this.key = key;
|
||||||
boolean reopen = !config.getDatabaseDirectory().mkdirs();
|
File dir = config.getDatabaseDirectory();
|
||||||
|
if (LOG.isLoggable(INFO)) {
|
||||||
|
LOG.info("Contents of account directory before opening DB:");
|
||||||
|
logFileOrDir(LOG, INFO, dir.getParentFile());
|
||||||
|
}
|
||||||
|
boolean reopen = !dir.mkdirs();
|
||||||
|
if (LOG.isLoggable(INFO)) LOG.info("Reopening DB: " + reopen);
|
||||||
super.open("org.h2.Driver", reopen, key, listener);
|
super.open("org.h2.Driver", reopen, key, listener);
|
||||||
|
if (LOG.isLoggable(INFO)) {
|
||||||
|
LOG.info("Contents of account directory after opening DB:");
|
||||||
|
logFileOrDir(LOG, INFO, dir.getParentFile());
|
||||||
|
}
|
||||||
return reopen;
|
return reopen;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user