blob: e45b92a1b486816bb3c8f57f3f50cac257e6e97f [file] [log] [blame]
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -08001/*
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
Matthew Williamsfa774182013-06-18 15:44:11 -070017package com.android.server.content;
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080018
19import android.accounts.Account;
Matthew Williamsfa774182013-06-18 15:44:11 -070020import android.content.ContentResolver;
Matthew Williams64280462014-01-09 10:49:23 -080021import android.content.Context;
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080022import android.os.Bundle;
Shreyas Basarge8c834c02016-01-07 13:53:16 +000023import android.os.PersistableBundle;
Matthew Williams64280462014-01-09 10:49:23 -080024import android.os.SystemClock;
25import android.provider.Settings;
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080026import android.test.AndroidTestCase;
27import 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
38public class SyncOperationTest extends AndroidTestCase {
39
Matthew Williams64280462014-01-09 10:49:23 -080040 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
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080055 @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
Amith Yamasani04e0d262012-02-14 11:50:53 -080064 SyncOperation op1 = new SyncOperation(account1, 0,
Dianne Hackbornbef28fe2015-10-29 17:57:11 -070065 1, "foo", 0,
Alon Albert57286f92012-10-09 14:21:38 -070066 SyncOperation.REASON_PERIODIC,
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080067 "authority1",
68 b1,
Fred Quintana0c4d04a2010-11-03 17:02:55 -070069 false);
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080070
71 // Same as op1 but different time infos
Amith Yamasani04e0d262012-02-14 11:50:53 -080072 SyncOperation op2 = new SyncOperation(account1, 0,
Dianne Hackbornbef28fe2015-10-29 17:57:11 -070073 1, "foo", 0,
Alon Albert57286f92012-10-09 14:21:38 -070074 SyncOperation.REASON_PERIODIC,
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080075 "authority1",
76 b1,
Fred Quintana0c4d04a2010-11-03 17:02:55 -070077 false);
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080078
79 // Same as op1 but different authority
Amith Yamasani04e0d262012-02-14 11:50:53 -080080 SyncOperation op3 = new SyncOperation(account1, 0,
Dianne Hackbornbef28fe2015-10-29 17:57:11 -070081 1, "foo", 0,
Alon Albert57286f92012-10-09 14:21:38 -070082 SyncOperation.REASON_PERIODIC,
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080083 "authority2",
84 b1,
Fred Quintana0c4d04a2010-11-03 17:02:55 -070085 false);
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080086
87 // Same as op1 but different account
Amith Yamasani04e0d262012-02-14 11:50:53 -080088 SyncOperation op4 = new SyncOperation(account2, 0,
Dianne Hackbornbef28fe2015-10-29 17:57:11 -070089 1, "foo", 0,
Alon Albert57286f92012-10-09 14:21:38 -070090 SyncOperation.REASON_PERIODIC,
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080091 "authority1",
92 b1,
Fred Quintana0c4d04a2010-11-03 17:02:55 -070093 false);
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080094
95 // Same as op1 but different bundle
Amith Yamasani04e0d262012-02-14 11:50:53 -080096 SyncOperation op5 = new SyncOperation(account1, 0,
Dianne Hackbornbef28fe2015-10-29 17:57:11 -070097 1, "foo", 0,
Alon Albert57286f92012-10-09 14:21:38 -070098 SyncOperation.REASON_PERIODIC,
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -080099 "authority1",
100 b2,
Fred Quintana0c4d04a2010-11-03 17:02:55 -0700101 false);
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -0800102
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 }
Matthew Williamsfa774182013-06-18 15:44:11 -0700108
109 @SmallTest
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000110 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");
Matthew Williamsfa774182013-06-18 15:44:11 -0700115
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000116 SyncOperation op1 = new SyncOperation(account1, 0,
117 1, "foo", 0,
118 SyncOperation.REASON_PERIODIC,
119 "authority1",
120 b1,
121 false);
Matthew Williamsfa774182013-06-18 15:44:11 -0700122
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000123 PersistableBundle pb = op1.toJobInfoExtras();
124 SyncOperation op2 = SyncOperation.maybeCreateFromJobExtras(pb);
Matthew Williamsfa774182013-06-18 15:44:11 -0700125
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000126 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")));
Matthew Williams64280462014-01-09 10:49:23 -0800129 }
130
131 @SmallTest
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000132 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 }
Matthew Williams64280462014-01-09 10:49:23 -0800137
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000138 /**
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,
Shreyas Basarge16754002016-02-08 23:52:27 +0000148 SyncOperation.NO_JOB_ID, 60000, 10000);
Shreyas Basarge8c834c02016-01-07 13:53:16 +0000149 SyncOperation oneoff = periodic.createOneTimeSyncOperation();
150 assertFalse("Conversion to oneoff sync failed.", oneoff.isPeriodic);
Shreyas Basarge16754002016-02-08 23:52:27 +0000151 assertEquals("Period not restored", periodic.periodMillis, oneoff.periodMillis);
152 assertEquals("Flex not restored", periodic.flexMillis, oneoff.flexMillis);
Matthew Williamsfa774182013-06-18 15:44:11 -0700153 }
Fabrice Di Meglio7e118b52010-11-23 17:06:45 -0800154}