174339de52d7066f22771d914e698da503232c107Peter Qiu/*
274339de52d7066f22771d914e698da503232c107Peter Qiu * Copyright (C) 2016 The Android Open Source Project
374339de52d7066f22771d914e698da503232c107Peter Qiu *
474339de52d7066f22771d914e698da503232c107Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
574339de52d7066f22771d914e698da503232c107Peter Qiu * you may not use this file except in compliance with the License.
674339de52d7066f22771d914e698da503232c107Peter Qiu * You may obtain a copy of the License at
774339de52d7066f22771d914e698da503232c107Peter Qiu *
874339de52d7066f22771d914e698da503232c107Peter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
974339de52d7066f22771d914e698da503232c107Peter Qiu *
1074339de52d7066f22771d914e698da503232c107Peter Qiu * Unless required by applicable law or agreed to in writing, software
1174339de52d7066f22771d914e698da503232c107Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
1274339de52d7066f22771d914e698da503232c107Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1374339de52d7066f22771d914e698da503232c107Peter Qiu * See the License for the specific language governing permissions and
1474339de52d7066f22771d914e698da503232c107Peter Qiu * limitations under the License.
1574339de52d7066f22771d914e698da503232c107Peter Qiu */
1674339de52d7066f22771d914e698da503232c107Peter Qiu
1774339de52d7066f22771d914e698da503232c107Peter Qiupackage com.android.server.wifi.hotspot2.anqp;
1874339de52d7066f22771d914e698da503232c107Peter Qiu
1974339de52d7066f22771d914e698da503232c107Peter Qiuimport static org.junit.Assert.assertEquals;
2074339de52d7066f22771d914e698da503232c107Peter Qiu
2174339de52d7066f22771d914e698da503232c107Peter Qiuimport android.test.suitebuilder.annotation.SmallTest;
2274339de52d7066f22771d914e698da503232c107Peter Qiu
2374339de52d7066f22771d914e698da503232c107Peter Qiuimport org.junit.Test;
2474339de52d7066f22771d914e698da503232c107Peter Qiu
2574339de52d7066f22771d914e698da503232c107Peter Qiuimport java.net.ProtocolException;
2674339de52d7066f22771d914e698da503232c107Peter Qiuimport java.nio.ByteBuffer;
2774339de52d7066f22771d914e698da503232c107Peter Qiu
2874339de52d7066f22771d914e698da503232c107Peter Qiu/**
2974339de52d7066f22771d914e698da503232c107Peter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.anqp.IPAddressTypeAvailabilityElement}.
3074339de52d7066f22771d914e698da503232c107Peter Qiu */
3174339de52d7066f22771d914e698da503232c107Peter Qiu@SmallTest
3274339de52d7066f22771d914e698da503232c107Peter Qiupublic class IPAddressTypeAvailabilityElementTest {
3374339de52d7066f22771d914e698da503232c107Peter Qiu    private static final int TEST_IPV4_AVAILABILITY =
3474339de52d7066f22771d914e698da503232c107Peter Qiu            IPAddressTypeAvailabilityElement.IPV4_PUBLIC;
3574339de52d7066f22771d914e698da503232c107Peter Qiu    private static final int TEST_IPV6_AVAILABILITY =
3674339de52d7066f22771d914e698da503232c107Peter Qiu            IPAddressTypeAvailabilityElement.IPV6_AVAILABLE;
3774339de52d7066f22771d914e698da503232c107Peter Qiu
3874339de52d7066f22771d914e698da503232c107Peter Qiu    private static int getIPAvailability() {
3974339de52d7066f22771d914e698da503232c107Peter Qiu        return (TEST_IPV4_AVAILABILITY << 2) | TEST_IPV6_AVAILABILITY;
4074339de52d7066f22771d914e698da503232c107Peter Qiu    }
4174339de52d7066f22771d914e698da503232c107Peter Qiu
4274339de52d7066f22771d914e698da503232c107Peter Qiu    /**
4374339de52d7066f22771d914e698da503232c107Peter Qiu     * Verify that ProtocolException will be thrown when parsing an empty buffer.
4474339de52d7066f22771d914e698da503232c107Peter Qiu     *
4574339de52d7066f22771d914e698da503232c107Peter Qiu     * @throws Exception
4674339de52d7066f22771d914e698da503232c107Peter Qiu     */
4774339de52d7066f22771d914e698da503232c107Peter Qiu    @Test(expected = ProtocolException.class)
4874339de52d7066f22771d914e698da503232c107Peter Qiu    public void parseBufferEmptyBuffer() throws Exception {
4974339de52d7066f22771d914e698da503232c107Peter Qiu        IPAddressTypeAvailabilityElement.parse(ByteBuffer.allocate(0));
5074339de52d7066f22771d914e698da503232c107Peter Qiu    }
5174339de52d7066f22771d914e698da503232c107Peter Qiu
5274339de52d7066f22771d914e698da503232c107Peter Qiu    /**
5374339de52d7066f22771d914e698da503232c107Peter Qiu     * Verify that ProtocolException will be thrown when parsing an buffer containing excess
5474339de52d7066f22771d914e698da503232c107Peter Qiu     * data.
5574339de52d7066f22771d914e698da503232c107Peter Qiu     *
5674339de52d7066f22771d914e698da503232c107Peter Qiu     * @throws Exception
5774339de52d7066f22771d914e698da503232c107Peter Qiu     */
5874339de52d7066f22771d914e698da503232c107Peter Qiu    @Test(expected = ProtocolException.class)
5974339de52d7066f22771d914e698da503232c107Peter Qiu    public void parseBufferWithExcessData() throws Exception {
6074339de52d7066f22771d914e698da503232c107Peter Qiu        ByteBuffer buffer = ByteBuffer.allocate(
6174339de52d7066f22771d914e698da503232c107Peter Qiu                IPAddressTypeAvailabilityElement.EXPECTED_BUFFER_LENGTH + 1);
6274339de52d7066f22771d914e698da503232c107Peter Qiu        buffer.put((byte) getIPAvailability());
6374339de52d7066f22771d914e698da503232c107Peter Qiu        buffer.put((byte) 0);    // Excess data.
6474339de52d7066f22771d914e698da503232c107Peter Qiu        buffer.position(0);
6574339de52d7066f22771d914e698da503232c107Peter Qiu        IPAddressTypeAvailabilityElement.parse(ByteBuffer.allocate(0));
6674339de52d7066f22771d914e698da503232c107Peter Qiu    }
6774339de52d7066f22771d914e698da503232c107Peter Qiu
6874339de52d7066f22771d914e698da503232c107Peter Qiu    /**
6974339de52d7066f22771d914e698da503232c107Peter Qiu     * Verify that the expected IPAddressTypeAvailabilityElement is returned when parsing
7074339de52d7066f22771d914e698da503232c107Peter Qiu     * a buffer containing the test data.
7174339de52d7066f22771d914e698da503232c107Peter Qiu     *
7274339de52d7066f22771d914e698da503232c107Peter Qiu     * @throws Exception
7374339de52d7066f22771d914e698da503232c107Peter Qiu     */
7474339de52d7066f22771d914e698da503232c107Peter Qiu    @Test
7574339de52d7066f22771d914e698da503232c107Peter Qiu    public void parseBufferWithTestData() throws Exception {
7674339de52d7066f22771d914e698da503232c107Peter Qiu        ByteBuffer buffer = ByteBuffer.allocate(
7774339de52d7066f22771d914e698da503232c107Peter Qiu                IPAddressTypeAvailabilityElement.EXPECTED_BUFFER_LENGTH);
7874339de52d7066f22771d914e698da503232c107Peter Qiu        buffer.put((byte) getIPAvailability());
7974339de52d7066f22771d914e698da503232c107Peter Qiu        buffer.position(0);
8074339de52d7066f22771d914e698da503232c107Peter Qiu
8174339de52d7066f22771d914e698da503232c107Peter Qiu        IPAddressTypeAvailabilityElement expectedElement = new IPAddressTypeAvailabilityElement(
8274339de52d7066f22771d914e698da503232c107Peter Qiu                TEST_IPV4_AVAILABILITY, TEST_IPV6_AVAILABILITY);
8374339de52d7066f22771d914e698da503232c107Peter Qiu        assertEquals(expectedElement, IPAddressTypeAvailabilityElement.parse(buffer));
8474339de52d7066f22771d914e698da503232c107Peter Qiu    }
8574339de52d7066f22771d914e698da503232c107Peter Qiu}
86