1/*
2 * Copyright (C) 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5 * except in compliance with the License. You may obtain a copy of the License at
6 *
7 *      http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software distributed under the
10 * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11 * KIND, either express or implied. See the License for the specific language governing
12 * permissions and limitations under the License.
13 */
14
15package com.android.server.slice;
16
17import static org.junit.Assert.assertEquals;
18import static org.junit.Assert.assertFalse;
19import static org.junit.Assert.assertTrue;
20
21import android.os.UserHandle;
22import android.support.test.filters.SmallTest;
23import android.util.Xml.Encoding;
24
25import com.android.server.UiServiceTestCase;
26
27import org.junit.Before;
28import org.junit.Test;
29import org.xmlpull.v1.XmlPullParser;
30import org.xmlpull.v1.XmlPullParserException;
31import org.xmlpull.v1.XmlPullParserFactory;
32import org.xmlpull.v1.XmlSerializer;
33
34import java.io.ByteArrayInputStream;
35import java.io.ByteArrayOutputStream;
36import java.io.IOException;
37
38@SmallTest
39public class SliceFullAccessListTest extends UiServiceTestCase {
40
41    private static final String TEST_XML = "<slice-access-list version=\"1\"><user "
42            + "user=\"0\"><pkg>pkg</pkg><pkg>pkg1</pkg></user><user "
43            + "user=\"1\"><pkg>pkg</pkg></user><user "
44            + "user=\"3\"><pkg>pkg2</pkg></user></slice-access-list>";
45
46    private SliceFullAccessList mAccessList;
47
48    @Before
49    public void setup() {
50        mAccessList = new SliceFullAccessList(mContext);
51    }
52
53    @Test
54    public void testNoDefaultAccess() {
55        assertFalse(mAccessList.hasFullAccess("pkg", 0));
56    }
57
58    @Test
59    public void testGrantAccess() {
60        mAccessList.grantFullAccess("pkg", 0);
61        assertTrue(mAccessList.hasFullAccess("pkg", 0));
62    }
63
64    @Test
65    public void testUserSeparation() {
66        mAccessList.grantFullAccess("pkg", 1);
67        assertFalse(mAccessList.hasFullAccess("pkg", 0));
68    }
69
70    @Test
71    public void testRemoveAccess() {
72        mAccessList.grantFullAccess("pkg", 0);
73        assertTrue(mAccessList.hasFullAccess("pkg", 0));
74
75        mAccessList.removeGrant("pkg", 0);
76        assertFalse(mAccessList.hasFullAccess("pkg", 0));
77    }
78
79    @Test
80    public void testSerialization() throws XmlPullParserException, IOException {
81        mAccessList.grantFullAccess("pkg", 0);
82        mAccessList.grantFullAccess("pkg1", 0);
83        mAccessList.grantFullAccess("pkg", 1);
84        mAccessList.grantFullAccess("pkg2", 3);
85
86        ByteArrayOutputStream output = new ByteArrayOutputStream();
87        XmlSerializer out = XmlPullParserFactory.newInstance().newSerializer();
88        out.setOutput(output, Encoding.UTF_8.name());
89        mAccessList.writeXml(out, UserHandle.USER_ALL);
90        out.flush();
91
92        assertEquals(TEST_XML, output.toString(Encoding.UTF_8.name()));
93    }
94
95    @Test
96    public void testDeSerialization() throws XmlPullParserException, IOException {
97        ByteArrayInputStream input = new ByteArrayInputStream(TEST_XML.getBytes());
98        XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
99        parser.setInput(input, Encoding.UTF_8.name());
100
101        mAccessList.readXml(parser);
102
103        assertTrue(mAccessList.hasFullAccess("pkg", 0));
104        assertTrue(mAccessList.hasFullAccess("pkg1", 0));
105        assertTrue(mAccessList.hasFullAccess("pkg", 1));
106        assertTrue(mAccessList.hasFullAccess("pkg2", 3));
107
108        assertFalse(mAccessList.hasFullAccess("pkg3", 0));
109        assertFalse(mAccessList.hasFullAccess("pkg1", 1));
110        assertFalse(mAccessList.hasFullAccess("pkg", 3));
111        assertFalse(mAccessList.hasFullAccess("pkg", 2));
112    }
113}