Home | History | Annotate | Download | only in content
      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.content.Context;
     22 import android.os.Bundle;
     23 import android.os.PersistableBundle;
     24 import android.os.SystemClock;
     25 import android.provider.Settings;
     26 import android.test.AndroidTestCase;
     27 import android.test.suitebuilder.annotation.SmallTest;
     28 
     29 /**
     30  * You can run those tests with:
     31  *
     32  * adb shell am instrument
     33  * -e debug false
     34  * -w
     35  * -e class android.content.SyncOperationTest com.android.frameworks.coretests/android.test.InstrumentationTestRunner
     36  */
     37 
     38 public class SyncOperationTest extends AndroidTestCase {
     39 
     40     Account mDummy;
     41     /** Indicate an unimportant long that we're not testing. */
     42     long mUnimportantLong = 0L;
     43     /** Empty bundle. */
     44     Bundle mEmpty;
     45     /** Silly authority. */
     46     String mAuthority;
     47 
     48     @Override
     49     public void setUp() {
     50         mDummy = new Account("account1", "type1");
     51         mEmpty = new Bundle();
     52         mAuthority = "authority1";
     53     }
     54 
     55     @SmallTest
     56     public void testToKey() {
     57         Account account1 = new Account("account1", "type1");
     58         Account account2 = new Account("account2", "type2");
     59 
     60         Bundle b1 = new Bundle();
     61         Bundle b2 = new Bundle();
     62         b2.putBoolean("b2", true);
     63 
     64         SyncOperation op1 = new SyncOperation(account1, 0,
     65                 1, "foo", 0,
     66                 SyncOperation.REASON_PERIODIC,
     67                 "authority1",
     68                 b1,
     69                 false);
     70 
     71         // Same as op1 but different time infos
     72         SyncOperation op2 = new SyncOperation(account1, 0,
     73                 1, "foo", 0,
     74                 SyncOperation.REASON_PERIODIC,
     75                 "authority1",
     76                 b1,
     77                 false);
     78 
     79         // Same as op1 but different authority
     80         SyncOperation op3 = new SyncOperation(account1, 0,
     81                 1, "foo", 0,
     82                 SyncOperation.REASON_PERIODIC,
     83                 "authority2",
     84                 b1,
     85                 false);
     86 
     87         // Same as op1 but different account
     88         SyncOperation op4 = new SyncOperation(account2, 0,
     89                 1, "foo", 0,
     90                 SyncOperation.REASON_PERIODIC,
     91                 "authority1",
     92                 b1,
     93                 false);
     94 
     95         // Same as op1 but different bundle
     96         SyncOperation op5 = new SyncOperation(account1, 0,
     97                 1, "foo", 0,
     98                 SyncOperation.REASON_PERIODIC,
     99                 "authority1",
    100                 b2,
    101                 false);
    102 
    103         assertEquals(op1.key, op2.key);
    104         assertNotSame(op1.key, op3.key);
    105         assertNotSame(op1.key, op4.key);
    106         assertNotSame(op1.key, op5.key);
    107     }
    108 
    109     @SmallTest
    110     public void testConversionToExtras() {
    111         Account account1 = new Account("account1", "type1");
    112         Bundle b1 = new Bundle();
    113         b1.putParcelable("acc", account1);
    114         b1.putString("str", "String");
    115 
    116         SyncOperation op1 = new SyncOperation(account1, 0,
    117                 1, "foo", 0,
    118                 SyncOperation.REASON_PERIODIC,
    119                 "authority1",
    120                 b1,
    121                 false);
    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
    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
    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         SyncOperation oneoff = periodic.createOneTimeSyncOperation();
    150         assertFalse("Conversion to oneoff sync failed.", oneoff.isPeriodic);
    151         assertEquals("Period not restored", periodic.periodMillis, oneoff.periodMillis);
    152         assertEquals("Flex not restored", periodic.flexMillis, oneoff.flexMillis);
    153     }
    154 }
    155