1cfe2669028074a204fc55afebbae630423a806f2Robin Lee/* 2cfe2669028074a204fc55afebbae630423a806f2Robin Lee * Copyright (C) 2016 The Android Open Source Project 3cfe2669028074a204fc55afebbae630423a806f2Robin Lee * 4cfe2669028074a204fc55afebbae630423a806f2Robin Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5cfe2669028074a204fc55afebbae630423a806f2Robin Lee * you may not use this file except in compliance with the License. 6cfe2669028074a204fc55afebbae630423a806f2Robin Lee * You may obtain a copy of the License at 7cfe2669028074a204fc55afebbae630423a806f2Robin Lee * 8cfe2669028074a204fc55afebbae630423a806f2Robin Lee * http://www.apache.org/licenses/LICENSE-2.0 9cfe2669028074a204fc55afebbae630423a806f2Robin Lee * 10cfe2669028074a204fc55afebbae630423a806f2Robin Lee * Unless required by applicable law or agreed to in writing, software 11cfe2669028074a204fc55afebbae630423a806f2Robin Lee * distributed under the License is distributed on an "AS IS" BASIS, 12cfe2669028074a204fc55afebbae630423a806f2Robin Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13cfe2669028074a204fc55afebbae630423a806f2Robin Lee * See the License for the specific language governing permissions and 14cfe2669028074a204fc55afebbae630423a806f2Robin Lee * limitations under the License. 15cfe2669028074a204fc55afebbae630423a806f2Robin Lee */ 16cfe2669028074a204fc55afebbae630423a806f2Robin Lee 17cfe2669028074a204fc55afebbae630423a806f2Robin Leepackage android.net; 18cfe2669028074a204fc55afebbae630423a806f2Robin Lee 19cfe2669028074a204fc55afebbae630423a806f2Robin Leeimport android.os.Parcel; 20cfe2669028074a204fc55afebbae630423a806f2Robin Leeimport android.test.suitebuilder.annotation.SmallTest; 21cfe2669028074a204fc55afebbae630423a806f2Robin Lee 22cfe2669028074a204fc55afebbae630423a806f2Robin Leeimport junit.framework.TestCase; 23cfe2669028074a204fc55afebbae630423a806f2Robin Lee 24cfe2669028074a204fc55afebbae630423a806f2Robin Leeimport static org.junit.Assert.assertArrayEquals; 25cfe2669028074a204fc55afebbae630423a806f2Robin Lee 26cfe2669028074a204fc55afebbae630423a806f2Robin Leepublic class UidRangeTest extends TestCase { 27cfe2669028074a204fc55afebbae630423a806f2Robin Lee 28cfe2669028074a204fc55afebbae630423a806f2Robin Lee static { 29cfe2669028074a204fc55afebbae630423a806f2Robin Lee System.loadLibrary("servicestestsjni"); 30cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 31cfe2669028074a204fc55afebbae630423a806f2Robin Lee 32cfe2669028074a204fc55afebbae630423a806f2Robin Lee private static native byte[] readAndWriteNative(byte[] inParcel); 33cfe2669028074a204fc55afebbae630423a806f2Robin Lee private static native int getStart(byte[] inParcel); 34cfe2669028074a204fc55afebbae630423a806f2Robin Lee private static native int getStop(byte[] inParcel); 35cfe2669028074a204fc55afebbae630423a806f2Robin Lee 36cfe2669028074a204fc55afebbae630423a806f2Robin Lee @SmallTest 37cfe2669028074a204fc55afebbae630423a806f2Robin Lee public void testNativeParcelUnparcel() { 38cfe2669028074a204fc55afebbae630423a806f2Robin Lee UidRange original = new UidRange(1234, Integer.MAX_VALUE); 39cfe2669028074a204fc55afebbae630423a806f2Robin Lee 40cfe2669028074a204fc55afebbae630423a806f2Robin Lee byte[] inParcel = marshall(original); 41cfe2669028074a204fc55afebbae630423a806f2Robin Lee byte[] outParcel = readAndWriteNative(inParcel); 42cfe2669028074a204fc55afebbae630423a806f2Robin Lee UidRange roundTrip = unmarshall(outParcel); 43cfe2669028074a204fc55afebbae630423a806f2Robin Lee 44cfe2669028074a204fc55afebbae630423a806f2Robin Lee assertEquals(original, roundTrip); 45cfe2669028074a204fc55afebbae630423a806f2Robin Lee assertArrayEquals(inParcel, outParcel); 46cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 47cfe2669028074a204fc55afebbae630423a806f2Robin Lee 48cfe2669028074a204fc55afebbae630423a806f2Robin Lee @SmallTest 49cfe2669028074a204fc55afebbae630423a806f2Robin Lee public void testIndividualNativeFields() { 50cfe2669028074a204fc55afebbae630423a806f2Robin Lee UidRange original = new UidRange(0x11115678, 0x22224321); 51cfe2669028074a204fc55afebbae630423a806f2Robin Lee byte[] originalBytes = marshall(original); 52cfe2669028074a204fc55afebbae630423a806f2Robin Lee 53cfe2669028074a204fc55afebbae630423a806f2Robin Lee assertEquals(original.start, getStart(originalBytes)); 54cfe2669028074a204fc55afebbae630423a806f2Robin Lee assertEquals(original.stop, getStop(originalBytes)); 55cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 56cfe2669028074a204fc55afebbae630423a806f2Robin Lee 57cfe2669028074a204fc55afebbae630423a806f2Robin Lee @SmallTest 58cfe2669028074a204fc55afebbae630423a806f2Robin Lee public void testSingleItemUidRangeAllowed() { 59cfe2669028074a204fc55afebbae630423a806f2Robin Lee new UidRange(123, 123); 60cfe2669028074a204fc55afebbae630423a806f2Robin Lee new UidRange(0, 0); 61cfe2669028074a204fc55afebbae630423a806f2Robin Lee new UidRange(Integer.MAX_VALUE, Integer.MAX_VALUE); 62cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 63cfe2669028074a204fc55afebbae630423a806f2Robin Lee 64cfe2669028074a204fc55afebbae630423a806f2Robin Lee @SmallTest 65cfe2669028074a204fc55afebbae630423a806f2Robin Lee public void testNegativeUidsDisallowed() { 66cfe2669028074a204fc55afebbae630423a806f2Robin Lee try { 67cfe2669028074a204fc55afebbae630423a806f2Robin Lee new UidRange(-2, 100); 68cfe2669028074a204fc55afebbae630423a806f2Robin Lee fail("Exception not thrown for negative start UID"); 69cfe2669028074a204fc55afebbae630423a806f2Robin Lee } catch (IllegalArgumentException expected) { 70cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 71cfe2669028074a204fc55afebbae630423a806f2Robin Lee 72cfe2669028074a204fc55afebbae630423a806f2Robin Lee try { 73cfe2669028074a204fc55afebbae630423a806f2Robin Lee new UidRange(-200, -100); 74cfe2669028074a204fc55afebbae630423a806f2Robin Lee fail("Exception not thrown for negative stop UID"); 75cfe2669028074a204fc55afebbae630423a806f2Robin Lee } catch (IllegalArgumentException expected) { 76cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 77cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 78cfe2669028074a204fc55afebbae630423a806f2Robin Lee 79cfe2669028074a204fc55afebbae630423a806f2Robin Lee @SmallTest 80cfe2669028074a204fc55afebbae630423a806f2Robin Lee public void testStopLessThanStartDisallowed() { 81cfe2669028074a204fc55afebbae630423a806f2Robin Lee final int x = 4195000; 82cfe2669028074a204fc55afebbae630423a806f2Robin Lee try { 83cfe2669028074a204fc55afebbae630423a806f2Robin Lee new UidRange(x, x - 1); 84cfe2669028074a204fc55afebbae630423a806f2Robin Lee fail("Exception not thrown for negative-length UID range"); 85cfe2669028074a204fc55afebbae630423a806f2Robin Lee } catch (IllegalArgumentException expected) { 86cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 87cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 88cfe2669028074a204fc55afebbae630423a806f2Robin Lee 89cfe2669028074a204fc55afebbae630423a806f2Robin Lee /** 90cfe2669028074a204fc55afebbae630423a806f2Robin Lee * Write a {@link UidRange} into an empty parcel and return the underlying data. 91cfe2669028074a204fc55afebbae630423a806f2Robin Lee * 92cfe2669028074a204fc55afebbae630423a806f2Robin Lee * @see unmarshall(byte[]) 93cfe2669028074a204fc55afebbae630423a806f2Robin Lee */ 94cfe2669028074a204fc55afebbae630423a806f2Robin Lee private static byte[] marshall(UidRange range) { 95cfe2669028074a204fc55afebbae630423a806f2Robin Lee Parcel p = Parcel.obtain(); 96cfe2669028074a204fc55afebbae630423a806f2Robin Lee range.writeToParcel(p, /* flags */ 0); 97cfe2669028074a204fc55afebbae630423a806f2Robin Lee p.setDataPosition(0); 98cfe2669028074a204fc55afebbae630423a806f2Robin Lee return p.marshall(); 99cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 100cfe2669028074a204fc55afebbae630423a806f2Robin Lee 101cfe2669028074a204fc55afebbae630423a806f2Robin Lee /** 102cfe2669028074a204fc55afebbae630423a806f2Robin Lee * Read raw bytes into a parcel, and read a {@link UidRange} back out of them. 103cfe2669028074a204fc55afebbae630423a806f2Robin Lee * 104cfe2669028074a204fc55afebbae630423a806f2Robin Lee * @see marshall(UidRange) 105cfe2669028074a204fc55afebbae630423a806f2Robin Lee */ 106cfe2669028074a204fc55afebbae630423a806f2Robin Lee private static UidRange unmarshall(byte[] data) { 107cfe2669028074a204fc55afebbae630423a806f2Robin Lee Parcel p = Parcel.obtain(); 108cfe2669028074a204fc55afebbae630423a806f2Robin Lee p.unmarshall(data, 0, data.length); 109cfe2669028074a204fc55afebbae630423a806f2Robin Lee p.setDataPosition(0); 110cfe2669028074a204fc55afebbae630423a806f2Robin Lee return UidRange.CREATOR.createFromParcel(p); 111cfe2669028074a204fc55afebbae630423a806f2Robin Lee } 112cfe2669028074a204fc55afebbae630423a806f2Robin Lee} 113