mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-12 02:39:05 +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.db.DatabaseConfig;
|
||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||
import org.briarproject.bramble.util.IoUtils;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.HashSet;
|
||||
@@ -20,6 +19,9 @@ import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
|
||||
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
|
||||
implements AccountManager {
|
||||
@@ -41,6 +43,16 @@ class AndroidAccountManager extends AccountManagerImpl
|
||||
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
|
||||
@Override
|
||||
@Nullable
|
||||
@@ -74,9 +86,17 @@ class AndroidAccountManager extends AccountManagerImpl
|
||||
@Override
|
||||
public void deleteAccount() {
|
||||
synchronized (stateChangeLock) {
|
||||
if (LOG.isLoggable(INFO)) {
|
||||
LOG.info("Contents of account directory before deleting:");
|
||||
logFileOrDir(LOG, INFO, getDataDir());
|
||||
}
|
||||
super.deleteAccount();
|
||||
SharedPreferences defaultPrefs = getDefaultSharedPreferences();
|
||||
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
|
||||
Set<File> files = new HashSet<>();
|
||||
File dataDir = new File(appContext.getApplicationInfo().dataDir);
|
||||
File dataDir = getDataDir();
|
||||
@Nullable
|
||||
File[] fileArray = dataDir.listFiles();
|
||||
if (fileArray == null) {
|
||||
@@ -121,13 +141,17 @@ class AndroidAccountManager extends AccountManagerImpl
|
||||
}
|
||||
}
|
||||
for (File file : files) {
|
||||
IoUtils.deleteFileOrDir(file);
|
||||
deleteFileOrDir(file);
|
||||
}
|
||||
// Recreate the cache dir as some OpenGL drivers expect it to exist
|
||||
if (!new File(dataDir, "cache").mkdirs())
|
||||
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) {
|
||||
if (file != null) files.add(file);
|
||||
}
|
||||
|
||||
@@ -128,7 +128,7 @@ public class AndroidAccountManagerTest extends BrambleMockTestCase {
|
||||
will(returnValue(editor));
|
||||
oneOf(editor).commit();
|
||||
will(returnValue(true));
|
||||
oneOf(app).getApplicationInfo();
|
||||
allowing(app).getApplicationInfo();
|
||||
will(returnValue(applicationInfo));
|
||||
oneOf(app).getFilesDir();
|
||||
will(returnValue(filesDir));
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package org.briarproject.bramble.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@@ -19,6 +20,7 @@ public class LogUtils {
|
||||
|
||||
/**
|
||||
* Logs the duration of a task.
|
||||
*
|
||||
* @param logger the logger to use
|
||||
* @param task a description of the task
|
||||
* @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) {
|
||||
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.inject.Inject;
|
||||
|
||||
import static java.util.logging.Level.INFO;
|
||||
import static java.util.logging.Level.WARNING;
|
||||
import static java.util.logging.Logger.getLogger;
|
||||
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.
|
||||
@@ -61,8 +63,18 @@ class H2Database extends JdbcDatabase {
|
||||
public boolean open(SecretKey key, @Nullable MigrationListener listener)
|
||||
throws DbException {
|
||||
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);
|
||||
if (LOG.isLoggable(INFO)) {
|
||||
LOG.info("Contents of account directory after opening DB:");
|
||||
logFileOrDir(LOG, INFO, dir.getParentFile());
|
||||
}
|
||||
return reopen;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user