Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93ea3ce9 authored by Robert Quattlebaum's avatar Robert Quattlebaum
Browse files

lowpan: Introduce new unit tests for data classes

This change introduces new unit tests which confirm that
various data classes are being property marshalled
between their Java and C++ implementations.

Bug: b/63707448 b/63708348
Change-Id: I41d590b1e77dc41873c4b9e9bf1b7f1bf859f74e
Test: These tests both compile and pass
parent 80aca1e3
Loading
Loading
Loading
Loading
+51 −2
Original line number Diff line number Diff line
@@ -54,8 +54,35 @@ LOCAL_STATIC_JAVA_LIBRARIES := \
	mockito-target-minus-junit4 \
	frameworks-base-testutils \

LOCAL_JAVA_LIBRARIES := \
	android.test.runner \
LOCAL_JNI_SHARED_LIBRARIES += libframeworkslowpantestsjni
LOCAL_JNI_SHARED_LIBRARIES += libandroid_net_lowpan
LOCAL_JNI_SHARED_LIBRARIES += \
    libbacktrace \
    libbase \
    libbinder \
    libc++ \
    libcutils \
    liblog \
    liblzma \
    libnativehelper \
    libnetdaidl \
    libui \
    libunwind \
    libutils \
    libvndksupport \
    libcrypto \
    libhidl-gen-utils \
    libhidlbase \
    libhidltransport \
    libpackagelistparser \
    libpcre2 \
    libselinux \
    libtinyxml2 \
    libvintf \
    libhwbinder \
    android.hidl.token@1.0

LOCAL_JAVA_LIBRARIES := android.test.runner

LOCAL_PACKAGE_NAME := FrameworksLowpanApiTests
LOCAL_COMPATIBILITY_SUITE := device-tests
@@ -63,3 +90,25 @@ LOCAL_COMPATIBILITY_SUITE := device-tests
LOCAL_CERTIFICATE := platform
LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk
include $(BUILD_PACKAGE)

#########################################################################
# Build JNI Shared Library
#########################################################################

LOCAL_PATH:= $(LOCAL_PATH)/jni

include $(CLEAR_VARS)

LOCAL_MODULE_TAGS := tests

LOCAL_CFLAGS := -Wall -Wextra -Werror

LOCAL_SRC_FILES := $(call all-cpp-files-under)

LOCAL_SHARED_LIBRARIES += libandroid_net_lowpan
LOCAL_SHARED_LIBRARIES += libbinder
LOCAL_SHARED_LIBRARIES += liblog

LOCAL_MODULE := libframeworkslowpantestsjni

include $(BUILD_SHARED_LIBRARY)
+134 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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 android.net.lowpan;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class LowpanBeaconInfoTest {

    static {
        System.loadLibrary("frameworkslowpantestsjni");
    }

    private static native byte[] readAndWriteNative(byte[] inParcel);

    public void testNativeParcelUnparcel(LowpanBeaconInfo original) {
        byte[] inParcel = marshall(original);
        byte[] outParcel = readAndWriteNative(inParcel);
        LowpanBeaconInfo roundTrip = unmarshall(outParcel);

        assertEquals(original, roundTrip);
        assertArrayEquals(inParcel, outParcel);
    }

    @Test
    public void testNativeParcelUnparcel() {
        testNativeParcelUnparcel(
                new LowpanBeaconInfo.Builder()
                        .setName("TestNet1")
                        .setPanid(0x1234)
                        .setXpanid(
                                new byte[] {
                                    (byte) 0x00,
                                    (byte) 0x11,
                                    (byte) 0x22,
                                    (byte) 0x33,
                                    (byte) 0x44,
                                    (byte) 0x55,
                                    (byte) 0x66,
                                    (byte) 0x77
                                })
                        .setType(LowpanInterface.NETWORK_TYPE_THREAD_V1)
                        .setChannel(15)
                        .setBeaconAddress(
                                new byte[] {
                                    (byte) 0x88,
                                    (byte) 0x99,
                                    (byte) 0xaa,
                                    (byte) 0xbb,
                                    (byte) 0xcc,
                                    (byte) 0xdd,
                                    (byte) 0xee,
                                    (byte) 0xff
                                })
                        .build());

        testNativeParcelUnparcel(
                new LowpanBeaconInfo.Builder()
                        .setName("TestNet2")
                        .setPanid(0x5678)
                        .setXpanid(
                                new byte[] {
                                    (byte) 0x88,
                                    (byte) 0x99,
                                    (byte) 0xaa,
                                    (byte) 0xbb,
                                    (byte) 0xcc,
                                    (byte) 0xdd,
                                    (byte) 0xee,
                                    (byte) 0xff
                                })
                        .setType("bork-bork-bork")
                        .setChannel(16)
                        .setBeaconAddress(
                                new byte[] {
                                    (byte) 0x00,
                                    (byte) 0x11,
                                    (byte) 0x22,
                                    (byte) 0x33,
                                    (byte) 0x44,
                                    (byte) 0x55,
                                    (byte) 0x66,
                                    (byte) 0x77
                                })
                        .setFlag(LowpanBeaconInfo.FLAG_CAN_ASSIST)
                        .build());
    }

    /**
     * Write a {@link LowpanBeaconInfo} into an empty parcel and return the underlying data.
     *
     * @see unmarshall(byte[])
     */
    private static byte[] marshall(LowpanBeaconInfo addr) {
        Parcel p = Parcel.obtain();
        addr.writeToParcel(p, /* flags */ 0);
        p.setDataPosition(0);
        return p.marshall();
    }

    /**
     * Read raw bytes into a parcel, and read a {@link LowpanBeaconInfo} back out of them.
     *
     * @see marshall(LowpanBeaconInfo)
     */
    private static LowpanBeaconInfo unmarshall(byte[] data) {
        Parcel p = Parcel.obtain();
        p.unmarshall(data, 0, data.length);
        p.setDataPosition(0);
        return LowpanBeaconInfo.CREATOR.createFromParcel(p);
    }
}
+78 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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 android.net.lowpan;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class LowpanChannelInfoTest {

    static {
        System.loadLibrary("frameworkslowpantestsjni");
    }

    private static native byte[] readAndWriteNative(byte[] inParcel);

    public void testNativeParcelUnparcel(LowpanChannelInfo original) {
        byte[] inParcel = marshall(original);
        byte[] outParcel = readAndWriteNative(inParcel);
        LowpanChannelInfo roundTrip = unmarshall(outParcel);

        assertEquals(original, roundTrip);
        assertArrayEquals(inParcel, outParcel);
    }

    @Test
    public void testNativeParcelUnparcel() {
        int i;
        for (i = 1; i < 26; i++) {
            testNativeParcelUnparcel(LowpanChannelInfo.getChannelInfoForIeee802154Page0(i));
        }
    }

    /**
     * Write a {@link LowpanChannelInfo} into an empty parcel and return the underlying data.
     *
     * @see unmarshall(byte[])
     */
    private static byte[] marshall(LowpanChannelInfo addr) {
        Parcel p = Parcel.obtain();
        addr.writeToParcel(p, /* flags */ 0);
        p.setDataPosition(0);
        return p.marshall();
    }

    /**
     * Read raw bytes into a parcel, and read a {@link LowpanChannelInfo} back out of them.
     *
     * @see marshall(LowpanChannelInfo)
     */
    private static LowpanChannelInfo unmarshall(byte[] data) {
        Parcel p = Parcel.obtain();
        p.unmarshall(data, 0, data.length);
        p.setDataPosition(0);
        return LowpanChannelInfo.CREATOR.createFromParcel(p);
    }
}
+92 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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 android.net.lowpan;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class LowpanCredentialTest {

    static {
        System.loadLibrary("frameworkslowpantestsjni");
    }

    private static native byte[] readAndWriteNative(byte[] inParcel);

    public void testNativeParcelUnparcel(LowpanCredential original) {
        byte[] inParcel = marshall(original);
        byte[] outParcel = readAndWriteNative(inParcel);
        LowpanCredential roundTrip = unmarshall(outParcel);

        assertEquals(original, roundTrip);
        assertArrayEquals(inParcel, outParcel);
    }

    @Test
    public void testNativeParcelUnparcel() {
        testNativeParcelUnparcel(
                LowpanCredential.createMasterKey(
                        new byte[] {
                            (byte) 0x88,
                            (byte) 0x99,
                            (byte) 0xaa,
                            (byte) 0xbb,
                            (byte) 0xcc,
                            (byte) 0xdd,
                            (byte) 0xee,
                            (byte) 0xff
                        }));
        testNativeParcelUnparcel(
                LowpanCredential.createMasterKey(
                        new byte[] {
                            (byte) 0x88, (byte) 0x99, (byte) 0xaa, (byte) 0xbb, (byte) 0xcc
                        },
                        15));
    }

    /**
     * Write a {@link LowpanCredential} into an empty parcel and return the underlying data.
     *
     * @see unmarshall(byte[])
     */
    private static byte[] marshall(LowpanCredential addr) {
        Parcel p = Parcel.obtain();
        addr.writeToParcel(p, /* flags */ 0);
        p.setDataPosition(0);
        return p.marshall();
    }

    /**
     * Read raw bytes into a parcel, and read a {@link LowpanCredential} back out of them.
     *
     * @see marshall(LowpanCredential)
     */
    private static LowpanCredential unmarshall(byte[] data) {
        Parcel p = Parcel.obtain();
        p.unmarshall(data, 0, data.length);
        p.setDataPosition(0);
        return LowpanCredential.CREATOR.createFromParcel(p);
    }
}
+199 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 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 android.net.lowpan;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import android.os.Parcel;
import android.support.test.runner.AndroidJUnit4;
import android.test.suitebuilder.annotation.SmallTest;
import org.junit.Test;
import org.junit.runner.RunWith;

@RunWith(AndroidJUnit4.class)
@SmallTest
public class LowpanIdentityTest {

    static {
        System.loadLibrary("frameworkslowpantestsjni");
    }

    private static native byte[] readAndWriteNative(byte[] inParcel);

    public void testNativeParcelUnparcel(LowpanIdentity original) {
        byte[] inParcel = marshall(original);
        byte[] outParcel = readAndWriteNative(inParcel);
        LowpanIdentity roundTrip = unmarshall(outParcel);

        assertEquals(original, roundTrip);
        assertEquals(original.hashCode(), roundTrip.hashCode());
        assertEquals(original.getName(), roundTrip.getName());
        assertArrayEquals(inParcel, outParcel);
    }

    @Test
    public void testNativeParcelUnparcel1() {
        testNativeParcelUnparcel(
                new LowpanIdentity.Builder()
                        .setName("TestNet1")
                        .setPanid(0x1234)
                        .setXpanid(
                                new byte[] {
                                    (byte) 0x00,
                                    (byte) 0x11,
                                    (byte) 0x22,
                                    (byte) 0x33,
                                    (byte) 0x44,
                                    (byte) 0x55,
                                    (byte) 0x66,
                                    (byte) 0x77
                                })
                        .setType(LowpanInterface.NETWORK_TYPE_THREAD_V1)
                        .setChannel(15)
                        .build());
    }

    @Test
    public void testNativeParcelUnparcel2() {
        testNativeParcelUnparcel(
                new LowpanIdentity.Builder()
                        .setName("TestNet2")
                        .setPanid(0x5678)
                        .setXpanid(
                                new byte[] {
                                    (byte) 0x88,
                                    (byte) 0x99,
                                    (byte) 0xaa,
                                    (byte) 0xbb,
                                    (byte) 0xcc,
                                    (byte) 0xdd,
                                    (byte) 0xee,
                                    (byte) 0xff
                                })
                        .setType("bork-bork-bork")
                        .setChannel(16)
                        .build());
    }

    @Test
    public void testNativeParcelUnparcel3() {
        testNativeParcelUnparcel(new LowpanIdentity.Builder().setName("TestNet3").build());
    }

    @Test
    public void testNativeParcelUnparcel4() {
        testNativeParcelUnparcel(new LowpanIdentity.Builder().build());
    }

    @Test
    public void testNativeParcelUnparcel5() {
        testNativeParcelUnparcel(
                new LowpanIdentity.Builder()
                        .setRawName(
                                new byte[] {
                                    (byte) 0x66,
                                    (byte) 0x6F,
                                    (byte) 0x6F,
                                    (byte) 0xC2,
                                    (byte) 0xAD,
                                    (byte) 0xCD,
                                    (byte) 0x8F,
                                    (byte) 0xE1,
                                    (byte) 0xA0,
                                    (byte) 0x86,
                                    (byte) 0xE1,
                                    (byte) 0xA0,
                                    (byte) 0x8B
                                })
                        .build());
    }

    @Test
    public void testStringPrep1() {
        LowpanIdentity identity =
                new LowpanIdentity.Builder()
                        .setRawName(
                                new byte[] {
                                    (byte) 0x66,
                                    (byte) 0x6F,
                                    (byte) 0x6F,
                                    (byte) 0x20,
                                    (byte) 0xC2,
                                    (byte) 0xAD,
                                    (byte) 0xCD,
                                    (byte) 0x8F,
                                    (byte) 0xE1,
                                    (byte) 0xA0,
                                    (byte) 0x86,
                                    (byte) 0xE1,
                                    (byte) 0xA0,
                                    (byte) 0x8B
                                })
                        .build();

        assertFalse(identity.isNameValid());
    }

    @Test
    public void testStringPrep2() {
        LowpanIdentity identity =
                new LowpanIdentity.Builder()
                        .setRawName(
                                new byte[] {
                                    (byte) 0x66, (byte) 0x6F, (byte) 0x6F, (byte) 0x20, (byte) 0x6F
                                })
                        .build();

        assertEquals("foo o", identity.getName());
        assertTrue(identity.isNameValid());
    }

    @Test
    public void testStringPrep3() {
        LowpanIdentity identity = new LowpanIdentity.Builder().setName("foo o").build();

        assertTrue(identity.isNameValid());
        assertEquals("foo o", identity.getName());
    }

    /**
     * Write a {@link LowpanIdentity} into an empty parcel and return the underlying data.
     *
     * @see unmarshall(byte[])
     */
    private static byte[] marshall(LowpanIdentity addr) {
        Parcel p = Parcel.obtain();
        addr.writeToParcel(p, /* flags */ 0);
        p.setDataPosition(0);
        return p.marshall();
    }

    /**
     * Read raw bytes into a parcel, and read a {@link LowpanIdentity} back out of them.
     *
     * @see marshall(LowpanIdentity)
     */
    private static LowpanIdentity unmarshall(byte[] data) {
        Parcel p = Parcel.obtain();
        p.unmarshall(data, 0, data.length);
        p.setDataPosition(0);
        return LowpanIdentity.CREATOR.createFromParcel(p);
    }
}
Loading