1aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank/*
2aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * Copyright (C) 2011 The Android Open Source Project
3aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank *
4aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * Licensed under the Apache License, Version 2.0 (the "License");
5aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * you may not use this file except in compliance with the License.
6aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * You may obtain a copy of the License at
7aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank *
8aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank *      http://www.apache.org/licenses/LICENSE-2.0
9aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank *
10aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * Unless required by applicable law or agreed to in writing, software
11aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * distributed under the License is distributed on an "AS IS" BASIS,
12aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * See the License for the specific language governing permissions and
14aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * limitations under the License.
15aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank */
16aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
17aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blankpackage com.android.email.provider;
18aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
1917d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xieimport android.content.Context;
2017d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xieimport android.os.Parcel;
2117d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xieimport android.test.ProviderTestCase2;
2217d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xieimport android.test.suitebuilder.annotation.MediumTest;
237037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xieimport android.test.suitebuilder.annotation.Suppress;
2417d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie
2517d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xieimport com.android.email.SecurityPolicy;
26f5418f1f93b02e7fab9f15eb201800b65510998eMarc Blankimport com.android.emailcommon.provider.Account;
27aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blankimport com.android.emailcommon.provider.EmailContent;
28b2a909598ba78783b05c58508310f864c56c897bMarc Blankimport com.android.emailcommon.provider.EmailContent.Attachment;
29b2a909598ba78783b05c58508310f864c56c897bMarc Blankimport com.android.emailcommon.provider.EmailContent.AttachmentColumns;
30b2a909598ba78783b05c58508310f864c56c897bMarc Blankimport com.android.emailcommon.provider.EmailContent.Message;
3153ea83ebf91f820692e8fa8e781f5cc982dd94dbBen Komaloimport com.android.emailcommon.provider.Mailbox;
32aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blankimport com.android.emailcommon.provider.Policy;
33aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
34b2a909598ba78783b05c58508310f864c56c897bMarc Blankimport java.util.ArrayList;
35b2a909598ba78783b05c58508310f864c56c897bMarc Blank
36aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank/**
37aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * This is a series of unit tests for the Policy class
38aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank *
39aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank * You can run this entire test case with:
40aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank *   runtest -c com.android.email.provider.PolicyTests email
41aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank */
427037a0bd3d8e925a9115f475f5c0d05ddae2eeeeJerry Xie@Suppress
43aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank@MediumTest
44aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blankpublic class PolicyTests extends ProviderTestCase2<EmailProvider> {
45aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
46b2a909598ba78783b05c58508310f864c56c897bMarc Blank    private static final String CANT_DOWNLOAD_SELECTION = "(" + AttachmentColumns.FLAGS + "&" +
47b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Attachment.FLAG_POLICY_DISALLOWS_DOWNLOAD + ")!=0";
48b2a909598ba78783b05c58508310f864c56c897bMarc Blank
49aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    private Context mMockContext;
50aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
51aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    public PolicyTests() {
52aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        super(EmailProvider.class, EmailContent.AUTHORITY);
53aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    }
54aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
55aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    @Override
56aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    public void setUp() throws Exception {
57aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        super.setUp();
58aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        mMockContext = getMockContext();
59aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // Invalidate all caches, since we reset the database for each test
606e418aa41a17136be0dddb816d843428a0a1e722Marc Blank        ContentCache.invalidateAllCaches();
61aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    }
62aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
63aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    @Override
64aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    public void tearDown() throws Exception {
65aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        super.tearDown();
66aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    }
67aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
68aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    public void testGetAccountIdWithPolicyKey() {
69aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        String securitySyncKey = "key";
70aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // Setup two accounts with policies
71aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Account account1 = ProviderTestUtils.setupAccount("acct1", true, mMockContext);
72aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Policy policy1 = new Policy();
7317d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        SecurityPolicy.setAccountPolicy(mMockContext, account1, policy1, securitySyncKey);
74aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Account account2 = ProviderTestUtils.setupAccount("acct2", true, mMockContext);
75aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Policy policy2 = new Policy();
7617d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        SecurityPolicy.setAccountPolicy(mMockContext, account2, policy2, securitySyncKey);
77aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // Get the accounts back from the database
78aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        account1.refresh(mMockContext);
79aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        account2.refresh(mMockContext);
80aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // Both should have valid policies
81aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertTrue(account1.mPolicyKey > 0);
82aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // And they should be findable via getAccountIdWithPolicyKey
83aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertTrue(account2.mPolicyKey > 0);
84aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(account1.mId, Policy.getAccountIdWithPolicyKey(mMockContext,
85aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank                account1.mPolicyKey));
86aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(account2.mId, Policy.getAccountIdWithPolicyKey(mMockContext,
87aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank                account2.mPolicyKey));
88aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    }
89aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
90aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    public void testSetAndClearAccountPolicy() {
91aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        String securitySyncKey = "key";
92aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Account account = ProviderTestUtils.setupAccount("acct", true, mMockContext);
93aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // Nothing up my sleeve
94aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(0, account.mPolicyKey);
95aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(0, EmailContent.count(mMockContext, Policy.CONTENT_URI));
96aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Policy policy = new Policy();
9717d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        SecurityPolicy.setAccountPolicy(mMockContext, account, policy, securitySyncKey);
98aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        account.refresh(mMockContext);
99aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // We should have a policyKey now
100aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertTrue(account.mPolicyKey > 0);
101aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Policy dbPolicy = Policy.restorePolicyWithId(mMockContext, account.mPolicyKey);
102aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // The policy should exist in the database
103aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertNotNull(dbPolicy);
104aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // And it should be the same as the original
105aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(policy, dbPolicy);
106aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // The account should have the security sync key set
107aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(securitySyncKey, account.mSecuritySyncKey);
10817d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        SecurityPolicy.clearAccountPolicy(mMockContext, account);
109aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        account.refresh(mMockContext);
110aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // Make sure policyKey is cleared and policy is deleted
111aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(0, account.mPolicyKey);
112aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(0, EmailContent.count(mMockContext, Policy.CONTENT_URI));
113aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        account.refresh(mMockContext);
114aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        // The account's security sync key should also be null
115aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertNull(account.mSecuritySyncKey);
116aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    }
117aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank
118b2a909598ba78783b05c58508310f864c56c897bMarc Blank    private Attachment setupSimpleAttachment(String name, long size, Account acct) {
119b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Attachment att = ProviderTestUtils.setupAttachment(-1, name, size, false, mMockContext);
120b2a909598ba78783b05c58508310f864c56c897bMarc Blank        att.mAccountKey = acct.mId;
121b2a909598ba78783b05c58508310f864c56c897bMarc Blank        return att;
122b2a909598ba78783b05c58508310f864c56c897bMarc Blank    }
123b2a909598ba78783b05c58508310f864c56c897bMarc Blank    public void testSetAttachmentFlagsForNewPolicy() {
124b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Account acct = ProviderTestUtils.setupAccount("acct1", true, mMockContext);
125b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy policy1 = new Policy();
126b2a909598ba78783b05c58508310f864c56c897bMarc Blank        policy1.mDontAllowAttachments = true;
12717d3a29c9d8f7a27c463239f190bdcc4e0804527Jerry Xie        SecurityPolicy.setAccountPolicy(mMockContext, acct, policy1, null);
128b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Mailbox box = ProviderTestUtils.setupMailbox("box1", acct.mId, true, mMockContext);
129b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Message msg1 = ProviderTestUtils.setupMessage("message1", acct.mId, box.mId, false, false,
130b2a909598ba78783b05c58508310f864c56c897bMarc Blank                mMockContext);
131b2a909598ba78783b05c58508310f864c56c897bMarc Blank        ArrayList<Attachment> atts = new ArrayList<Attachment>();
132b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Attachment att1 = setupSimpleAttachment("fileName1", 10001L, acct);
133b2a909598ba78783b05c58508310f864c56c897bMarc Blank        atts.add(att1);
134b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Attachment att2 = setupSimpleAttachment("fileName2", 20001L, acct);
135b2a909598ba78783b05c58508310f864c56c897bMarc Blank        atts.add(att2);
136b2a909598ba78783b05c58508310f864c56c897bMarc Blank        msg1.mAttachments = atts;
137b2a909598ba78783b05c58508310f864c56c897bMarc Blank        msg1.save(mMockContext);
138b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Message msg2 = ProviderTestUtils.setupMessage("message2", acct.mId, box.mId, false, false,
139b2a909598ba78783b05c58508310f864c56c897bMarc Blank                mMockContext);
140b2a909598ba78783b05c58508310f864c56c897bMarc Blank        atts.clear();
141b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Attachment att3 = setupSimpleAttachment("fileName3", 70001L, acct);
142b2a909598ba78783b05c58508310f864c56c897bMarc Blank        atts.add(att3);
143b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Attachment att4 = setupSimpleAttachment("fileName4", 5001L, acct);
144b2a909598ba78783b05c58508310f864c56c897bMarc Blank        atts.add(att4);
145b2a909598ba78783b05c58508310f864c56c897bMarc Blank        msg2.mAttachments = atts;
146b2a909598ba78783b05c58508310f864c56c897bMarc Blank        msg2.save(mMockContext);
147b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Make sure we've got our 4 attachments
148b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertEquals(4, EmailContent.count(mMockContext, Attachment.CONTENT_URI));
149b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // All should be downloadable
150b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertEquals(0, EmailContent.count(mMockContext, Attachment.CONTENT_URI,
151b2a909598ba78783b05c58508310f864c56c897bMarc Blank                CANT_DOWNLOAD_SELECTION, null));
152b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Enforce our no-attachments policy
153b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy.setAttachmentFlagsForNewPolicy(mMockContext, acct, policy1);
154b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // None should be downloadable
155b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertEquals(4, EmailContent.count(mMockContext, Attachment.CONTENT_URI,
156b2a909598ba78783b05c58508310f864c56c897bMarc Blank                CANT_DOWNLOAD_SELECTION, null));
157b2a909598ba78783b05c58508310f864c56c897bMarc Blank
158b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy policy2 = new Policy();
159b2a909598ba78783b05c58508310f864c56c897bMarc Blank        policy2.mMaxAttachmentSize = 20000;
160b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Switch to new policy that sets a limit, but otherwise allows attachments
161b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy.setAttachmentFlagsForNewPolicy(mMockContext, acct, policy2);
162b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Two shouldn't be downloadable
163b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertEquals(2, EmailContent.count(mMockContext, Attachment.CONTENT_URI,
164b2a909598ba78783b05c58508310f864c56c897bMarc Blank                CANT_DOWNLOAD_SELECTION, null));
165b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Make sure they're the right ones (att2 and att3)
166b2a909598ba78783b05c58508310f864c56c897bMarc Blank        att2 = Attachment.restoreAttachmentWithId(mMockContext, att2.mId);
167b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertTrue((att2.mFlags & Attachment.FLAG_POLICY_DISALLOWS_DOWNLOAD) != 0);
168b2a909598ba78783b05c58508310f864c56c897bMarc Blank        att3 = Attachment.restoreAttachmentWithId(mMockContext, att3.mId);
169b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertTrue((att3.mFlags & Attachment.FLAG_POLICY_DISALLOWS_DOWNLOAD) != 0);
170b2a909598ba78783b05c58508310f864c56c897bMarc Blank
171b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy policy3 = new Policy();
172b2a909598ba78783b05c58508310f864c56c897bMarc Blank        policy3.mMaxAttachmentSize = 5001;
173b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Switch to new policy that sets a lower limit
174b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy.setAttachmentFlagsForNewPolicy(mMockContext, acct, policy3);
175b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Three shouldn't be downloadable
176b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertEquals(3, EmailContent.count(mMockContext, Attachment.CONTENT_URI,
177b2a909598ba78783b05c58508310f864c56c897bMarc Blank                CANT_DOWNLOAD_SELECTION, null));
178b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Make sure the right one is downloadable
179b2a909598ba78783b05c58508310f864c56c897bMarc Blank        att4 = Attachment.restoreAttachmentWithId(mMockContext, att4.mId);
180b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertTrue((att4.mFlags & Attachment.FLAG_POLICY_DISALLOWS_DOWNLOAD) == 0);
181b2a909598ba78783b05c58508310f864c56c897bMarc Blank
182b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy policy4 = new Policy();
183b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Switch to new policy that is without restrictions
184b2a909598ba78783b05c58508310f864c56c897bMarc Blank        Policy.setAttachmentFlagsForNewPolicy(mMockContext, acct, policy4);
185b2a909598ba78783b05c58508310f864c56c897bMarc Blank        // Nothing should be blocked now
186b2a909598ba78783b05c58508310f864c56c897bMarc Blank        assertEquals(0, EmailContent.count(mMockContext, Attachment.CONTENT_URI,
187b2a909598ba78783b05c58508310f864c56c897bMarc Blank                CANT_DOWNLOAD_SELECTION, null));
188b2a909598ba78783b05c58508310f864c56c897bMarc Blank   }
189b2a909598ba78783b05c58508310f864c56c897bMarc Blank
190aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    public void testParcel() {
191aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Policy policy = new Policy();
192aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mPasswordMode = Policy.PASSWORD_MODE_STRONG;
193aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mPasswordMinLength = 6;
194aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mPasswordComplexChars = 5;
195aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mPasswordExpirationDays = 4;
196aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mPasswordHistory = 3;
197aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mPasswordMaxFails = 8;
198aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mMaxScreenLockTime = 600;
199aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mRequireRemoteWipe = true;
200aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mRequireEncryption = true;
201aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.mRequireEncryptionExternal = true;
202f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mRequireManualSyncWhenRoaming = true;
203f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mDontAllowCamera = false;
204f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mDontAllowAttachments = true;
205f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mDontAllowHtml = false;
206f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mMaxAttachmentSize = 22222;
207f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mMaxTextTruncationSize = 33333;
208f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mMaxHtmlTruncationSize = 44444;
209f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mMaxEmailLookback = 5;
210f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mMaxCalendarLookback = 6;
211f91a03f5203bb64ae0726596d65ac90c35088666Marc Blank        policy.mPasswordRecoveryEnabled = true;
212aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Parcel parcel = Parcel.obtain();
213aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        policy.writeToParcel(parcel, 0);
214aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        parcel.setDataPosition(0);
215aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        Policy readPolicy = Policy.CREATOR.createFromParcel(parcel);
216aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank        assertEquals(policy, readPolicy);
217aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank    }
218aeee10e57ef4d931e7708fde218d590453a82aeaMarc Blank}
219