1 /* 2 * Copyright (C) 2010 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.content; 18 19 import android.accounts.Account; 20 import android.content.ContentResolver; 21 import android.os.Bundle; 22 import android.os.PersistableBundle; 23 import android.test.AndroidTestCase; 24 import android.test.suitebuilder.annotation.SmallTest; 25 26 /** 27 * Test for SyncOperation. 28 * 29 * atest ${ANDROID_BUILD_TOP}/frameworks/base/services/tests/servicestests/src/com/android/server/content/SyncOperationTest.java 30 */ 31 @SmallTest 32 public class SyncOperationTest extends AndroidTestCase { 33 34 Account mDummy; 35 /** Indicate an unimportant long that we're not testing. */ 36 long mUnimportantLong = 0L; 37 /** Empty bundle. */ 38 Bundle mEmpty; 39 /** Silly authority. */ 40 String mAuthority; 41 42 @Override setUp()43 public void setUp() { 44 mDummy = new Account("account1", "type1"); 45 mEmpty = new Bundle(); 46 mAuthority = "authority1"; 47 } 48 49 @SmallTest testToKey()50 public void testToKey() { 51 Account account1 = new Account("account1", "type1"); 52 Account account2 = new Account("account2", "type2"); 53 54 Bundle b1 = new Bundle(); 55 Bundle b2 = new Bundle(); 56 b2.putBoolean("b2", true); 57 58 SyncOperation op1 = new SyncOperation(account1, 0, 59 1, "foo", 0, 60 SyncOperation.REASON_PERIODIC, 61 "authority1", 62 b1, 63 false, 64 ContentResolver.SYNC_EXEMPTION_NONE); 65 66 // Same as op1 but different time infos 67 SyncOperation op2 = new SyncOperation(account1, 0, 68 1, "foo", 0, 69 SyncOperation.REASON_PERIODIC, 70 "authority1", 71 b1, 72 false, 73 ContentResolver.SYNC_EXEMPTION_NONE); 74 75 // Same as op1 but different authority 76 SyncOperation op3 = new SyncOperation(account1, 0, 77 1, "foo", 0, 78 SyncOperation.REASON_PERIODIC, 79 "authority2", 80 b1, 81 false, 82 ContentResolver.SYNC_EXEMPTION_NONE); 83 84 // Same as op1 but different account 85 SyncOperation op4 = new SyncOperation(account2, 0, 86 1, "foo", 0, 87 SyncOperation.REASON_PERIODIC, 88 "authority1", 89 b1, 90 false, 91 ContentResolver.SYNC_EXEMPTION_NONE); 92 93 // Same as op1 but different bundle 94 SyncOperation op5 = new SyncOperation(account1, 0, 95 1, "foo", 0, 96 SyncOperation.REASON_PERIODIC, 97 "authority1", 98 b2, 99 false, 100 ContentResolver.SYNC_EXEMPTION_NONE); 101 102 assertEquals(op1.key, op2.key); 103 assertNotSame(op1.key, op3.key); 104 assertNotSame(op1.key, op4.key); 105 assertNotSame(op1.key, op5.key); 106 } 107 108 @SmallTest testConversionToExtras()109 public void testConversionToExtras() { 110 Account account1 = new Account("account1", "type1"); 111 Bundle b1 = new Bundle(); 112 b1.putParcelable("acc", account1); 113 b1.putString("str", "String"); 114 115 SyncOperation op1 = new SyncOperation(account1, 0, 116 1, "foo", 0, 117 SyncOperation.REASON_PERIODIC, 118 "authority1", 119 b1, 120 false, 121 ContentResolver.SYNC_EXEMPTION_NONE); 122 123 PersistableBundle pb = op1.toJobInfoExtras(); 124 SyncOperation op2 = SyncOperation.maybeCreateFromJobExtras(pb); 125 126 assertTrue("Account fields in extras not persisted.", 127 account1.equals(op2.extras.get("acc"))); 128 assertTrue("Fields in extras not persisted", "String".equals(op2.extras.getString("str"))); 129 } 130 131 @SmallTest testConversionFromExtras()132 public void testConversionFromExtras() { 133 PersistableBundle extras = new PersistableBundle(); 134 SyncOperation op = SyncOperation.maybeCreateFromJobExtras(extras); 135 assertTrue("Non sync operation bundle falsely converted to SyncOperation.", op == null); 136 } 137 138 /** 139 * Tests whether a failed periodic sync operation is converted correctly into a one time 140 * sync operation, and whether the periodic sync can be re-created from the one-time operation. 141 */ 142 @SmallTest testFailedPeriodicConversion()143 public void testFailedPeriodicConversion() { 144 SyncStorageEngine.EndPoint ep = new SyncStorageEngine.EndPoint(new Account("name", "type"), 145 "provider", 0); 146 Bundle extras = new Bundle(); 147 SyncOperation periodic = new SyncOperation(ep, 0, "package", 0, 0, extras, false, true, 148 SyncOperation.NO_JOB_ID, 60000, 10000, 149 ContentResolver.SYNC_EXEMPTION_NONE); 150 SyncOperation oneoff = periodic.createOneTimeSyncOperation(); 151 assertFalse("Conversion to oneoff sync failed.", oneoff.isPeriodic); 152 assertEquals("Period not restored", periodic.periodMillis, oneoff.periodMillis); 153 assertEquals("Flex not restored", periodic.flexMillis, oneoff.flexMillis); 154 } 155 } 156