| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package com.android.tv.dvr; |
| |
| import android.support.test.filters.SmallTest; |
| import android.test.MoreAsserts; |
| import android.util.Range; |
| |
| import com.android.tv.testing.dvr.RecordingTestUtils; |
| |
| import junit.framework.TestCase; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| import java.util.Collections; |
| import java.util.List; |
| import java.util.Map; |
| |
| /** |
| * Tests for {@link DvrScheduleManager} |
| */ |
| @SmallTest |
| public class DvrScheduleManagerTest extends TestCase { |
| private static final String INPUT_ID = "input_id"; |
| |
| public void testGetConflictingSchedules_emptySchedule() { |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); |
| } |
| |
| public void testGetConflictingSchedules_noConflict() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 0L, 200L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); |
| |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 0L, 100L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 100L, 200L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 0L, 100L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 100L, 200L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| } |
| |
| public void testGetConflictingSchedules_noTuner() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 0)); |
| |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 0L, 200L)); |
| assertEquals(schedules, DvrScheduleManager.getConflictingSchedules(schedules, 0)); |
| schedules.add(0, RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| ++priority, 0L, 100L)); |
| assertEquals(schedules, DvrScheduleManager.getConflictingSchedules(schedules, 0)); |
| } |
| |
| public void testGetConflictingSchedules_conflict() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); |
| |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r3); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| ScheduledRecording r4 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r4); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| |
| ScheduledRecording r5 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r5); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| |
| ScheduledRecording r6 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 10L, 90L); |
| schedules.add(r6); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 3), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); |
| |
| ScheduledRecording r7 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 110L, 190L); |
| schedules.add(r7); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r5, r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 3), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); |
| |
| ScheduledRecording r8 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 50L, 150L); |
| schedules.add(r8); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r7, r6, r5, r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r5, r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 3), |
| r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 4), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 5)); |
| } |
| |
| public void testGetConflictingSchedules_conflict2() { |
| // The case when there is a long schedule. |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 1000L); |
| schedules.add(r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); |
| |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r3); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| } |
| |
| public void testGetConflictingSchedules_reverseOrder() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(0, r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 1)); |
| |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(0, r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(0, r3); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 2)); |
| |
| ScheduledRecording r4 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(0, r4); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| |
| ScheduledRecording r5 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(0, r5); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| |
| ScheduledRecording r6 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 10L, 90L); |
| schedules.add(0, r6); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 3), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); |
| |
| ScheduledRecording r7 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 110L, 190L); |
| schedules.add(0, r7); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r5, r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 3), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 4)); |
| |
| ScheduledRecording r8 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 50L, 150L); |
| schedules.add(0, r8); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r7, r6, r5, r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 2), |
| r5, r4, r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 3), |
| r3, r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 4), |
| r1); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 5)); |
| } |
| |
| public void testGetConflictingSchedules_period1() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(10L, 20L))), r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(110L, 120L))), r1); |
| } |
| |
| public void testGetConflictingSchedules_period2() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(10L, 20L))), r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(110L, 120L))), r1); |
| } |
| |
| public void testGetConflictingSchedules_period3() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r2); |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r3); |
| ScheduledRecording r4 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r4); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(10L, 20L))), r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(110L, 120L))), r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| Collections.singletonList(new Range<>(50L, 150L))), r2, r1); |
| List<Range<Long>> ranges = new ArrayList<>(); |
| ranges.add(new Range<>(10L, 20L)); |
| ranges.add(new Range<>(110L, 120L)); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1, |
| ranges), r2, r1); |
| } |
| |
| public void testGetConflictingSchedules_addSchedules1() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 100L); |
| schedules.add(r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules( |
| Collections.singletonList( |
| ScheduledRecording.builder(INPUT_ID, ++channelId, 10L, 20L) |
| .setPriority(++priority).build()), |
| schedules, 1), r2, r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules( |
| Collections.singletonList( |
| ScheduledRecording.builder(INPUT_ID, ++channelId, 110L, 120L) |
| .setPriority(++priority).build()), |
| schedules, 1), r1); |
| } |
| |
| public void testGetConflictingSchedules_addSchedules2() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules( |
| Collections.singletonList( |
| ScheduledRecording.builder(INPUT_ID, ++channelId, 10L, 20L) |
| .setPriority(++priority).build()), |
| schedules, 1), r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules( |
| Collections.singletonList( |
| ScheduledRecording.builder(INPUT_ID, ++channelId, 110L, 120L) |
| .setPriority(++priority).build()), |
| schedules, 1), r2, r1); |
| } |
| |
| public void testGetConflictingSchedules_addLowestPriority() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 400L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r2); |
| // Returning r1 even though r1 has the higher priority than the new one. That's because r1 |
| // starts at 0 and stops at 100, and the new one will be recorded successfully. |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules( |
| Collections.singletonList( |
| ScheduledRecording.builder(INPUT_ID, ++channelId, 200L, 300L) |
| .setPriority(0).build()), |
| schedules, 1), r1); |
| } |
| |
| public void testGetConflictingSchedules_sameChannel() { |
| long priority = 0; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(channelId, |
| ++priority, 0L, 200L)); |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(channelId, |
| ++priority, 0L, 200L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedules(schedules, 3)); |
| } |
| |
| public void testGetConflictingSchedule_startEarlyAndFail() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 200L, 300L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 400L); |
| schedules.add(r2); |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 200L); |
| schedules.add(r3); |
| // r2 starts recording and fails when r3 starts. r1 is recorded successfully. |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r2); |
| } |
| |
| public void testGetConflictingSchedule_startLate() { |
| long priority = 0; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 200L, 400L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 100L, 300L); |
| schedules.add(r2); |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r3); |
| // r2 and r1 are clipped. |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedules(schedules, 1), |
| r2, r1); |
| } |
| |
| public void testGetConflictingSchedulesForTune_canTune() { |
| // Can tune to the recorded channel if tuner count is 1. |
| long priority = 0; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(channelId, |
| ++priority, 0L, 200L)); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedulesForTune(INPUT_ID, |
| channelId, 0L, priority + 1, schedules, 1)); |
| } |
| |
| public void testGetConflictingSchedulesForTune_cannotTune() { |
| // Can't tune to a channel if other channel is recording and tuner count is 1. |
| long priority = 0; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| schedules.add(RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(channelId, |
| ++priority, 0L, 200L)); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForTune( |
| INPUT_ID, channelId + 1, 0L, priority + 1, schedules, 1), schedules.get(0)); |
| } |
| |
| public void testGetConflictingSchedulesForWatching_otherChannels() { |
| // The other channels are to be recorded. |
| long priority = 0; |
| long channelToWatch = 1; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r2); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 3)); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), r1); |
| } |
| |
| public void testGetConflictingSchedulesForWatching_sameChannel1() { |
| long priority = 0; |
| long channelToWatch = 1; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| channelToWatch, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r2); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2)); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r2); |
| } |
| |
| public void testGetConflictingSchedulesForWatching_sameChannel2() { |
| long priority = 0; |
| long channelToWatch = 1; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| channelToWatch, ++priority, 0L, 200L); |
| schedules.add(r2); |
| MoreAsserts.assertEmpty(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2)); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r1); |
| } |
| |
| public void testGetConflictingSchedulesForWatching_sameChannelConflict1() { |
| long priority = 0; |
| long channelToWatch = 1; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| channelToWatch, ++priority, 0L, 200L); |
| schedules.add(r2); |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| channelToWatch, ++priority, 0L, 200L); |
| schedules.add(r3); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 3), r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), r2); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r2, r1); |
| } |
| |
| public void testGetConflictingSchedulesForWatching_sameChannelConflict2() { |
| long priority = 0; |
| long channelToWatch = 1; |
| long channelId = 1; |
| List<ScheduledRecording> schedules = new ArrayList<>(); |
| ScheduledRecording r1 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| channelToWatch, ++priority, 0L, 200L); |
| schedules.add(r1); |
| ScheduledRecording r2 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| channelToWatch, ++priority, 0L, 200L); |
| schedules.add(r2); |
| ScheduledRecording r3 = RecordingTestUtils.createTestRecordingWithPriorityAndPeriod( |
| ++channelId, ++priority, 0L, 200L); |
| schedules.add(r3); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 3), r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 2), r1); |
| MoreAsserts.assertContentsInOrder(DvrScheduleManager.getConflictingSchedulesForWatching( |
| INPUT_ID, channelToWatch, 0L, ++priority, schedules, 1), r3, r1); |
| } |
| |
| public void testPartiallyConflictingSchedules() { |
| long priority = 100; |
| long channelId = 0; |
| List<ScheduledRecording> schedules = new ArrayList<>(Arrays.asList( |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 0L, 400L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 0L, 200L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 200L, 500L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 400L, 600L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 700L, 800L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 600L, 900L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 800L, 900L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 800L, 900L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 750L, 850L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 300L, 450L), |
| RecordingTestUtils.createTestRecordingWithPriorityAndPeriod(++channelId, |
| --priority, 50L, 900L) |
| )); |
| Map<ScheduledRecording, Boolean> conflictsInfo = DvrScheduleManager |
| .getConflictingSchedulesInfo(schedules, 1); |
| |
| assertNull(conflictsInfo.get(schedules.get(0))); |
| assertFalse(conflictsInfo.get(schedules.get(1))); |
| assertTrue(conflictsInfo.get(schedules.get(2))); |
| assertTrue(conflictsInfo.get(schedules.get(3))); |
| assertNull(conflictsInfo.get(schedules.get(4))); |
| assertTrue(conflictsInfo.get(schedules.get(5))); |
| assertNull(conflictsInfo.get(schedules.get(6))); |
| assertFalse(conflictsInfo.get(schedules.get(7))); |
| assertFalse(conflictsInfo.get(schedules.get(8))); |
| assertFalse(conflictsInfo.get(schedules.get(9))); |
| assertFalse(conflictsInfo.get(schedules.get(10))); |
| |
| conflictsInfo = DvrScheduleManager |
| .getConflictingSchedulesInfo(schedules, 2); |
| |
| assertNull(conflictsInfo.get(schedules.get(0))); |
| assertNull(conflictsInfo.get(schedules.get(1))); |
| assertNull(conflictsInfo.get(schedules.get(2))); |
| assertNull(conflictsInfo.get(schedules.get(3))); |
| assertNull(conflictsInfo.get(schedules.get(4))); |
| assertNull(conflictsInfo.get(schedules.get(5))); |
| assertNull(conflictsInfo.get(schedules.get(6))); |
| assertFalse(conflictsInfo.get(schedules.get(7))); |
| assertFalse(conflictsInfo.get(schedules.get(8))); |
| assertFalse(conflictsInfo.get(schedules.get(9))); |
| assertTrue(conflictsInfo.get(schedules.get(10))); |
| |
| conflictsInfo = DvrScheduleManager |
| .getConflictingSchedulesInfo(schedules, 3); |
| |
| assertNull(conflictsInfo.get(schedules.get(0))); |
| assertNull(conflictsInfo.get(schedules.get(1))); |
| assertNull(conflictsInfo.get(schedules.get(2))); |
| assertNull(conflictsInfo.get(schedules.get(3))); |
| assertNull(conflictsInfo.get(schedules.get(4))); |
| assertNull(conflictsInfo.get(schedules.get(5))); |
| assertNull(conflictsInfo.get(schedules.get(6))); |
| assertNull(conflictsInfo.get(schedules.get(7))); |
| assertTrue(conflictsInfo.get(schedules.get(8))); |
| assertNull(conflictsInfo.get(schedules.get(9))); |
| assertTrue(conflictsInfo.get(schedules.get(10))); |
| } |
| } |