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