1e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum/* 2e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * Copyright (C) 2017 The Android Open Source Project 3e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * 4e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * Licensed under the Apache License, Version 2.0 (the "License"); 5e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * you may not use this file except in compliance with the License. 6e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * You may obtain a copy of the License at 7e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * 8e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * http://www.apache.org/licenses/LICENSE-2.0 9e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * 10e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * Unless required by applicable law or agreed to in writing, software 11e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * distributed under the License is distributed on an "AS IS" BASIS, 12e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * See the License for the specific language governing permissions and 14e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * limitations under the License. 15e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum */ 16e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 17e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumpackage android.net.lowpan; 18e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 19e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport static org.junit.Assert.assertEquals; 20e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport static org.junit.Assert.assertArrayEquals; 21e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 22e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport android.os.Parcel; 23e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport android.support.test.runner.AndroidJUnit4; 24e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport android.test.suitebuilder.annotation.SmallTest; 25e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport org.junit.Test; 26e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumimport org.junit.runner.RunWith; 27e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 28e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum@RunWith(AndroidJUnit4.class) 29e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum@SmallTest 30e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaumpublic class LowpanProvisionTest { 31e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 32e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum static { 33e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum System.loadLibrary("frameworkslowpantestsjni"); 34e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum } 35e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 36e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum private static native byte[] readAndWriteNative(byte[] inParcel); 37e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 38e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum public void testNativeParcelUnparcel(LowpanProvision original) { 39e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum byte[] inParcel = marshall(original); 40e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum byte[] outParcel = readAndWriteNative(inParcel); 41e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum LowpanProvision roundTrip = unmarshall(outParcel); 42e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 43e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum assertEquals(original, roundTrip); 44e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum assertArrayEquals(inParcel, outParcel); 45e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum } 46e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 47e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum @Test 48e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum public void testNativeParcelUnparcel() { 49e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum testNativeParcelUnparcel( 50e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new LowpanProvision.Builder() 51e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setLowpanIdentity( 52e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new LowpanIdentity.Builder() 53e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setName("TestNet1") 54e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setPanid(0x1234) 55e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setXpanid( 56e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new byte[] { 57e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x00, 58e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x11, 59e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x22, 60e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x33, 61e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x44, 62e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x55, 63e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x66, 64e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x77 65e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum }) 66e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setType(LowpanInterface.NETWORK_TYPE_THREAD_V1) 67e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setChannel(15) 68e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .build()) 69e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .build()); 70e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum testNativeParcelUnparcel( 71e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new LowpanProvision.Builder() 72e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setLowpanIdentity( 73e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new LowpanIdentity.Builder() 74e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setName("TestNet2") 75e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setPanid(0x5678) 76e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setXpanid( 77e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new byte[] { 78e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x88, 79e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x99, 80e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xaa, 81e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xbb, 82e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xcc, 83e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xdd, 84e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xee, 85e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xff 86e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum }) 87e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setType("bork-bork-bork") 88e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setChannel(16) 89e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .build()) 90e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .setLowpanCredential( 91e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum LowpanCredential.createMasterKey( 92e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum new byte[] { 93e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x88, 94e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0x99, 95e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xaa, 96e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xbb, 97e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xcc, 98e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xdd, 99e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xee, 100e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum (byte) 0xff 101e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum })) 102e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum .build()); 103e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum } 104e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 105e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum /** 106e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * Write a {@link LowpanProvision} into an empty parcel and return the underlying data. 107e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * 108e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * @see unmarshall(byte[]) 109e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum */ 110e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum private static byte[] marshall(LowpanProvision addr) { 111e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum Parcel p = Parcel.obtain(); 112e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum addr.writeToParcel(p, /* flags */ 0); 113e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum p.setDataPosition(0); 114e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum return p.marshall(); 115e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum } 116e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum 117e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum /** 118e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * Read raw bytes into a parcel, and read a {@link LowpanProvision} back out of them. 119e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * 120e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum * @see marshall(LowpanProvision) 121e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum */ 122e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum private static LowpanProvision unmarshall(byte[] data) { 123e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum Parcel p = Parcel.obtain(); 124e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum p.unmarshall(data, 0, data.length); 125e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum p.setDataPosition(0); 126e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum return LowpanProvision.CREATOR.createFromParcel(p); 127e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum } 128e6a1be5f36c91c12ba89bca99233bdb9d7b448e0Robert Quattlebaum} 129