diff --git a/testing/adios2/CMakeLists.txt b/testing/adios2/CMakeLists.txt
index f78866fa0d87db8eca34abf94b39e1cac4a25c3f..544e4099f8a6d3d309e8d97dbbf80c3deff1c91c 100644
--- a/testing/adios2/CMakeLists.txt
+++ b/testing/adios2/CMakeLists.txt
@@ -6,3 +6,4 @@
 add_subdirectory(interface)
 add_subdirectory(engine)
 add_subdirectory(bindings)
+add_subdirectory(xml)
diff --git a/testing/adios2/xml/CMakeLists.txt b/testing/adios2/xml/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..90ec2aa9e6f0bfd796944e50a40879d641c8add1
--- /dev/null
+++ b/testing/adios2/xml/CMakeLists.txt
@@ -0,0 +1,12 @@
+#------------------------------------------------------------------------------#
+# Distributed under the OSI-approved Apache License, Version 2.0.  See
+# accompanying file Copyright.txt for details.
+#------------------------------------------------------------------------------#
+
+add_executable(TestXMLConfig TestXMLConfig.cpp)
+target_link_libraries(TestXMLConfig adios2 gtest gtest_main)
+target_compile_definitions(TestXMLConfig PRIVATE
+  "XML_CONFIG_DIR=${CMAKE_CURRENT_SOURCE_DIR}"
+)
+
+gtest_add_tests(TARGET TestXMLConfig)
diff --git a/testing/adios2/xml/TestXMLConfig.cpp b/testing/adios2/xml/TestXMLConfig.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..16b45d2f3f551ddc930097dad64f09b9b5e98f1d
--- /dev/null
+++ b/testing/adios2/xml/TestXMLConfig.cpp
@@ -0,0 +1,68 @@
+#include <cstdint>
+
+#include <iostream>
+#include <stdexcept>
+
+#include <adios2.h>
+
+#include <gtest/gtest.h>
+
+#define str_helper(X) #X
+#define str(X) str_helper(X)
+
+class XMLConfigTest : public ::testing::Test
+{
+public:
+    XMLConfigTest() : configDir(str(XML_CONFIG_DIR)) {}
+
+protected:
+    // virtual void SetUp() { }
+
+    // virtual void TearDown() { }
+    std::string configDir;
+};
+
+TEST_F(XMLConfigTest, TwoIOs)
+{
+    std::string configFile = configDir + "/config1.xml";
+#ifdef ADIOS2_HAVE_MPI
+    adios2::ADIOS adios(configFile, MPI_COMM_WORLD, adios2::DebugON);
+#else
+    adios2::ADIOS adios(configFile, adios2::DebugON);
+#endif
+
+    EXPECT_NO_THROW({
+        adios2::IO &io = adios.GetIO("Test IO 1");
+        const adios2::Params &params = io.GetParameters();
+        ASSERT_EQ(params.size(), 5);
+        EXPECT_THROW(params.at("DoesNotExist"), std::out_of_range);
+        EXPECT_EQ(params.at("Threads"), "1");
+        EXPECT_EQ(params.at("ProfileUnits"), "Microseconds");
+        EXPECT_EQ(params.at("MaxBufferSize"), "20Mb");
+        EXPECT_EQ(params.at("InitialBufferSize"), "1Mb");
+        EXPECT_EQ(params.at("BufferGrowthFactor"), "2");
+        auto engine = io.Open("Test BP Writer 1", adios2::OpenMode::Write);
+    });
+
+    EXPECT_NO_THROW({
+        adios2::IO &io = adios.GetIO("Test IO 2");
+        const adios2::Params &params = io.GetParameters();
+        ASSERT_EQ(params.size(), 0);
+    });
+}
+
+int main(int argc, char **argv)
+{
+#ifdef ADIOS2_HAVE_MPI
+    MPI_Init(nullptr, nullptr);
+#endif
+
+    ::testing::InitGoogleTest(&argc, argv);
+    int result = RUN_ALL_TESTS();
+
+#ifdef ADIOS2_HAVE_MPI
+    MPI_Finalize();
+#endif
+
+    return result;
+}
diff --git a/testing/adios2/xml/config1.xml b/testing/adios2/xml/config1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9afe2d91037b232930a37ad48ad962d88dd27d07
--- /dev/null
+++ b/testing/adios2/xml/config1.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<adios-config>
+    <io name="Test IO 1">
+        <engine type="BPFileWriter">
+            <parameter key="Threads" value="1"/>
+            <parameter key="ProfileUnits" value="Microseconds"/>
+            <parameter key="MaxBufferSize" value="20Mb"/>
+            <parameter key="InitialBufferSize" value="1Mb"/>
+            <parameter key="BufferGrowthFactor" value="2"/>
+        </engine>
+        <transport type="File">
+            <parameter key="Library" value="POSIX"/>
+            <parameter key="ProfileUnits" value="Milliseconds"/>
+        </transport>
+    </io>
+    <io name="Test IO 2">
+        <engine type="BPFileWriter" />
+    </io>
+</adios-config>