blob: 8e61d210c28f4b6c4bf90a0195092873ce256f51 [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
package com.android.server.slice;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper.RunWithLooper;
import android.util.Xml.Encoding;
import androidx.test.filters.SmallTest;
import com.android.server.UiServiceTestCase;
import com.android.server.slice.SlicePermissionManager.PkgUser;
import com.android.server.slice.SliceProviderPermissions.SliceAuthority;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
@SmallTest
@RunWith(AndroidTestingRunner.class)
@RunWithLooper
public class SliceProviderPermissionsTest extends UiServiceTestCase {
@Test
public void testDirty_addAuthority() {
PkgUser pkg = new PkgUser("com.android.pkg", 0);
DirtyTracker tracker = mock(DirtyTracker.class);
SliceProviderPermissions provider = new SliceProviderPermissions(pkg, tracker);
provider.getOrCreateAuthority("some_auth");
verify(tracker).onPersistableDirty(eq(provider));
}
@Test
public void testDirty_addPkg() {
PkgUser pkg = new PkgUser("com.android.pkg", 0);
DirtyTracker tracker = mock(DirtyTracker.class);
SliceProviderPermissions provider = new SliceProviderPermissions(pkg, tracker);
SliceAuthority auth = provider.getOrCreateAuthority("some_auth");
clearInvocations(tracker);
auth.addPkg(new PkgUser("pkg", 0));
verify(tracker).onPersistableDirty(eq(provider));
}
@Test
public void testCreation() {
SliceProviderPermissions provider = createProvider();
ArrayList<SliceAuthority> authorities = new ArrayList<>(provider.getAuthorities());
authorities.sort(Comparator.comparing(SliceAuthority::getAuthority));
assertEquals(2, authorities.size());
assertEquals("com.android.pkg", authorities.get(0).getAuthority());
assertEquals("com.android.pkg.slices", authorities.get(1).getAuthority());
assertEquals(1, authorities.get(0).getPkgs().size());
assertEquals(2, authorities.get(1).getPkgs().size());
}
@Test
public void testSerialization() throws XmlPullParserException, IOException {
SliceProviderPermissions provider = createProvider();
ByteArrayOutputStream output = new ByteArrayOutputStream();
XmlSerializer serializer = XmlPullParserFactory.newInstance().newSerializer();
serializer.setOutput(output, Encoding.UTF_8.name());
provider.writeTo(serializer);
serializer.flush();
ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
parser.setInput(input, Encoding.UTF_8.name());
SliceProviderPermissions deser = SliceProviderPermissions.createFrom(parser,
mock(DirtyTracker.class));
assertEquivalent(provider, deser);
}
private void assertEquivalent(SliceProviderPermissions o1, SliceProviderPermissions o2) {
assertEquals(o1.getPkg(), o2.getPkg());
assertEquals(o1.getAuthorities(), o2.getAuthorities());
}
private static SliceProviderPermissions createProvider() {
PkgUser pkg = new PkgUser("com.android.pkg", 2);
DirtyTracker tracker = mock(DirtyTracker.class);
SliceProviderPermissions provider = new SliceProviderPermissions(pkg, tracker);
SliceAuthority auth = provider.getOrCreateAuthority("com.android.pkg.slices");
auth.addPkg(new PkgUser("com.example.pkg", 0));
auth.addPkg(new PkgUser("example.pkg.com", 10));
auth = provider.getOrCreateAuthority("com.android.pkg");
auth.addPkg(new PkgUser("com.example.pkg", 2));
return provider;
}
}