1 /* 2 * Copyright (C) 2019 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.internal.net.ipsec.ike.message; 18 19 import static com.android.internal.net.ipsec.ike.message.IkeMessage.DECODE_STATUS_UNPROTECTED_ERROR; 20 21 import static org.junit.Assert.assertEquals; 22 import static org.junit.Assert.assertNotNull; 23 import static org.junit.Assert.assertTrue; 24 import static org.mockito.Mockito.doReturn; 25 import static org.mockito.Mockito.mock; 26 27 import android.net.ipsec.ike.exceptions.IkeProtocolException; 28 import android.util.Pair; 29 30 import com.android.internal.net.TestUtils; 31 import com.android.internal.net.ipsec.ike.message.IkeMessage.DecodeResult; 32 import com.android.internal.net.ipsec.ike.message.IkeMessage.DecodeResultError; 33 34 import java.nio.ByteBuffer; 35 36 /** 37 * IkeTestUtils provides utility methods for testing IKE library. 38 * 39 * <p>TODO: Consider moving it under ikev2/ 40 */ 41 public final class IkeTestUtils { hexStringToIkePayload( @kePayload.PayloadType int payloadType, boolean isResp, String payloadHexString)42 public static IkePayload hexStringToIkePayload( 43 @IkePayload.PayloadType int payloadType, boolean isResp, String payloadHexString) 44 throws IkeProtocolException { 45 byte[] payloadBytes = TestUtils.hexStringToByteArray(payloadHexString); 46 // Returned Pair consists of the IkePayload and the following IkePayload's type. 47 Pair<IkePayload, Integer> pair = 48 IkePayloadFactory.getIkePayload(payloadType, isResp, ByteBuffer.wrap(payloadBytes)); 49 return pair.first; 50 } 51 decodeAndVerifyUnprotectedErrorMsg( byte[] inputPacket, Class<T> expectedException)52 public static <T extends IkeProtocolException> T decodeAndVerifyUnprotectedErrorMsg( 53 byte[] inputPacket, Class<T> expectedException) throws Exception { 54 IkeHeader header = new IkeHeader(inputPacket); 55 DecodeResult decodeResult = IkeMessage.decode(0, header, inputPacket); 56 57 assertEquals(DECODE_STATUS_UNPROTECTED_ERROR, decodeResult.status); 58 DecodeResultError resultError = (DecodeResultError) decodeResult; 59 assertNotNull(resultError.ikeException); 60 assertTrue(expectedException.isInstance(resultError.ikeException)); 61 62 return (T) resultError.ikeException; 63 } 64 makeDummySkfPayload( byte[] unencryptedData, int fragNum, int totalFrags)65 public static IkeSkfPayload makeDummySkfPayload( 66 byte[] unencryptedData, int fragNum, int totalFrags) throws Exception { 67 IkeEncryptedPayloadBody mockEncryptedBody = mock(IkeEncryptedPayloadBody.class); 68 doReturn(unencryptedData).when(mockEncryptedBody).getUnencryptedData(); 69 return new IkeSkfPayload(mockEncryptedBody, fragNum, totalFrags); 70 } 71 } 72