SyncStorageEngineTest.java revision 8ff9a156c04c24458d94c716a64a5b7327f0e987
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 178ff9a156c04c24458d94c716a64a5b7327f0e987Amith Yamasanipackage com.android.server.content; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.accounts.Account; 208ff9a156c04c24458d94c716a64a5b7327f0e987Amith Yamasaniimport android.content.ContentResolver; 218ff9a156c04c24458d94c716a64a5b7327f0e987Amith Yamasaniimport android.content.Context; 228ff9a156c04c24458d94c716a64a5b7327f0e987Amith Yamasaniimport android.content.ContextWrapper; 238ff9a156c04c24458d94c716a64a5b7327f0e987Amith Yamasaniimport android.content.Intent; 248ff9a156c04c24458d94c716a64a5b7327f0e987Amith Yamasaniimport android.content.PeriodicSync; 25f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.os.Bundle; 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.AndroidTestCase; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.RenamingDelegatingContext; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.test.mock.MockContentResolver; 29f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.test.mock.MockContext; 30f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.test.suitebuilder.annotation.LargeTest; 31f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.test.suitebuilder.annotation.MediumTest; 32f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport android.test.suitebuilder.annotation.SmallTest; 33c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 3457286f970641493b315b0b42aba7ac6b672cc8b8Alon Albertimport com.android.internal.os.AtomicFile; 3557286f970641493b315b0b42aba7ac6b672cc8b8Alon Albert 36c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintanaimport java.io.File; 37c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintanaimport java.io.FileOutputStream; 38f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabotimport java.util.List; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class SyncStorageEngineTest extends AndroidTestCase { 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani private File getSyncDir() { 4304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani return new File(new File(getContext().getFilesDir(), "system"), "sync"); 4404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani } 4504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Test that we handle the case of a history row being old enough to purge before the 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * correcponding sync is finished. This can happen if the clock changes while we are syncing. 49c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana * 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 512ad24f944ee68c6e14f3a214f0eef60f8cdb9eb8Brett Chabot // TODO: this test causes AidlTest to fail. Omit for now 522ad24f944ee68c6e14f3a214f0eef60f8cdb9eb8Brett Chabot // @SmallTest 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void testPurgeActiveSync() throws Exception { 54d9d2f1140b52fd0c014e9deac59f6000564b7e84Fred Quintana final Account account = new Account("a@example.com", "example.type"); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final String authority = "testprovider"; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MockContentResolver mockResolver = new MockContentResolver(); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SyncStorageEngine engine = SyncStorageEngine.newTestInstance( 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project new TestContext(mockResolver, getContext())); 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long time0 = 1000; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long historyId = engine.insertStartSyncEvent( 6457286f970641493b315b0b42aba7ac6b672cc8b8Alon Albert account, 0, SyncOperation.REASON_PERIODIC, authority, time0, 6557286f970641493b315b0b42aba7ac6b672cc8b8Alon Albert SyncStorageEngine.SOURCE_LOCAL, false /* initialization */, null /* extras */); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project long time1 = time0 + SyncStorageEngine.MILLIS_IN_4WEEKS * 2; 6777c560f3d7891d9ae1ad714b5f65a22ff4f4c06bFred Quintana engine.stopSyncEvent(historyId, time1 - time0, "yay", 0, 0); 68c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 69c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 70c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana /** 71c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana * Test that we can create, remove and retrieve periodic syncs 72c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana */ 73f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 74c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public void testPeriodics() throws Exception { 75c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Account account1 = new Account("a@example.com", "example.type"); 76c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Account account2 = new Account("b@example.com", "example.type.2"); 77c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final String authority = "testprovider"; 78c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Bundle extras1 = new Bundle(); 79c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras1.putString("a", "1"); 80c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Bundle extras2 = new Bundle(); 81c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putString("a", "2"); 82c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final int period1 = 200; 83c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final int period2 = 1000; 84c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 85c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync1 = new PeriodicSync(account1, authority, extras1, period1); 86c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync2 = new PeriodicSync(account1, authority, extras2, period1); 87c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync3 = new PeriodicSync(account1, authority, extras2, period2); 88c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync4 = new PeriodicSync(account2, authority, extras2, period2); 89c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 90c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana MockContentResolver mockResolver = new MockContentResolver(); 91c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 92c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana SyncStorageEngine engine = SyncStorageEngine.newTestInstance( 93c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana new TestContext(mockResolver, getContext())); 94c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 9504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account1, 0, authority); 9604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account2, 0, authority); 9704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account1, 1, authority); 98c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 99c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana // this should add two distinct periodic syncs for account1 and one for account2 10004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync1.account, 0, sync1.authority, sync1.extras, sync1.period); 10104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync2.account, 0, sync2.authority, sync2.extras, sync2.period); 10204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync3.account, 0, sync3.authority, sync3.extras, sync3.period); 10304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync4.account, 0, sync4.authority, sync4.extras, sync4.period); 10404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani // add a second user 10504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync2.account, 1, sync2.authority, sync2.extras, sync2.period); 106c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 10704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani List<PeriodicSync> syncs = engine.getPeriodicSyncs(account1, 0, authority); 108c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 109c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(2, syncs.size()); 110c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 111c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync1, syncs.get(0)); 112c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync3, syncs.get(1)); 113c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 11404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.removePeriodicSync(sync1.account, 0, sync1.authority, sync1.extras); 115c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 11604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account1, 0, authority); 117c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(1, syncs.size()); 118c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync3, syncs.get(0)); 119c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 12004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account2, 0, authority); 121c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(1, syncs.size()); 122c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync4, syncs.get(0)); 12304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 12404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(sync2.account, 1, sync2.authority); 12504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, syncs.size()); 12604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(sync2, syncs.get(0)); 127c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 128c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 12904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani private void removePeriodicSyncs(SyncStorageEngine engine, Account account, int userId, 13004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani String authority) { 13104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setIsSyncable(account, userId, authority, 13204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.getIsSyncable(account, 0, authority)); 13304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani List<PeriodicSync> syncs = engine.getPeriodicSyncs(account, userId, authority); 134c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana for (PeriodicSync sync : syncs) { 13504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.removePeriodicSync(sync.account, userId, sync.authority, sync.extras); 136c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 137c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 138c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 139f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @LargeTest 140c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public void testAuthorityPersistence() throws Exception { 141c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Account account1 = new Account("a@example.com", "example.type"); 142c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Account account2 = new Account("b@example.com", "example.type.2"); 143c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final String authority1 = "testprovider1"; 144c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final String authority2 = "testprovider2"; 145c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Bundle extras1 = new Bundle(); 146c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras1.putString("a", "1"); 147c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final Bundle extras2 = new Bundle(); 148c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putString("a", "2"); 149c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putLong("b", 2); 150c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putInt("c", 1); 151c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putBoolean("d", true); 152c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putDouble("e", 1.2); 153c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putFloat("f", 4.5f); 154c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana extras2.putParcelable("g", account1); 155c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final int period1 = 200; 156c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana final int period2 = 1000; 157c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 158c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync1 = new PeriodicSync(account1, authority1, extras1, period1); 159c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync2 = new PeriodicSync(account1, authority1, extras2, period1); 160c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync3 = new PeriodicSync(account1, authority2, extras1, period1); 161c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync4 = new PeriodicSync(account1, authority2, extras2, period2); 162c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana PeriodicSync sync5 = new PeriodicSync(account2, authority1, extras1, period1); 163c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 164c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana MockContentResolver mockResolver = new MockContentResolver(); 165c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 166c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana SyncStorageEngine engine = SyncStorageEngine.newTestInstance( 167c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana new TestContext(mockResolver, getContext())); 168c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 16904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account1, 0, authority1); 17004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account2, 0, authority1); 17104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account1, 0, authority2); 17204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani removePeriodicSyncs(engine, account2, 0, authority2); 173c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 17404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setMasterSyncAutomatically(false, 0); 175c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 17604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setIsSyncable(account1, 0, authority1, 1); 17704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setSyncAutomatically(account1, 0, authority1, true); 178c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 17904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setIsSyncable(account2, 0, authority1, 1); 18004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setSyncAutomatically(account2, 0, authority1, true); 181c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 18204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setIsSyncable(account1, 0, authority2, 1); 18304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setSyncAutomatically(account1, 0, authority2, false); 184c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 18504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setIsSyncable(account2, 0, authority2, 0); 18604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.setSyncAutomatically(account2, 0, authority2, true); 187c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 18804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync1.account, 0, sync1.authority, sync1.extras, sync1.period); 18904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync2.account, 0, sync2.authority, sync2.extras, sync2.period); 19004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync3.account, 0, sync3.authority, sync3.extras, sync3.period); 19104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync4.account, 0, sync4.authority, sync4.extras, sync4.period); 19204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani engine.addPeriodicSync(sync5.account, 0, sync5.authority, sync5.extras, sync5.period); 193c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 194c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana engine.writeAllState(); 195c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana engine.clearAndReadState(); 196c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 19704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani List<PeriodicSync> syncs = engine.getPeriodicSyncs(account1, 0, authority1); 198c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(2, syncs.size()); 199c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync1, syncs.get(0)); 200c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync2, syncs.get(1)); 201c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 20204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account1, 0, authority2); 203c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(2, syncs.size()); 204c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync3, syncs.get(0)); 205c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync4, syncs.get(1)); 206c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 20704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account2, 0, authority1); 208c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(1, syncs.size()); 209c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana assertEquals(sync5, syncs.get(0)); 210c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 21104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account1, 0, authority1)); 21204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account2, 0, authority1)); 21304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account1, 0, authority2)); 21404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account2, 0, authority2)); 215c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 21604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, engine.getIsSyncable(account1, 0, authority1)); 21704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, engine.getIsSyncable(account2, 0, authority1)); 21804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, engine.getIsSyncable(account1, 0, authority2)); 21904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(0, engine.getIsSyncable(account2, 0, authority2)); 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 221c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 222f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 223c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana public void testAuthorityParsing() throws Exception { 224c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana final Account account = new Account("account1", "type1"); 225c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana final String authority1 = "auth1"; 226c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana final String authority2 = "auth2"; 227c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana final String authority3 = "auth3"; 228c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana final Bundle extras = new Bundle(); 229c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana PeriodicSync sync1 = new PeriodicSync(account, authority1, extras, (long) (60 * 60 * 24)); 230c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana PeriodicSync sync2 = new PeriodicSync(account, authority2, extras, (long) (60 * 60 * 24)); 231c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana PeriodicSync sync3 = new PeriodicSync(account, authority3, extras, (long) (60 * 60 * 24)); 232c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana PeriodicSync sync1s = new PeriodicSync(account, authority1, extras, 1000); 233c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana PeriodicSync sync2s = new PeriodicSync(account, authority2, extras, 1000); 234c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana PeriodicSync sync3s = new PeriodicSync(account, authority3, extras, 1000); 235c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 236c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana MockContentResolver mockResolver = new MockContentResolver(); 237c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 238c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana final TestContext testContext = new TestContext(mockResolver, getContext()); 239c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 240c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana byte[] accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 241c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<accounts>\n" 24204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<authority id=\"0\" user=\"0\" account=\"account1\" type=\"type1\" authority=\"auth1\" />\n" 24304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<authority id=\"1\" user=\"0\" account=\"account1\" type=\"type1\" authority=\"auth2\" />\n" 24404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<authority id=\"2\" account=\"account1\" type=\"type1\" authority=\"auth3\" />\n" 24504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<authority id=\"3\" user=\"1\" account=\"account1\" type=\"type1\" authority=\"auth3\" />\n" 246c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "</accounts>\n").getBytes(); 247c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 24804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani File syncDir = getSyncDir(); 249c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana syncDir.mkdirs(); 250c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana AtomicFile accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml")); 251c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana FileOutputStream fos = accountInfoFile.startWrite(); 252c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana fos.write(accountsFileData); 253c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountInfoFile.finishWrite(fos); 254c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 255fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana SyncStorageEngine engine = SyncStorageEngine.newTestInstance(testContext); 256c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 25704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani List<PeriodicSync> syncs = engine.getPeriodicSyncs(account, 0, authority1); 258c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(1, syncs.size()); 259c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(sync1, syncs.get(0)); 260c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 26104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority2); 262c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(1, syncs.size()); 263c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(sync2, syncs.get(0)); 264c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 26504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority3); 26604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, syncs.size()); 26704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(sync3, syncs.get(0)); 26804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 26904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 1, authority3); 270c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(1, syncs.size()); 271c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(sync3, syncs.get(0)); 272c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 273c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 274fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<accounts version=\"2\">\n" 275c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<authority id=\"0\" account=\"account1\" type=\"type1\" authority=\"auth1\" />\n" 276c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<authority id=\"1\" account=\"account1\" type=\"type1\" authority=\"auth2\" />\n" 277c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<authority id=\"2\" account=\"account1\" type=\"type1\" authority=\"auth3\" />\n" 278c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "</accounts>\n").getBytes(); 279c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 280c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml")); 281c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana fos = accountInfoFile.startWrite(); 282c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana fos.write(accountsFileData); 283c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountInfoFile.finishWrite(fos); 284c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 285c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana engine.clearAndReadState(); 286c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 28704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority1); 288c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(0, syncs.size()); 289c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 29004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority2); 291c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(0, syncs.size()); 292c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 29304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority3); 294c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(0, syncs.size()); 295c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 296c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 297fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<accounts version=\"2\">\n" 298c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<authority id=\"0\" account=\"account1\" type=\"type1\" authority=\"auth1\">\n" 299c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<periodicSync period=\"1000\" />\n" 300c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "</authority>" 301c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<authority id=\"1\" account=\"account1\" type=\"type1\" authority=\"auth2\">\n" 302c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<periodicSync period=\"1000\" />\n" 303c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "</authority>" 304c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<authority id=\"2\" account=\"account1\" type=\"type1\" authority=\"auth3\">\n" 305c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "<periodicSync period=\"1000\" />\n" 306c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "</authority>" 307c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana + "</accounts>\n").getBytes(); 308c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 309c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml")); 310c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana fos = accountInfoFile.startWrite(); 311c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana fos.write(accountsFileData); 312c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana accountInfoFile.finishWrite(fos); 313c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 314c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana engine.clearAndReadState(); 315c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 31604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority1); 317c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(1, syncs.size()); 318c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(sync1s, syncs.get(0)); 319c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 32004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority2); 321c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(1, syncs.size()); 322c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(sync2s, syncs.get(0)); 323c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana 32404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncs = engine.getPeriodicSyncs(account, 0, authority3); 325c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(1, syncs.size()); 326c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana assertEquals(sync3s, syncs.get(0)); 327c2e4691d788088b22eadc9b2d35e9bdf0b6a0ffcFred Quintana } 328fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 329f76c56bcaa9df1d1afa711177f813dc63f399795Brett Chabot @MediumTest 33004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani public void testListenForTicklesParsing() throws Exception { 33104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani byte[] accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 33204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<accounts>\n" 33304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<listenForTickles user=\"0\" enabled=\"false\" />" 33404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<listenForTickles user=\"1\" enabled=\"true\" />" 33504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<authority id=\"0\" user=\"0\" account=\"account1\" type=\"type1\" authority=\"auth1\" />\n" 33604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "<authority id=\"1\" user=\"1\" account=\"account1\" type=\"type1\" authority=\"auth1\" />\n" 33704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani + "</accounts>\n").getBytes(); 33804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 33904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani MockContentResolver mockResolver = new MockContentResolver(); 34004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani final TestContext testContext = new TestContext(mockResolver, getContext()); 34104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 34204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani File syncDir = getSyncDir(); 34304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani syncDir.mkdirs(); 34404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani AtomicFile accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml")); 34504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani FileOutputStream fos = accountInfoFile.startWrite(); 34604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani fos.write(accountsFileData); 34704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani accountInfoFile.finishWrite(fos); 34804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 34904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani SyncStorageEngine engine = SyncStorageEngine.newTestInstance(testContext); 35004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 35104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getMasterSyncAutomatically(0)); 35204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getMasterSyncAutomatically(1)); 35304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getMasterSyncAutomatically(2)); 35404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 35504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani } 35604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 35704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani @MediumTest 358fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana public void testAuthorityRenaming() throws Exception { 359fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final Account account1 = new Account("acc1", "type1"); 360fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final Account account2 = new Account("acc2", "type2"); 361fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final String authorityContacts = "contacts"; 362fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final String authorityCalendar = "calendar"; 363fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final String authorityOther = "other"; 364fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final String authorityContactsNew = "com.android.contacts"; 365fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final String authorityCalendarNew = "com.android.calendar"; 366fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 367fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana MockContentResolver mockResolver = new MockContentResolver(); 368fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 369fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final TestContext testContext = new TestContext(mockResolver, getContext()); 370fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 371fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana byte[] accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 372fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<accounts>\n" 373fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"0\" account=\"acc1\" type=\"type1\" authority=\"contacts\" />\n" 374fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"1\" account=\"acc1\" type=\"type1\" authority=\"calendar\" />\n" 375fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"2\" account=\"acc1\" type=\"type1\" authority=\"other\" />\n" 376fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"3\" account=\"acc2\" type=\"type2\" authority=\"contacts\" />\n" 377fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"4\" account=\"acc2\" type=\"type2\" authority=\"calendar\" />\n" 378fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"5\" account=\"acc2\" type=\"type2\" authority=\"other\" />\n" 379fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"6\" account=\"acc2\" type=\"type2\" enabled=\"false\"" 380fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + " authority=\"com.android.calendar\" />\n" 381fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"7\" account=\"acc2\" type=\"type2\" enabled=\"false\"" 382fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + " authority=\"com.android.contacts\" />\n" 383fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "</accounts>\n").getBytes(); 384fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 385fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana File syncDir = new File(new File(testContext.getFilesDir(), "system"), "sync"); 386fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana syncDir.mkdirs(); 387fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana AtomicFile accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml")); 388fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana FileOutputStream fos = accountInfoFile.startWrite(); 389fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana fos.write(accountsFileData); 390fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana accountInfoFile.finishWrite(fos); 391fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 392fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana SyncStorageEngine engine = SyncStorageEngine.newTestInstance(testContext); 393fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 39404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account1, 0, authorityContacts)); 39504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account1, 0, authorityCalendar)); 39604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account1, 0, authorityOther)); 39704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account1, 0, authorityContactsNew)); 39804e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account1, 0, authorityCalendarNew)); 39904e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani 40004e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account2, 0, authorityContacts)); 40104e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account2, 0, authorityCalendar)); 40204e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(true, engine.getSyncAutomatically(account2, 0, authorityOther)); 40304e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account2, 0, authorityContactsNew)); 40404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(false, engine.getSyncAutomatically(account2, 0, authorityCalendarNew)); 405fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana } 406fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 407fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana @SmallTest 408fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana public void testSyncableMigration() throws Exception { 409fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final Account account = new Account("acc", "type"); 410fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 411fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana MockContentResolver mockResolver = new MockContentResolver(); 412fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 413fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana final TestContext testContext = new TestContext(mockResolver, getContext()); 414fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 415fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana byte[] accountsFileData = ("<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n" 416fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<accounts>\n" 417fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"0\" account=\"acc\" authority=\"other1\" />\n" 418fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"1\" account=\"acc\" type=\"type\" authority=\"other2\" />\n" 419fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"2\" account=\"acc\" type=\"type\" syncable=\"false\"" 420fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + " authority=\"other3\" />\n" 421fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "<authority id=\"3\" account=\"acc\" type=\"type\" syncable=\"true\"" 422fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + " authority=\"other4\" />\n" 423fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana + "</accounts>\n").getBytes(); 424fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 425fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana File syncDir = new File(new File(testContext.getFilesDir(), "system"), "sync"); 426fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana syncDir.mkdirs(); 427fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana AtomicFile accountInfoFile = new AtomicFile(new File(syncDir, "accounts.xml")); 428fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana FileOutputStream fos = accountInfoFile.startWrite(); 429fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana fos.write(accountsFileData); 430fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana accountInfoFile.finishWrite(fos); 431fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 432fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana SyncStorageEngine engine = SyncStorageEngine.newTestInstance(testContext); 433fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana 43404e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(-1, engine.getIsSyncable(account, 0, "other1")); 43504e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, engine.getIsSyncable(account, 0, "other2")); 43604e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(0, engine.getIsSyncable(account, 0, "other3")); 43704e0d265e3385e9d1fbc35e43c4e8caffbbe3290Amith Yamasani assertEquals(1, engine.getIsSyncable(account, 0, "other4")); 438fb084400d6afa6443a421117fbcaee0265d38fb6Fred Quintana } 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass TestContext extends ContextWrapper { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ContentResolver mResolver; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 445c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana private final Context mRealContext; 446c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public TestContext(ContentResolver resolver, Context realContext) { 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project super(new RenamingDelegatingContext(new MockContext(), realContext, "test.")); 449c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana mRealContext = realContext; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mResolver = resolver; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 454c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public File getFilesDir() { 455c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana return mRealContext.getFilesDir(); 456c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 457c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana 458c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana @Override 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void enforceCallingOrSelfPermission(String permission, String message) { 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 462c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana @Override 463c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana public void sendBroadcast(Intent intent) { 464c5d1c6db61f208b206b260f897bb5bbc64be4d97Fred Quintana } 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ContentResolver getContentResolver() { 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mResolver; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 471