From 84924249aabe6abdd6fcdaa7d8b58b17a06c9653 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Wed, 13 May 2020 16:02:08 +0200 Subject: [PATCH] android: Mock parseInetAddress() method to fix unit tests The native parseInetAddressBytes() method called by that method is not available when running the tests. Not very pretty and there are some warnings because PowerMock does reflection in some illegal way but it fixes the unit tests and does not require any new dependencies like Apache Commons or Guava just to parse IP addresses without DNS lookup. Fixes: 2ef473be1532 ("android: Use helper to parse IP addresses where appropriate") Fixes #3443. --- src/frontends/android/app/build.gradle | 4 ++++ .../android/test/IPRangeSetTest.java | 18 ++++++++++++++++++ .../strongswan/android/test/IPRangeTest.java | 17 +++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/src/frontends/android/app/build.gradle b/src/frontends/android/app/build.gradle index e2ebaae7a..23cdecb4a 100644 --- a/src/frontends/android/app/build.gradle +++ b/src/frontends/android/app/build.gradle @@ -51,4 +51,8 @@ dependencies { implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.google.android.material:material:1.0.0' testImplementation 'junit:junit:4.12' + testImplementation 'org.mockito:mockito-core:2.28.2' + testImplementation 'org.powermock:powermock-core:2.0.2' + testImplementation 'org.powermock:powermock-module-junit4:2.0.2' + testImplementation 'org.powermock:powermock-api-mockito2:2.0.2' } diff --git a/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeSetTest.java b/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeSetTest.java index af60c15ba..2e6d8a40a 100644 --- a/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeSetTest.java +++ b/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeSetTest.java @@ -15,19 +15,37 @@ package org.strongswan.android.test; +import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import org.strongswan.android.utils.IPRange; import org.strongswan.android.utils.IPRangeSet; +import org.strongswan.android.utils.Utils; +import java.net.InetAddress; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +@RunWith(PowerMockRunner.class) +@PrepareForTest({ Utils.class, IPRangeSet.class }) public class IPRangeSetTest { + @Before + public void initUtils() throws UnknownHostException + { + PowerMockito.mockStatic(Utils.class); + Mockito.when(Utils.parseInetAddress(anyString())).thenAnswer(invocation -> InetAddress.getByName(invocation.getArgument(0))); + } + private void assertSubnets(IPRangeSet set, IPRange...exp) { Iterator subnets = set.subnets().iterator(); diff --git a/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeTest.java b/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeTest.java index 51e976e34..b171ba525 100644 --- a/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeTest.java +++ b/src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeTest.java @@ -15,17 +15,34 @@ package org.strongswan.android.test; +import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; import org.strongswan.android.utils.IPRange; +import org.strongswan.android.utils.Utils; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.anyString; +@RunWith(PowerMockRunner.class) +@PrepareForTest({ Utils.class, IPRange.class }) public class IPRangeTest { + @Before + public void initUtils() throws UnknownHostException + { + PowerMockito.mockStatic(Utils.class); + Mockito.when(Utils.parseInetAddress(anyString())).thenAnswer(invocation -> InetAddress.getByName(invocation.getArgument(0))); + } + @Test public void testRangeReversed() throws UnknownHostException {