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