diff --git a/modules/aws-ext/README.txt b/modules/aws-ext/README.txt
index c3b03ef..110399a 100644
--- a/modules/aws-ext/README.txt
+++ b/modules/aws-ext/README.txt
@@ -9,6 +9,15 @@
 - Add libraries from lib/optional/{module-dir} to the classpath of your application.
 - Add a module as a Maven dependency to your project.
 
+
+Building Module And Running Tests
+---------------------------------
+
+To build and run AWS extension use the command below with the right credentials to the AWS service:
+
+mvn clean package -pl modules/aws-ext -Dtest.amazon.access.key=<key> -Dtest.amazon.secret.key=<key>
+
+
 Importing AWS Module In Maven Project
 -------------------------------------
 
diff --git a/modules/aws-ext/modules/core/src/test/config/log4j-test.xml b/modules/aws-ext/modules/core/src/test/config/log4j-test.xml
new file mode 100644
index 0000000..cc2146e
--- /dev/null
+++ b/modules/aws-ext/modules/core/src/test/config/log4j-test.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+
+<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"
+    "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <param name="Target" value="System.out"/>
+        <param name="Threshold" value="DEBUG"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+
+        <filter class="org.apache.log4j.varia.LevelRangeFilter">
+            <param name="levelMin" value="DEBUG"/>
+            <param name="levelMax" value="INFO"/>
+        </filter>
+    </appender>
+
+    <appender name="CONSOLE_ERR" class="org.apache.log4j.ConsoleAppender">
+        <param name="Target" value="System.err"/>
+
+        <param name="Threshold" value="WARN"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+    </appender>
+
+    <category name="org">
+        <level value="INFO"/>
+    </category>
+
+    <root>
+        <level value="INFO"/>
+
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="CONSOLE_ERR"/>
+    </root>
+</log4j:configuration>
diff --git a/modules/aws-ext/modules/core/src/test/config/tests.properties b/modules/aws-ext/modules/core/src/test/config/tests.properties
new file mode 100644
index 0000000..86094c8
--- /dev/null
+++ b/modules/aws-ext/modules/core/src/test/config/tests.properties
@@ -0,0 +1,16 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
diff --git a/modules/aws-ext/src/test/java/org/apache/ignite/testsuites/IgniteS3TestSuite.java b/modules/aws-ext/src/test/java/org/apache/ignite/testsuites/IgniteS3TestSuite.java
index 0b3a404..0096926 100644
--- a/modules/aws-ext/src/test/java/org/apache/ignite/testsuites/IgniteS3TestSuite.java
+++ b/modules/aws-ext/src/test/java/org/apache/ignite/testsuites/IgniteS3TestSuite.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.testsuites;
 
+import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.spi.checkpoint.s3.S3CheckpointManagerSelfTest;
 import org.apache.ignite.spi.checkpoint.s3.S3CheckpointSpiConfigSelfTest;
 import org.apache.ignite.spi.checkpoint.s3.S3CheckpointSpiSelfTest;
@@ -89,7 +90,7 @@
      * @return Bucket name.
      */
     public static String getBucketName(final String dfltBucketName) {
-        String val = System.getenv("test.s3.bucket.name");
+        String val = X.getSystemOrEnv("test.s3.bucket.name");
 
         return val == null ? dfltBucketName : val;
     }
@@ -99,7 +100,7 @@
      * @return Environment variable value.
      */
     private static String getRequiredEnvVar(String name) {
-        String key = System.getenv(name);
+        String key = X.getSystemOrEnv(name);
 
         assert key != null : String.format("Environment variable '%s' is not set", name);
 
diff --git a/modules/azure-ext/README.txt b/modules/azure-ext/README.txt
index a0ff6f5..b33f4b9 100644
--- a/modules/azure-ext/README.txt
+++ b/modules/azure-ext/README.txt
@@ -9,6 +9,16 @@
 - Add libraries from lib/optional/{module-dir} to the classpath of your application.
 - Add a module as a Maven dependency to your project.
 
+
+Building Azure Module And Running Tests
+---------------------------------------
+
+To build and run Azure extension use the command below with the right credentials to the Azure service:
+
+mvn clean package -pl modules/azure-ext -Dtest.azure.account.name=uname -Dtest.azure.account.key=key
+-Dtest.azure.endpoint=http://127.0.0.1:10000/devstoreaccount
+
+
 Importing Azure Module In Maven Project
 -------------------------------------
 
diff --git a/modules/azure-ext/modules/core/src/test/config/log4j-test.xml b/modules/azure-ext/modules/core/src/test/config/log4j-test.xml
new file mode 100644
index 0000000..cc2146e
--- /dev/null
+++ b/modules/azure-ext/modules/core/src/test/config/log4j-test.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+
+<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"
+    "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <param name="Target" value="System.out"/>
+        <param name="Threshold" value="DEBUG"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+
+        <filter class="org.apache.log4j.varia.LevelRangeFilter">
+            <param name="levelMin" value="DEBUG"/>
+            <param name="levelMax" value="INFO"/>
+        </filter>
+    </appender>
+
+    <appender name="CONSOLE_ERR" class="org.apache.log4j.ConsoleAppender">
+        <param name="Target" value="System.err"/>
+
+        <param name="Threshold" value="WARN"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+    </appender>
+
+    <category name="org">
+        <level value="INFO"/>
+    </category>
+
+    <root>
+        <level value="INFO"/>
+
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="CONSOLE_ERR"/>
+    </root>
+</log4j:configuration>
diff --git a/modules/azure-ext/modules/core/src/test/config/tests.properties b/modules/azure-ext/modules/core/src/test/config/tests.properties
new file mode 100644
index 0000000..86094c8
--- /dev/null
+++ b/modules/azure-ext/modules/core/src/test/config/tests.properties
@@ -0,0 +1,16 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
diff --git a/modules/azure-ext/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/TcpDiscoveryAzureBlobStoreIpFinder.java b/modules/azure-ext/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/TcpDiscoveryAzureBlobStoreIpFinder.java
index 6540909..322148f 100644
--- a/modules/azure-ext/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/TcpDiscoveryAzureBlobStoreIpFinder.java
+++ b/modules/azure-ext/src/main/java/org/apache/ignite/spi/discovery/tcp/ipfinder/azure/TcpDiscoveryAzureBlobStoreIpFinder.java
@@ -15,18 +15,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-import java.io.ByteArrayInputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.InetSocketAddress;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 import com.azure.storage.blob.BlobContainerClient;
 import com.azure.storage.blob.BlobServiceClient;
@@ -36,6 +24,17 @@
 import com.azure.storage.blob.models.BlobStorageException;
 import com.azure.storage.blob.specialized.BlockBlobClient;
 import com.azure.storage.common.StorageSharedKeyCredential;
+import java.io.ByteArrayInputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.InetSocketAddress;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
 import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
 import org.apache.ignite.internal.util.typedef.F;
@@ -121,16 +120,7 @@
         Collection<InetSocketAddress> addrs = new ArrayList<>();
         Set<String> seenBlobNames = new HashSet<>();
 
-        Iterator<BlobItem> blobItemIterator = blobContainerClient.listBlobs().iterator();
-
-        while (blobItemIterator.hasNext()) {
-            BlobItem blobItem = blobItemIterator.next();
-
-            // https://github.com/Azure/azure-sdk-for-java/issues/20515
-            if (seenBlobNames.contains(blobItem.getName())) {
-                break;
-            }
-
+        for (BlobItem blobItem : blobContainerClient.listBlobs()) {
             try {
                 if (!blobItem.isDeleted()) {
                     addrs.add(addrFromString(blobItem.getName()));
diff --git a/modules/azure-ext/src/test/java/org/apache/ignite/testsuites/IgniteAzureTestSuite.java b/modules/azure-ext/src/test/java/org/apache/ignite/testsuites/IgniteAzureTestSuite.java
index 0549568..2bc01a9 100644
--- a/modules/azure-ext/src/test/java/org/apache/ignite/testsuites/IgniteAzureTestSuite.java
+++ b/modules/azure-ext/src/test/java/org/apache/ignite/testsuites/IgniteAzureTestSuite.java
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.azure.TcpDiscoveryAzureBlobStoreIpFinderSelfTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -30,7 +31,7 @@
      * @return Account Name
      */
     public static String getAccountName() {
-        String id = System.getenv("test.azure.account.name");
+        String id = X.getSystemOrEnv("test.azure.account.name");
 
         assert id != null : "Environment variable 'test.azure.account.name' is not set";
 
@@ -41,7 +42,7 @@
      * @return Account Key
      */
     public static String getAccountKey() {
-        String path = System.getenv("test.azure.account.key");
+        String path = X.getSystemOrEnv("test.azure.account.key");
 
         assert path != null : "Environment variable 'test.azure.account.key' is not set";
 
@@ -52,7 +53,7 @@
      * @return Endpoint
      */
     public static String getEndpoint() {
-        String name = System.getenv("test.azure.endpoint");
+        String name = X.getSystemOrEnv("test.azure.endpoint");
 
         assert name != null : "Environment variable 'test.azure.endpoint' is not set";
 
diff --git a/modules/gce-ext/README.txt b/modules/gce-ext/README.txt
index 224c8ba..8e4d2fd 100644
--- a/modules/gce-ext/README.txt
+++ b/modules/gce-ext/README.txt
@@ -9,6 +9,15 @@
 - Add libraries from lib/optional/{module-dir} to the classpath of your application.
 - Add a module as a Maven dependency to your project.
 
+
+Building GCE Module And Running Tests
+---------------------------------------
+
+To build and run GCE extension use the command below with the right credentials to the GCE service:
+
+mvn clean package -pl modules/gce-ext -Dtest.gce.account.id=id -Dtest.gce.p12.path=path -Dtest.gce.project.name=name
+
+
 Importing GCE Module In Maven Project
 -------------------------------------
 
diff --git a/modules/gce-ext/modules/core/src/test/config/log4j-test.xml b/modules/gce-ext/modules/core/src/test/config/log4j-test.xml
new file mode 100644
index 0000000..cc2146e
--- /dev/null
+++ b/modules/gce-ext/modules/core/src/test/config/log4j-test.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You 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.
+-->
+
+<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN"
+    "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
+    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
+        <param name="Target" value="System.out"/>
+        <param name="Threshold" value="DEBUG"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+
+        <filter class="org.apache.log4j.varia.LevelRangeFilter">
+            <param name="levelMin" value="DEBUG"/>
+            <param name="levelMax" value="INFO"/>
+        </filter>
+    </appender>
+
+    <appender name="CONSOLE_ERR" class="org.apache.log4j.ConsoleAppender">
+        <param name="Target" value="System.err"/>
+
+        <param name="Threshold" value="WARN"/>
+
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="[%d{ISO8601}][%-5p][%t][%c{1}] %m%n"/>
+        </layout>
+    </appender>
+
+    <category name="org">
+        <level value="INFO"/>
+    </category>
+
+    <root>
+        <level value="INFO"/>
+
+        <appender-ref ref="CONSOLE"/>
+        <appender-ref ref="CONSOLE_ERR"/>
+    </root>
+</log4j:configuration>
diff --git a/modules/gce-ext/modules/core/src/test/config/tests.properties b/modules/gce-ext/modules/core/src/test/config/tests.properties
new file mode 100644
index 0000000..86094c8
--- /dev/null
+++ b/modules/gce-ext/modules/core/src/test/config/tests.properties
@@ -0,0 +1,16 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
diff --git a/modules/gce-ext/src/test/java/org/apache/ignite/testsuites/IgniteGCETestSuite.java b/modules/gce-ext/src/test/java/org/apache/ignite/testsuites/IgniteGCETestSuite.java
index 8d6cbe5..98680e5 100644
--- a/modules/gce-ext/src/test/java/org/apache/ignite/testsuites/IgniteGCETestSuite.java
+++ b/modules/gce-ext/src/test/java/org/apache/ignite/testsuites/IgniteGCETestSuite.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.testsuites;
 
+import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.gce.TcpDiscoveryGoogleStorageIpFinderSelfTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
@@ -31,7 +32,7 @@
      * @return Service Account Id.
      */
     public static String getServiceAccountId() {
-        String id = System.getenv("test.gce.account.id");
+        String id = X.getSystemOrEnv("test.gce.account.id");
 
         assert id != null : "Environment variable 'test.gce.account.id' is not set";
 
@@ -42,7 +43,7 @@
      * @return Service Account p12 file path.
      */
     public static String getP12FilePath() {
-        String path = System.getenv("test.gce.p12.path");
+        String path = X.getSystemOrEnv("test.gce.p12.path");
 
         assert path != null : "Environment variable 'test.gce.p12.path' is not set";
 
@@ -53,7 +54,7 @@
      * @return GCE project name.
      */
     public static String getProjectName() {
-        String name = System.getenv("test.gce.project.name");
+        String name = X.getSystemOrEnv("test.gce.project.name");
 
         assert name != null : "Environment variable 'test.gce.project.name' is not set";
 
diff --git a/parent/pom.xml b/parent/pom.xml
index 683d8e9..12ef2e1 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -83,7 +83,7 @@
         <hamcrest.version>1.2</hamcrest.version>
         <httpclient.version>4.5.1</httpclient.version>
         <httpcore.version>4.4.3</httpcore.version>
-        <jackson.version>2.9.6</jackson.version>
+        <jackson.version>2.13.0</jackson.version>
         <jackson1.version>1.9.13</jackson1.version>
         <jaxb.api.version>2.1</jaxb.api.version>
         <jaxb.impl.version>2.1.14</jaxb.impl.version>
