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.os.Bundle; 21 import android.os.PersistableBundle; 22 import android.test.AndroidTestCase; 23 import android.test.suitebuilder.annotation.SmallTest; 24 25 /** 26 * Test for SyncOperation. 27 * 28 * bit FrameworksServicesTests:com.android.server.content.SyncOperationTest 29 */ 30 @SmallTest 31 public class SyncOperationTest extends AndroidTestCase { 32 33 Account mDummy; 34 /** Indicate an unimportant long that we're not testing. */ 35 long mUnimportantLong = 0L; 36 /** Empty bundle. */ 37 Bundle mEmpty; 38 /** Silly authority. */ 39 String mAuthority; 40 41 @Override setUp()42 public void setUp() { 43 mDummy = new Account("account1", "type1"); 44 mEmpty = new Bundle(); 45 mAuthority = "authority1"; 46 } 47 48 @SmallTest testToKey()49 public void testToKey() { 50 Account account1 = new Account("account1", "type1"); 51 Account account2 = new Account("account2", "type2"); 52 53 Bundle b1 = new Bundle(); 54 Bundle b2 = new Bundle(); 55 b2.putBoolean("b2", true); 56 57 SyncOperation op1 = new SyncOperation(account1, 0, 58 1, "foo", 0, 59 SyncOperation.REASON_PERIODIC, 60 "authority1", 61 b1, 62 false); 63 64 // Same as op1 but different time infos 65 SyncOperation op2 = new SyncOperation(account1, 0, 66 1, "foo", 0, 67 SyncOperation.REASON_PERIODIC, 68 "authority1", 69 b1, 70 false); 71 72 // Same as op1 but different authority 73 SyncOperation op3 = new SyncOperation(account1, 0, 74 1, "foo", 0, 75 SyncOperation.REASON_PERIODIC, 76 "authority2", 77 b1, 78 false); 79 80 // Same as op1 but different account 81 SyncOperation op4 = new SyncOperation(account2, 0, 82 1, "foo", 0, 83 SyncOperation.REASON_PERIODIC, 84 "authority1", 85 b1, 86 false); 87 88 // Same as op1 but different bundle 89 SyncOperation op5 = new SyncOperation(account1, 0, 90 1, "foo", 0, 91 SyncOperation.REASON_PERIODIC, 92 "authority1", 93 b2, 94 false); 95 96 assertEquals(op1.key, op2.key); 97 assertNotSame(op1.key, op3.key); 98 assertNotSame(op1.key, op4.key); 99 assertNotSame(op1.key, op5.key); 100 } 101 102 @SmallTest testConversionToExtras()103 public void testConversionToExtras() { 104 Account account1 = new Account("account1", "type1"); 105 Bundle b1 = new Bundle(); 106 b1.putParcelable("acc", account1); 107 b1.putString("str", "String"); 108 109 SyncOperation op1 = new SyncOperation(account1, 0, 110 1, "foo", 0, 111 SyncOperation.REASON_PERIODIC, 112 "authority1", 113 b1, 114 false); 115 116 PersistableBundle pb = op1.toJobInfoExtras(); 117 SyncOperation op2 = SyncOperation.maybeCreateFromJobExtras(pb); 118 119 assertTrue("Account fields in extras not persisted.", 120 account1.equals(op2.extras.get("acc"))); 121 assertTrue("Fields in extras not persisted", "String".equals(op2.extras.getString("str"))); 122 } 123 124 @SmallTest testConversionFromExtras()125 public void testConversionFromExtras() { 126 PersistableBundle extras = new PersistableBundle(); 127 SyncOperation op = SyncOperation.maybeCreateFromJobExtras(extras); 128 assertTrue("Non sync operation bundle falsely converted to SyncOperation.", op == null); 129 } 130 131 /** 132 * Tests whether a failed periodic sync operation is converted correctly into a one time 133 * sync operation, and whether the periodic sync can be re-created from the one-time operation. 134 */ 135 @SmallTest testFailedPeriodicConversion()136 public void testFailedPeriodicConversion() { 137 SyncStorageEngine.EndPoint ep = new SyncStorageEngine.EndPoint(new Account("name", "type"), 138 "provider", 0); 139 Bundle extras = new Bundle(); 140 SyncOperation periodic = new SyncOperation(ep, 0, "package", 0, 0, extras, false, true, 141 SyncOperation.NO_JOB_ID, 60000, 10000); 142 SyncOperation oneoff = periodic.createOneTimeSyncOperation(); 143 assertFalse("Conversion to oneoff sync failed.", oneoff.isPeriodic); 144 assertEquals("Period not restored", periodic.periodMillis, oneoff.periodMillis); 145 assertEquals("Flex not restored", periodic.flexMillis, oneoff.flexMillis); 146 } 147 } 148