1d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou/* 2d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * Copyright (C) 2014 The Android Open Source Project 3d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * 4d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * Licensed under the Apache License, Version 2.0 (the "License"); 5d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * you may not use this file except in compliance with the License. 6d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * You may obtain a copy of the License at 7d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * 8d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * http://www.apache.org/licenses/LICENSE-2.0 9d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * 10d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * Unless required by applicable law or agreed to in writing, software 11d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * distributed under the License is distributed on an "AS IS" BASIS, 12d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * See the License for the specific language governing permissions and 14d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * limitations under the License. 15d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou */ 16d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 17d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zoupackage com.android.mediaframeworktest.stress; 18d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 19d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport com.android.mediaframeworktest.MediaFrameworkTest; 20d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport com.android.mediaframeworktest.MediaPlayerStressTestRunner; 21d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 22d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport android.os.Bundle; 23d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport android.os.Environment; 24d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport android.test.ActivityInstrumentationTestCase2; 25d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport android.test.suitebuilder.annotation.LargeTest; 26d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport android.util.Log; 27d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 28d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport com.android.mediaframeworktest.MediaNames; 29d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport com.android.mediaframeworktest.functional.CodecTest; 30d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 31d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.io.BufferedReader; 32d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.io.BufferedWriter; 33d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.io.File; 34d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.io.FileReader; 35d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.io.FileWriter; 36d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.io.Writer; 37d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 38d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.util.ArrayList; 39d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zouimport java.util.List; 40d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 41d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou/** 42d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou * Junit / Instrumentation test case for the media player 43d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou */ 44d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zoupublic class MediaPlayerStreamingStressTest extends ActivityInstrumentationTestCase2<MediaFrameworkTest> { 45d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private String TAG = "MediaPlayerStreamingStressTest"; 46d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private String mStreamingSrc; 47d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 48d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou public MediaPlayerStreamingStressTest() { 49d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou super("com.android.mediaframeworktest", MediaFrameworkTest.class); 50d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 51d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 52d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou protected void setUp() throws Exception { 53d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Insert a 2 second before launching the test activity. This is 54d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //the workaround for the race condition of requesting the updated surface. 55d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Thread.sleep(2000); 56d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou getActivity(); 57d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou MediaPlayerStressTestRunner mRunner = (MediaPlayerStressTestRunner)getInstrumentation(); 58d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Bundle arguments = mRunner.getArguments(); 59d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mStreamingSrc = arguments.getString("streaming-source"); 60d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou if (mStreamingSrc == null) { 61d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mStreamingSrc = MediaNames.MEDIA_STREAMING_SRC; 62d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 63d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou super.setUp(); 64d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 65d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 66d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalPlaybackError = 0; 67d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalComplete = 0; 68d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalInfoUnknown = 0; 69d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalVideoTrackLagging = 0; 70d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalBadInterleaving = 0; 71d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalNotSeekable = 0; 72d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private int mTotalMetaDataUpdate = 0; 73d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 74d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Test result output file 75d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private static final String PLAYBACK_RESULT = "StreamingTestResult.txt"; 76d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 77d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private void writeTestOutput(String filename, Writer output) throws Exception{ 78d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("URL: " + filename); 79d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Complete: " + CodecTest.onCompleteSuccess); 80d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Error: " + CodecTest.mPlaybackError); 81d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Unknown Info: " + CodecTest.mMediaInfoUnknownCount); 82d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Track Lagging: " + CodecTest.mMediaInfoVideoTrackLaggingCount); 83d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Bad Interleaving: " + CodecTest.mMediaInfoBadInterleavingCount); 84d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Not Seekable: " + CodecTest.mMediaInfoNotSeekableCount); 85d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write(" Info Meta data update: " + CodecTest.mMediaInfoMetdataUpdateCount); 86d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("\n"); 87d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 88d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 89d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private void writeTestSummary(Writer output) throws Exception{ 90d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Result:\n"); 91d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Complete: " + mTotalComplete + "\n"); 92d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Error: " + mTotalPlaybackError + "\n"); 93d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Unknown Info: " + mTotalInfoUnknown + "\n"); 94d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Track Lagging: " + mTotalVideoTrackLagging + "\n" ); 95d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Bad Interleaving: " + mTotalBadInterleaving + "\n"); 96d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Not Seekable: " + mTotalNotSeekable + "\n"); 97d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("Total Info Meta data update: " + mTotalMetaDataUpdate + "\n"); 98d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.write("\n"); 99d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 100d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 101d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou private void updateTestResult(){ 102d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou if (CodecTest.onCompleteSuccess){ 103d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalComplete++; 104d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 105d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou else if (CodecTest.mPlaybackError){ 106d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalPlaybackError++; 107d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 108d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalInfoUnknown += CodecTest.mMediaInfoUnknownCount; 109d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalVideoTrackLagging += CodecTest.mMediaInfoVideoTrackLaggingCount; 110d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalBadInterleaving += CodecTest.mMediaInfoBadInterleavingCount; 111d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalNotSeekable += CodecTest.mMediaInfoNotSeekableCount; 112d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou mTotalMetaDataUpdate += CodecTest.mMediaInfoMetdataUpdateCount; 113d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 114d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 115d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Test that will start the playback for all the videos 116d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //under the samples folder 117d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou @LargeTest 118d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou public void testVideoPlayback() throws Exception { 119d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou String fileWithError = "Filename:\n"; 120d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou File playbackOutput = new File(Environment.getExternalStorageDirectory(), PLAYBACK_RESULT); 121d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Writer output = new BufferedWriter(new FileWriter(playbackOutput, true)); 122d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 123d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou boolean testResult = true; 124d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou // load directory files 125d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou boolean onCompleteSuccess = false; 126d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 127d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 128d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Log.i(TAG, "Streaming src file: " + mStreamingSrc); 129d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //TODO: add try catch 130d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou 131d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou File f = new File(mStreamingSrc); 132d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou BufferedReader br = new BufferedReader(new FileReader(f)); 133d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou List<String> urls = new ArrayList<String>(); 134d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou String line; 135d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou while ((line = br.readLine()) != null) { 136d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou urls.add(line.trim()); 137d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 138d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou br.close(); 139d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou if (urls == null) { 140d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Log.v("MediaPlayerStreamingTest:testVideoPlayback", "no url found"); 141d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou return; 142d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } else { 143d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou for (int i = 0; i < urls.size(); i++) { 144d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Get url 145d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou String filename = urls.get(i); 146d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou onCompleteSuccess = 147d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou CodecTest.playMediaSamples(filename, 60000); 148d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou if (!onCompleteSuccess){ 149d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Don't fail the test right away, print out the failure file. 150d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou fileWithError += filename + '\n'; 151d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Log.v(TAG, "Failure File : " + fileWithError); 152d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou testResult = false; 153d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 154d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou Thread.sleep(3000); 155d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Write test result to an output file 156d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou writeTestOutput(filename,output); 157d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou //Get the summary 158d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou updateTestResult(); 159d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 160d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou writeTestSummary(output); 161d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou output.close(); 162d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou assertTrue("testMediaSamples", testResult); 163d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 164d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou } 165d097e7ef745714cadc299db5e8bb0ff57c255373Shaohan Zou} 166