• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 Marc Blank
3  * Licensed to The Android Open Source Project.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  *      http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 
18 package com.android.exchange;
19 
20 import android.test.suitebuilder.annotation.MediumTest;
21 
22 import com.android.emailcommon.provider.Account;
23 import com.android.emailcommon.provider.Mailbox;
24 import com.android.exchange.ExchangeService.SyncError;
25 import com.android.exchange.provider.EmailContentSetupUtils;
26 import com.android.exchange.utility.ExchangeTestCase;
27 
28 import java.util.concurrent.ConcurrentHashMap;
29 
30 /**
31  * You can run this entire test case with:
32  *   runtest -c com.android.exchange.ExchangeServiceAccountTests exchange
33  */
34 @MediumTest
35 public class ExchangeServiceAccountTests extends ExchangeTestCase {
36 
ExchangeServiceAccountTests()37     public ExchangeServiceAccountTests() {
38         super();
39     }
40 
testReleaseSyncHolds()41     public void testReleaseSyncHolds() {
42         ExchangeService exchangeService = new ExchangeService();
43         SyncError securityErrorAccount1 =
44             exchangeService.new SyncError(AbstractSyncService.EXIT_SECURITY_FAILURE, false);
45         SyncError ioError =
46             exchangeService.new SyncError(AbstractSyncService.EXIT_IO_ERROR, false);
47         SyncError securityErrorAccount2 =
48             exchangeService.new SyncError(AbstractSyncService.EXIT_SECURITY_FAILURE, false);
49         // Create account and two mailboxes
50         Account acct1 = setupTestAccount("acct1", true);
51         Mailbox box1 = EmailContentSetupUtils.setupMailbox("box1", acct1.mId, true,
52                 mProviderContext);
53         Mailbox box2 = EmailContentSetupUtils.setupMailbox("box2", acct1.mId, true,
54                 mProviderContext);
55         Account acct2 = setupTestAccount("acct2", true);
56         Mailbox box3 = EmailContentSetupUtils.setupMailbox("box3", acct2.mId, true,
57                 mProviderContext);
58         Mailbox box4 = EmailContentSetupUtils.setupMailbox("box4", acct2.mId, true,
59                 mProviderContext);
60 
61         ConcurrentHashMap<Long, SyncError> errorMap = exchangeService.mSyncErrorMap;
62         // Add errors into the map
63         errorMap.put(box1.mId, securityErrorAccount1);
64         errorMap.put(box2.mId, ioError);
65         errorMap.put(box3.mId, securityErrorAccount2);
66         errorMap.put(box4.mId, securityErrorAccount2);
67         // We should have 4
68         assertEquals(4, errorMap.keySet().size());
69         // Release the holds on acct2 (there are two of them)
70         assertTrue(exchangeService.releaseSyncHolds(mProviderContext,
71                 AbstractSyncService.EXIT_SECURITY_FAILURE, acct2));
72         // There should be two left
73         assertEquals(2, errorMap.keySet().size());
74         // And these are the two...
75         assertNotNull(errorMap.get(box2.mId));
76         assertNotNull(errorMap.get(box1.mId));
77 
78         // Put the two back
79         errorMap.put(box3.mId, securityErrorAccount2);
80         errorMap.put(box4.mId, securityErrorAccount2);
81         // We should have 4 again
82         assertEquals(4, errorMap.keySet().size());
83         // Release all of the security holds
84         assertTrue(exchangeService.releaseSyncHolds(mProviderContext,
85                 AbstractSyncService.EXIT_SECURITY_FAILURE, null));
86         // There should be one left
87         assertEquals(1, errorMap.keySet().size());
88         // And this is the one
89         assertNotNull(errorMap.get(box2.mId));
90 
91         // Release the i/o holds on account 2 (there aren't any)
92         assertFalse(exchangeService.releaseSyncHolds(mProviderContext,
93                 AbstractSyncService.EXIT_IO_ERROR, acct2));
94         // There should still be one left
95         assertEquals(1, errorMap.keySet().size());
96 
97         // Release the i/o holds on account 1 (there's one)
98         assertTrue(exchangeService.releaseSyncHolds(mProviderContext,
99                 AbstractSyncService.EXIT_IO_ERROR, acct1));
100         // There should still be one left
101         assertEquals(0, errorMap.keySet().size());
102     }
103 
testIsSyncable()104     public void testIsSyncable() {
105         Account acct1 = setupTestAccount("acct1", true);
106         Mailbox box1 = EmailContentSetupUtils.setupMailbox("box1", acct1.mId, true,
107                 mProviderContext, Mailbox.TYPE_DRAFTS);
108         Mailbox box2 = EmailContentSetupUtils.setupMailbox("box2", acct1.mId, true,
109                 mProviderContext, Mailbox.TYPE_OUTBOX);
110         Mailbox box3 = EmailContentSetupUtils.setupMailbox("box2", acct1.mId, true,
111                 mProviderContext, Mailbox.TYPE_ATTACHMENT);
112         Mailbox box4 = EmailContentSetupUtils.setupMailbox("box2", acct1.mId, true,
113                 mProviderContext, Mailbox.TYPE_NOT_SYNCABLE + 64);
114         Mailbox box5 = EmailContentSetupUtils.setupMailbox("box2", acct1.mId, true,
115                 mProviderContext, Mailbox.TYPE_MAIL);
116         assertFalse(ExchangeService.isSyncable(box1));
117         assertFalse(ExchangeService.isSyncable(box2));
118         assertFalse(ExchangeService.isSyncable(box3));
119         assertFalse(ExchangeService.isSyncable(box4));
120         assertTrue(ExchangeService.isSyncable(box5));
121     }
122 }
123