1d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu/* 2d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Copyright (C) 2016 The Android Open Source Project 3d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 4d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Licensed under the Apache License, Version 2.0 (the "License"); 5d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * you may not use this file except in compliance with the License. 6d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * You may obtain a copy of the License at 7d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 8d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * http://www.apache.org/licenses/LICENSE-2.0 9d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 10d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Unless required by applicable law or agreed to in writing, software 11d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * distributed under the License is distributed on an "AS IS" BASIS, 12d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * See the License for the specific language governing permissions and 14d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * limitations under the License. 15d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 16d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 17d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiupackage com.android.server.wifi.hotspot2.anqp.eap; 18d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 19d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport static org.junit.Assert.assertEquals; 20d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 21d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport android.test.suitebuilder.annotation.SmallTest; 22d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 23d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport org.junit.Test; 24d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 25d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport java.net.ProtocolException; 26d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport java.nio.BufferUnderflowException; 27d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiuimport java.nio.ByteBuffer; 28d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 29d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu/** 30d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.anqp.eap.CredentialType}. 31d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 32d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu@SmallTest 33d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiupublic class CredentialTypeTest { 34d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu private static final int TEST_TYPE = CredentialType.CREDENTIAL_TYPE_USIM; 35d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 36d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu /** 37d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Helper function for generating the test buffer. 38d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 39d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @return {@link ByteBuffer} 40d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 41d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu private ByteBuffer getTestBuffer() { 42d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu return ByteBuffer.wrap(new byte[] {(byte) TEST_TYPE}); 43d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 44d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 45d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu /** 46d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Verify that BufferUnderflowException will be thrown when parsing from an empty buffer. 47d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 48d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @throws Exception 49d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 50d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu @Test(expected = BufferUnderflowException.class) 51d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public void parseEmptyBuffer() throws Exception { 52d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu CredentialType.parse( 53d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu ByteBuffer.wrap(new byte[0]), CredentialType.EXPECTED_LENGTH_VALUE, false); 54d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 55d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 56d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu /** 57d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Verify that ProtocolException will be thrown when the data length value is not the same 58d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * as the expected 59d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 60d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @throws Exception 61d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 62d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu @Test(expected = ProtocolException.class) 63d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public void parseBufferWithInvalidLength() throws Exception { 64d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu CredentialType.parse(getTestBuffer(), CredentialType.EXPECTED_LENGTH_VALUE - 1, false); 65d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 66d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 67d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu /** 68d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Verify that an expected CredentialType is returned when parsing the buffer for a 69d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * non-tunneled EAP method. 70d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 71d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @throws Exception 72d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 73d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu @Test 74d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public void parseBufferForNonTunneledEAPMethod() throws Exception { 75d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu CredentialType expected = 76d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu new CredentialType(AuthParam.PARAM_TYPE_CREDENTIAL_TYPE, TEST_TYPE); 77d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu CredentialType actual = CredentialType.parse( 78d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu getTestBuffer(), CredentialType.EXPECTED_LENGTH_VALUE, false); 79d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu assertEquals(expected, actual); 80d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 81d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu 82d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu /** 83d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * Verify that an expected CredentialType is returned when parsing the buffer for a 84d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * tunneled EAP method. 85d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * 86d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu * @throws Exception 87d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu */ 88d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu @Test 89d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu public void parseBufferForTunneledEAPMethod() throws Exception { 90d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu CredentialType expected = new CredentialType( 91d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu AuthParam.PARAM_TYPE_TUNNELED_EAP_METHOD_CREDENTIAL_TYPE, TEST_TYPE); 92d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu CredentialType actual = CredentialType.parse( 93d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu getTestBuffer(), CredentialType.EXPECTED_LENGTH_VALUE, true); 94d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu assertEquals(expected, actual); 95d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu } 96d8dddd9671750e6bfbcfa218db16ad096b9904eePeter Qiu} 97