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