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(); 48625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_AGE_SECONDS, ""); 49625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_MAX_FILES, ""); 50625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, ""); 51625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", ""); 524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddText() throws Exception { 550935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn File dir = getEmptyDir("testAddText"); 560935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 57b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 580935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn 594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST0"); 624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long between = System.currentTimeMillis(); 644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST2"); 674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long after = System.currentTimeMillis(); 694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 70f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 71f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 72f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 73b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis())); 744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() > before); 764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() < between); 774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() > between); 784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() < e2.getTimeMillis()); 794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e2.getTimeMillis() < after); 804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST0", e0.getText(80)); 824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST1", e1.getText(80)); 834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TES", e2.getText(3)); 844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddData() throws Exception { 910935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn File dir = getEmptyDir("testAddData"); 920935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 93b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 940935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn 954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addData("DropBoxTest", "TEST".getBytes(), 0); 974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long after = System.currentTimeMillis(); 984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 99f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", before); 100b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 1014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest", e.getTag()); 1034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e.getTimeMillis() >= before); 1044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e.getFlags()); 1054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e.getText(80)); 1064410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf = new byte[80]; 1084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", new String(buf, 0, e.getInputStream().read(buf))); 1094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e.close(); 1114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 1124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddFile() throws Exception { 1144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAddFile"); 1154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 1164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f0 = new File(dir, "f0.txt"); 1184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f1 = new File(dir, "f1.txt.gz"); 1194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f2 = new File(dir, "f2.dat"); 1204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f3 = new File(dir, "f2.dat.gz"); 1214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w0 = new FileWriter(f0); 1234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz1 = new GZIPOutputStream(new FileOutputStream(f1)); 1244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileOutputStream os2 = new FileOutputStream(f2); 1254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz3 = new GZIPOutputStream(new FileOutputStream(f3)); 1264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.write("FILE0"); 1284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz1.write("FILE1".getBytes()); 1294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os2.write("DATA2".getBytes()); 1304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz3.write("DATA3".getBytes()); 1314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.close(); 1334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz1.close(); 1344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os2.close(); 1354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz3.close(); 1364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1370935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 138b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 1394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 140eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f0, DropBoxManager.IS_TEXT); 141eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f1, DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED); 142eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f2, 0); 143eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f3, DropBoxManager.IS_GZIPPED); 1444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 145f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 146f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 147f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 148f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis()); 149b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 1504410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() > before); 1524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() > e0.getTimeMillis()); 1534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e2.getTimeMillis() > e1.getTimeMillis()); 1544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e3.getTimeMillis() > e2.getTimeMillis()); 1554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 156f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor assertEquals(DropBoxManager.IS_TEXT, e0.getFlags()); 157f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor assertEquals(DropBoxManager.IS_TEXT, e1.getFlags()); 1584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e2.getFlags()); 1594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e3.getFlags()); 1604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FILE0", e0.getText(80)); 1624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf1 = new byte[80]; 1644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FILE1", new String(buf1, 0, e1.getInputStream().read(buf1))); 1654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e2.getText(80)); 1674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf2 = new byte[80]; 1684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DATA2", new String(buf2, 0, e2.getInputStream().read(buf2))); 1694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e3.getText(80)); 1714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf3 = new byte[80]; 1724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DATA3", new String(buf3, 0, e3.getInputStream().read(buf3))); 1734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 1754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 1764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 1774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 1784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 1794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddEntriesInTheFuture() throws Exception { 1814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAddEntriesInTheFuture"); 1824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 1834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Near future: should be allowed to persist 1854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w0 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 5000) + ".txt")); 1864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.write("FUTURE0"); 1874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.close(); 1884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Far future: should be collapsed 1904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w1 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 100000) + ".txt")); 1914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w1.write("FUTURE1"); 1924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w1.close(); 1934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Another far future item, this one gzipped 1954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f2 = new File(dir, "DropBoxTest@" + (before + 100001) + ".txt.gz"); 1964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz2 = new GZIPOutputStream(new FileOutputStream(f2)); 1974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz2.write("FUTURE2".getBytes()); 1984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz2.close(); 1994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Tombstone in the far future 2014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new FileOutputStream(new File(dir, "DropBoxTest@" + (before + 100002) + ".lost")).close(); 2024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 203f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 204b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 2054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2064410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Until a write, the timestamps are taken at face value 207f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 208f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 209f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 210f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 211b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e3.getTimeMillis())); 2124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE0", e0.getText(80)); 2144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE1", e1.getText(80)); 2154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE2", e2.getText(80)); 2164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e3.getText(80)); 2174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5000, e0.getTimeMillis()); 2194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100000, e1.getTimeMillis()); 2204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100001, e2.getTimeMillis()); 2214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100002, e3.getTimeMillis()); 2224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 2274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Write something to force a collapse 2294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("NotDropBoxTest", "FUTURE"); 230b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e0 = dropbox.getNextEntry(null, before); 231b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 232b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 233b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 234b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 2354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE0", e0.getText(80)); 2374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE1", e1.getText(80)); 2384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE2", e2.getText(80)); 2394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e3.getText(80)); 2404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5000, e0.getTimeMillis()); 2424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5001, e1.getTimeMillis()); 2434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5002, e2.getTimeMillis()); 2444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5003, e3.getTimeMillis()); 2454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 2504410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 2514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testIsTagEnabled() throws Exception { 2530935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn File dir = getEmptyDir("testIsTagEnabled"); 2540935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 255b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 2560935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn 2574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 2584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-ENABLED"); 2594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dropbox.isTagEnabled("DropBoxTest")); 2604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 26143866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 262625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", 26343866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker "disabled"); 2644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-DISABLED"); 2664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertFalse(dropbox.isTagEnabled("DropBoxTest")); 2674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 268625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", 26943866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ""); 2704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-ENABLED-AGAIN"); 2724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dropbox.isTagEnabled("DropBoxTest")); 2734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 274f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 275f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 276b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis())); 2774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST-ENABLED", e0.getText(80)); 2794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST-ENABLED-AGAIN", e1.getText(80)); 2804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 2844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 285b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor public void testGetNextEntry() throws Exception { 286b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor File dir = getEmptyDir("testGetNextEntry"); 287f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 288b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 289b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 290b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor long before = System.currentTimeMillis(); 291b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.A", "A0"); 292b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.B", "B0"); 293b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.A", "A1"); 294b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 295f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry a0 = dropbox.getNextEntry("DropBoxTest.A", before); 296f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry a1 = dropbox.getNextEntry("DropBoxTest.A", a0.getTimeMillis()); 297b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest.A", a1.getTimeMillis())); 298b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 299f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry b0 = dropbox.getNextEntry("DropBoxTest.B", before); 300b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest.B", b0.getTimeMillis())); 301b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 302f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x0 = dropbox.getNextEntry(null, before); 303f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x1 = dropbox.getNextEntry(null, x0.getTimeMillis()); 304f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x2 = dropbox.getNextEntry(null, x1.getTimeMillis()); 305b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, x2.getTimeMillis())); 306b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 307b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", a0.getTag()); 308b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", a1.getTag()); 309b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A0", a0.getText(80)); 310b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A1", a1.getText(80)); 311b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 312b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.B", b0.getTag()); 313b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("B0", b0.getText(80)); 314b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 315b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", x0.getTag()); 316b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.B", x1.getTag()); 317b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", x2.getTag()); 318b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A0", x0.getText(80)); 319b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("B0", x1.getText(80)); 320b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A1", x2.getText(80)); 321b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 322b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor a0.close(); 323b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor a1.close(); 324b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor b0.close(); 325b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x0.close(); 326b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x1.close(); 327b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x2.close(); 328b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor } 329b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 3304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testSizeLimits() throws Exception { 3314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testSizeLimits"); 3324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int blockSize = new StatFs(dir.getPath()).getBlockSize(); 3334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Limit storage to 10 blocks 3354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int kb = blockSize * 10 / 1024; 33643866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 337625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, Integer.toString(kb)); 3384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Three tags using a total of 12 blocks: 3404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest0 [ ][ ] 3414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest1 [x][ ][ ][ ][xxx(20 blocks)xxx] 3424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest2 [xxxxxxxxxx][ ][ ] 3434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // 3444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // The blocks marked "x" will be removed due to storage restrictions. 3454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Use random fill (so it doesn't compress), subtract a little for gzip overhead 3464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor final int overhead = 64; 3484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 349f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 350b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 351952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor 3524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 3534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 3544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize * 2 - overhead); 3584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize * 20 - overhead); 3604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize * 4 - overhead); 3624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 3634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 3644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 365f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 366f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 367f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 368f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 369f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 370f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 371f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e6 = dropbox.getNextEntry(null, e5.getTimeMillis()); 372f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e7 = dropbox.getNextEntry(null, e6.getTimeMillis()); 373f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e8 = dropbox.getNextEntry(null, e7.getTimeMillis()); 374f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e9 = dropbox.getNextEntry(null, e8.getTimeMillis()); 375b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e9.getTimeMillis())); 3764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest0", e0.getTag()); 3784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest0", e1.getTag()); 3794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e0)); 3804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e1)); 3814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e2.getTag()); 3834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e3.getTag()); 3844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e4.getTag()); 3854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e5.getTag()); 3864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e6.getTag()); 3874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e2)); // Tombstone 3884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e3)); 3894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize * 2 - overhead, getEntrySize(e4)); 3904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e5)); 3914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e6)); 3924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e7.getTag()); 3944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e8.getTag()); 3954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e9.getTag()); 3964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e7)); // Tombstone 3974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e8)); 3984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e9)); 3994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 4024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 4034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 4044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e4.close(); 4054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e5.close(); 4064410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e6.close(); 4074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e7.close(); 4084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e8.close(); 4094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e9.close(); 410b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 411b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor // Specifying a tag name skips tombstone records. 412b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 413f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t0 = dropbox.getNextEntry("DropBoxTest1", before); 414f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t1 = dropbox.getNextEntry("DropBoxTest1", t0.getTimeMillis()); 415f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t2 = dropbox.getNextEntry("DropBoxTest1", t1.getTimeMillis()); 416b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest1", t2.getTimeMillis())); 417b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 418b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t0.getTag()); 419b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t1.getTag()); 420b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t2.getTag()); 421b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 422b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize - overhead, getEntrySize(t0)); 423b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize * 2 - overhead, getEntrySize(t1)); 424b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize - overhead, getEntrySize(t2)); 425b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 426b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t0.close(); 427b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t1.close(); 428b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t2.close(); 4294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 4304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAgeLimits() throws Exception { 4324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAgeLimits"); 4334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int blockSize = new StatFs(dir.getPath()).getBlockSize(); 4344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Limit storage to 10 blocks with an expiration of 1 second 4364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int kb = blockSize * 10 / 1024; 43743866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 438625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_AGE_SECONDS, "1"); 439625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, Integer.toString(kb)); 4404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Write one normal entry and another so big that it is instantly tombstoned 4424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 443f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 444b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 445952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor 4464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST"); 4474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest", blockSize * 20); 4484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Verify that things are as expected 450f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 451f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 452b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e1.getTimeMillis())); 4534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", e0.getText(80)); 4554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e1.getText(80)); 4564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e1)); 4574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 4604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Wait a second and write another entry -- old ones should be expunged 4624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(2000); 4634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 4644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 465b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e0 = dropbox.getNextEntry(null, before); 466b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e0.getTimeMillis())); 4674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST1", e0.getText(80)); 4684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 4704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4713a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor public void testFileCountLimits() throws Exception { 4723a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor File dir = getEmptyDir("testFileCountLimits"); 4733a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4743a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 475b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 4763a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST0"); 4773a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 4783a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST2"); 4793a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST3"); 4803a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST4"); 4813a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST5"); 4823a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4833a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Verify 6 files added 4843a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, 0); 4853a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 4863a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 4873a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 4883a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 4893a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 4903a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertTrue(null == dropbox.getNextEntry(null, e5.getTimeMillis())); 4913a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST0", e0.getText(80)); 4923a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST5", e5.getText(80)); 4933a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 4943a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e0.close(); 4953a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e1.close(); 4963a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e2.close(); 4973a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e3.close(); 4983a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e4.close(); 4993a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e5.close(); 5003a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5013a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Limit to 3 files and add one more entry 5023a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor ContentResolver cr = getContext().getContentResolver(); 503625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_MAX_FILES, "3"); 5043a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST6"); 5053a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5063a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Verify only 3 files left 5073a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f0 = dropbox.getNextEntry(null, 0); 5083a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f1 = dropbox.getNextEntry(null, f0.getTimeMillis()); 5093a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f2 = dropbox.getNextEntry(null, f1.getTimeMillis()); 5103a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertTrue(null == dropbox.getNextEntry(null, f2.getTimeMillis())); 5113a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST4", f0.getText(80)); 5123a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST5", f1.getText(80)); 5133a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST6", f2.getText(80)); 5143a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5153a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f0.close(); 5163a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f1.close(); 5173a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f2.close(); 5183a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor } 5193a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 520f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor public void testCreateDropBoxManagerWithInvalidDirectory() throws Exception { 521f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor // If created with an invalid directory, the DropBoxManager should suffer quietly 5224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // and fail all operations (this is how it survives a full disk). 5234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Once the directory becomes possible to create, it will start working. 5244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 525f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor File dir = new File(getEmptyDir("testCreateDropBoxManagerWith"), "InvalidDirectory"); 5264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new FileOutputStream(dir).close(); // Create an empty file 527f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManagerService service = new DropBoxManagerService(getContext(), dir); 528b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 5294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "should be ignored"); 5314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addData("DropBoxTest", "should be ignored".getBytes(), 0); 532b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", 0)); 5334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dir.delete(); // Remove the file so a directory can be created 5354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST"); 536f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", 0); 537b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 5384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest", e.getTag()); 5394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", e.getText(80)); 5404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e.close(); 5414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 5424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5436e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor public void testDropBoxEntrySerialization() throws Exception { 5446e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // Make sure DropBoxManager.Entry can be serialized to a Parcel and back 5456e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // under a variety of conditions. 5466e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5476e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor Parcel parcel = Parcel.obtain(); 5486e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File dir = getEmptyDir("testDropBoxEntrySerialization"); 5496e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5506e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("empty", 1000000).writeToParcel(parcel, 0); 5516e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("string", 2000000, "String Value").writeToParcel(parcel, 0); 5526e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("bytes", 3000000, "Bytes Value".getBytes(), 5536e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_TEXT).writeToParcel(parcel, 0); 5546e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("zerobytes", 4000000, new byte[0], 0).writeToParcel(parcel, 0); 5556e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("emptybytes", 5000000, (byte[]) null, 5566e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5576e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5586e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5596e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badbytes", 99999, 5606e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor "Bad Bytes Value".getBytes(), 5616e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5626e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for non-null byte[] and IS_EMPTY flags"); 5636e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 5646e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5656e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5666e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5676e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5686e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badbytes", 99999, (byte[]) null, 0).writeToParcel(parcel, 0); 5696e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for null byte[] and non-IS_EMPTY flags"); 5706e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 5716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File f = new File(dir, "file.dat"); 5756e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor FileOutputStream os = new FileOutputStream(f); 5766e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.write("File Value".getBytes()); 5776e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.close(); 5786e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5796e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("file", 6000000, f, DropBoxManager.IS_TEXT).writeToParcel( 5806e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 5816e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("binfile", 7000000, f, 0).writeToParcel( 5826e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 5836e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("emptyfile", 8000000, (ParcelFileDescriptor) null, 5846e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5856e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5866e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5876e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, new File(dir, "nonexist.dat"), 0); 5886e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IOException expected for nonexistent file"); 5896e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IOException e) { 5906e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5916e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 5926e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5936e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 5946e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, f, DropBoxManager.IS_EMPTY).writeToParcel( 5956e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, 0); 5966e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for non-null file and IS_EMPTY flags"); 5976e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 5986e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 5996e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6006e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6016e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6026e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, (ParcelFileDescriptor) null, 0); 6036e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for null PFD and non-IS_EMPTY flags"); 6046e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 6056e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6066e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6076e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6086e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File gz = new File(dir, "file.gz"); 6096e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor GZIPOutputStream gzout = new GZIPOutputStream(new FileOutputStream(gz)); 6106e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor gzout.write("Gzip File Value".getBytes()); 6116e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor gzout.close(); 6126e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6136e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("gzipfile", 9000000, gz, 6146e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED).writeToParcel( 6156e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6166e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("gzipbinfile", 10000000, gz, 6176e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_GZIPPED).writeToParcel( 6186e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6196e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6206e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // 6216e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // Switch from writing to reading 6226e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // 6236e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6246e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.setDataPosition(0); 6256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.Entry e; 6266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6276e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6286e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("empty", e.getTag()); 6296e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(1000000, e.getTimeMillis()); 6306e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6316e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6326e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6336e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6346e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6356e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6366e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("string", e.getTag()); 6376e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(2000000, e.getTimeMillis()); 6386e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6396e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("String Value", e.getText(100)); 6406e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("String Value", 6416e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6426e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6436e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6446e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6456e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("bytes", e.getTag()); 6466e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(3000000, e.getTimeMillis()); 6476e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6486e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Bytes Value", e.getText(100)); 6496e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6506e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6516e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6526e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("zerobytes", e.getTag()); 6536e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(4000000, e.getTimeMillis()); 6546e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 6556e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6566e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, 6576e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6586e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6596e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6606e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6616e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("emptybytes", e.getTag()); 6626e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(5000000, e.getTimeMillis()); 6636e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6646e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6656e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6666e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6676e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6686e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6696e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("file", e.getTag()); 6706e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(6000000, e.getTimeMillis()); 6716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("File Value", e.getText(100)); 6736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6756e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6766e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("binfile", e.getTag()); 6776e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(7000000, e.getTimeMillis()); 6786e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 6796e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6806e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("File Value", 6816e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6826e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6836e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6846e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("emptyfile", e.getTag()); 6856e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(8000000, e.getTimeMillis()); 6866e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6876e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6886e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6896e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6906e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6916e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6926e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("gzipfile", e.getTag()); 6936e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(9000000, e.getTimeMillis()); 6946e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6956e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Gzip File Value", e.getText(100)); 6966e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6976e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6986e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6996e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("gzipbinfile", e.getTag()); 7006e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(10000000, e.getTimeMillis()); 7016e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 7026e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 7036e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Gzip File Value", 7046e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 7056e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 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