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