Prueba de Android fuera del espacio de almacenamiento
Escribí una aplicación para Android que (entre otras cosas) escribe archivos en el disco . Ahora me pregunto qué va a pasar cuando el sistema de archivos se queda sin espacio de almacenamiento . Supongo que, por ejemplo, java.io.FileOutputStream.write()
lanzará una IOException
que tendré que capturar.
La cosa es, no quiero confiar en mis poderes estupendos del ninja – podría haber olvidado poner un try-catch en alguna parte o no manejarlo correctamente. Por lo tanto , quiero probar este escenario .
- Prueba de una biblioteca de Android con Robolectric
- Android en las pruebas de suscripción de aplicaciones
- ¿Cómo puedo comprobar en Robotium que la aplicación ha terminado?
- ¿Cómo forzar un cambio de orientación en una prueba de instrumentación de Android?
- Robolectric + rxJava + retrofit Segunda llamada lanza java.io.InterruptedIOException
Lamentablemente no pude encontrar ninguna palabra acerca de una buena práctica al hacerlo – ni siquiera en SO.
Por supuesto que frío manualmente cosas el sistema de archivos con algo como esto, supongo:
size = N dir = /some/path data = generateDataForSize(size) while( write(data, dir) ); while( round(size/=2) > 1 ) write(generateDataForSize(size), dir)
Donde write()
generará archivos distintos o agregará a uno solo. Puede haber algunos problemas con generateDataForSize()
y tamaños grandes, pero vamos a dejar de lado por ahora.
Lo que me está picazón es que voy a tener que poner esto en algún lugar de mi aplicación, además tendré que limpiar ese $% #! Manualmente. Bueno, si lo pongo dentro de su propio directorio puedo descartar todo el asunto con una sola línea en el shell de adb.
De todos modos, ¿hay alguna manera más fácil de ir por esto que me falta? ¿Ofrece Android alguna mecánica para esto como limitar temporalmente el espacio de almacenamiento disponible por aplicación? ¿Cualquier solución integrada para las pruebas unitarias o las herramientas sdk de android? ¿Cómo hacen otras personas (usted) hacer esto?
TL; DR : Cómo rellenar eficientemente el fs para probar el caso de escribir a fs cuando está lleno.
Editar: Estoy probando en un dispositivo real que no está enraizado. El emulador es mortalmente lento incluso con HAXM en funcionamiento. El uso del emulador no es, por desgracia, una opción.
Tasos Moustakas sugerencia con la limitación del espacio disponible para AVDs es grande, sin embargo. Supongo que si evitas los problemas con android:installLocation="preferExternal"
y mover tu aplicación a los archivos sd / write a la sd limitada esta es una solución aceptable.
La respuesta aceptada es más o menos lo que acabé haciendo. Pero eso todavía requiere algún trabajo manual así que siéntase libre de publicar más respuestas.
- Prueba de suscripción en Android: elemento no encontrado
- ¿Hay un comando ADB para habilitar / deshabilitar datos móviles? (Dispositivo enraizado)
- Escribir / crear archivos dentro del contexto de la instrumentación de Android
- Prueba de unidad automatizada para Android / Ant
- Prueba de instrumentación para Android - ¿Cómo recibir nueva actividad después del cambio de orientación?
- ApplicationTestCase obsoleto en el nivel 24 de API
- Saltar prueba para la variante de construcción específica en Android + Gradle?
- ¿Cómo puedo ejecutar el código en el hilo de la interfaz de usuario en una prueba de Android JUnit sin una actividad?
Android se ejecuta en linux, por lo que puede ir a la shell y utilizar el comando dd
para llenar el disco. Conecta tu dispositivo por USB y escribe adb shell
, luego
dd if=/dev/zero of=/sdcard/deleteme bs=1m count=1024
Escriba un archivo de 1 GB llamado deleteme
a la /sdcard
, lleno de ceros.
-
if=
es el archivo de entrada -
/dev/zero
simplemente devuelve ceros interminables. -
of=
es el archivo de salida -
bs=
es el tamaño del bloque, aquí un megabyte; Algunas implementaciones prefieren1M
lugar. -
count=
es el número de bloques a escribir, aquí 1024, lo que hace que un archivo de 1GB.
Ajuste los tamaños según sus necesidades, o escriba varios archivos. Prepárese para que Android comience a quejarse del bajo espacio en disco una vez que alcance alrededor de 400 MB de espacio disponible. En mi experiencia, Android comienza a quejarme de poco espacio en disco mucho antes de que las aplicaciones comiencen a fallar.
Si prueba su aplicación en un emulador AVD, simplemente puede configurar el espacio disponible en el emulador. Consulte la documentación . Déjeme saber si esa solución funciona para usted. Este es su tutorial sobre cómo utilizar AVD para Google Play Services.
Si el programa que se está ejecutando sólo está haciendo llamadas al sistema POSIX puede utilizar libfiu para realizar la inyección de fallos y cosas como escribir llamadas devolver ENOSPC para simular disco lleno.
Otro truco es utilizar un sistema de archivos FUSE como charybdefs que le permite inyectar fallos a nivel de sistema de archivos.
- Android Loading Selector de números personalizado Drawable
- Eclipse JUNO + ADT 23.0.2 Recursos $ NotFoundException