]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
android: Mock parseInetAddress() method to fix unit tests
authorTobias Brunner <tobias@strongswan.org>
Wed, 13 May 2020 14:02:08 +0000 (16:02 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 2 Jun 2020 12:42:38 +0000 (14:42 +0200)
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
src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeSetTest.java
src/frontends/android/app/src/test/java/org/strongswan/android/test/IPRangeTest.java

index e2ebaae7ad03ca9e8fe2ccc2cac935c92ed45c81..23cdecb4a9b5ca04ed93fa31fb6211d9315118fa 100644 (file)
@@ -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'
 }
index af60c15ba39dc068d189653d481dc2b73a55f94f..2e6d8a40a8348a6332ae65a4d1b81d2112a915fa 100644 (file)
 
 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<IPRange> subnets = set.subnets().iterator();
index 51e976e34033f8779712ebf6a5da44711e0c7d6b..b171ba525961626f2fcc3df941e4ebc3c1815889 100644 (file)
 
 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
        {