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; 21ff94e0351a908504c588efac2084811840cde453Makoto Onukiimport android.content.ContextWrapper; 224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.content.Intent; 23f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnorimport android.os.DropBoxManager; 24ff94e0351a908504c588efac2084811840cde453Makoto Onukiimport android.os.Looper; 256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.Parcel; 266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.ParcelFileDescriptor; 27ff94e0351a908504c588efac2084811840cde453Makoto Onukiimport android.os.Parcelable; 286e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport android.os.Process; 294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.os.StatFs; 30ff94e0351a908504c588efac2084811840cde453Makoto Onukiimport android.os.UserHandle; 314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.provider.Settings; 324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport android.test.AndroidTestCase; 334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 34ff94e0351a908504c588efac2084811840cde453Makoto Onukiimport com.android.server.DropBoxManagerService.EntryFile; 354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 366e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport java.io.BufferedReader; 374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.File; 384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.FileOutputStream; 394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.FileWriter; 406e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport java.io.IOException; 414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.io.InputStream; 426e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnorimport java.io.InputStreamReader; 434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.util.Random; 444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorimport java.util.zip.GZIPOutputStream; 454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 46ff94e0351a908504c588efac2084811840cde453Makoto Onuki/** 47ff94e0351a908504c588efac2084811840cde453Makoto Onuki * Test {@link DropBoxManager} functionality. 48ff94e0351a908504c588efac2084811840cde453Makoto Onuki * 49ff94e0351a908504c588efac2084811840cde453Makoto Onuki * Run with: 50ff94e0351a908504c588efac2084811840cde453Makoto Onuki * bit FrameworksServicesTests:com.android.server.DropBoxTest 51ff94e0351a908504c588efac2084811840cde453Makoto Onuki */ 524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnorpublic class DropBoxTest extends AndroidTestCase { 53ff94e0351a908504c588efac2084811840cde453Makoto Onuki private Context mContext; 54ff94e0351a908504c588efac2084811840cde453Makoto Onuki 55ff94e0351a908504c588efac2084811840cde453Makoto Onuki @Override 56ff94e0351a908504c588efac2084811840cde453Makoto Onuki protected void setUp() throws Exception { 57ff94e0351a908504c588efac2084811840cde453Makoto Onuki super.setUp(); 58ff94e0351a908504c588efac2084811840cde453Makoto Onuki 59ff94e0351a908504c588efac2084811840cde453Makoto Onuki mContext = new ContextWrapper(super.getContext()) { 60ff94e0351a908504c588efac2084811840cde453Makoto Onuki @Override 61ff94e0351a908504c588efac2084811840cde453Makoto Onuki public void sendBroadcastAsUser(Intent intent, 62ff94e0351a908504c588efac2084811840cde453Makoto Onuki UserHandle user, String receiverPermission) { 63ff94e0351a908504c588efac2084811840cde453Makoto Onuki // Don't actually send broadcasts. 64ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 65ff94e0351a908504c588efac2084811840cde453Makoto Onuki }; 66ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 67ff94e0351a908504c588efac2084811840cde453Makoto Onuki 684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void tearDown() throws Exception { 6943866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 70625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_AGE_SECONDS, ""); 71625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_MAX_FILES, ""); 72625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, ""); 73625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", ""); 744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 76ff94e0351a908504c588efac2084811840cde453Makoto Onuki @Override 77ff94e0351a908504c588efac2084811840cde453Makoto Onuki public Context getContext() { 78ff94e0351a908504c588efac2084811840cde453Makoto Onuki return mContext; 79ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 80ff94e0351a908504c588efac2084811840cde453Makoto Onuki 814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddText() throws Exception { 820935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn File dir = getEmptyDir("testAddText"); 83ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 84ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 85b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 860935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn 874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST0"); 904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long between = System.currentTimeMillis(); 924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST2"); 954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(5); 964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long after = System.currentTimeMillis(); 974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 98f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 99f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 100f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 101b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis())); 1024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() > before); 1044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() < between); 1054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() > between); 1064410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() < e2.getTimeMillis()); 1074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e2.getTimeMillis() < after); 1084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST0", e0.getText(80)); 1104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST1", e1.getText(80)); 1114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TES", e2.getText(3)); 1124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 1144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 1154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 1164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 1174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddData() throws Exception { 1190935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn File dir = getEmptyDir("testAddData"); 120ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 121ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 122b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 1230935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn 1244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 125ff94e0351a908504c588efac2084811840cde453Makoto Onuki Thread.sleep(1); 1264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addData("DropBoxTest", "TEST".getBytes(), 0); 127ff94e0351a908504c588efac2084811840cde453Makoto Onuki Thread.sleep(1); 1284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long after = System.currentTimeMillis(); 1294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 130f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", before); 131ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertNotNull(e); 132ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertNull(dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 1334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest", e.getTag()); 1354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e.getTimeMillis() >= before); 1364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e.getFlags()); 1374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e.getText(80)); 1384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf = new byte[80]; 1404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", new String(buf, 0, e.getInputStream().read(buf))); 1414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e.close(); 1434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 1444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddFile() throws Exception { 1464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAddFile"); 1474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 1484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 149ff94e0351a908504c588efac2084811840cde453Makoto Onuki File clientDir = getEmptyDir("testAddFile_client"); 150ff94e0351a908504c588efac2084811840cde453Makoto Onuki 151ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f0 = new File(clientDir, "f0.txt"); 152ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f1 = new File(clientDir, "f1.txt.gz"); 153ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f2 = new File(clientDir, "f2.dat"); 154ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f3 = new File(clientDir, "f2.dat.gz"); 1554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w0 = new FileWriter(f0); 1574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz1 = new GZIPOutputStream(new FileOutputStream(f1)); 1584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileOutputStream os2 = new FileOutputStream(f2); 1594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz3 = new GZIPOutputStream(new FileOutputStream(f3)); 1604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.write("FILE0"); 1624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz1.write("FILE1".getBytes()); 1634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os2.write("DATA2".getBytes()); 1644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz3.write("DATA3".getBytes()); 1654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1664410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.close(); 1674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz1.close(); 1684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os2.close(); 1694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz3.close(); 1704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 171ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 172ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 173b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 1744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 175eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f0, DropBoxManager.IS_TEXT); 176eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f1, DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED); 177eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f2, 0); 178eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile("DropBoxTest", f3, DropBoxManager.IS_GZIPPED); 1794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 180f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 181f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 182f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis()); 183f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry("DropBoxTest", e2.getTimeMillis()); 184b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 1854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e0.getTimeMillis() > before); 1874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e1.getTimeMillis() > e0.getTimeMillis()); 1884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e2.getTimeMillis() > e1.getTimeMillis()); 1894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(e3.getTimeMillis() > e2.getTimeMillis()); 1904410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 191f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor assertEquals(DropBoxManager.IS_TEXT, e0.getFlags()); 192f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor assertEquals(DropBoxManager.IS_TEXT, e1.getFlags()); 1934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e2.getFlags()); 1944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(0, e3.getFlags()); 1954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FILE0", e0.getText(80)); 1974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf1 = new byte[80]; 1994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FILE1", new String(buf1, 0, e1.getInputStream().read(buf1))); 2004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e2.getText(80)); 2024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf2 = new byte[80]; 2034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DATA2", new String(buf2, 0, e2.getInputStream().read(buf2))); 2044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(null == e3.getText(80)); 2064410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] buf3 = new byte[80]; 2074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DATA3", new String(buf3, 0, e3.getInputStream().read(buf3))); 2084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 2134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 2144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAddEntriesInTheFuture() throws Exception { 2164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAddEntriesInTheFuture"); 2174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 2184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Near future: should be allowed to persist 2204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w0 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 5000) + ".txt")); 2214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.write("FUTURE0"); 2224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w0.close(); 2234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Far future: should be collapsed 2254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileWriter w1 = new FileWriter(new File(dir, "DropBoxTest@" + (before + 100000) + ".txt")); 2264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w1.write("FUTURE1"); 2274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor w1.close(); 2284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Another far future item, this one gzipped 2304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f2 = new File(dir, "DropBoxTest@" + (before + 100001) + ".txt.gz"); 2314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor GZIPOutputStream gz2 = new GZIPOutputStream(new FileOutputStream(f2)); 2324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz2.write("FUTURE2".getBytes()); 2334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor gz2.close(); 2344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Tombstone in the far future 2364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new FileOutputStream(new File(dir, "DropBoxTest@" + (before + 100002) + ".lost")).close(); 2374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 238ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 239ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 240b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 2414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Until a write, the timestamps are taken at face value 243f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 244f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 245f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 246f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 247b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e3.getTimeMillis())); 2484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2494410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE0", e0.getText(80)); 2504410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE1", e1.getText(80)); 2514410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE2", e2.getText(80)); 2524410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e3.getText(80)); 2534410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2544410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5000, e0.getTimeMillis()); 2554410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100000, e1.getTimeMillis()); 2564410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100001, e2.getTimeMillis()); 2574410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 100002, e3.getTimeMillis()); 2584410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2594410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2604410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2614410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2624410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 2634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Write something to force a collapse 2654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("NotDropBoxTest", "FUTURE"); 266b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e0 = dropbox.getNextEntry(null, before); 267b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 268b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 269b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 270b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e3.getTimeMillis())); 2714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE0", e0.getText(80)); 2734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE1", e1.getText(80)); 2744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("FUTURE2", e2.getText(80)); 2754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e3.getText(80)); 2764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5000, e0.getTimeMillis()); 2784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5001, e1.getTimeMillis()); 2794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5002, e2.getTimeMillis()); 2804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(before + 5003, e3.getTimeMillis()); 2814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 2834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 2844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 2854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 2864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 2874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 2884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testIsTagEnabled() throws Exception { 2890935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn File dir = getEmptyDir("testIsTagEnabled"); 290ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 291ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 292b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 2930935f3ce512a62f943d2cc4daa65145ad6937c34Tim Kilbourn 2944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 2954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-ENABLED"); 2964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dropbox.isTagEnabled("DropBoxTest")); 2974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 29843866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 299625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", 30043866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker "disabled"); 3014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-DISABLED"); 3034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertFalse(dropbox.isTagEnabled("DropBoxTest")); 3044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 305625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_TAG_PREFIX + "DropBoxTest", 30643866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ""); 3074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST-ENABLED-AGAIN"); 3094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dropbox.isTagEnabled("DropBoxTest")); 3104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 311f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry("DropBoxTest", before); 312f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry("DropBoxTest", e0.getTimeMillis()); 313b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e1.getTimeMillis())); 3144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST-ENABLED", e0.getText(80)); 3164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST-ENABLED-AGAIN", e1.getText(80)); 3174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 3194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 3204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 3214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 322b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor public void testGetNextEntry() throws Exception { 323b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor File dir = getEmptyDir("testGetNextEntry"); 324ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 325ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 326b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 327b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 328b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor long before = System.currentTimeMillis(); 329b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.A", "A0"); 330b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.B", "B0"); 331b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor dropbox.addText("DropBoxTest.A", "A1"); 332b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 333f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry a0 = dropbox.getNextEntry("DropBoxTest.A", before); 334f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry a1 = dropbox.getNextEntry("DropBoxTest.A", a0.getTimeMillis()); 335b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest.A", a1.getTimeMillis())); 336b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 337f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry b0 = dropbox.getNextEntry("DropBoxTest.B", before); 338b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest.B", b0.getTimeMillis())); 339b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 340f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x0 = dropbox.getNextEntry(null, before); 341f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x1 = dropbox.getNextEntry(null, x0.getTimeMillis()); 342f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry x2 = dropbox.getNextEntry(null, x1.getTimeMillis()); 343b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, x2.getTimeMillis())); 344b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 345b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", a0.getTag()); 346b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", a1.getTag()); 347b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A0", a0.getText(80)); 348b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A1", a1.getText(80)); 349b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 350b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.B", b0.getTag()); 351b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("B0", b0.getText(80)); 352b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 353b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", x0.getTag()); 354b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.B", x1.getTag()); 355b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest.A", x2.getTag()); 356b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A0", x0.getText(80)); 357b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("B0", x1.getText(80)); 358b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("A1", x2.getText(80)); 359b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 360b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor a0.close(); 361b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor a1.close(); 362b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor b0.close(); 363b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x0.close(); 364b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x1.close(); 365b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor x2.close(); 366b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor } 367b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 3684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testSizeLimits() throws Exception { 3694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testSizeLimits"); 3704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int blockSize = new StatFs(dir.getPath()).getBlockSize(); 3714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Limit storage to 10 blocks 3734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int kb = blockSize * 10 / 1024; 37443866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 375625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, Integer.toString(kb)); 3764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Three tags using a total of 12 blocks: 3784410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest0 [ ][ ] 3794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest1 [x][ ][ ][ ][xxx(20 blocks)xxx] 3804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // DropBoxTest2 [xxxxxxxxxx][ ][ ] 3814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // 3824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // The blocks marked "x" will be removed due to storage restrictions. 3834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Use random fill (so it doesn't compress), subtract a little for gzip overhead 3844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3854410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor final int overhead = 64; 3864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 387ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 388ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 389b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 390952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor 3914410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 3924410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest0", blockSize - overhead); 3934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 3944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize * 2 - overhead); 3974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize - overhead); 3984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest1", blockSize * 20 - overhead); 3994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize * 4 - overhead); 4014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 4024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest2", blockSize - overhead); 4034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 404f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 405f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 406f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 407f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 408f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 409f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 410f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e6 = dropbox.getNextEntry(null, e5.getTimeMillis()); 411f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e7 = dropbox.getNextEntry(null, e6.getTimeMillis()); 412f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e8 = dropbox.getNextEntry(null, e7.getTimeMillis()); 413f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e9 = dropbox.getNextEntry(null, e8.getTimeMillis()); 414b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e9.getTimeMillis())); 4154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest0", e0.getTag()); 4174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest0", e1.getTag()); 4184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e0)); 4194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e1)); 4204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e2.getTag()); 4224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e3.getTag()); 4234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e4.getTag()); 4244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e5.getTag()); 4254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest1", e6.getTag()); 4264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e2)); // Tombstone 4274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e3)); 4284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize * 2 - overhead, getEntrySize(e4)); 4294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e5)); 4304410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e6)); 4314410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4324410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e7.getTag()); 4334410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e8.getTag()); 4344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest2", e9.getTag()); 4354410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e7)); // Tombstone 4364410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e8)); 4374410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(blockSize - overhead, getEntrySize(e9)); 4384410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4394410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4404410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 4414410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e2.close(); 4424410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e3.close(); 4434410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e4.close(); 4444410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e5.close(); 4454410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e6.close(); 4464410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e7.close(); 4474410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e8.close(); 4484410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e9.close(); 449b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 450b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor // Specifying a tag name skips tombstone records. 451b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 452f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t0 = dropbox.getNextEntry("DropBoxTest1", before); 453f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t1 = dropbox.getNextEntry("DropBoxTest1", t0.getTimeMillis()); 454f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry t2 = dropbox.getNextEntry("DropBoxTest1", t1.getTimeMillis()); 455b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest1", t2.getTimeMillis())); 456b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 457b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t0.getTag()); 458b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t1.getTag()); 459b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals("DropBoxTest1", t2.getTag()); 460b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 461b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize - overhead, getEntrySize(t0)); 462b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize * 2 - overhead, getEntrySize(t1)); 463b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertEquals(blockSize - overhead, getEntrySize(t2)); 464b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor 465b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t0.close(); 466b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t1.close(); 467b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor t2.close(); 4684410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 4694410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4704410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor public void testAgeLimits() throws Exception { 4714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getEmptyDir("testAgeLimits"); 4724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int blockSize = new StatFs(dir.getPath()).getBlockSize(); 4734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4744410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Limit storage to 10 blocks with an expiration of 1 second 4754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int kb = blockSize * 10 / 1024; 47643866e0c48bb0effe8805afd62b253e50ca7d591Doug Zongker ContentResolver cr = getContext().getContentResolver(); 477625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_AGE_SECONDS, "1"); 478625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_QUOTA_KB, Integer.toString(kb)); 4794410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Write one normal entry and another so big that it is instantly tombstoned 4814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor long before = System.currentTimeMillis(); 482ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 483ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 484b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 485952402704a175ba27f6c89dff1ada634c5ce5626Dan Egnor 4864410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST"); 4874410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor addRandomEntry(dropbox, "DropBoxTest", blockSize * 20); 4884410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4894410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Verify that things are as expected 490f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, before); 491f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 492b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e1.getTimeMillis())); 4934410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4944410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", e0.getText(80)); 4954410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(null, e1.getText(80)); 4964410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals(-1, getEntrySize(e1)); 4974410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 4984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 4994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e1.close(); 5004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Wait a second and write another entry -- old ones should be expunged 5024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor Thread.sleep(2000); 5034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 5044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 505b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor e0 = dropbox.getNextEntry(null, before); 506b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry(null, e0.getTimeMillis())); 5074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST1", e0.getText(80)); 5084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e0.close(); 5094410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 5104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5113a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor public void testFileCountLimits() throws Exception { 5123a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor File dir = getEmptyDir("testFileCountLimits"); 5133a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 514ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 515ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 516b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 5173a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST0"); 5183a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST1"); 5193a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST2"); 5203a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST3"); 5213a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST4"); 5223a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST5"); 5233a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5243a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Verify 6 files added 5253a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e0 = dropbox.getNextEntry(null, 0); 5263a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e1 = dropbox.getNextEntry(null, e0.getTimeMillis()); 5273a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e2 = dropbox.getNextEntry(null, e1.getTimeMillis()); 5283a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e3 = dropbox.getNextEntry(null, e2.getTimeMillis()); 5293a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e4 = dropbox.getNextEntry(null, e3.getTimeMillis()); 5303a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry e5 = dropbox.getNextEntry(null, e4.getTimeMillis()); 5313a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertTrue(null == dropbox.getNextEntry(null, e5.getTimeMillis())); 5323a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST0", e0.getText(80)); 5333a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST5", e5.getText(80)); 5343a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5353a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e0.close(); 5363a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e1.close(); 5373a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e2.close(); 5383a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e3.close(); 5393a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e4.close(); 5403a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor e5.close(); 5413a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5423a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Limit to 3 files and add one more entry 5433a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor ContentResolver cr = getContext().getContentResolver(); 544625239a05401bbf18b04d9874cea3f82da7c29a1Jeff Sharkey Settings.Global.putString(cr, Settings.Global.DROPBOX_MAX_FILES, "3"); 5453a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor dropbox.addText("DropBoxTest", "TEST6"); 5463a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5473a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor // Verify only 3 files left 5483a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f0 = dropbox.getNextEntry(null, 0); 5493a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f1 = dropbox.getNextEntry(null, f0.getTimeMillis()); 5503a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor DropBoxManager.Entry f2 = dropbox.getNextEntry(null, f1.getTimeMillis()); 5513a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertTrue(null == dropbox.getNextEntry(null, f2.getTimeMillis())); 5523a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST4", f0.getText(80)); 5533a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST5", f1.getText(80)); 5543a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor assertEquals("TEST6", f2.getText(80)); 5553a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 5563a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f0.close(); 5573a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f1.close(); 5583a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor f2.close(); 5593a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor } 5603a8b0c18a49c017ecfde8ebf4eb4bb5181ac6fefDan Egnor 561f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor public void testCreateDropBoxManagerWithInvalidDirectory() throws Exception { 562f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor // If created with an invalid directory, the DropBoxManager should suffer quietly 5634410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // and fail all operations (this is how it survives a full disk). 5644410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor // Once the directory becomes possible to create, it will start working. 5654410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 566f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor File dir = new File(getEmptyDir("testCreateDropBoxManagerWith"), "InvalidDirectory"); 5674410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new FileOutputStream(dir).close(); // Create an empty file 568ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManagerService service = new DropBoxManagerService(getContext(), dir, 569ff94e0351a908504c588efac2084811840cde453Makoto Onuki Looper.getMainLooper()); 570b8e8a91f54f9f11a5936611c00d198ed21824854Jeff Sharkey DropBoxManager dropbox = new DropBoxManager(getContext(), service.getServiceStub()); 5714410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5724410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "should be ignored"); 5734410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addData("DropBoxTest", "should be ignored".getBytes(), 0); 574b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", 0)); 5754410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5764410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dir.delete(); // Remove the file so a directory can be created 5774410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor dropbox.addText("DropBoxTest", "TEST"); 578f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor DropBoxManager.Entry e = dropbox.getNextEntry("DropBoxTest", 0); 579b3b06fc39b032288d33f663b687d78bec7f1d724Dan Egnor assertTrue(null == dropbox.getNextEntry("DropBoxTest", e.getTimeMillis())); 5804410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("DropBoxTest", e.getTag()); 5814410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertEquals("TEST", e.getText(80)); 5824410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor e.close(); 5834410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 5844410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 5856e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor public void testDropBoxEntrySerialization() throws Exception { 5866e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // Make sure DropBoxManager.Entry can be serialized to a Parcel and back 5876e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // under a variety of conditions. 5886e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5896e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor Parcel parcel = Parcel.obtain(); 5906e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File dir = getEmptyDir("testDropBoxEntrySerialization"); 5916e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 5926e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("empty", 1000000).writeToParcel(parcel, 0); 5936e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("string", 2000000, "String Value").writeToParcel(parcel, 0); 5946e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("bytes", 3000000, "Bytes Value".getBytes(), 5956e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_TEXT).writeToParcel(parcel, 0); 5966e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("zerobytes", 4000000, new byte[0], 0).writeToParcel(parcel, 0); 5976e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("emptybytes", 5000000, (byte[]) null, 5986e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 5996e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6006e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6016e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badbytes", 99999, 6026e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor "Bad Bytes Value".getBytes(), 6036e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 6046e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for non-null byte[] and IS_EMPTY flags"); 6056e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 6066e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6076e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6086e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6096e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6106e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badbytes", 99999, (byte[]) null, 0).writeToParcel(parcel, 0); 6116e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for null byte[] and non-IS_EMPTY flags"); 6126e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 6136e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6146e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6156e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6166e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File f = new File(dir, "file.dat"); 6176e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor FileOutputStream os = new FileOutputStream(f); 6186e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.write("File Value".getBytes()); 6196e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.close(); 6206e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6216e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("file", 6000000, f, DropBoxManager.IS_TEXT).writeToParcel( 6226e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6236e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("binfile", 7000000, f, 0).writeToParcel( 6246e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("emptyfile", 8000000, (ParcelFileDescriptor) null, 6266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_EMPTY).writeToParcel(parcel, 0); 6276e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6286e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6296e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, new File(dir, "nonexist.dat"), 0); 6306e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IOException expected for nonexistent file"); 6316e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IOException e) { 6326e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6336e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6346e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6356e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6366e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, f, DropBoxManager.IS_EMPTY).writeToParcel( 6376e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, 0); 6386e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for non-null file and IS_EMPTY flags"); 6396e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 6406e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6416e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6426e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6436e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor try { 6446e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("badfile", 99999, (ParcelFileDescriptor) null, 0); 6456e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor fail("IllegalArgumentException expected for null PFD and non-IS_EMPTY flags"); 6466e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } catch (IllegalArgumentException e) { 6476e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // expected 6486e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 6496e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6506e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File gz = new File(dir, "file.gz"); 6516e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor GZIPOutputStream gzout = new GZIPOutputStream(new FileOutputStream(gz)); 6526e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor gzout.write("Gzip File Value".getBytes()); 6536e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor gzout.close(); 6546e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6556e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("gzipfile", 9000000, gz, 6566e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED).writeToParcel( 6576e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6586e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("gzipbinfile", 10000000, gz, 6596e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.IS_GZIPPED).writeToParcel( 6606e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 6616e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6626e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // 6636e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // Switch from writing to reading 6646e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor // 6656e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6666e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.setDataPosition(0); 6676e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.Entry e; 6686e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6696e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6706e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("empty", e.getTag()); 6716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(1000000, e.getTimeMillis()); 6726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 6736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 6756e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6766e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6776e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6786e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("string", e.getTag()); 6796e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(2000000, e.getTimeMillis()); 6806e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6816e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("String Value", e.getText(100)); 6826e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("String Value", 6836e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 6846e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6856e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6866e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6876e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("bytes", e.getTag()); 6886e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(3000000, e.getTimeMillis()); 6896e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 6906e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Bytes Value", e.getText(100)); 6916e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 6926e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 6936e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 6946e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("zerobytes", e.getTag()); 6956e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(4000000, e.getTimeMillis()); 6966e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 6976e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 6986e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, 6996e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 7006e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7016e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7026e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7036e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("emptybytes", e.getTag()); 7046e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(5000000, e.getTimeMillis()); 7056e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 7066e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 7076e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 7086e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7096e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7106e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7116e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("file", e.getTag()); 7126e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(6000000, e.getTimeMillis()); 7136e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 7146e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("File Value", e.getText(100)); 7156e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7166e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7176e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7186e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("binfile", e.getTag()); 7196e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(7000000, e.getTimeMillis()); 7206e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 7216e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 7226e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("File Value", 7236e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 7246e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7256e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7266e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("emptyfile", e.getTag()); 7276e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(8000000, e.getTimeMillis()); 7286e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_EMPTY, e.getFlags()); 7296e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 7306e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getInputStream()); 7316e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7326e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7336e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7346e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("gzipfile", e.getTag()); 7356e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(9000000, e.getTimeMillis()); 7366e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(DropBoxManager.IS_TEXT, e.getFlags()); 7376e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Gzip File Value", e.getText(100)); 7386e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7396e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7406e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7416e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("gzipbinfile", e.getTag()); 7426e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(10000000, e.getTimeMillis()); 7436e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, e.getFlags()); 7446e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(null, e.getText(100)); 7456e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("Gzip File Value", 7466e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new BufferedReader(new InputStreamReader(e.getInputStream())).readLine()); 7476e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7486e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals(0, parcel.dataAvail()); 7496e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.recycle(); 7506e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7516e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7526e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor public void testDropBoxEntrySerializationDoesntLeakFileDescriptors() throws Exception { 7536e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File dir = getEmptyDir("testDropBoxEntrySerialization"); 7546e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor File f = new File(dir, "file.dat"); 7556e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor FileOutputStream os = new FileOutputStream(f); 7566e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.write("File Value".getBytes()); 7576e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor os.close(); 7586e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7596e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor int before = countOpenFiles(); 7606e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertTrue(before > 0); 7616e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7626e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor for (int i = 0; i < 1000; i++) { 7636e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor Parcel parcel = Parcel.obtain(); 7646e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor new DropBoxManager.Entry("file", 1000000, f, 0).writeToParcel( 7656e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel, Parcelable.PARCELABLE_WRITE_RETURN_VALUE); 7666e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7676e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.setDataPosition(0); 7686e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor DropBoxManager.Entry e = DropBoxManager.Entry.CREATOR.createFromParcel(parcel); 7696e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertEquals("file", e.getTag()); 7706e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor e.close(); 7716e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7726e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor parcel.recycle(); 7736e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7746e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 7756e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor int after = countOpenFiles(); 7766e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertTrue(after > 0); 7776e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor assertTrue(after < before + 20); 7786e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 7796e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 780ff94e0351a908504c588efac2084811840cde453Makoto Onuki public void testEntryFile() throws Exception { 781ff94e0351a908504c588efac2084811840cde453Makoto Onuki File fromDir = getEmptyDir("testEntryFile_from"); 782ff94e0351a908504c588efac2084811840cde453Makoto Onuki File toDir = getEmptyDir("testEntryFile_to"); 783ff94e0351a908504c588efac2084811840cde453Makoto Onuki 784ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 785ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "f0.txt"); 786ff94e0351a908504c588efac2084811840cde453Makoto Onuki try (FileWriter w = new FileWriter(f)) { 787ff94e0351a908504c588efac2084811840cde453Makoto Onuki w.write("abc"); 788ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 789ff94e0351a908504c588efac2084811840cde453Makoto Onuki 790ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, toDir, "tag:!", 12345, DropBoxManager.IS_TEXT, 1024); 791ff94e0351a908504c588efac2084811840cde453Makoto Onuki 792ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 793ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 794ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_TEXT, e.flags); 795ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(1, e.blocks); 796ff94e0351a908504c588efac2084811840cde453Makoto Onuki 797ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertFalse(f.exists()); // Because it should be renamed. 798ff94e0351a908504c588efac2084811840cde453Makoto Onuki 799ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.hasFile()); 800ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(new File(toDir, "tag%3A!@12345.txt"), e.getFile(toDir)); 801ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.getFile(toDir).exists()); 802ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 803ff94e0351a908504c588efac2084811840cde453Makoto Onuki // Same test with gzip. 804ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 805ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "f0.txt.gz"); // It's a lie; it's not actually gz. 806ff94e0351a908504c588efac2084811840cde453Makoto Onuki try (FileWriter w = new FileWriter(f)) { 807ff94e0351a908504c588efac2084811840cde453Makoto Onuki w.write("abc"); 808ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 809ff94e0351a908504c588efac2084811840cde453Makoto Onuki 810ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, toDir, "tag:!", 12345, 811ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED, 1024); 812ff94e0351a908504c588efac2084811840cde453Makoto Onuki 813ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 814ff94e0351a908504c588efac2084811840cde453Makoto Onuki 815ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertFalse(f.exists()); // Because it should be renamed. 816ff94e0351a908504c588efac2084811840cde453Makoto Onuki 817ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.hasFile()); 818ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(new File(toDir, "tag%3A!@12345.txt.gz"), e.getFile(toDir)); 819ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.getFile(toDir).exists()); 820ff94e0351a908504c588efac2084811840cde453Makoto Onuki 821ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 822ff94e0351a908504c588efac2084811840cde453Makoto Onuki // binary, gzip. 823ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 824ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "f0.dat.gz"); // It's a lie; it's not actually gz. 825ff94e0351a908504c588efac2084811840cde453Makoto Onuki try (FileWriter w = new FileWriter(f)) { 826ff94e0351a908504c588efac2084811840cde453Makoto Onuki w.write("abc"); 827ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 828ff94e0351a908504c588efac2084811840cde453Makoto Onuki 829ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, toDir, "tag:!", 12345, 830ff94e0351a908504c588efac2084811840cde453Makoto Onuki DropBoxManager.IS_GZIPPED, 1024); 831ff94e0351a908504c588efac2084811840cde453Makoto Onuki 832ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 833ff94e0351a908504c588efac2084811840cde453Makoto Onuki 834ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertFalse(f.exists()); // Because it should be renamed. 835ff94e0351a908504c588efac2084811840cde453Makoto Onuki 836ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.hasFile()); 837ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(new File(toDir, "tag%3A!@12345.dat.gz"), e.getFile(toDir)); 838ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.getFile(toDir).exists()); 839ff94e0351a908504c588efac2084811840cde453Makoto Onuki 840ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 841ff94e0351a908504c588efac2084811840cde453Makoto Onuki 842ff94e0351a908504c588efac2084811840cde453Makoto Onuki // Tombstone. 843ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 844ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(toDir, "tag:!", 12345); 845ff94e0351a908504c588efac2084811840cde453Makoto Onuki 846ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 847ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 848ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_EMPTY, e.flags); 849ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 850ff94e0351a908504c588efac2084811840cde453Makoto Onuki 851ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.hasFile()); 852ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(new File(toDir, "tag%3A!@12345.lost"), e.getFile(toDir)); 853ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(e.getFile(toDir).exists()); 854ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 855ff94e0351a908504c588efac2084811840cde453Makoto Onuki 856ff94e0351a908504c588efac2084811840cde453Makoto Onuki // From existing files. 857ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 858ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag%3A!@12345.dat"); 859ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 860ff94e0351a908504c588efac2084811840cde453Makoto Onuki 861ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 862ff94e0351a908504c588efac2084811840cde453Makoto Onuki 863ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 864ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 865ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.flags); 866ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 867ff94e0351a908504c588efac2084811840cde453Makoto Onuki 868ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(f.exists()); 869ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 870ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 871ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag%3A!@12345.dat.gz"); 872ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 873ff94e0351a908504c588efac2084811840cde453Makoto Onuki 874ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 875ff94e0351a908504c588efac2084811840cde453Makoto Onuki 876ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 877ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 878ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_GZIPPED, e.flags); 879ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 880ff94e0351a908504c588efac2084811840cde453Makoto Onuki 881ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(f.exists()); 882ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 883ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 884ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag%3A!@12345.txt"); 885ff94e0351a908504c588efac2084811840cde453Makoto Onuki try (FileWriter w = new FileWriter(f)) { 886ff94e0351a908504c588efac2084811840cde453Makoto Onuki w.write(new char[1024]); 887ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 888ff94e0351a908504c588efac2084811840cde453Makoto Onuki 889ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 890ff94e0351a908504c588efac2084811840cde453Makoto Onuki 891ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 892ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 893ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_TEXT, e.flags); 894ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(1, e.blocks); 895ff94e0351a908504c588efac2084811840cde453Makoto Onuki 896ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(f.exists()); 897ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 898ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 899ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag%3A!@12345.txt.gz"); 900ff94e0351a908504c588efac2084811840cde453Makoto Onuki try (FileWriter w = new FileWriter(f)) { 901ff94e0351a908504c588efac2084811840cde453Makoto Onuki w.write(new char[1025]); 902ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 903ff94e0351a908504c588efac2084811840cde453Makoto Onuki 904ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 905ff94e0351a908504c588efac2084811840cde453Makoto Onuki 906ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 907ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 908ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_TEXT | DropBoxManager.IS_GZIPPED, e.flags); 909ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(2, e.blocks); 910ff94e0351a908504c588efac2084811840cde453Makoto Onuki 911ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(f.exists()); 912ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 913ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 914ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag%3A!@12345.lost"); 915ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 916ff94e0351a908504c588efac2084811840cde453Makoto Onuki 917ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 918ff94e0351a908504c588efac2084811840cde453Makoto Onuki 919ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("tag:!", e.tag); 920ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 921ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_EMPTY, e.flags); 922ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 923ff94e0351a908504c588efac2084811840cde453Makoto Onuki 924ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(f.exists()); 925ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 926ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 927ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "@12345.dat"); // Empty tag -- this actually works. 928ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 929ff94e0351a908504c588efac2084811840cde453Makoto Onuki 930ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 931ff94e0351a908504c588efac2084811840cde453Makoto Onuki 932ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals("", e.tag); 933ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(12345, e.timestampMillis); 934ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.flags); 935ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 936ff94e0351a908504c588efac2084811840cde453Makoto Onuki 937ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertTrue(f.exists()); 938ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 939ff94e0351a908504c588efac2084811840cde453Makoto Onuki // From invalid filenames. 940ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 941ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag.dat"); // No @. 942ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 943ff94e0351a908504c588efac2084811840cde453Makoto Onuki 944ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 945ff94e0351a908504c588efac2084811840cde453Makoto Onuki 946ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(null, e.tag); 947ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.timestampMillis); 948ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_EMPTY, e.flags); 949ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 950ff94e0351a908504c588efac2084811840cde453Makoto Onuki 951ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertFalse(f.exists()); 952ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 953ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 954ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag@.dat"); // Invalid timestamp. 955ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 956ff94e0351a908504c588efac2084811840cde453Makoto Onuki 957ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 958ff94e0351a908504c588efac2084811840cde453Makoto Onuki 959ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(null, e.tag); 960ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.timestampMillis); 961ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_EMPTY, e.flags); 962ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 963ff94e0351a908504c588efac2084811840cde453Makoto Onuki 964ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertFalse(f.exists()); 965ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 966ff94e0351a908504c588efac2084811840cde453Makoto Onuki { 967ff94e0351a908504c588efac2084811840cde453Makoto Onuki File f = new File(fromDir, "tag@12345.daxt"); // Invalid extension. 968ff94e0351a908504c588efac2084811840cde453Makoto Onuki f.createNewFile(); 969ff94e0351a908504c588efac2084811840cde453Makoto Onuki 970ff94e0351a908504c588efac2084811840cde453Makoto Onuki EntryFile e = new EntryFile(f, 1024); 971ff94e0351a908504c588efac2084811840cde453Makoto Onuki 972ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(null, e.tag); 973ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.timestampMillis); 974ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(DropBoxManager.IS_EMPTY, e.flags); 975ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(0, e.blocks); 976ff94e0351a908504c588efac2084811840cde453Makoto Onuki 977ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertFalse(f.exists()); 978ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 979ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 980ff94e0351a908504c588efac2084811840cde453Makoto Onuki 981ff94e0351a908504c588efac2084811840cde453Makoto Onuki public void testCompareEntries() { 982ff94e0351a908504c588efac2084811840cde453Makoto Onuki File dir = getEmptyDir("testCompareEntries"); 983ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(-1, 984ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "aaa@100.dat"), 1).compareTo( 985ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "bbb@200.dat"), 1))); 986ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(1, 987ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "aaa@200.dat"), 1).compareTo( 988ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "bbb@100.dat"), 1))); 989ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(-1, 990ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "aaa@100.dat"), 1).compareTo( 991ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "bbb@100.dat"), 1))); 992ff94e0351a908504c588efac2084811840cde453Makoto Onuki assertEquals(1, 993ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "bbb@100.dat"), 1).compareTo( 994ff94e0351a908504c588efac2084811840cde453Makoto Onuki new EntryFile(new File(dir, "aaa@100.dat"), 1))); 995ff94e0351a908504c588efac2084811840cde453Makoto Onuki } 996ff94e0351a908504c588efac2084811840cde453Makoto Onuki 997f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor private void addRandomEntry(DropBoxManager dropbox, String tag, int size) throws Exception { 9984410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor byte[] bytes = new byte[size]; 9994410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor new Random(System.currentTimeMillis()).nextBytes(bytes); 10004410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 10014410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File f = new File(getEmptyDir("addRandomEntry"), "random.dat"); 10024410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor FileOutputStream os = new FileOutputStream(f); 10034410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os.write(bytes); 10044410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor os.close(); 10054410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1006eb7a7d57ca50f85b054edadab766b51ff22a2dfdDan Egnor dropbox.addFile(tag, f, 0); 10074410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 10084410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 1009f18a01c77e78209b74e34d05cfb352fa4a92db5fDan Egnor private int getEntrySize(DropBoxManager.Entry e) throws Exception { 10104410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor InputStream is = e.getInputStream(); 10114410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor if (is == null) return -1; 10124410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor int length = 0; 10134410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor while (is.read() != -1) length++; 10144410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor return length; 10154410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 10164410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 10174410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor private void recursiveDelete(File file) { 10184410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor if (!file.delete() && file.isDirectory()) { 10194410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor for (File f : file.listFiles()) recursiveDelete(f); 10204410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor file.delete(); 10214410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 10224410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 10234410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor 10244410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor private File getEmptyDir(String name) { 10254410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor File dir = getContext().getDir("DropBoxTest." + name, 0); 10264410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor for (File f : dir.listFiles()) recursiveDelete(f); 10274410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor assertTrue(dir.listFiles().length == 0); 10284410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor return dir; 10294410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor } 10306e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor 10316e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor private int countOpenFiles() { 10326e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor return new File("/proc/" + Process.myPid() + "/fd").listFiles().length; 10336e6d60d4c85ce440d9ef5e5f36e708ed0ced65c6Dan Egnor } 10344410ec8f7cec6ab05a8c24c04fe2d5ed5d1e18dfDan Egnor} 1035