DropBoxTest.java revision f18a01c77e78209b74e34d05cfb352fa4a92db5f
1/* 2 * Copyright (C) 2009 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.unit_tests; 18 19import android.content.BroadcastReceiver; 20import android.content.Context; 21import android.content.Intent; 22import android.os.DropBoxManager; 23import android.os.ParcelFileDescriptor; 24import android.os.ServiceManager; 25import android.os.StatFs; 26import android.provider.Settings; 27import android.test.AndroidTestCase; 28 29import com.android.server.DropBoxManagerService; 30 31import java.io.File; 32import java.io.FileOutputStream; 33import java.io.FileWriter; 34import java.io.InputStream; 35import java.util.Random; 36import java.util.zip.GZIPOutputStream; 37 38/** Test {@link DropBoxManager} functionality. */ 39public class DropBoxTest extends AndroidTestCase { 40 public void tearDown() throws Exception { 41 Intent override = new Intent(Settings.Gservices.OVERRIDE_ACTION); 42 override.putExtra(Settings.Gservices.DROPBOX_AGE_SECONDS, ""); 43 override.putExtra(Settings.Gservices.DROPBOX_QUOTA_KB, ""); 44 override.putExtra(Settings.Gservices.DROPBOX_TAG_PREFIX + "DropBoxTest", ""); 45 waitForBroadcast(override); 46 } 47 48 public void testAddText() throws Exception { 49 DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 50 Context.DROPBOX_SERVICE); 51 long before = System.currentTimeMillis(); 52 Thread.sleep(5); 53 dropbox.addText("DropBoxTest", "TEST0"); 54 Thread.sleep(5); 55 long between = System.currentTimeMillis(); 56 Thread.sleep(5); 57 dropbox.addText("DropBoxTest", "TEST1"); 58 dropbox.addText("DropBoxTest", "TEST2"); 59 Thread.sleep(5); 60 long after = System.currentTimeMillis(); 61 62 DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 63 DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 64 DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 65 assertTrue(null == dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis())); 66 67 assertTrue(e0.getTimeMillis() > before); 68 assertTrue(e0.getTimeMillis() < between); 69 assertTrue(e1.getTimeMillis() > between); 70 assertTrue(e1.getTimeMillis() < e2.getTimeMillis()); 71 assertTrue(e2.getTimeMillis() < after); 72 73 assertEquals("TEST0", e0.getText(80)); 74 assertEquals("TEST1", e1.getText(80)); 75 assertEquals("TES", e2.getText(3)); 76 77 e0.close(); 78 e1.close(); 79 e2.close(); 80 } 81 82 public void testAddData() throws Exception { 83 DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 84 Context.DROPBOX_SERVICE); 85 long before = System.currentTimeMillis(); 86 dropbox.addData("DropBoxTest", "TEST".getBytes(), 0); 87 long after = System.currentTimeMillis(); 88 89 DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", before); 90 assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 91 92 assertEquals("DropBoxTest", e.getTag()); 93 assertTrue(e.getTimeMillis() >= before); 94 assertEquals(0, e.getFlags()); 95 assertTrue(null == e.getText(80)); 96 97 byte[] buf = new byte[80]; 98 assertEquals("TEST", new String(buf, 0, e.getInputStream().read(buf))); 99 100 e.close(); 101 } 102 103 public void testAddFile() throws Exception { 104 File dir = getEmptyDir("testAddFile"); 105 long before = System.currentTimeMillis(); 106 107 File f0 = new File(dir, "f0.txt"); 108 File f1 = new File(dir, "f1.txt.gz"); 109 File f2 = new File(dir, "f2.dat"); 110 File f3 = new File(dir, "f2.dat.gz"); 111 112 FileWriter w0 = new FileWriter(f0); 113 GZIPOutputStream gz1 = new GZIPOutputStream(new FileOutputStream(f1)); 114 FileOutputStream os2 = new FileOutputStream(f2); 115 GZIPOutputStream gz3 = new GZIPOutputStream(new FileOutputStream(f3)); 116 117 w0.write("FILE0"); 118 gz1.write("FILE1".getBytes()); 119 os2.write("DATA2".getBytes()); 120 gz3.write("DATA3".getBytes()); 121 122 w0.close(); 123 gz1.close(); 124 os2.close(); 125 gz3.close(); 126 127 DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 128 Context.DROPBOX_SERVICE); 129 int mode = ParcelFileDescriptor.MODE_READ_ONLY; 130 131 ParcelFileDescriptor pfd0 = ParcelFileDescriptor.open(f0, mode); 132 ParcelFileDescriptor pfd1 = ParcelFileDescriptor.open(f1, mode); 133 ParcelFileDescriptor pfd2 = ParcelFileDescriptor.open(f2, mode); 134 ParcelFileDescriptor pfd3 = ParcelFileDescriptor.open(f3, mode); 135 136 dropbox.addFile("DropBoxTest", pfd0, DropBoxManager.IS_TEXT); 137 dropbox.addFile("DropBoxTest", pfd1, DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED); 138 dropbox.addFile("DropBoxTest", pfd2, 0); 139 dropbox.addFile("DropBoxTest", pfd3, DropBoxManager.IS_GZIPPED); 140 141 pfd0.close(); 142 pfd1.close(); 143 pfd2.close(); 144 pfd3.close(); 145 146 DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 147 DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 148 DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 149 DropBoxManager.Entry e3 = dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis()); 150 assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 151 152 assertTrue(e0.getTimeMillis() > before); 153 assertTrue(e1.getTimeMillis() > e0.getTimeMillis()); 154 assertTrue(e2.getTimeMillis() > e1.getTimeMillis()); 155 assertTrue(e3.getTimeMillis() > e2.getTimeMillis()); 156 157 assertEquals(DropBoxManager.IS_TEXT, e0.getFlags()); 158 assertEquals(DropBoxManager.IS_TEXT, e1.getFlags()); 159 assertEquals(0, e2.getFlags()); 160 assertEquals(0, e3.getFlags()); 161 162 assertEquals("FILE0", e0.getText(80)); 163 164 byte[] buf1 = new byte[80]; 165 assertEquals("FILE1", new String(buf1, 0, e1.getInputStream().read(buf1))); 166 167 assertTrue(null == e2.getText(80)); 168 byte[] buf2 = new byte[80]; 169 assertEquals("DATA2", new String(buf2, 0, e2.getInputStream().read(buf2))); 170 171 assertTrue(null == e3.getText(80)); 172 byte[] buf3 = new byte[80]; 173 assertEquals("DATA3", new String(buf3, 0, e3.getInputStream().read(buf3))); 174 175 e0.close(); 176 e1.close(); 177 e2.close(); 178 e3.close(); 179 } 180 181 public void testAddEntriesInTheFuture() throws Exception { 182 File dir = getEmptyDir("testAddEntriesInTheFuture"); 183 long before = System.currentTimeMillis(); 184 185 // Near future: should be allowed to persist 186 FileWriter w0 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 5000) + ".txt")); 187 w0.write("FUTURE0"); 188 w0.close(); 189 190 // Far future: should be collapsed 191 FileWriter w1 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 100000) + ".txt")); 192 w1.write("FUTURE1"); 193 w1.close(); 194 195 // Another far future item, this one gzipped 196 File f2 = new File(dir, "DropBoxTest@" + (before + 100001) + ".txt.gz"); 197 GZIPOutputStream gz2 = new GZIPOutputStream(new FileOutputStream(f2)); 198 gz2.write("FUTURE2".getBytes()); 199 gz2.close(); 200 201 // Tombstone in the far future 202 new FileOutputStream(new File(dir, "DropBoxTest@" + (before + 100002) + ".lost")).close(); 203 204 DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 205 DropBoxManager dropbox = new DropBoxManager(service); 206 207 // Until a write, the timestamps are taken at face value 208 DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 209 DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 210 DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 211 DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 212 assertTrue(null == dropbox.getNextEntry(null, e3.getTimeMillis())); 213 214 assertEquals("FUTURE0", e0.getText(80)); 215 assertEquals("FUTURE1", e1.getText(80)); 216 assertEquals("FUTURE2", e2.getText(80)); 217 assertEquals(null, e3.getText(80)); 218 219 assertEquals(before + 5000, e0.getTimeMillis()); 220 assertEquals(before + 100000, e1.getTimeMillis()); 221 assertEquals(before + 100001, e2.getTimeMillis()); 222 assertEquals(before + 100002, e3.getTimeMillis()); 223 224 e0.close(); 225 e1.close(); 226 e2.close(); 227 e3.close(); 228 229 // Write something to force a collapse 230 dropbox.addText("NotDropBoxTest", "FUTURE"); 231 e0 = dropbox.getNextEntry(null, before); 232 e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 233 e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 234 e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 235 assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 236 237 assertEquals("FUTURE0", e0.getText(80)); 238 assertEquals("FUTURE1", e1.getText(80)); 239 assertEquals("FUTURE2", e2.getText(80)); 240 assertEquals(null, e3.getText(80)); 241 242 assertEquals(before + 5000, e0.getTimeMillis()); 243 assertEquals(before + 5001, e1.getTimeMillis()); 244 assertEquals(before + 5002, e2.getTimeMillis()); 245 assertEquals(before + 5003, e3.getTimeMillis()); 246 247 e0.close(); 248 e1.close(); 249 e2.close(); 250 e3.close(); 251 service.stop(); 252 } 253 254 public void testIsTagEnabled() throws Exception { 255 DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 256 Context.DROPBOX_SERVICE); 257 long before = System.currentTimeMillis(); 258 dropbox.addText("DropBoxTest", "TEST-ENABLED"); 259 assertTrue(dropbox.isTagEnabled("DropBoxTest")); 260 261 Intent override = new Intent(Settings.Gservices.OVERRIDE_ACTION); 262 override.putExtra(Settings.Gservices.DROPBOX_TAG_PREFIX + "DropBoxTest", "disabled"); 263 waitForBroadcast(override); 264 265 dropbox.addText("DropBoxTest", "TEST-DISABLED"); 266 assertFalse(dropbox.isTagEnabled("DropBoxTest")); 267 268 override = new Intent(Settings.Gservices.OVERRIDE_ACTION); 269 override.putExtra(Settings.Gservices.DROPBOX_TAG_PREFIX + "DropBoxTest", ""); 270 waitForBroadcast(override); 271 272 dropbox.addText("DropBoxTest", "TEST-ENABLED-AGAIN"); 273 assertTrue(dropbox.isTagEnabled("DropBoxTest")); 274 275 DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 276 DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 277 assertTrue(null == dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis())); 278 279 assertEquals("TEST-ENABLED", e0.getText(80)); 280 assertEquals("TEST-ENABLED-AGAIN", e1.getText(80)); 281 282 e0.close(); 283 e1.close(); 284 } 285 286 public void testGetNextEntry() throws Exception { 287 File dir = getEmptyDir("testGetNextEntry"); 288 DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 289 DropBoxManager dropbox = new DropBoxManager(service); 290 291 long before = System.currentTimeMillis(); 292 dropbox.addText("DropBoxTest.A", "A0"); 293 dropbox.addText("DropBoxTest.B", "B0"); 294 dropbox.addText("DropBoxTest.A", "A1"); 295 296 DropBoxManager.Entry a0 = dropbox.getNextEntry("DropBoxTest.A", before); 297 DropBoxManager.Entry a1 = dropbox.getNextEntry("DropBoxTest.A", a0.getTimeMillis()); 298 assertTrue(null == dropbox.getNextEntry("DropBoxTest.A", a1.getTimeMillis())); 299 300 DropBoxManager.Entry b0 = dropbox.getNextEntry("DropBoxTest.B", before); 301 assertTrue(null == dropbox.getNextEntry("DropBoxTest.B", b0.getTimeMillis())); 302 303 DropBoxManager.Entry x0 = dropbox.getNextEntry(null, before); 304 DropBoxManager.Entry x1 = dropbox.getNextEntry(null, x0.getTimeMillis()); 305 DropBoxManager.Entry x2 = dropbox.getNextEntry(null, x1.getTimeMillis()); 306 assertTrue(null == dropbox.getNextEntry(null, x2.getTimeMillis())); 307 308 assertEquals("DropBoxTest.A", a0.getTag()); 309 assertEquals("DropBoxTest.A", a1.getTag()); 310 assertEquals("A0", a0.getText(80)); 311 assertEquals("A1", a1.getText(80)); 312 313 assertEquals("DropBoxTest.B", b0.getTag()); 314 assertEquals("B0", b0.getText(80)); 315 316 assertEquals("DropBoxTest.A", x0.getTag()); 317 assertEquals("DropBoxTest.B", x1.getTag()); 318 assertEquals("DropBoxTest.A", x2.getTag()); 319 assertEquals("A0", x0.getText(80)); 320 assertEquals("B0", x1.getText(80)); 321 assertEquals("A1", x2.getText(80)); 322 323 a0.close(); 324 a1.close(); 325 b0.close(); 326 x0.close(); 327 x1.close(); 328 x2.close(); 329 service.stop(); 330 } 331 332 public void testSizeLimits() throws Exception { 333 File dir = getEmptyDir("testSizeLimits"); 334 int blockSize = new StatFs(dir.getPath()).getBlockSize(); 335 336 // Limit storage to 10 blocks 337 int kb = blockSize * 10 / 1024; 338 Intent override = new Intent(Settings.Gservices.OVERRIDE_ACTION); 339 override.putExtra(Settings.Gservices.DROPBOX_QUOTA_KB, Integer.toString(kb)); 340 waitForBroadcast(override); 341 342 // Three tags using a total of 12 blocks: 343 // DropBoxTest0 [ ][ ] 344 // DropBoxTest1 [x][ ][ ][ ][xxx(20 blocks)xxx] 345 // DropBoxTest2 [xxxxxxxxxx][ ][ ] 346 // 347 // The blocks marked "x" will be removed due to storage restrictions. 348 // Use random fill (so it doesn't compress), subtract a little for gzip overhead 349 350 final int overhead = 64; 351 long before = System.currentTimeMillis(); 352 DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 353 DropBoxManager dropbox = new DropBoxManager(service); 354 355 addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 356 addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 357 358 addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 359 addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 360 addRandomEntry(dropbox, "DropBoxTest1", blockSize * 2 - overhead); 361 addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 362 addRandomEntry(dropbox, "DropBoxTest1", blockSize * 20 - overhead); 363 364 addRandomEntry(dropbox, "DropBoxTest2", blockSize * 4 - overhead); 365 addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 366 addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 367 368 DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 369 DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 370 DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 371 DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 372 DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 373 DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 374 DropBoxManager.Entry e6 = dropbox.getNextEntry(null, e5.getTimeMillis()); 375 DropBoxManager.Entry e7 = dropbox.getNextEntry(null, e6.getTimeMillis()); 376 DropBoxManager.Entry e8 = dropbox.getNextEntry(null, e7.getTimeMillis()); 377 DropBoxManager.Entry e9 = dropbox.getNextEntry(null, e8.getTimeMillis()); 378 assertTrue(null == dropbox.getNextEntry(null, e9.getTimeMillis())); 379 380 assertEquals("DropBoxTest0", e0.getTag()); 381 assertEquals("DropBoxTest0", e1.getTag()); 382 assertEquals(blockSize - overhead, getEntrySize(e0)); 383 assertEquals(blockSize - overhead, getEntrySize(e1)); 384 385 assertEquals("DropBoxTest1", e2.getTag()); 386 assertEquals("DropBoxTest1", e3.getTag()); 387 assertEquals("DropBoxTest1", e4.getTag()); 388 assertEquals("DropBoxTest1", e5.getTag()); 389 assertEquals("DropBoxTest1", e6.getTag()); 390 assertEquals(-1, getEntrySize(e2)); // Tombstone 391 assertEquals(blockSize - overhead, getEntrySize(e3)); 392 assertEquals(blockSize * 2 - overhead, getEntrySize(e4)); 393 assertEquals(blockSize - overhead, getEntrySize(e5)); 394 assertEquals(-1, getEntrySize(e6)); 395 396 assertEquals("DropBoxTest2", e7.getTag()); 397 assertEquals("DropBoxTest2", e8.getTag()); 398 assertEquals("DropBoxTest2", e9.getTag()); 399 assertEquals(-1, getEntrySize(e7)); // Tombstone 400 assertEquals(blockSize - overhead, getEntrySize(e8)); 401 assertEquals(blockSize - overhead, getEntrySize(e9)); 402 403 e0.close(); 404 e1.close(); 405 e2.close(); 406 e3.close(); 407 e4.close(); 408 e5.close(); 409 e6.close(); 410 e7.close(); 411 e8.close(); 412 e9.close(); 413 414 // Specifying a tag name skips tombstone records. 415 416 DropBoxManager.Entry t0 = dropbox.getNextEntry("DropBoxTest1", before); 417 DropBoxManager.Entry t1 = dropbox.getNextEntry("DropBoxTest1", t0.getTimeMillis()); 418 DropBoxManager.Entry t2 = dropbox.getNextEntry("DropBoxTest1", t1.getTimeMillis()); 419 assertTrue(null == dropbox.getNextEntry("DropBoxTest1", t2.getTimeMillis())); 420 421 assertEquals("DropBoxTest1", t0.getTag()); 422 assertEquals("DropBoxTest1", t1.getTag()); 423 assertEquals("DropBoxTest1", t2.getTag()); 424 425 assertEquals(blockSize - overhead, getEntrySize(t0)); 426 assertEquals(blockSize * 2 - overhead, getEntrySize(t1)); 427 assertEquals(blockSize - overhead, getEntrySize(t2)); 428 429 t0.close(); 430 t1.close(); 431 t2.close(); 432 service.stop(); 433 } 434 435 public void testAgeLimits() throws Exception { 436 File dir = getEmptyDir("testAgeLimits"); 437 int blockSize = new StatFs(dir.getPath()).getBlockSize(); 438 439 // Limit storage to 10 blocks with an expiration of 1 second 440 int kb = blockSize * 10 / 1024; 441 Intent override = new Intent(Settings.Gservices.OVERRIDE_ACTION); 442 override.putExtra(Settings.Gservices.DROPBOX_AGE_SECONDS, "1"); 443 override.putExtra(Settings.Gservices.DROPBOX_QUOTA_KB, Integer.toString(kb)); 444 waitForBroadcast(override); 445 446 // Write one normal entry and another so big that it is instantly tombstoned 447 long before = System.currentTimeMillis(); 448 DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 449 DropBoxManager dropbox = new DropBoxManager(service); 450 451 dropbox.addText("DropBoxTest", "TEST"); 452 addRandomEntry(dropbox, "DropBoxTest", blockSize * 20); 453 454 // Verify that things are as expected 455 DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 456 DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 457 assertTrue(null == dropbox.getNextEntry(null, e1.getTimeMillis())); 458 459 assertEquals("TEST", e0.getText(80)); 460 assertEquals(null, e1.getText(80)); 461 assertEquals(-1, getEntrySize(e1)); 462 463 e0.close(); 464 e1.close(); 465 466 // Wait a second and write another entry -- old ones should be expunged 467 Thread.sleep(2000); 468 dropbox.addText("DropBoxTest", "TEST1"); 469 470 e0 = dropbox.getNextEntry(null, before); 471 assertTrue(null == dropbox.getNextEntry(null, e0.getTimeMillis())); 472 assertEquals("TEST1", e0.getText(80)); 473 e0.close(); 474 } 475 476 public void testCreateDropBoxManagerWithInvalidDirectory() throws Exception { 477 // If created with an invalid directory, the DropBoxManager should suffer quietly 478 // and fail all operations (this is how it survives a full disk). 479 // Once the directory becomes possible to create, it will start working. 480 481 File dir = new File(getEmptyDir("testCreateDropBoxManagerWith"), "InvalidDirectory"); 482 new FileOutputStream(dir).close(); // Create an empty file 483 DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 484 DropBoxManager dropbox = new DropBoxManager(service); 485 486 dropbox.addText("DropBoxTest", "should be ignored"); 487 dropbox.addData("DropBoxTest", "should be ignored".getBytes(), 0); 488 assertTrue(null == dropbox.getNextEntry("DropBoxTest", 0)); 489 490 dir.delete(); // Remove the file so a directory can be created 491 dropbox.addText("DropBoxTest", "TEST"); 492 DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", 0); 493 assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 494 assertEquals("DropBoxTest", e.getTag()); 495 assertEquals("TEST", e.getText(80)); 496 e.close(); 497 service.stop(); 498 } 499 500 private void addRandomEntry(DropBoxManager dropbox, String tag, int size) throws Exception { 501 byte[] bytes = new byte[size]; 502 new Random(System.currentTimeMillis()).nextBytes(bytes); 503 504 File f = new File(getEmptyDir("addRandomEntry"), "random.dat"); 505 FileOutputStream os = new FileOutputStream(f); 506 os.write(bytes); 507 os.close(); 508 509 ParcelFileDescriptor fd = ParcelFileDescriptor.open(f, ParcelFileDescriptor.MODE_READ_ONLY); 510 dropbox.addFile(tag, fd, 0); 511 fd.close(); 512 } 513 514 private int getEntrySize(DropBoxManager.Entry e) throws Exception { 515 InputStream is = e.getInputStream(); 516 if (is == null) return -1; 517 int length = 0; 518 while (is.read() != -1) length++; 519 return length; 520 } 521 522 private void waitForBroadcast(Intent intent) throws InterruptedException { 523 BroadcastReceiver receiver = new BroadcastReceiver() { 524 public synchronized void onReceive(Context context, Intent intent) { notify(); } 525 }; 526 527 getContext().sendOrderedBroadcast(intent, null, receiver, null, 0, null, null); 528 synchronized (receiver) { receiver.wait(); } 529 } 530 531 private void recursiveDelete(File file) { 532 if (!file.delete() && file.isDirectory()) { 533 for (File f : file.listFiles()) recursiveDelete(f); 534 file.delete(); 535 } 536 } 537 538 private File getEmptyDir(String name) { 539 File dir = getContext().getDir("DropBoxTest." + name, 0); 540 for (File f : dir.listFiles()) recursiveDelete(f); 541 assertTrue(dir.listFiles().length == 0); 542 return dir; 543 } 544} 545