blob: 66565dc07e4eb2a4d6eb84e6f4267ee40019c696 [file] [log] [blame]
/*
* Copyright (C) 2009 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 android.permission.cts;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Environment;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.LargeTest;
/**
* Test that audio-related Permissions are enforced.
*/
public class AudioPermissionTest extends AndroidTestCase {
static String PATH_PREFIX = Environment.getExternalStorageDirectory().toString();
static String AUDIO_CAPTURE_PATH = PATH_PREFIX + "this-should-not-exist.amr";
static int BEAUTY_SLEEP_INTERVAL = 5 * 1000;
MediaPlayer mMediaPlayer = null;
MediaRecorder mMediaRecorder = null;
boolean mRecorded = false;
@Override
protected void setUp() throws Exception {
super.setUp();
mMediaRecorder = new MediaRecorder();
}
@LargeTest
void testMicrophoneRecording() {
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setOutputFile(AUDIO_CAPTURE_PATH);
try {
mMediaRecorder.prepare();
}
catch (SecurityException e) {
// expected...?
return;
} catch (Exception e) {
fail("Could not prepare MediaRecorder: " + e.toString());
}
try {
mMediaRecorder.start();
} catch (SecurityException e) {
// expected
return;
}
try {
Thread.sleep(BEAUTY_SLEEP_INTERVAL);
} catch (InterruptedException e) {
// OK
}
try {
mMediaRecorder.stop();
mMediaRecorder.release();
mRecorded = true;
fail("Recorded from MediaRecorder.AudioSource.MIC");
} catch (SecurityException e) {
// expected
mRecorded = false;
}
}
void doRemoteMp3(Uri uri) {
try {
MediaPlayer plyr = new MediaPlayer();
plyr.setDataSource(mContext, uri);
plyr.setAudioStreamType(AudioManager.STREAM_MUSIC);
plyr.prepare();
plyr.seekTo(1000); // Just to try.
plyr.start();
Thread.sleep(BEAUTY_SLEEP_INTERVAL / 10);
plyr.stop();
fail("We just downloaded a song off the Internet with no permissions, and uploaded arbitrary data in the query string");
plyr.release();
} catch (SecurityException e) {
// expected
} catch (Exception e) {
fail("Got further than we should have trying to load a remote media source");
}
}
@LargeTest
void testRemoteMp3() {
doRemoteMp3(Uri.parse("http://labs.isecpartners.com/chris/noodle.mp3?secret=1234"));
}
}