Search in sources :

Example 11 with BackupDataInput

use of android.app.backup.BackupDataInput in project android_frameworks_base by DirtyUnicorns.

the class BackupDataTest method testMultiple.

public void testMultiple() throws IOException {
    mFile = new File(mDirectory, "backup_multiple_test.dat");
    openForWriting();
    BackupDataOutput bdo = new BackupDataOutput(mDataFile.getFileDescriptor());
    for (int i = 0; i < KEYS.length; i++) {
        writeEntity(bdo, KEYS[i], DATA[i].getBytes());
    }
    mDataFile.close();
    openForReading();
    BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
    int count = 0;
    while (bdi.readNextHeader()) {
        readAndVerifyEntity(bdi, KEYS[count], DATA[count].getBytes());
        count++;
    }
    assertEquals("four entities in this stream", KEYS.length, count);
}
Also used : BackupDataInput(android.app.backup.BackupDataInput) File(java.io.File) BackupDataOutput(android.app.backup.BackupDataOutput)

Example 12 with BackupDataInput

use of android.app.backup.BackupDataInput in project android_frameworks_base by DirtyUnicorns.

the class BackupDataTest method testReadMockData.

public void testReadMockData() throws IOException {
    copyAssetToFile("backup_mock.dat", "backup_read_mock_test.dat");
    openForReading();
    BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
    BufferedReader truth = new BufferedReader(new InputStreamReader(mAssets.openFd("backup_mock.gld").createInputStream()));
    while (bdi.readNextHeader()) {
        String[] expected = truth.readLine().split(":");
        byte[] expectedBytes = null;
        if (expected.length > 1) {
            expectedBytes = Base64.decode(expected[1], Base64.DEFAULT);
        }
        String key = bdi.getKey();
        int dataSize = bdi.getDataSize();
        assertEquals("wrong key", expected[0], key);
        assertEquals("wrong length for key " + key, (expectedBytes == null ? -1 : expectedBytes.length), dataSize);
        if (dataSize != -1) {
            byte[] buffer = new byte[dataSize];
            bdi.readEntityData(buffer, 0, dataSize);
            assertEquals("wrong data for key " + key, expected[1], Base64.encodeToString(buffer, 0, dataSize, Base64.NO_WRAP));
        }
    }
    assertNull("there are unused entries in the golden file", truth.readLine());
}
Also used : BackupDataInput(android.app.backup.BackupDataInput) InputStreamReader(java.io.InputStreamReader) BufferedReader(java.io.BufferedReader)

Example 13 with BackupDataInput

use of android.app.backup.BackupDataInput in project android_frameworks_base by DirtyUnicorns.

the class LocalTransport method performBackup.

@Override
public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) {
    if (DEBUG) {
        try {
            StructStat ss = Os.fstat(data.getFileDescriptor());
            Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName + " size=" + ss.st_size);
        } catch (ErrnoException e) {
            Log.w(TAG, "Unable to stat input file in performBackup() on " + packageInfo.packageName);
        }
    }
    File packageDir = new File(mCurrentSetIncrementalDir, packageInfo.packageName);
    packageDir.mkdirs();
    // Each 'record' in the restore set is kept in its own file, named by
    // the record key.  Wind through the data file, extracting individual
    // record operations and building a set of all the updates to apply
    // in this update.
    BackupDataInput changeSet = new BackupDataInput(data.getFileDescriptor());
    try {
        int bufSize = 512;
        byte[] buf = new byte[bufSize];
        while (changeSet.readNextHeader()) {
            String key = changeSet.getKey();
            String base64Key = new String(Base64.encode(key.getBytes()));
            File entityFile = new File(packageDir, base64Key);
            int dataSize = changeSet.getDataSize();
            if (DEBUG)
                Log.v(TAG, "Got change set key=" + key + " size=" + dataSize + " key64=" + base64Key);
            if (dataSize >= 0) {
                if (entityFile.exists()) {
                    entityFile.delete();
                }
                FileOutputStream entity = new FileOutputStream(entityFile);
                if (dataSize > bufSize) {
                    bufSize = dataSize;
                    buf = new byte[bufSize];
                }
                changeSet.readEntityData(buf, 0, dataSize);
                if (DEBUG) {
                    try {
                        long cur = Os.lseek(data.getFileDescriptor(), 0, SEEK_CUR);
                        Log.v(TAG, "  read entity data; new pos=" + cur);
                    } catch (ErrnoException e) {
                        Log.w(TAG, "Unable to stat input file in performBackup() on " + packageInfo.packageName);
                    }
                }
                try {
                    entity.write(buf, 0, dataSize);
                } catch (IOException e) {
                    Log.e(TAG, "Unable to update key file " + entityFile.getAbsolutePath());
                    return TRANSPORT_ERROR;
                } finally {
                    entity.close();
                }
            } else {
                entityFile.delete();
            }
        }
        return TRANSPORT_OK;
    } catch (IOException e) {
        // oops, something went wrong.  abort the operation and return error.
        Log.v(TAG, "Exception reading backup input:", e);
        return TRANSPORT_ERROR;
    }
}
Also used : BackupDataInput(android.app.backup.BackupDataInput) StructStat(android.system.StructStat) ErrnoException(android.system.ErrnoException) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) File(java.io.File)

Example 14 with BackupDataInput

use of android.app.backup.BackupDataInput in project android_frameworks_base by ParanoidAndroid.

the class LocalTransport method performBackup.

public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) {
    if (DEBUG)
        Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName);
    File packageDir = new File(mDataDir, packageInfo.packageName);
    packageDir.mkdirs();
    // Each 'record' in the restore set is kept in its own file, named by
    // the record key.  Wind through the data file, extracting individual
    // record operations and building a set of all the updates to apply
    // in this update.
    BackupDataInput changeSet = new BackupDataInput(data.getFileDescriptor());
    try {
        int bufSize = 512;
        byte[] buf = new byte[bufSize];
        while (changeSet.readNextHeader()) {
            String key = changeSet.getKey();
            String base64Key = new String(Base64.encode(key.getBytes()));
            File entityFile = new File(packageDir, base64Key);
            int dataSize = changeSet.getDataSize();
            if (DEBUG)
                Log.v(TAG, "Got change set key=" + key + " size=" + dataSize + " key64=" + base64Key);
            if (dataSize >= 0) {
                if (entityFile.exists()) {
                    entityFile.delete();
                }
                FileOutputStream entity = new FileOutputStream(entityFile);
                if (dataSize > bufSize) {
                    bufSize = dataSize;
                    buf = new byte[bufSize];
                }
                changeSet.readEntityData(buf, 0, dataSize);
                if (DEBUG)
                    Log.v(TAG, "  data size " + dataSize);
                try {
                    entity.write(buf, 0, dataSize);
                } catch (IOException e) {
                    Log.e(TAG, "Unable to update key file " + entityFile.getAbsolutePath());
                    return BackupConstants.TRANSPORT_ERROR;
                } finally {
                    entity.close();
                }
            } else {
                entityFile.delete();
            }
        }
        return BackupConstants.TRANSPORT_OK;
    } catch (IOException e) {
        // oops, something went wrong.  abort the operation and return error.
        Log.v(TAG, "Exception reading backup input:", e);
        return BackupConstants.TRANSPORT_ERROR;
    }
}
Also used : BackupDataInput(android.app.backup.BackupDataInput) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) File(java.io.File)

Example 15 with BackupDataInput

use of android.app.backup.BackupDataInput in project android_frameworks_base by AOSPA.

the class LocalTransport method performBackup.

@Override
public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) {
    if (DEBUG) {
        try {
            StructStat ss = Os.fstat(data.getFileDescriptor());
            Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName + " size=" + ss.st_size);
        } catch (ErrnoException e) {
            Log.w(TAG, "Unable to stat input file in performBackup() on " + packageInfo.packageName);
        }
    }
    File packageDir = new File(mCurrentSetIncrementalDir, packageInfo.packageName);
    packageDir.mkdirs();
    // Each 'record' in the restore set is kept in its own file, named by
    // the record key.  Wind through the data file, extracting individual
    // record operations and building a set of all the updates to apply
    // in this update.
    BackupDataInput changeSet = new BackupDataInput(data.getFileDescriptor());
    try {
        int bufSize = 512;
        byte[] buf = new byte[bufSize];
        while (changeSet.readNextHeader()) {
            String key = changeSet.getKey();
            String base64Key = new String(Base64.encode(key.getBytes()));
            File entityFile = new File(packageDir, base64Key);
            int dataSize = changeSet.getDataSize();
            if (DEBUG)
                Log.v(TAG, "Got change set key=" + key + " size=" + dataSize + " key64=" + base64Key);
            if (dataSize >= 0) {
                if (entityFile.exists()) {
                    entityFile.delete();
                }
                FileOutputStream entity = new FileOutputStream(entityFile);
                if (dataSize > bufSize) {
                    bufSize = dataSize;
                    buf = new byte[bufSize];
                }
                changeSet.readEntityData(buf, 0, dataSize);
                if (DEBUG) {
                    try {
                        long cur = Os.lseek(data.getFileDescriptor(), 0, SEEK_CUR);
                        Log.v(TAG, "  read entity data; new pos=" + cur);
                    } catch (ErrnoException e) {
                        Log.w(TAG, "Unable to stat input file in performBackup() on " + packageInfo.packageName);
                    }
                }
                try {
                    entity.write(buf, 0, dataSize);
                } catch (IOException e) {
                    Log.e(TAG, "Unable to update key file " + entityFile.getAbsolutePath());
                    return TRANSPORT_ERROR;
                } finally {
                    entity.close();
                }
            } else {
                entityFile.delete();
            }
        }
        return TRANSPORT_OK;
    } catch (IOException e) {
        // oops, something went wrong.  abort the operation and return error.
        Log.v(TAG, "Exception reading backup input:", e);
        return TRANSPORT_ERROR;
    }
}
Also used : BackupDataInput(android.app.backup.BackupDataInput) StructStat(android.system.StructStat) ErrnoException(android.system.ErrnoException) FileOutputStream(java.io.FileOutputStream) IOException(java.io.IOException) File(java.io.File)

Aggregations

BackupDataInput (android.app.backup.BackupDataInput)37 File (java.io.File)27 BackupDataOutput (android.app.backup.BackupDataOutput)20 BufferedReader (java.io.BufferedReader)10 InputStreamReader (java.io.InputStreamReader)10 FileOutputStream (java.io.FileOutputStream)7 IOException (java.io.IOException)7 ErrnoException (android.system.ErrnoException)5 StructStat (android.system.StructStat)5