Search in sources :

Example 31 with BackupDataInput

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

the class BackupDataTest method testDelete.

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

Example 32 with BackupDataInput

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

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 33 with BackupDataInput

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

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 34 with BackupDataInput

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

the class BackupDataTest method testReadRealData.

public void testReadRealData() throws IOException {
    copyAssetToFile("backup_real.dat", "backup_read_real_test.dat");
    openForReading();
    BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
    BufferedReader truth = new BufferedReader(new InputStreamReader(mAssets.openFd("backup_real.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 35 with BackupDataInput

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

the class BackupDataTest method testSingle.

public void testSingle() throws IOException {
    mFile = new File(mDirectory, "backup_mixed_sinlge.dat");
    openForWriting();
    BackupDataOutput bdo = new BackupDataOutput(mDataFile.getFileDescriptor());
    writeEntity(bdo, KEY1, DATA1.getBytes());
    mDataFile.close();
    openForReading();
    BackupDataInput bdi = new BackupDataInput(mDataFile.getFileDescriptor());
    int count = 0;
    while (bdi.readNextHeader()) {
        readAndVerifyEntity(bdi, KEY1, DATA1.getBytes());
        count++;
    }
    assertEquals("only one entity in this stream", 1, count);
}
Also used : BackupDataInput(android.app.backup.BackupDataInput) File(java.io.File) BackupDataOutput(android.app.backup.BackupDataOutput)

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