diff options
Diffstat (limited to 'tests/iketests/src/java/com/android/internal/net/ipsec/ike/IkeLocalRequestSchedulerTest.java')
-rw-r--r-- | tests/iketests/src/java/com/android/internal/net/ipsec/ike/IkeLocalRequestSchedulerTest.java | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/tests/iketests/src/java/com/android/internal/net/ipsec/ike/IkeLocalRequestSchedulerTest.java b/tests/iketests/src/java/com/android/internal/net/ipsec/ike/IkeLocalRequestSchedulerTest.java new file mode 100644 index 00000000..3406d014 --- /dev/null +++ b/tests/iketests/src/java/com/android/internal/net/ipsec/ike/IkeLocalRequestSchedulerTest.java @@ -0,0 +1,130 @@ +/* + * Copyright (C) 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.net.ipsec.ike; + +import static com.android.internal.net.ipsec.ike.IkeSessionStateMachine.CMD_LOCAL_REQUEST_REKEY_IKE; + +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.inOrder; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; + +import com.android.internal.net.ipsec.ike.IkeLocalRequestScheduler.IProcedureConsumer; +import com.android.internal.net.ipsec.ike.IkeLocalRequestScheduler.LocalRequest; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.InOrder; + +public final class IkeLocalRequestSchedulerTest { + private IkeLocalRequestScheduler mScheduler; + + private IProcedureConsumer mMockConsumer; + private LocalRequest[] mMockRequestArray; + + private ArgumentCaptor<LocalRequest> mLocalRequestCaptor = + ArgumentCaptor.forClass(LocalRequest.class); + + @Before + public void setUp() { + mMockConsumer = mock(IProcedureConsumer.class); + mScheduler = new IkeLocalRequestScheduler(mMockConsumer); + + mMockRequestArray = new LocalRequest[10]; + for (int i = 0; i < mMockRequestArray.length; i++) { + mMockRequestArray[i] = mock(LocalRequest.class); + } + } + + @Test + public void testAddMultipleRequestProcessOnlyOne() { + for (LocalRequest r : mMockRequestArray) mScheduler.addRequest(r); + + // Verify that no procedure was preemptively pulled from the queue + verify(mMockConsumer, never()).onNewProcedureReady(any()); + + // Check that the onNewPrcedureReady called exactly once, on the first item + mScheduler.readyForNextProcedure(); + verify(mMockConsumer, times(1)).onNewProcedureReady(any()); + verify(mMockConsumer, times(1)).onNewProcedureReady(mMockRequestArray[0]); + for (int i = 1; i < mMockRequestArray.length; i++) { + verify(mMockConsumer, never()).onNewProcedureReady(mMockRequestArray[i]); + } + } + + @Test + public void testProcessOrder() { + InOrder inOrder = inOrder(mMockConsumer); + + for (LocalRequest r : mMockRequestArray) mScheduler.addRequest(r); + for (int i = 0; i < mMockRequestArray.length; i++) mScheduler.readyForNextProcedure(); + + for (LocalRequest r : mMockRequestArray) { + inOrder.verify(mMockConsumer).onNewProcedureReady(r); + } + } + + @Test + public void testAddRequestToFrontProcessOrder() { + InOrder inOrder = inOrder(mMockConsumer); + + LocalRequest[] mockHighPriorityRequestArray = new LocalRequest[10]; + for (int i = 0; i < mockHighPriorityRequestArray.length; i++) { + mockHighPriorityRequestArray[i] = mock(LocalRequest.class); + } + + for (LocalRequest r : mMockRequestArray) mScheduler.addRequest(r); + for (LocalRequest r : mockHighPriorityRequestArray) mScheduler.addRequestAtFront(r); + + for (int i = 0; i < mockHighPriorityRequestArray.length + mMockRequestArray.length; i++) { + mScheduler.readyForNextProcedure(); + } + + // Verify processing order. mockHighPriorityRequestArray is processed in reverse order + for (int i = mockHighPriorityRequestArray.length - 1; i >= 0; i--) { + inOrder.verify(mMockConsumer).onNewProcedureReady(mockHighPriorityRequestArray[i]); + } + for (LocalRequest r : mMockRequestArray) { + inOrder.verify(mMockConsumer).onNewProcedureReady(r); + } + } + + @Test + public void testDoNotProcessCanceledRequest() { + LocalRequest[] requestArray = new LocalRequest[4]; + + for (int i = 0; i < requestArray.length; i++) { + requestArray[i] = new LocalRequest(CMD_LOCAL_REQUEST_REKEY_IKE); + mScheduler.addRequest(requestArray[i]); + } + + mScheduler.readyForNextProcedure(); + verify(mMockConsumer).onNewProcedureReady(eq(requestArray[0])); + + requestArray[1].cancel(); + mScheduler.readyForNextProcedure(); + verify(mMockConsumer, never()).onNewProcedureReady(eq(requestArray[1])); + verify(mMockConsumer).onNewProcedureReady(eq(requestArray[2])); + + mScheduler.readyForNextProcedure(); + verify(mMockConsumer).onNewProcedureReady(eq(requestArray[3])); + } +} |