1d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt// Copyright 2013 The Chromium Authors. All rights reserved. 2d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt// Use of this source code is governed by a BSD-style license that can be 36cb1f6521a84955752c2b99100cf1df87637f86cDmitry Shmidt// found in the LICENSE file. 4d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 5d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtpackage org.chromium.sync.notifier; 6d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 7d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport android.accounts.Account; 8d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport android.content.Context; 9d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport android.test.InstrumentationTestCase; 10d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport android.test.suitebuilder.annotation.SmallTest; 11d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 12d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport com.google.ipc.invalidation.external.client.types.ObjectId; 13d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 14d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport org.chromium.base.CollectionUtil; 15d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport org.chromium.base.test.util.AdvancedMockContext; 16d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport org.chromium.base.test.util.Feature; 17d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport org.chromium.sync.internal_api.pub.base.ModelType; 18d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 19d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport java.util.Arrays; 20d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport java.util.EnumSet; 21d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport java.util.HashSet; 22d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtimport java.util.Set; 23d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 24d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt/** 25d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * Tests for the {@link InvalidationPreferences}. 26d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * 27d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * @author dsmyers@google.com (Daniel Myers) 28d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt */ 29d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidtpublic class InvalidationPreferencesTest extends InstrumentationTestCase { 30d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt private Context mContext; 31d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 32d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @Override 33d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt protected void setUp() throws Exception { 34d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt super.setUp(); 35d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt mContext = new AdvancedMockContext(getInstrumentation().getContext()); 36d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt } 37d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 38d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @SmallTest 39d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @Feature({"Sync"}) 40d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt public void testTranslateBasicSyncTypes() throws Exception { 41d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt /* 42d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * Test plan: convert three strings to model types, one of which is invalid. Verify that 43d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * the two valid strings are properly converted and that the invalid string is dropped. 44d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt */ 45d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt HashSet<ModelType> expectedTypes = CollectionUtil.newHashSet( 46d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt ModelType.BOOKMARK,ModelType.SESSION); 47d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt Set<ModelType> actualTypes = ModelType.syncTypesToModelTypes( 48d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt CollectionUtil.newHashSet("BOOKMARK", "SESSION", "0!!!INVALID")); 49d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertEquals(expectedTypes, actualTypes); 50d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt } 51d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 52d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @SmallTest 53d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @Feature({"Sync"}) 54d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt public void testTranslateAllSyncTypes() { 55d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt /* 56d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * Test plan: convert the special all-types type to model types. Verify that it is 57d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * properly expanded. 58d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt */ 59d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt Set<ModelType> expectedTypes = EnumSet.allOf(ModelType.class); 60d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt Set<ModelType> actualTypes = ModelType.syncTypesToModelTypes( 61d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt CollectionUtil.newHashSet(ModelType.ALL_TYPES_TYPE)); 62d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertEquals(expectedTypes, actualTypes); 63d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt } 64d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 65d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @SmallTest 66d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @Feature({"Sync"}) 67d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt public void testReadMissingData() { 68d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt /* 69d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * Test plan: read saved state from empty preferences. Verify that null is returned. 70d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt */ 71d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt InvalidationPreferences invPreferences = new InvalidationPreferences(mContext); 72d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getSavedSyncedAccount()); 73d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getSavedSyncedTypes()); 74d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getSavedObjectIds()); 75d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getInternalNotificationClientState()); 76d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt } 77d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 78d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @SmallTest 79d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt @Feature({"Sync"}) 80d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt public void testReadWriteAndReadData() { 81d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt /* 82d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * Test plan: write and read back saved state. Verify that the returned state is what 83d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt * was written. 84d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt */ 85d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt InvalidationPreferences invPreferences = new InvalidationPreferences(mContext); 86d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt InvalidationPreferences.EditContext editContext = invPreferences.edit(); 87d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 88d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt // We should never write both a real type and the all-types type in practice, but we test 89d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt // with them here to ensure that preferences are not interpreting the written data. 90d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt Set<String> syncTypes = CollectionUtil.newHashSet("BOOKMARK", ModelType.ALL_TYPES_TYPE); 91d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt Set<ObjectId> objectIds = CollectionUtil.newHashSet( 92d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt ObjectId.newInstance(1, "obj1".getBytes()), 93d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt ObjectId.newInstance(2, "obj2".getBytes())); 94d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt Account account = new Account("test@example.com", "bogus"); 95d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt byte[] internalClientState = new byte[]{100, 101, 102}; 96d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt invPreferences.setSyncTypes(editContext, syncTypes); 97d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt invPreferences.setObjectIds(editContext, objectIds); 98d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt invPreferences.setAccount(editContext, account); 99d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt invPreferences.setInternalNotificationClientState(editContext, internalClientState); 100d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 101d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt // Nothing should yet have been written. 102d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getSavedSyncedAccount()); 103d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getSavedSyncedTypes()); 104d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertNull(invPreferences.getSavedObjectIds()); 105d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt 106d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt // Write the new data and verify that they are correctly read back. 107d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt invPreferences.commit(editContext); 108d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertEquals(account, invPreferences.getSavedSyncedAccount()); 109d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertEquals(syncTypes, invPreferences.getSavedSyncedTypes()); 110d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt assertEquals(objectIds, invPreferences.getSavedObjectIds()); 1116cb1f6521a84955752c2b99100cf1df87637f86cDmitry Shmidt assertTrue(Arrays.equals( 1126cb1f6521a84955752c2b99100cf1df87637f86cDmitry Shmidt internalClientState, invPreferences.getInternalNotificationClientState())); 113d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt } 114d5dc24eb5fbf0e0feff214c0260cae845721d5feDmitry Shmidt}