aboutsummaryrefslogtreecommitdiff
path: root/tests/iketests/src/java/com/android/internal/net/ipsec/ike/IkeLocalRequestSchedulerTest.java
diff options
context:
space:
mode:
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.java130
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]));
+ }
+}