private void assertUninterruptibleDrained(BlockingQueue<Object> q) { assertEquals(0, Queues.drainUninterruptibly(q, ImmutableList.of(), 0, 10, MILLISECONDS)); // but does the wait actually occurs? @SuppressWarnings("unused") // go/futurereturn-lsc Future<?> possiblyIgnoredError = threadPool.submit(new Interrupter(currentThread())); Stopwatch timer = Stopwatch.createStarted(); Queues.drainUninterruptibly(q, newArrayList(), 1, 10, MILLISECONDS); assertThat(timer.elapsed(MILLISECONDS)).isAtLeast(10L); // wait for interrupted status and clear it while (!Thread.interrupted()) { Thread.yield(); } }
/** * Asserts that {@link BloomFilter#approximateElementCount} is within 1 percent of the expected * value. */ private static void assertApproximateElementCountGuess(BloomFilter<?> bf, int sizeGuess) { assertThat(bf.approximateElementCount()).isAtLeast((long) (sizeGuess * 0.99)); assertThat(bf.approximateElementCount()).isAtMost((long) (sizeGuess * 1.01)); }
private void testDrainTimesOut(BlockingQueue<Object> q) throws Exception { for (boolean interruptibly : new boolean[] {true, false}) { assertEquals(0, Queues.drain(q, ImmutableList.of(), 1, 10, MILLISECONDS)); Producer producer = new Producer(q, 1); // producing one, will ask for two Future<?> producerThread = threadPool.submit(producer); producer.beganProducing.await(); // make sure we time out Stopwatch timer = Stopwatch.createStarted(); int drained = drain(q, newArrayList(), 2, 10, MILLISECONDS, interruptibly); assertThat(drained).isAtMost(1); assertThat(timer.elapsed(MILLISECONDS)).isAtLeast(10L); // If even the first one wasn't there, clean up so that the next test doesn't see an element. producerThread.cancel(true); producer.doneProducing.await(); if (drained == 0) { q.poll(); // not necessarily there if producer was interrupted } } }
@Test public void initNoCrash() { assertThat(Debug.getNativeHeapAllocatedSize()).isAtLeast(0L); }
@Test public void shouldCorrectlyReturnNullValues() { database.execSQL("CREATE TABLE null_test (col_int INTEGER, col_text TEXT, col_real REAL, col_blob BLOB)"); ContentValues data = new ContentValues(); data.putNull("col_int"); data.putNull("col_text"); data.putNull("col_real"); data.putNull("col_blob"); assertThat(database.insert("null_test", null, data)).isAtLeast(0L); Cursor nullValuesCursor = database.query("null_test", null, null, null, null, null, null); nullValuesCursor.moveToFirst(); final int colsCount = 4; for (int i = 0; i < colsCount; i++) { assertThat(nullValuesCursor.getType(i)).isEqualTo(Cursor.FIELD_TYPE_NULL); assertThat(nullValuesCursor.getString(i)).isNull(); } assertThat(nullValuesCursor.getBlob(3)).isNull(); }
@Test public void testMultipleSendMessages() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target50 = new PositionGrabbingMessageTarget(); PositionGrabbingMessageTarget target80 = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target80, /* positionMs= */ 80) .sendMessage(target50, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target50.positionMs).isAtLeast(50L); assertThat(target80.positionMs).isAtLeast(80L); assertThat(target80.positionMs).isAtLeast(target50.positionMs); }
@Test public void testMultipleSendMessagesAtSameTime() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target1 = new PositionGrabbingMessageTarget(); PositionGrabbingMessageTarget target2 = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target1, /* positionMs= */ 50) .sendMessage(target2, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target1.positionMs).isAtLeast(50L); assertThat(target2.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesMultiWindowAfterPreparation() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 3); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForTimelineChanged(timeline) .sendMessage(target, /* windowIndex = */ 2, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.windowIndex).isEqualTo(2); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesMultiWindowDuringPreparation() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 3); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target, /* windowIndex = */ 2, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.windowIndex).isEqualTo(2); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesSeekOnDeliveryTimeDuringPreparation() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target, /* positionMs= */ 50) .seek(/* positionMs= */ 50) .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesAfterPreparation() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForTimelineChanged(timeline) .sendMessage(target, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesDuringPreparation() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesRepeatDoesNotRepost() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target, /* positionMs= */ 50) .setRepeatMode(Player.REPEAT_MODE_ALL) .play() .waitForPositionDiscontinuity() .setRepeatMode(Player.REPEAT_MODE_OFF) .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.messageCount).isEqualTo(1); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesSeekOnDeliveryTimeAfterPreparation() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target, /* positionMs= */ 50) .waitForTimelineChanged(timeline) .seek(/* positionMs= */ 50) .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesRepeatWithoutDeletingDoesRepost() throws Exception { Timeline timeline = new FakeTimeline(/* windowCount= */ 1); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage( target, /* windowIndex= */ 0, /* positionMs= */ 50, /* deleteAfterDelivery= */ false) .setRepeatMode(Player.REPEAT_MODE_ALL) .playUntilPosition(/* windowIndex= */ 0, /* positionMs= */ 1) .playUntilStartOfWindow(/* windowIndex= */ 0) .setRepeatMode(Player.REPEAT_MODE_OFF) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.messageCount).isEqualTo(2); assertThat(target.positionMs).isAtLeast(50L); }
@Test public void testSendMessagesMultiPeriodResolution() throws Exception { Timeline timeline = new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */ 10, /* id= */ 0)); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForPlaybackState(Player.STATE_BUFFERING) .sendMessage(target, /* positionMs= */ 50) .play() .build(); new Builder() .setTimeline(timeline) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); }
testRunner.assertTimelineChangeReasonsEqual(Player.TIMELINE_CHANGE_REASON_PREPARED); testRunner.assertNoPositionDiscontinuities(); assertThat(positionHolder[0]).isAtLeast(50L);
testRunner.assertTimelineChangeReasonsEqual(Player.TIMELINE_CHANGE_REASON_PREPARED); testRunner.assertNoPositionDiscontinuities(); assertThat(positionHolder[0]).isAtLeast(50L);
@Test public void testSendMessagesMoveCurrentWindowIndex() throws Exception { Timeline timeline = new FakeTimeline(new TimelineWindowDefinition(/* periodCount= */ 1, /* id= */ 0)); final Timeline secondTimeline = new FakeTimeline( new TimelineWindowDefinition(/* periodCount= */ 1, /* id= */ 1), new TimelineWindowDefinition(/* periodCount= */ 1, /* id= */ 0)); final FakeMediaSource mediaSource = new FakeMediaSource(timeline, null, Builder.VIDEO_FORMAT); PositionGrabbingMessageTarget target = new PositionGrabbingMessageTarget(); ActionSchedule actionSchedule = new ActionSchedule.Builder("testSendMessages") .pause() .waitForTimelineChanged(timeline) .sendMessage(target, /* positionMs= */ 50) .executeRunnable(() -> mediaSource.setNewSourceInfo(secondTimeline, null)) .waitForTimelineChanged(secondTimeline) .play() .build(); new Builder() .setMediaSource(mediaSource) .setActionSchedule(actionSchedule) .build(context) .start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); assertThat(target.windowIndex).isEqualTo(1); }
.start() .blockUntilEnded(TIMEOUT_MS); assertThat(target.positionMs).isAtLeast(50L); assertThat(target.windowIndex).isEqualTo(0);