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