1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochpackage org.chromium.content.browser; 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)import android.annotation.SuppressLint; 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.content.Context; 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.content.pm.PackageManager; 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.media.MediaMetadataRetriever; 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.net.ConnectivityManager; 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.test.InstrumentationTestCase; 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.test.mock.MockContext; 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.test.suitebuilder.annotation.SmallTest; 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport android.util.SparseArray; 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport org.chromium.content.browser.MediaResourceGetter.MediaMetadata; 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport java.io.File; 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport java.util.Collections; 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport java.util.HashMap; 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochimport java.util.Map; 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch/** 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Tests for MediaResourceGetter. 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)@SuppressLint("SdCardPath") 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochpublic class MediaResourceGetterTest extends InstrumentationTestCase { 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static final String TEST_HTTP_URL = "http://example.com"; 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private static final String TEST_USER_AGENT = // Anything, really 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 " + 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "(KHTML, like Gecko) Chrome/32.0.1667.0 Safari/537.36"; 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static final String TEST_FILE_PATH = "/mnt/sdcard/test"; 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static final String TEST_FILE_URL = "file://" + TEST_FILE_PATH; 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static final String TEST_COOKIES = "yum yum yum!"; 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static final MediaMetadata sEmptyMetadata = new MediaMetadata(0, 0, 0, false); 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static final String sExternalStorageDirectory = "/test_external_storage"; 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private static final Map<String, String> sHeadersCookieOnly; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private static final Map<String, String> sHeadersCookieAndUA; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private static final Map<String, String> sHeadersUAOnly; 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch static { 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Map<String, String> headers = new HashMap<String, String>(); 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch headers.put("Cookie", TEST_COOKIES); 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch sHeadersCookieOnly = Collections.unmodifiableMap(headers); 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch headers = new HashMap<String, String>(); 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch headers.put("User-Agent", TEST_USER_AGENT); 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch sHeadersUAOnly = Collections.unmodifiableMap(headers); 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch headers = new HashMap<String, String>(); 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch headers.putAll(sHeadersCookieOnly); 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch headers.putAll(sHeadersUAOnly); 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch sHeadersCookieAndUA = Collections.unmodifiableMap(headers); 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static class FakeFile extends File { 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final boolean mExists; 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public FakeFile(String path, boolean exists) { 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch super(path); 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mExists = exists; 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public int hashCode() { 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final int prime = 31; 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int result = super.hashCode(); 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch result = prime * result + (mExists ? 1231 : 1237); 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return result; 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public boolean equals(Object obj) { 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (this == obj) 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!super.equals(obj)) 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (getClass() != obj.getClass()) 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FakeFile other = (FakeFile) obj; 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mExists != other.mExists) 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return false; 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public boolean exists() { 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return mExists; 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch /** 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Helper class that fakes functionality we cannot perform without real 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * media resources. The class being faked here has been architected 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * carefully to allow most of the functionality to be tested. What remains 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * here is overrides of trivial functionality. 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static class FakeMediaResourceGetter extends MediaResourceGetter { 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Read these back in tests to ensure proper values passed through 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch String mUri = null; 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Map<String, String> mHeaders = null; 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch String mPath = null; 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int mFd; 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long mOffset; 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long mLength; 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Write these before tests to configure functionality 109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch SparseArray<String> mMetadata = null; 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Integer mNetworkType = null; 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch boolean mThrowExceptionInConfigure = false; 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch boolean mThrowExceptionInExtract = false; 113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch boolean mFileExists = false; 114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Can't use a real MediaMetadataRetriever as we have no media 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 1175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void configure(int fd, long offset, long length) { 1185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (mThrowExceptionInConfigure) { 1195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) throw new RuntimeException("test exception"); 1205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mFd = fd; 1225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mOffset = offset; 1235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mLength = length; 1245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Can't use a real MediaMetadataRetriever as we have no media 1275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @Override 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void configure(String uri, Map<String, String> headers) { 129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mThrowExceptionInConfigure) { 130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch throw new RuntimeException("test exception"); 131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mUri = uri; 133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mHeaders = headers; 134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Can't use a real MediaMetadataRetriever as we have no media 137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void configure(String path) { 139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mThrowExceptionInConfigure) { 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch throw new RuntimeException("test exception"); 141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mPath = path; 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Can't use a real MediaMetadataRetriever as we have no media 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public String extractMetadata(int key) { 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mThrowExceptionInExtract) { 149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch throw new RuntimeException("test exception"); 150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mMetadata == null) { 152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return null; 153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return mMetadata.get(key); 155c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Can't use a real NetworkInfo object because there is no way to 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // mock the ConnectivityManager in Android. 159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Integer getNetworkType(Context context) { 161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return mNetworkType; 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Can't use Environment.getExternalStorageDirectory because it could 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // be inconsistent depending upon the state of the real or emulated 166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // device upon which we are testing. 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch String getExternalStorageDirectory() { 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return sExternalStorageDirectory; 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Can't use regular File because we need to control the return from 173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // File.exists() on arbitrary paths. 174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch File uriToFile(String path) { 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch FakeFile result = new FakeFile(path, mFileExists); 177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return result; 178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch /** 181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Convenience method to bind a metadata value to a key. 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * @param key the key 183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * @param value the value 184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void bind(int key, String value) { 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (mMetadata == null) { 187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mMetadata = new SparseArray<String>(); 188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mMetadata.put(key, value); 190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch /** 195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch * Helper class to control the result of permission checks. 196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch */ 197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private static class InternalMockContext extends MockContext { 1986e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) boolean mAllowPermission = false; 199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public int checkCallingOrSelfPermission(String permission) { 201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(android.Manifest.permission.ACCESS_NETWORK_STATE, 202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch permission); 2036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return mAllowPermission ? PackageManager.PERMISSION_GRANTED : 204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch PackageManager.PERMISSION_DENIED; 205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci @Override 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public String getPackageName() { 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return "org.some.app.package"; 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Our test objects. 214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private FakeMediaResourceGetter mFakeMRG; 215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private InternalMockContext mMockContext; 216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 217c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @Override 218c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected void setUp() throws Exception { 219c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch super.setUp(); 220c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG = new FakeMediaResourceGetter(); 221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mMockContext = new InternalMockContext(); 222c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 223c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 224c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 225c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testMediaMetadataEquals() { 226c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, sEmptyMetadata); 227c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, new MediaMetadata(0, 0, 0, false)); 228c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.equals(null)); 229c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.equals("test")); 230c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.equals(new MediaMetadata(1, 0, 0, false))); 231c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.equals(new MediaMetadata(0, 1, 0, false))); 232c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.equals(new MediaMetadata(0, 0, 1, false))); 233c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.equals(new MediaMetadata(0, 0, 0, true))); 234c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 235c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 236c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 237c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testMediaMetadataHashCode() { 238c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata.hashCode(), sEmptyMetadata.hashCode()); 239c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata.hashCode(), new MediaMetadata(0, 0, 0, false).hashCode()); 240c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.hashCode() == new MediaMetadata(1, 0, 0, false).hashCode()); 241c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.hashCode() == new MediaMetadata(0, 1, 0, false).hashCode()); 242c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.hashCode() == new MediaMetadata(0, 0, 1, false).hashCode()); 243c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(sEmptyMetadata.hashCode() == new MediaMetadata(0, 0, 0, true).hashCode()); 244c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 245c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 246c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 247c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testMediaMetadataGetters() { 248c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MediaMetadata data = new MediaMetadata(1, 2, 3, true); 249c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(1, data.getDurationInMilliseconds()); 250c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(2, data.getWidth()); 251c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(3, data.getHeight()); 252c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(data.isSuccess()); 253c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 254c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Validate no overlap of test values with defaults 255c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch data = new MediaMetadata(4, 5, 6, false); 256c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(4, data.getDurationInMilliseconds()); 257c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(5, data.getWidth()); 258c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(6, data.getHeight()); 259c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(data.isSuccess()); 260c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 261c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 262c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 263c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_NoPermissions() { 2646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = false; 265c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 266c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, TEST_USER_AGENT)); 267c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 268c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 269c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 270c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_NoActiveNetwork() { 2716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 272c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = null; 273c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 274c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, TEST_USER_AGENT)); 275c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 276c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 277c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 278c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Disallowed_Mobile() { 2796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 280c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_MOBILE; 281c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 282c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, TEST_USER_AGENT)); 283c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 284c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 285c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 286c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Disallowed_Wimax() { 2876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 288c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_WIMAX; 289c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 290c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, TEST_USER_AGENT)); 291c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 292c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 293c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 294c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Allowed_Ethernet_Cookies_NoUA() { 2956e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 296c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_ETHERNET; 297c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 298c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, null)); 299c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(TEST_HTTP_URL, mFakeMRG.mUri); 300c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sHeadersCookieOnly, mFakeMRG.mHeaders); 301c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 302c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 303c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 304c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 305c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Allowed_Wifi_Cookies_NoUA() { 3066e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 307c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_WIFI; 308c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 309c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, null)); 310c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(TEST_HTTP_URL, mFakeMRG.mUri); 311c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sHeadersCookieOnly, mFakeMRG.mHeaders); 312c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 313c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 314c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 315c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 316c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Allowed_Ethernet_NoCookies_NoUA() { 3176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 318c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_ETHERNET; 319c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 320c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", null)); 321c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(TEST_HTTP_URL, mFakeMRG.mUri); 322c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(Collections.emptyMap(), mFakeMRG.mHeaders); 323c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 324c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 325c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 326c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 327c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Allowed_Ethernet_Cookies_WithUA() { 3286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 329c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_ETHERNET; 330c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 331c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_COOKIES, TEST_USER_AGENT)); 332c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(TEST_HTTP_URL, mFakeMRG.mUri); 333c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sHeadersCookieAndUA, mFakeMRG.mHeaders); 334c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 335c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 336c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 337c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 338c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Allowed_Ethernet_NoCookies_WithUA() { 3396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 340c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_ETHERNET; 341c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 342c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", TEST_USER_AGENT)); 343c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(TEST_HTTP_URL, mFakeMRG.mUri); 344c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sHeadersUAOnly, mFakeMRG.mHeaders); 345c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 346c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 347c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 348c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 349c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_Net_Allowed_Ethernet_Exception() { 3506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 351c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mThrowExceptionInConfigure = true; 352c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mNetworkType = ConnectivityManager.TYPE_ETHERNET; 353c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, TEST_HTTP_URL, 354c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "", TEST_USER_AGENT)); 355c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mUri); 356c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mHeaders); 357c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 358c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 359c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 360cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) public void testConfigure_Net_Allowed_LocalHost_WithNoNetwork() { 361cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) String[] localHostUrls = { 362cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "http://LocalHost", 363cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "https://127.0.0.1/", 364cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) "http://[::1]:8888/", 365cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) }; 3666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mMockContext.mAllowPermission = true; 367cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) mFakeMRG.mNetworkType = null; 368cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) for (String localHostUrl : localHostUrls) { 369cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assertTrue(mFakeMRG.configure(mMockContext, localHostUrl, 370cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) TEST_COOKIES, TEST_USER_AGENT)); 371cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assertEquals(localHostUrl, mFakeMRG.mUri); 372cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assertEquals(sHeadersCookieAndUA, mFakeMRG.mHeaders); 373cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) assertNull(mFakeMRG.mPath); 374cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 375cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) } 376cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 377cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) @SmallTest 378c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Allowed_MntSdcard() { 379c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = "/mnt/sdcard/test"; 380c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 381c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 382c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, url, "", null)); 383c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(path, mFakeMRG.mPath); 384c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mUri); 385c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mHeaders); 386c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 387c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 388c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 389c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Allowed_Sdcard() { 390c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = "/sdcard/test"; 391c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 392c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 393c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, url, "", null)); 394c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(path, mFakeMRG.mPath); 395c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mUri); 396c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mHeaders); 397c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 398c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 399c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 400c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Allowed_Sdcard_DoesntExist() { 401c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = "/sdcard/test"; 402c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 403c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = false; 404c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 405c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 406c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 407c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 408c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 409c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Allowed_ExternalStorage() { 410c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = sExternalStorageDirectory + "/test"; 411c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 412c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 413c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(mFakeMRG.configure(mMockContext, url, "", null)); 414c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(path, mFakeMRG.mPath); 415c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mUri); 416c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mHeaders); 417c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 418c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 419c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 420c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Disallowed_Innocent() { 421c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = "/malicious/path"; 422c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 423c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 424c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 425c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 426c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 427c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 428c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 429c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Disallowed_Malicious() { 430c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = "/mnt/sdcard/../../data"; 431c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 432c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 433c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 434c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 435c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 436c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 437c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 438c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testConfigure_File_Allowed_Exception() { 439c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String path = "/mnt/sdcard/test"; 440c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final String url = "file://" + path; 441c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 442c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mThrowExceptionInConfigure = true; 443c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 444c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertNull(mFakeMRG.mPath); 445c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 446c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 447c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 4486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testConfigure_Blob_Disallow_Null_Cache() { 4496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String path = "/data/data/" + null + "/cache/"; 4506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String url = path; 4516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mFileExists = true; 4526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mThrowExceptionInConfigure = true; 4536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 4546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertNull(mFakeMRG.mPath); 4556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 4586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testConfigure_Blob_Disallowed_Incomplete_Path() { 4596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String path = "/data/data/"; 4606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String url = path; 4616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mFileExists = true; 4626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mThrowExceptionInConfigure = true; 4636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 4646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertNull(mFakeMRG.mPath); 4656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 4686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testConfigure_Blob_Disallowed_Unknown_Path() { 4696e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String path = "/unknown/path/"; 4706e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String url = path; 4716e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mFileExists = true; 4726e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mThrowExceptionInConfigure = true; 4736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 4746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertNull(mFakeMRG.mPath); 4756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 4786e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public void testConfigure_Blob_Disallowed_Other_Application() { 4796e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String path = "/data/data/org.some.other.app/cache/"; 4806e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) final String url = path; 4816e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mFileExists = true; 4826e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) mFakeMRG.mThrowExceptionInConfigure = true; 4836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertFalse(mFakeMRG.configure(mMockContext, url, "", null)); 4846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) assertNull(mFakeMRG.mPath); 4856e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 4866e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 4876e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) @SmallTest 488c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_NoMetadata() { 489c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 490c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract( 491c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mMockContext, TEST_FILE_URL, null, null)); 492c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals("configured successfully when we shouldn't have", 493c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch TEST_FILE_PATH, mFakeMRG.mPath); // tricky 494c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 495c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 496c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 497c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration() { 498c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 499c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 500c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final MediaMetadata expected = new MediaMetadata(1, 0, 0, true); 501c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(expected, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 502c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 503c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 504c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 505c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_InvalidDuration() { 506c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 507c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "i am not an integer"); 508c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 509c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 510c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 511c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 512c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration_HasVideo_NoWidth_NoHeight() { 513c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 514c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 515c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO, "yes"); 516c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 517c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 518c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 519c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 520c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration_HasVideo_ValidWidth_NoHeight() { 521c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 522c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 523c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO, "yes"); 524c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH, "1"); 525c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 526c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 527c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 528c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 529c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration_HasVideo_InvalidWidth_NoHeight() { 530c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 531c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 532c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO, "yes"); 533c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH, "i am not an integer"); 534c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 535c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 536c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 537c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 538c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration_HasVideo_ValidWidth_ValidHeight() { 539c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 540c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 541c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO, "yes"); 542c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH, "2"); 543c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT, "3"); 544c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch final MediaMetadata expected = new MediaMetadata(1, 2, 3, true); 545c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(expected, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 546c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 547c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 548c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 549c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration_HasVideo_ValidWidth_InvalidHeight() { 550c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 551c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 552c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO, "yes"); 553c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH, "1"); 554c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT, "i am not an integer"); 555c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 556c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 557c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 558c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 559c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testExtract_WithMetadata_ValidDuration_ExceptionInExtract() { 560c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mFileExists = true; 561c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.mThrowExceptionInExtract = true; 562c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 563c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertEquals(sEmptyMetadata, mFakeMRG.extract(mMockContext, TEST_FILE_URL, null, null)); 564c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 565c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 566c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 5675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public void testExtractFromFileDescriptor_ValidMetadata() { 5685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_DURATION, "1"); 5695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_HAS_VIDEO, "yes"); 5705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH, "2"); 5715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) mFakeMRG.bind(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT, "3"); 5725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) final MediaMetadata expected = new MediaMetadata(1, 2, 3, true); 5735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) int fd = 1234; 5745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long offset = 1000; 5755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) long length = 9000; 5765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertEquals(expected, mFakeMRG.extract(fd, offset, length)); 5775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertEquals(fd, mFakeMRG.mFd); 5785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertEquals(offset, mFakeMRG.mOffset); 5795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) assertEquals(length, mFakeMRG.mLength); 5805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) } 5815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 5825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) @SmallTest 583c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testAndroidDeviceOk_BadModel_BadVersion() { 584c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertFalse(MediaResourceGetter.androidDeviceOk( 585c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "GT-I9100", android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1)); 586c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 587c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 588c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 589c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testAndroidDeviceOk_BadModel_GoodVersion() { 590c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(MediaResourceGetter.androidDeviceOk( 591c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "GT-I9100", android.os.Build.VERSION_CODES.JELLY_BEAN)); 592c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 593c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 594c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch @SmallTest 595c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public void testAndroidDeviceOk_GoodModel_AnyVersion() { 596c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch assertTrue(MediaResourceGetter.androidDeviceOk( 597c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch "Happy Device", android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH)); 598c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 599cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 600