1ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee/* 2ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * Copyright (C) 2014 The Android Open Source Project 3ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * 4ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * you may not use this file except in compliance with the License. 6ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * You may obtain a copy of the License at 7ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * 8ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * http://www.apache.org/licenses/LICENSE-2.0 9ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * 10ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * Unless required by applicable law or agreed to in writing, software 11ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * distributed under the License is distributed on an "AS IS" BASIS, 12ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * See the License for the specific language governing permissions and 14ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee * limitations under the License. 15ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee */ 16ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 17ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leepackage com.android.providers.tv; 18ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 19ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport com.google.android.collect.Sets; 20ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 21ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.content.ContentUris; 22ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.content.ContentValues; 23ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.content.Intent; 24fb7edc337587faafccd9e3f262187e7632c3a6a0Jae Seoimport android.content.pm.ProviderInfo; 25ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.database.Cursor; 26ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.media.tv.TvContract; 27ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.media.tv.TvContract.Channels; 28ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.media.tv.TvContract.Programs; 29ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.media.tv.TvContract.WatchedPrograms; 30ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.net.Uri; 31ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.os.Bundle; 32ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.os.SystemClock; 33ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.provider.Settings; 34291cd14f062ea27fd3018ded7485ca6bbbcd6517Dongwon Kangimport android.test.suitebuilder.annotation.Suppress; 35ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.test.mock.MockContentProvider; 36ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport android.test.mock.MockContentResolver; 37291cd14f062ea27fd3018ded7485ca6bbbcd6517Dongwon Kangimport android.test.ServiceTestCase; 38ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 39ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport java.util.ArrayList; 40ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport java.util.Arrays; 41ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport java.util.Collection; 42ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport java.util.HashSet; 43ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport java.util.Objects; 44ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leeimport java.util.Set; 45ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 46ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Leepublic class EpgDataCleanupServiceTests extends ServiceTestCase<EpgDataCleanupService> { 47023be771801a56970689b2cfe4892d04a66e99b9Chulwoo Lee private static final String FAKE_INPUT_ID = "EpgDataCleanupServiceTests"; 48023be771801a56970689b2cfe4892d04a66e99b9Chulwoo Lee 49ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private MockContentResolver mResolver; 509c7110178fd390ed520e83522ecc5b54835e0778Conrad Chen private TvProviderForTesting mProvider; 51ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 52ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public EpgDataCleanupServiceTests() { 53ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee super(EpgDataCleanupService.class); 54ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 55ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 56ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 57ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee protected void setUp() throws Exception { 58ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee super.setUp(); 59ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 60ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee mResolver = new MockContentResolver(); 61ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee // DateUtils tries to access Settings provider to get date format string. 62ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee mResolver.addProvider(Settings.AUTHORITY, new MockContentProvider() { 63ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 64ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public Bundle call(String method, String request, Bundle args) { 65ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return new Bundle(); 66ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 67ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee }); 68ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 69ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee mProvider = new TvProviderForTesting(); 70ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee mResolver.addProvider(TvContract.AUTHORITY, mProvider); 71ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 72ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee setContext(new MockTvProviderContext(mResolver, getSystemContext())); 73fb7edc337587faafccd9e3f262187e7632c3a6a0Jae Seo 74fb7edc337587faafccd9e3f262187e7632c3a6a0Jae Seo final ProviderInfo info = new ProviderInfo(); 75fb7edc337587faafccd9e3f262187e7632c3a6a0Jae Seo info.authority = TvContract.AUTHORITY; 76fb7edc337587faafccd9e3f262187e7632c3a6a0Jae Seo mProvider.attachInfoForTesting(getContext(), info); 77ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 78ecfa5fd8a9d974f26f36132687b554248ce9657aDongwon Kang Utils.clearTvProvider(mResolver); 79ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee startService(new Intent(getContext(), EpgDataCleanupService.class)); 80ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 81ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 82ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 83ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee protected void tearDown() throws Exception { 84ecfa5fd8a9d974f26f36132687b554248ce9657aDongwon Kang Utils.clearTvProvider(mResolver); 85ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee mProvider.shutdown(); 86ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee super.tearDown(); 87ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 88ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 89ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private static class Program { 90ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee long id; 91ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee final long startTime; 92ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee final long endTime; 93ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 94ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Program(long startTime, long endTime) { 95ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee this(-1, startTime, endTime); 96ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 97ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 98ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Program(long id, long startTime, long endTime) { 99ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee this.id = id; 100ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee this.startTime = startTime; 101ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee this.endTime = endTime; 102ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 103ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 104ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 105ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public boolean equals(Object obj) { 106ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee if (!(obj instanceof Program)) { 107ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return false; 108ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 109ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Program that = (Program) obj; 110ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return Objects.equals(id, that.id) 111ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee && Objects.equals(startTime, that.startTime) 112ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee && Objects.equals(endTime, that.endTime); 113ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 114ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 115ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 116ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public int hashCode() { 117ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return Objects.hash(id, startTime, endTime); 118ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 119ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 120ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 121ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public String toString() { 122ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return "Program(id=" + id + ",start=" + startTime + ",end=" + endTime + ")"; 123ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 124ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 125ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 126ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private long insertChannel() { 127ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee ContentValues values = new ContentValues(); 128023be771801a56970689b2cfe4892d04a66e99b9Chulwoo Lee values.put(Channels.COLUMN_INPUT_ID, FAKE_INPUT_ID); 129ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Uri uri = mResolver.insert(Channels.CONTENT_URI, values); 130ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertNotNull(uri); 131ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return ContentUris.parseId(uri); 132ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 133ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 134ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private void insertPrograms(Program... programs) { 135ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertPrograms(Arrays.asList(programs)); 136ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 137ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 138ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private void insertPrograms(Collection<Program> programs) { 139ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee long channelId = insertChannel(); 140ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 141ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee ContentValues values = new ContentValues(); 142ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(Programs.COLUMN_CHANNEL_ID, channelId); 143ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee for (Program program : programs) { 144ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(Programs.COLUMN_START_TIME_UTC_MILLIS, program.startTime); 145ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(Programs.COLUMN_END_TIME_UTC_MILLIS, program.endTime); 146ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Uri uri = mResolver.insert(Programs.CONTENT_URI, values); 147ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertNotNull(uri); 148ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee program.id = ContentUris.parseId(uri); 149ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 150ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 151ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 152ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private Set<Program> queryPrograms() { 153ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee String[] projection = new String[] { 154ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Programs._ID, 155ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Programs.COLUMN_START_TIME_UTC_MILLIS, 156ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Programs.COLUMN_END_TIME_UTC_MILLIS, 157ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee }; 158ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 159ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Cursor cursor = mResolver.query(Programs.CONTENT_URI, projection, null, null, null); 160ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertNotNull(cursor); 161ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee try { 162ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Set<Program> programs = Sets.newHashSet(); 163ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee while (cursor.moveToNext()) { 164ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee programs.add(new Program(cursor.getLong(0), cursor.getLong(1), cursor.getLong(2))); 165ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 166ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return programs; 167ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } finally { 168ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee cursor.close(); 169ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 170ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 171ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 172ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private void insertWatchedPrograms(Program... programs) { 173ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertWatchedPrograms(Arrays.asList(programs)); 174ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 175ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 176ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private void insertWatchedPrograms(Collection<Program> programs) { 177ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee long channelId = insertChannel(); 178ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 179ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee ContentValues values = new ContentValues(); 180ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(WatchedPrograms.COLUMN_PACKAGE_NAME, getContext().getPackageName()); 181ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(WatchedPrograms.COLUMN_CHANNEL_ID, channelId); 182ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee for (Program program : programs) { 183ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(WatchedPrograms.COLUMN_WATCH_START_TIME_UTC_MILLIS, program.startTime); 184ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee values.put(WatchedPrograms.COLUMN_WATCH_END_TIME_UTC_MILLIS, program.endTime); 1859c7110178fd390ed520e83522ecc5b54835e0778Conrad Chen Uri uri = mProvider.insertWatchedProgramSync(values); 186ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertNotNull(uri); 187ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee program.id = ContentUris.parseId(uri); 188ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 189ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 190ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 191ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee private Set<Program> queryWatchedPrograms() { 192ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee String[] projection = new String[] { 193ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee WatchedPrograms._ID, 194ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee WatchedPrograms.COLUMN_WATCH_START_TIME_UTC_MILLIS, 195ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee WatchedPrograms.COLUMN_WATCH_END_TIME_UTC_MILLIS, 196ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee }; 197ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 198ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Cursor cursor = mResolver.query(WatchedPrograms.CONTENT_URI, projection, null, null, null); 199ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertNotNull(cursor); 200ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee try { 201ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Set<Program> programs = Sets.newHashSet(); 202ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee while (cursor.moveToNext()) { 203ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee programs.add(new Program(cursor.getLong(0), cursor.getLong(1), cursor.getLong(2))); 204ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 205ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee return programs; 206ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } finally { 207ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee cursor.close(); 208ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 209ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 210ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 211ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee @Override 212ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public void testServiceTestCaseSetUpProperly() throws Exception { 213ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertNotNull(getService()); 214ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 215ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 216ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public void testClearOldPrograms() { 217ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Program program = new Program(1, 2); 218ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertPrograms(program); 219ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 220ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOldPrograms(2); 221ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertEquals("Program should NOT be deleted if it ended at given time.", 222ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Sets.newHashSet(program), queryPrograms()); 223ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 224ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOldPrograms(3); 225ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertTrue("Program should be deleted if it ended before given time.", 226ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee queryPrograms().isEmpty()); 227ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 228ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee ArrayList<Program> programs = new ArrayList<Program>(); 229ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee for (int i = 0; i < 10; i++) { 230ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee programs.add(new Program(999 + i, 1000 + i)); 231ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 232ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertPrograms(programs); 233ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 234ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOldPrograms(1005); 235ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertEquals("Program should be deleted if and only if it ended before given time.", 236ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee new HashSet<Program>(programs.subList(5, 10)), queryPrograms()); 237ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 238ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 239291cd14f062ea27fd3018ded7485ca6bbbcd6517Dongwon Kang // Disable temporarily since it's not trivial to fix due to asynchronous implementation of 240291cd14f062ea27fd3018ded7485ca6bbbcd6517Dongwon Kang // watch history management. 241ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public void testClearOldWatchedPrograms() { 242ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Program program = new Program(1, 2); 243ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertWatchedPrograms(program); 244ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 245ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOldWatchHistory(1); 246ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertEquals("Watch history should NOT be deleted if watch started at given time.", 247ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee Sets.newHashSet(program), queryWatchedPrograms()); 248ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 249ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOldWatchHistory(2); 250ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertTrue("Watch history shuold be deleted if watch started before given time.", 251ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee queryWatchedPrograms().isEmpty()); 252ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 253ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee ArrayList<Program> programs = new ArrayList<Program>(); 254ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee for (int i = 0; i < 10; i++) { 255ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee programs.add(new Program(1000 + i, 1001 + i)); 256ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 257ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertWatchedPrograms(programs); 258ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 259ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOldWatchHistory(1005); 260ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertEquals("Watch history should be deleted if and only if it started before given time.", 261ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee new HashSet<Program>(programs.subList(5, 10)), queryWatchedPrograms()); 262ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 263ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 264291cd14f062ea27fd3018ded7485ca6bbbcd6517Dongwon Kang // Disable temporarily since it's not trivial to fix due to asynchronous implementation of 265291cd14f062ea27fd3018ded7485ca6bbbcd6517Dongwon Kang // watch history management. 266ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee public void testClearOverflowWatchHistory() { 267ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee ArrayList<Program> programs = new ArrayList<Program>(); 268ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee for (int i = 0; i < 10; i++) { 269ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee programs.add(new Program(1000 + i, 1001 + i)); 270ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 271ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee insertWatchedPrograms(programs); 272ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 273ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOverflowWatchHistory(5); 274ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertEquals("Watch history should be deleted in watch start time order.", 275ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee new HashSet<Program>(programs.subList(5, 10)), queryWatchedPrograms()); 276ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee 277ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee getService().clearOverflowWatchHistory(0); 278ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee assertTrue("All history should be deleted.", queryWatchedPrograms().isEmpty()); 279ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee } 280ac117ad70762672243573f9c8a5ea3220c4884bfJi-Hwan Lee} 281