From: Tobias Brunner Date: Wed, 13 May 2020 14:02:08 +0000 (+0200) Subject: android: Mock parseInetAddress() method to fix unit tests X-Git-Tag: 5.9.0dr1~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84924249aabe6abdd6fcdaa7d8b58b17a06c9653;p=thirdparty%2Fstrongswan.git 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. --- diff --git a/src/frontends/android/app/build.gradle b/src/frontends/android/app/build.gradle index e2ebaae7ad..23cdecb4a9 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 af60c15ba3..2e6d8a40a8 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 51e976e340..b171ba5259 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 {