/* * Copyright (C) 2014 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.mediaframeworktest.stress; import com.android.mediaframeworktest.MediaFrameworkTest; import com.android.mediaframeworktest.MediaPlayerStressTestRunner; import android.os.Bundle; import android.os.Environment; import android.test.ActivityInstrumentationTestCase2; import android.test.suitebuilder.annotation.LargeTest; import android.util.Log; import com.android.mediaframeworktest.MediaNames; import com.android.mediaframeworktest.functional.CodecTest; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.Writer; import java.util.ArrayList; import java.util.List; /** * Junit / Instrumentation test case for the media player */ public class MediaPlayerStreamingStressTest extends ActivityInstrumentationTestCase2 { private String TAG = "MediaPlayerStreamingStressTest"; private String mStreamingSrc; public MediaPlayerStreamingStressTest() { super("com.android.mediaframeworktest", MediaFrameworkTest.class); } protected void setUp() throws Exception { //Insert a 2 second before launching the test activity. This is //the workaround for the race condition of requesting the updated surface. Thread.sleep(2000); getActivity(); MediaPlayerStressTestRunner mRunner = (MediaPlayerStressTestRunner)getInstrumentation(); Bundle arguments = mRunner.getArguments(); mStreamingSrc = arguments.getString("streaming-source"); if (mStreamingSrc == null) { mStreamingSrc = MediaNames.MEDIA_STREAMING_SRC; } super.setUp(); } private int mTotalPlaybackError = 0; private int mTotalComplete = 0; private int mTotalInfoUnknown = 0; private int mTotalVideoTrackLagging = 0; private int mTotalBadInterleaving = 0; private int mTotalNotSeekable = 0; private int mTotalMetaDataUpdate = 0; //Test result output file private static final String PLAYBACK_RESULT = "StreamingTestResult.txt"; private void writeTestOutput(String filename, Writer output) throws Exception{ output.write("URL: " + filename); output.write(" Complete: " + CodecTest.onCompleteSuccess); output.write(" Error: " + CodecTest.mPlaybackError); output.write(" Unknown Info: " + CodecTest.mMediaInfoUnknownCount); output.write(" Track Lagging: " + CodecTest.mMediaInfoVideoTrackLaggingCount); output.write(" Bad Interleaving: " + CodecTest.mMediaInfoBadInterleavingCount); output.write(" Not Seekable: " + CodecTest.mMediaInfoNotSeekableCount); output.write(" Info Meta data update: " + CodecTest.mMediaInfoMetdataUpdateCount); output.write("\n"); } private void writeTestSummary(Writer output) throws Exception{ output.write("Total Result:\n"); output.write("Total Complete: " + mTotalComplete + "\n"); output.write("Total Error: " + mTotalPlaybackError + "\n"); output.write("Total Unknown Info: " + mTotalInfoUnknown + "\n"); output.write("Total Track Lagging: " + mTotalVideoTrackLagging + "\n" ); output.write("Total Bad Interleaving: " + mTotalBadInterleaving + "\n"); output.write("Total Not Seekable: " + mTotalNotSeekable + "\n"); output.write("Total Info Meta data update: " + mTotalMetaDataUpdate + "\n"); output.write("\n"); } private void updateTestResult(){ if (CodecTest.onCompleteSuccess){ mTotalComplete++; } else if (CodecTest.mPlaybackError){ mTotalPlaybackError++; } mTotalInfoUnknown += CodecTest.mMediaInfoUnknownCount; mTotalVideoTrackLagging += CodecTest.mMediaInfoVideoTrackLaggingCount; mTotalBadInterleaving += CodecTest.mMediaInfoBadInterleavingCount; mTotalNotSeekable += CodecTest.mMediaInfoNotSeekableCount; mTotalMetaDataUpdate += CodecTest.mMediaInfoMetdataUpdateCount; } //Test that will start the playback for all the videos //under the samples folder @LargeTest public void testVideoPlayback() throws Exception { String fileWithError = "Filename:\n"; File playbackOutput = new File(Environment.getExternalStorageDirectory(), PLAYBACK_RESULT); Writer output = new BufferedWriter(new FileWriter(playbackOutput, true)); boolean testResult = true; // load directory files boolean onCompleteSuccess = false; Log.i(TAG, "Streaming src file: " + mStreamingSrc); //TODO: add try catch File f = new File(mStreamingSrc); BufferedReader br = new BufferedReader(new FileReader(f)); List urls = new ArrayList(); String line; while ((line = br.readLine()) != null) { urls.add(line.trim()); } br.close(); if (urls == null) { Log.v("MediaPlayerStreamingTest:testVideoPlayback", "no url found"); return; } else { for (int i = 0; i < urls.size(); i++) { //Get url String filename = urls.get(i); onCompleteSuccess = CodecTest.playMediaSamples(filename, 60000); if (!onCompleteSuccess){ //Don't fail the test right away, print out the failure file. fileWithError += filename + '\n'; Log.v(TAG, "Failure File : " + fileWithError); testResult = false; } Thread.sleep(3000); //Write test result to an output file writeTestOutput(filename,output); //Get the summary updateTestResult(); } writeTestSummary(output); output.close(); assertTrue("testMediaSamples", testResult); } } }