020d1e45e1d6ca39278df544e93bebb7bf690a46
[android/platform/packages/providers/DownloadProvider.git] / tests / permission / src / com / android / providers / downloads / permission / tests / DownloadProviderPermissionsTest.java
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.android.providers.downloads.permission.tests;
18
19 import java.io.FileNotFoundException;
20 import java.io.FileOutputStream;
21 import java.io.IOException;
22
23 import android.content.ContentResolver;
24 import android.content.ContentValues;
25 import android.content.Intent;
26 import android.provider.Downloads;
27 import android.test.AndroidTestCase;
28 import android.test.suitebuilder.annotation.MediumTest;
29
30 /**
31  * Verify that protected Download provider actions require specific permissions.
32  *
33  * TODO: consider adding test where app has ACCESS_DOWNLOAD_MANAGER, but not
34  * ACCESS_DOWNLOAD_MANAGER_ADVANCED
35  */
36 public class DownloadProviderPermissionsTest extends AndroidTestCase {
37
38     private ContentResolver mContentResolver;
39
40     @Override
41     protected void setUp() throws Exception {
42         super.setUp();
43         mContentResolver = getContext().getContentResolver();
44     }
45
46     /**
47      * Test that an app cannot access the /cache filesystem
48      * <p>Tests Permission:
49      *   {@link com.android.providers.downloads.Manifest.permission#ACCESS_CACHE_FILESYSTEM}
50      */
51     @MediumTest
52     public void testAccessCacheFilesystem() throws IOException {
53         try {
54             String filePath = "/cache/this-should-not-exist.txt";
55             FileOutputStream strm = new FileOutputStream(filePath);
56             strm.write("Oops!".getBytes());
57             strm.flush();
58             strm.close();
59             fail("Was able to create and write to " + filePath);
60         } catch (SecurityException e) {
61             // expected
62         } catch (FileNotFoundException e) {
63             // also could be expected
64         }
65     }
66
67     /**
68      * Test that an untrusted app cannot read from the download provider
69      * <p>Tests Permission:
70      *   {@link com.android.providers.downloads.Manifest.permission#ACCESS_DOWNLOAD_MANAGER}
71      */
72     @MediumTest
73     public void testReadDownloadProvider() throws IOException {
74         try {
75             mContentResolver.query(Downloads.CONTENT_URI, null, null, null, null);
76             fail("read from provider did not throw SecurityException as expected.");
77         } catch (SecurityException e) {
78             // expected
79         }
80     }
81
82     /**
83      * Test that an untrusted app cannot write to the download provider
84      * <p>Tests Permission:
85      *   {@link com.android.providers.downloads.Manifest.permission#ACCESS_DOWNLOAD_MANAGER}
86      */
87     @MediumTest
88     public void testWriteDownloadProvider() throws IOException {
89         try {
90             ContentValues values = new ContentValues();
91             values.put(Downloads.DESTINATION, "foo");
92             mContentResolver.insert(Downloads.CONTENT_URI, values);
93             fail("write to provider did not throw SecurityException as expected.");
94         } catch (SecurityException e) {
95             // expected
96         }
97     }
98
99     /**
100      * Test that an untrusted app cannot access the download service
101      * <p>Tests Permission:
102      *   {@link com.android.providers.downloads.Manifest.permission#ACCESS_DOWNLOAD_MANAGER}
103      */
104     @MediumTest
105     public void testStartDownloadService() throws IOException {
106         try {
107             Intent downloadServiceIntent = new Intent();
108             downloadServiceIntent.setClassName("com.android.providers.downloads",
109                     "com.android.providers.downloads.DownloadService");
110             getContext().startService(downloadServiceIntent);
111             fail("starting download service did not throw SecurityException as expected.");
112         } catch (SecurityException e) {
113             // expected
114         }
115     }
116 }