DropBoxTest.java revision 6e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6
14410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor/* 24410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * Copyright (C) 2009 The Android Open Source Project 34410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * 44410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * Licensed under the Apache License, Version 2.0 (the "License"); 54410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * you may not use this file except in compliance with the License. 64410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * You may obtain a copy of the License at 74410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * 84410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * http://www.apache.org/licenses/LICENSE-2.0 94410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * 104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * Unless required by applicable law or agreed to in writing, software 114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * distributed under the License is distributed on an "AS IS" BASIS, 124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * See the License for the specific language governing permissions and 144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor * limitations under the License. 154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor */ 164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 171a44d5dcabc18cd5ef111f732ccff91683a1a093Neal Nguyenpackage com.android.server; 184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1943866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongkerimport android.content.ContentResolver; 204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.content.Context; 214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.content.Intent; 22f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnorimport android.os.DropBoxManager; 236e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.Parcel; 246e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.Parcelable; 256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.ParcelFileDescriptor; 266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.Process; 274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.os.ServiceManager; 284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.os.StatFs; 294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.provider.Settings; 304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.test.AndroidTestCase; 314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 32f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnorimport com.android.server.DropBoxManagerService; 334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 346e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport java.io.BufferedReader; 354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.File; 364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.FileOutputStream; 374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.FileWriter; 386e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport java.io.IOException; 394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.InputStream; 406e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport java.io.InputStreamReader; 414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.util.Random; 424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.util.zip.GZIPOutputStream; 434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 44f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor/** Test {@link DropBoxManager} functionality. */ 454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorpublic class DropBoxTest extends AndroidTestCase { 464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void tearDown() throws Exception { 4743866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 4843866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_AGE_SECONDS, ""); 493a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor Settings.Secure.putString(cr, Settings.Secure.DROPBOX_MAX_FILES, ""); 5043866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_QUOTA_KB, ""); 5143866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_TAG_PREFIX + "DropBoxTest", ""); 524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddText() throws Exception { 55f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 56f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor Context.DROPBOX_SERVICE); 574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST0"); 604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long between = System.currentTimeMillis(); 624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST2"); 654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long after = System.currentTimeMillis(); 674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 68f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 69f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 70f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 71b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis())); 724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() > before); 744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() < between); 754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() > between); 764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() < e2.getTimeMillis()); 774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e2.getTimeMillis() < after); 784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST0", e0.getText(80)); 804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST1", e1.getText(80)); 814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TES", e2.getText(3)); 824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddData() throws Exception { 89f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 90f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor Context.DROPBOX_SERVICE); 914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addData("DropBoxTest", "TEST".getBytes(), 0); 934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long after = System.currentTimeMillis(); 944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 95f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", before); 96b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest", e.getTag()); 994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e.getTimeMillis() >= before); 1004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e.getFlags()); 1014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e.getText(80)); 1024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf = new byte[80]; 1044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", new String(buf, 0, e.getInputStream().read(buf))); 1054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1064410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e.close(); 1074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 1084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddFile() throws Exception { 1104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAddFile"); 1114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 1124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f0 = new File(dir, "f0.txt"); 1144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f1 = new File(dir, "f1.txt.gz"); 1154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f2 = new File(dir, "f2.dat"); 1164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f3 = new File(dir, "f2.dat.gz"); 1174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w0 = new FileWriter(f0); 1194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz1 = new GZIPOutputStream(new FileOutputStream(f1)); 1204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileOutputStream os2 = new FileOutputStream(f2); 1214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz3 = new GZIPOutputStream(new FileOutputStream(f3)); 1224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.write("FILE0"); 1244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz1.write("FILE1".getBytes()); 1254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os2.write("DATA2".getBytes()); 1264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz3.write("DATA3".getBytes()); 1274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.close(); 1294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz1.close(); 1304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os2.close(); 1314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz3.close(); 1324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 133f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 134f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor Context.DROPBOX_SERVICE); 1354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 136eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f0, DropBoxManager.IS_TEXT); 137eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f1, DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED); 138eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f2, 0); 139eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f3, DropBoxManager.IS_GZIPPED); 1404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 141f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 142f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 143f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 144f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis()); 145b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 1464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() > before); 1484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() > e0.getTimeMillis()); 1494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e2.getTimeMillis() > e1.getTimeMillis()); 1504410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e3.getTimeMillis() > e2.getTimeMillis()); 1514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 152f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor assertEquals(DropBoxManager.IS_TEXT, e0.getFlags()); 153f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor assertEquals(DropBoxManager.IS_TEXT, e1.getFlags()); 1544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e2.getFlags()); 1554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e3.getFlags()); 1564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FILE0", e0.getText(80)); 1584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf1 = new byte[80]; 1604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FILE1", new String(buf1, 0, e1.getInputStream().read(buf1))); 1614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e2.getText(80)); 1634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf2 = new byte[80]; 1644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DATA2", new String(buf2, 0, e2.getInputStream().read(buf2))); 1654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e3.getText(80)); 1674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf3 = new byte[80]; 1684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DATA3", new String(buf3, 0, e3.getInputStream().read(buf3))); 1694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 1714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 1724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 1734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 1744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 1754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddEntriesInTheFuture() throws Exception { 1774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAddEntriesInTheFuture"); 1784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 1794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Near future: should be allowed to persist 1814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w0 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 5000) + ".txt")); 1824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.write("FUTURE0"); 1834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.close(); 1844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Far future: should be collapsed 1864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w1 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 100000) + ".txt")); 1874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w1.write("FUTURE1"); 1884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w1.close(); 1894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Another far future item, this one gzipped 1914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f2 = new File(dir, "DropBoxTest@" + (before + 100001) + ".txt.gz"); 1924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz2 = new GZIPOutputStream(new FileOutputStream(f2)); 1934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz2.write("FUTURE2".getBytes()); 1944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz2.close(); 1954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Tombstone in the far future 1974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new FileOutputStream(new File(dir, "DropBoxTest@" + (before + 100002) + ".lost")).close(); 1984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 199f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 200f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = new DropBoxManager(service); 2014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Until a write, the timestamps are taken at face value 203f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 204f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 205f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 206f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 207b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e3.getTimeMillis())); 2084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE0", e0.getText(80)); 2104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE1", e1.getText(80)); 2114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE2", e2.getText(80)); 2124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e3.getText(80)); 2134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5000, e0.getTimeMillis()); 2154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100000, e1.getTimeMillis()); 2164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100001, e2.getTimeMillis()); 2174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100002, e3.getTimeMillis()); 2184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 2234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Write something to force a collapse 2254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("NotDropBoxTest", "FUTURE"); 226b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e0 = dropbox.getNextEntry(null, before); 227b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 228b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 229b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 230b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 2314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE0", e0.getText(80)); 2334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE1", e1.getText(80)); 2344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE2", e2.getText(80)); 2354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e3.getText(80)); 2364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5000, e0.getTimeMillis()); 2384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5001, e1.getTimeMillis()); 2394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5002, e2.getTimeMillis()); 2404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5003, e3.getTimeMillis()); 2414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 246952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor service.stop(); 2474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 2484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testIsTagEnabled() throws Exception { 250f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = (DropBoxManager) getContext().getSystemService( 251f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor Context.DROPBOX_SERVICE); 2524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 2534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-ENABLED"); 2544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dropbox.isTagEnabled("DropBoxTest")); 2554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 25643866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 25743866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_TAG_PREFIX + "DropBoxTest", 25843866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker "disabled"); 2594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-DISABLED"); 2614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertFalse(dropbox.isTagEnabled("DropBoxTest")); 2624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 26343866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_TAG_PREFIX + "DropBoxTest", 26443866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ""); 2654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-ENABLED-AGAIN"); 2674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dropbox.isTagEnabled("DropBoxTest")); 2684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 269f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 270f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 271b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis())); 2724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST-ENABLED", e0.getText(80)); 2744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST-ENABLED-AGAIN", e1.getText(80)); 2754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 2794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 280b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor public void testGetNextEntry() throws Exception { 281b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor File dir = getEmptyDir("testGetNextEntry"); 282f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 283f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = new DropBoxManager(service); 284b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 285b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor long before = System.currentTimeMillis(); 286b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.A", "A0"); 287b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.B", "B0"); 288b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.A", "A1"); 289b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 290f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry a0 = dropbox.getNextEntry("DropBoxTest.A", before); 291f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry a1 = dropbox.getNextEntry("DropBoxTest.A", a0.getTimeMillis()); 292b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest.A", a1.getTimeMillis())); 293b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 294f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry b0 = dropbox.getNextEntry("DropBoxTest.B", before); 295b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest.B", b0.getTimeMillis())); 296b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 297f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x0 = dropbox.getNextEntry(null, before); 298f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x1 = dropbox.getNextEntry(null, x0.getTimeMillis()); 299f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x2 = dropbox.getNextEntry(null, x1.getTimeMillis()); 300b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, x2.getTimeMillis())); 301b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 302b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", a0.getTag()); 303b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", a1.getTag()); 304b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A0", a0.getText(80)); 305b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A1", a1.getText(80)); 306b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 307b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.B", b0.getTag()); 308b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("B0", b0.getText(80)); 309b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 310b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", x0.getTag()); 311b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.B", x1.getTag()); 312b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", x2.getTag()); 313b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A0", x0.getText(80)); 314b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("B0", x1.getText(80)); 315b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A1", x2.getText(80)); 316b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 317b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor a0.close(); 318b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor a1.close(); 319b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor b0.close(); 320b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x0.close(); 321b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x1.close(); 322b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x2.close(); 323952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor service.stop(); 324b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor } 325b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 3264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testSizeLimits() throws Exception { 3274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testSizeLimits"); 3284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int blockSize = new StatFs(dir.getPath()).getBlockSize(); 3294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Limit storage to 10 blocks 3314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int kb = blockSize * 10 / 1024; 33243866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 33343866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_QUOTA_KB, Integer.toString(kb)); 3344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Three tags using a total of 12 blocks: 3364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest0 [ ][ ] 3374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest1 [x][ ][ ][ ][xxx(20 blocks)xxx] 3384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest2 [xxxxxxxxxx][ ][ ] 3394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // 3404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // The blocks marked "x" will be removed due to storage restrictions. 3414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Use random fill (so it doesn't compress), subtract a little for gzip overhead 3424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor final int overhead = 64; 3444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 345f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 346f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = new DropBoxManager(service); 347952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor 3484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 3494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 3504410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize * 2 - overhead); 3544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize * 20 - overhead); 3564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize * 4 - overhead); 3584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 3594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 3604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 361f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 362f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 363f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 364f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 365f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 366f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 367f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e6 = dropbox.getNextEntry(null, e5.getTimeMillis()); 368f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e7 = dropbox.getNextEntry(null, e6.getTimeMillis()); 369f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e8 = dropbox.getNextEntry(null, e7.getTimeMillis()); 370f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e9 = dropbox.getNextEntry(null, e8.getTimeMillis()); 371b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e9.getTimeMillis())); 3724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest0", e0.getTag()); 3744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest0", e1.getTag()); 3754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e0)); 3764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e1)); 3774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e2.getTag()); 3794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e3.getTag()); 3804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e4.getTag()); 3814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e5.getTag()); 3824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e6.getTag()); 3834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e2)); // Tombstone 3844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e3)); 3854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize * 2 - overhead, getEntrySize(e4)); 3864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e5)); 3874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e6)); 3884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e7.getTag()); 3904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e8.getTag()); 3914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e9.getTag()); 3924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e7)); // Tombstone 3934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e8)); 3944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e9)); 3954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 3974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 3984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 3994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 4004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e4.close(); 4014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e5.close(); 4024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e6.close(); 4034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e7.close(); 4044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e8.close(); 4054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e9.close(); 406b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 407b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor // Specifying a tag name skips tombstone records. 408b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 409f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t0 = dropbox.getNextEntry("DropBoxTest1", before); 410f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t1 = dropbox.getNextEntry("DropBoxTest1", t0.getTimeMillis()); 411f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t2 = dropbox.getNextEntry("DropBoxTest1", t1.getTimeMillis()); 412b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest1", t2.getTimeMillis())); 413b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 414b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t0.getTag()); 415b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t1.getTag()); 416b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t2.getTag()); 417b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 418b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize - overhead, getEntrySize(t0)); 419b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize * 2 - overhead, getEntrySize(t1)); 420b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize - overhead, getEntrySize(t2)); 421b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 422b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t0.close(); 423b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t1.close(); 424b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t2.close(); 425952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor service.stop(); 4264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 4274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAgeLimits() throws Exception { 4294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAgeLimits"); 4304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int blockSize = new StatFs(dir.getPath()).getBlockSize(); 4314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Limit storage to 10 blocks with an expiration of 1 second 4334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int kb = blockSize * 10 / 1024; 43443866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 43543866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_AGE_SECONDS, "1"); 43643866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker Settings.Secure.putString(cr, Settings.Secure.DROPBOX_QUOTA_KB, Integer.toString(kb)); 4374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Write one normal entry and another so big that it is instantly tombstoned 4394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 440f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 441f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = new DropBoxManager(service); 442952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor 4434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST"); 4444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest", blockSize * 20); 4454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Verify that things are as expected 447f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 448f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 449b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e1.getTimeMillis())); 4504410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", e0.getText(80)); 4524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e1.getText(80)); 4534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e1)); 4544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 4574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Wait a second and write another entry -- old ones should be expunged 4594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(2000); 4604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 4614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 462b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e0 = dropbox.getNextEntry(null, before); 463b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e0.getTimeMillis())); 4644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST1", e0.getText(80)); 4654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 4674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4683a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor public void testFileCountLimits() throws Exception { 4693a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor File dir = getEmptyDir("testFileCountLimits"); 4703a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4713a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 4723a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager dropbox = new DropBoxManager(service); 4733a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST0"); 4743a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 4753a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST2"); 4763a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST3"); 4773a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST4"); 4783a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST5"); 4793a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4803a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Verify 6 files added 4813a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, 0); 4823a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 4833a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 4843a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 4853a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 4863a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 4873a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertTrue(null == dropbox.getNextEntry(null, e5.getTimeMillis())); 4883a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST0", e0.getText(80)); 4893a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST5", e5.getText(80)); 4903a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4913a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e0.close(); 4923a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e1.close(); 4933a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e2.close(); 4943a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e3.close(); 4953a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e4.close(); 4963a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e5.close(); 4973a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4983a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Limit to 3 files and add one more entry 4993a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor ContentResolver cr = getContext().getContentResolver(); 5003a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor Settings.Secure.putString(cr, Settings.Secure.DROPBOX_MAX_FILES, "3"); 5013a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST6"); 5023a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5033a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Verify only 3 files left 5043a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f0 = dropbox.getNextEntry(null, 0); 5053a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f1 = dropbox.getNextEntry(null, f0.getTimeMillis()); 5063a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f2 = dropbox.getNextEntry(null, f1.getTimeMillis()); 5073a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertTrue(null == dropbox.getNextEntry(null, f2.getTimeMillis())); 5083a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST4", f0.getText(80)); 5093a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST5", f1.getText(80)); 5103a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST6", f2.getText(80)); 5113a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5123a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f0.close(); 5133a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f1.close(); 5143a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f2.close(); 5153a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor } 5163a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 517f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor public void testCreateDropBoxManagerWithInvalidDirectory() throws Exception { 518f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor // If created with an invalid directory, the DropBoxManager should suffer quietly 5194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // and fail all operations (this is how it survives a full disk). 5204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Once the directory becomes possible to create, it will start working. 5214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 522f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor File dir = new File(getEmptyDir("testCreateDropBoxManagerWith"), "InvalidDirectory"); 5234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new FileOutputStream(dir).close(); // Create an empty file 524f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 525f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager dropbox = new DropBoxManager(service); 5264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "should be ignored"); 5284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addData("DropBoxTest", "should be ignored".getBytes(), 0); 529b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", 0)); 5304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dir.delete(); // Remove the file so a directory can be created 5324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST"); 533f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", 0); 534b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 5354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest", e.getTag()); 5364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", e.getText(80)); 5374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e.close(); 538952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor service.stop(); 5394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 5404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5416e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor public void testDropBoxEntrySerialization() throws Exception { 5426e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // Make sure DropBoxManager.Entry can be serialized to a Parcel and back 5436e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // under a variety of conditions. 5446e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5456e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor Parcel parcel = Parcel.obtain(); 5466e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File dir = getEmptyDir("testDropBoxEntrySerialization"); 5476e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5486e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("empty", 1000000).writeToParcel(parcel, 0); 5496e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("string", 2000000, "String Value").writeToParcel(parcel, 0); 5506e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("bytes", 3000000, "Bytes Value".getBytes(), 5516e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_TEXT).writeToParcel(parcel, 0); 5526e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("zerobytes", 4000000, new byte[0], 0).writeToParcel(parcel, 0); 5536e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("emptybytes", 5000000, (byte[]) null, 5546e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5556e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5566e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5576e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badbytes", 99999, 5586e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor "Bad Bytes Value".getBytes(), 5596e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5606e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for non-null byte[] and IS_EMPTY flags"); 5616e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 5626e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5636e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5646e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5656e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5666e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badbytes", 99999, (byte[]) null, 0).writeToParcel(parcel, 0); 5676e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for null byte[] and non-IS_EMPTY flags"); 5686e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 5696e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5706e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File f = new File(dir, "file.dat"); 5736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor FileOutputStream os = new FileOutputStream(f); 5746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.write("File Value".getBytes()); 5756e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.close(); 5766e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5776e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("file", 6000000, f, DropBoxManager.IS_TEXT).writeToParcel( 5786e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 5796e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("binfile", 7000000, f, 0).writeToParcel( 5806e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 5816e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("emptyfile", 8000000, (ParcelFileDescriptor) null, 5826e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5836e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5846e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5856e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, new File(dir, "nonexist.dat"), 0); 5866e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IOException expected for nonexistent file"); 5876e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IOException e) { 5886e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5896e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5906e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5916e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5926e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, f, DropBoxManager.IS_EMPTY).writeToParcel( 5936e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, 0); 5946e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for non-null file and IS_EMPTY flags"); 5956e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 5966e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5976e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5986e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5996e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6006e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, (ParcelFileDescriptor) null, 0); 6016e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for null PFD and non-IS_EMPTY flags"); 6026e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 6036e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6046e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6056e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6066e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File gz = new File(dir, "file.gz"); 6076e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor GZIPOutputStream gzout = new GZIPOutputStream(new FileOutputStream(gz)); 6086e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor gzout.write("Gzip File Value".getBytes()); 6096e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor gzout.close(); 6106e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6116e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("gzipfile", 9000000, gz, 6126e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED).writeToParcel( 6136e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6146e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("gzipbinfile", 10000000, gz, 6156e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_GZIPPED).writeToParcel( 6166e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6176e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6186e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // 6196e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // Switch from writing to reading 6206e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // 6216e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6226e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.setDataPosition(0); 6236e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.Entry e; 6246e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("empty", e.getTag()); 6276e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(1000000, e.getTimeMillis()); 6286e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6296e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6306e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6316e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6326e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6336e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6346e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("string", e.getTag()); 6356e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(2000000, e.getTimeMillis()); 6366e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6376e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("String Value", e.getText(100)); 6386e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("String Value", 6396e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6406e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6416e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6426e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6436e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("bytes", e.getTag()); 6446e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(3000000, e.getTimeMillis()); 6456e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6466e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Bytes Value", e.getText(100)); 6476e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6486e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6496e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6506e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("zerobytes", e.getTag()); 6516e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(4000000, e.getTimeMillis()); 6526e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 6536e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6546e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, 6556e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6566e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6576e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6586e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6596e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("emptybytes", e.getTag()); 6606e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(5000000, e.getTimeMillis()); 6616e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6626e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6636e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6646e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6656e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6666e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6676e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("file", e.getTag()); 6686e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(6000000, e.getTimeMillis()); 6696e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6706e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("File Value", e.getText(100)); 6716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("binfile", e.getTag()); 6756e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(7000000, e.getTimeMillis()); 6766e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 6776e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6786e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("File Value", 6796e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6806e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6816e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6826e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6836e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("emptyfile", e.getTag()); 6846e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(8000000, e.getTimeMillis()); 6856e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6866e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6876e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6886e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6896e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6906e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6916e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("gzipfile", e.getTag()); 6926e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(9000000, e.getTimeMillis()); 6936e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6946e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Gzip File Value", e.getText(100)); 6956e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6966e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6976e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6986e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("gzipbinfile", e.getTag()); 6996e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(10000000, e.getTimeMillis()); 7006e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 7016e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 7026e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Gzip File Value", 7036e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 7046e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7056e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7066e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, parcel.dataAvail()); 7076e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.recycle(); 7086e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7096e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7106e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor public void testDropBoxEntrySerializationDoesntLeakFileDescriptors() throws Exception { 7116e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File dir = getEmptyDir("testDropBoxEntrySerialization"); 7126e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File f = new File(dir, "file.dat"); 7136e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor FileOutputStream os = new FileOutputStream(f); 7146e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.write("File Value".getBytes()); 7156e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.close(); 7166e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7176e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor int before = countOpenFiles(); 7186e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertTrue(before > 0); 7196e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7206e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor for (int i = 0; i < 1000; i++) { 7216e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor Parcel parcel = Parcel.obtain(); 7226e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("file", 1000000, f, 0).writeToParcel( 7236e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 7246e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.setDataPosition(0); 7266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.Entry e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7276e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("file", e.getTag()); 7286e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7296e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7306e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.recycle(); 7316e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7326e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7336e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor int after = countOpenFiles(); 7346e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertTrue(after > 0); 7356e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertTrue(after < before + 20); 7366e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7376e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 738f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor private void addRandomEntry(DropBoxManager dropbox, String tag, int size) throws Exception { 7394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] bytes = new byte[size]; 7404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new Random(System.currentTimeMillis()).nextBytes(bytes); 7414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 7424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f = new File(getEmptyDir("addRandomEntry"), "random.dat"); 7434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileOutputStream os = new FileOutputStream(f); 7444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os.write(bytes); 7454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os.close(); 7464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 747eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile(tag, f, 0); 7484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 7494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 750f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor private int getEntrySize(DropBoxManager.Entry e) throws Exception { 7514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor InputStream is = e.getInputStream(); 7524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor if (is == null) return -1; 7534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int length = 0; 7544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor while (is.read() != -1) length++; 7554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor return length; 7564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 7574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 7584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor private void recursiveDelete(File file) { 7594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor if (!file.delete() && file.isDirectory()) { 7604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor for (File f : file.listFiles()) recursiveDelete(f); 7614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor file.delete(); 7624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 7634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 7644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 7654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor private File getEmptyDir(String name) { 7664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getContext().getDir("DropBoxTest." + name, 0); 7674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor for (File f : dir.listFiles()) recursiveDelete(f); 7684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dir.listFiles().length == 0); 7694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor return dir; 7704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 7716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor private int countOpenFiles() { 7736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor return new File("/proc/" + Process.myPid() + "/fd").listFiles().length; 7746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor} 776