/*
* Copyright (C) 2009 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package android.content;
import android.net.Uri;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.test.suitebuilder.annotation.SmallTest;
import java.io.InputStream;
import java.util.Arrays;
/**
* Tests reading a MemoryFile-based AssestFile from a ContentProvider running
* in a different process.
*/
public class MemoryFileProviderTest extends AndroidTestCase {
// reads from a cross-process AssetFileDescriptor for a MemoryFile
@MediumTest
public void testRead() throws Exception {
ContentResolver resolver = getContext().getContentResolver();
Uri uri = Uri.parse("content://android.content.MemoryFileProvider/data/1/blob");
byte[] buf = new byte[MemoryFileProvider.TEST_BLOB.length];
InputStream in = resolver.openInputStream(uri);
assertNotNull(in);
int count = in.read(buf);
assertEquals(buf.length, count);
assertEquals(-1, in.read());
in.close();
assertTrue(Arrays.equals(MemoryFileProvider.TEST_BLOB, buf));
}
// tests that we don't leak file descriptors or virtual address space
@LargeTest
public void testClose() throws Exception {
ContentResolver resolver = getContext().getContentResolver();
// open enough file descriptors that we will crash something if we leak FDs
// or address space
for (int i = 0; i < 1025; i++) {
Uri uri = Uri.parse("content://android.content.MemoryFileProvider/huge");
InputStream in = resolver.openInputStream(uri);
assertNotNull("Failed to open stream number " + i, in);
byte[] buf = new byte[MemoryFileProvider.TEST_BLOB.length];
int count = in.read(buf);
assertEquals(buf.length, count);
assertTrue(Arrays.equals(MemoryFileProvider.TEST_BLOB, buf));
in.close();
}
}
// tests that we haven't broken AssestFileDescriptors for normal files.
@SmallTest
public void testFile() throws Exception {
ContentResolver resolver = getContext().getContentResolver();
Uri uri = Uri.parse("content://android.content.MemoryFileProvider/file");
byte[] buf = new byte[MemoryFileProvider.TEST_BLOB.length];
InputStream in = resolver.openInputStream(uri);
assertNotNull(in);
int count = in.read(buf);
assertEquals(buf.length, count);
assertEquals(-1, in.read());
in.close();
assertTrue(Arrays.equals(MemoryFileProvider.TEST_BLOB, buf));
}
}