11dc52f076977039a6bf112885feca6638c05cd29Peter Qiu/*
21dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Copyright (C) 2016 The Android Open Source Project
31dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
41dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
51dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * you may not use this file except in compliance with the License.
61dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * You may obtain a copy of the License at
71dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
81dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
91dc52f076977039a6bf112885feca6638c05cd29Peter Qiu *
101dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Unless required by applicable law or agreed to in writing, software
111dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
121dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * See the License for the specific language governing permissions and
141dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * limitations under the License.
151dc52f076977039a6bf112885feca6638c05cd29Peter Qiu */
161dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
171dc52f076977039a6bf112885feca6638c05cd29Peter Qiupackage com.android.server.wifi.hotspot2.anqp;
181dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
191dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport static org.junit.Assert.assertEquals;
201dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
211dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport android.test.suitebuilder.annotation.SmallTest;
221dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
231dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport org.junit.Test;
241dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
251dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport java.nio.BufferUnderflowException;
261dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport java.nio.ByteBuffer;
271dc52f076977039a6bf112885feca6638c05cd29Peter Qiuimport java.nio.ByteOrder;
281dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
291dc52f076977039a6bf112885feca6638c05cd29Peter Qiu/**
301dc52f076977039a6bf112885feca6638c05cd29Peter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.anqp.ProtocolPortTuple}.
311dc52f076977039a6bf112885feca6638c05cd29Peter Qiu */
321dc52f076977039a6bf112885feca6638c05cd29Peter Qiu@SmallTest
331dc52f076977039a6bf112885feca6638c05cd29Peter Qiupublic class ProtocolPortTupleTest {
341dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    private static final int TEST_PROTOCOL = 1;
351dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    private static final int TEST_PORT = 2;
361dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    private static final int TEST_STATUS = ProtocolPortTuple.PROTO_STATUS_CLOSED;
371dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
381dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    /**
391dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * Helper function for generating a buffer with test data.
401dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     *
411dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @param protocol Protocol value
421dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @param port Port value
431dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @param status Status value
441dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @return {@link ByteBuffer}
451dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     */
461dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    private ByteBuffer getTestBuffer(int protocol, int port, int status) {
471dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        ByteBuffer buffer = ByteBuffer.allocate(ProtocolPortTuple.RAW_BYTE_SIZE)
481dc52f076977039a6bf112885feca6638c05cd29Peter Qiu                .order(ByteOrder.LITTLE_ENDIAN);
491dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        buffer.put((byte) protocol);
501dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        buffer.putShort((short) port);
511dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        buffer.put((byte) status);
521dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        buffer.position(0);
531dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        return buffer;
541dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    }
551dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
561dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    /**
571dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * Verify that BufferUnderflowException will be thrown when parsing an empty buffer.
581dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     *
591dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @throws Exception
601dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     */
611dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    @Test(expected = BufferUnderflowException.class)
621dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public void parseEmptyBuffer() throws Exception {
631dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        ProtocolPortTuple.parse(ByteBuffer.allocate(0));
641dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    }
651dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
661dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    /**
671dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * Verify that BufferUnderflowException will be thrown when parsing a buffer without
681dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * the complete tuple data (missing status field).
691dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     *
701dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @throws Exception
711dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     */
721dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    @Test(expected = BufferUnderflowException.class)
731dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public void parseBufferWithIncompleteData() throws Exception {
741dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        ByteBuffer buffer = ByteBuffer.allocate(ProtocolPortTuple.RAW_BYTE_SIZE - 1);
751dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        buffer.put(new byte[ProtocolPortTuple.RAW_BYTE_SIZE - 1]);
761dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        buffer.position(0);
771dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        ProtocolPortTuple.parse(buffer);
781dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    }
791dc52f076977039a6bf112885feca6638c05cd29Peter Qiu
801dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    /**
811dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * Verify that the expected ProtocolPortTuple is returned when parsing a buffer contained
821dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * the test data.
831dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     *
841dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     * @throws Exception
851dc52f076977039a6bf112885feca6638c05cd29Peter Qiu     */
861dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    @Test
871dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    public void parseBufferWithTestData() throws Exception {
881dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        ByteBuffer buffer = getTestBuffer(TEST_PROTOCOL, TEST_PORT, TEST_STATUS);
891dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        ProtocolPortTuple expected = new ProtocolPortTuple(TEST_PROTOCOL, TEST_PORT, TEST_STATUS);
901dc52f076977039a6bf112885feca6638c05cd29Peter Qiu        assertEquals(expected, ProtocolPortTuple.parse(buffer));
911dc52f076977039a6bf112885feca6638c05cd29Peter Qiu    }
921dc52f076977039a6bf112885feca6638c05cd29Peter Qiu}
93