diff --git a/README.md b/README.md index 6000aa24..6dfa49cb 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ # Welcome to WSO2 IoT Server - - +
+ - Java8 WSO2 IoT Server is a complete solution that enables device manufacturers and enterprises to connect and manage their devices, build apps, manage events, secure devices and data, and visualize sensor data in a scalable manner. diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AndroidDeviceManagementAPIJmeterTestCase.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AndroidDeviceManagementAPIJmeterTestCase.java index 205b5382..f69f1edb 100644 --- a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AndroidDeviceManagementAPIJmeterTestCase.java +++ b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AndroidDeviceManagementAPIJmeterTestCase.java @@ -33,7 +33,8 @@ import java.net.URL; */ public class AndroidDeviceManagementAPIJmeterTestCase { private static Log log = LogFactory.getLog(AndroidDeviceManagementAPIJmeterTestCase.class); - @Test() + + @Test(description = "Testing the response when sending different input parameters with different values") public void permutationTest() throws AutomationFrameworkException { URL url = Thread.currentThread().getContextClassLoader().getResource( "jmeter-scripts" + File.separator + "AndroidDeviceManagementAPIAdditionalPermutations.jmx"); @@ -43,7 +44,7 @@ public class AndroidDeviceManagementAPIJmeterTestCase { manager.runTest(script); } - @Test(dependsOnMethods = {"permutationTest"}) + @Test(description = "Testing the basic android device management API calls", dependsOnMethods = {"permutationTest"}) public void listServices() throws AutomationFrameworkException { URL url = Thread.currentThread().getContextClassLoader() .getResource("jmeter-scripts" + File.separator + "NewAndroidDeviceManagementAPI.jmx"); diff --git a/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AppManagerJmeterTestCase.java b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AppManagerJmeterTestCase.java new file mode 100644 index 00000000..6a729d59 --- /dev/null +++ b/modules/integration/tests-integration/src/test/java/org/wso2/iot/integration/jmeter/AppManagerJmeterTestCase.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. + * + * WSO2 Inc. 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. + */ + +package org.wso2.iot.integration.jmeter; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.testng.annotations.Test; +import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException; +import org.wso2.carbon.automation.extensions.jmeter.JMeterTest; +import org.wso2.carbon.automation.extensions.jmeter.JMeterTestManager; + +import java.io.File; +import java.net.URL; + +/** + * This test case tests the functionality of the app publisher-store functionality. + */ +public class AppManagerJmeterTestCase { + private static Log log = LogFactory.getLog(AppManagerJmeterTestCase.class); + + @Test(description = "This test case tests the flow of App Manager mobile-app creation and lifecycle") + public void GroupManagementTest() throws AutomationFrameworkException { + URL url = Thread.currentThread().getContextClassLoader() + .getResource("jmeter-scripts" + File.separator + "AppManagerTest.jmx"); + JMeterTest script = new JMeterTest(new File(url.getPath())); + JMeterTestManager manager = new JMeterTestManager(); + log.info("Running app manager mobile creation related test cases using jmeter scripts"); + manager.runTest(script); + } +} diff --git a/modules/integration/tests-integration/src/test/resources/jmeter-scripts/AppManagerTest.jmx b/modules/integration/tests-integration/src/test/resources/jmeter-scripts/AppManagerTest.jmx new file mode 100644 index 00000000..8d937ed7 --- /dev/null +++ b/modules/integration/tests-integration/src/test/resources/jmeter-scripts/AppManagerTest.jmx @@ -0,0 +1,2255 @@ + + + + + + false + true + + + + + + + + + + server + localhost + = + + + port + 9443 + = + + + username + admin + = + + + password + admin + = + + + mobile-app + fakemobileapp1 + = + + + invalid-mobile-app + invalid_mobile_app + = + + + tenant_user_name + admin + Name of Tenant + = + + + domain_name + wso2.com + Name of Domain + = + + + password + admin + Password + = + + + email + abc@wso2.com + Email + = + + + firstName + firstName + First Name + = + + + lastName + lastName + Last Name + = + + + usagePlan + Demo + Usage Plan + = + + + createdDate + 2013-02-22T08:22:35+05:30 + Created Date + = + + + + + + continue + + false + 1 + + 1 + + 1342532280000 + 1342532280000 + false + + + + + + + false + rfc2109 + + + + + + + https://${server}:${port}/services/AuthenticationAdmin.AuthenticationAdminHttpsSoap11Endpoint/ + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://authentication.services.core.carbon.wso2.org"> + <soapenv:Header/> + <soapenv:Body> + <aut:login> + <!--Optional:--> + <aut:username>admin</aut:username> + <!--Optional:--> + <aut:password>admin</aut:password> + <!--Optional:--> + <aut:remoteAddress>127.0.0.1</aut:remoteAddress> + </aut:login> + </soapenv:Body> +</soapenv:Envelope> + + urn:login + true + false + + + + + + + https://${server}:${port}/services/TenantMgtAdminService.TenantMgtAdminServiceHttpsSoap11Endpoint/ + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.mgt.tenant.carbon.wso2.org"> + <soapenv:Header/> + <soapenv:Body> + <ser:getTenant> + <!--Optional:--> + <ser:tenantDomain>${domain_name}</ser:tenantDomain> + </ser:getTenant> + </soapenv:Body> +</soapenv:Envelope> + + urn:getTenant + true + false + + + + undefined + tenant_exists + //*[local-name()='active']/text() + false + false + true + tenant_exists + + + + false + true + true + false + + + + + ${tenant_exists}==false + false + + + + + + + https://${server}:${port}/services/TenantMgtAdminService.TenantMgtAdminServiceHttpsSoap11Endpoint/ + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.mgt.tenant.carbon.wso2.org" xmlns:xsd="http://beans.common.stratos.carbon.wso2.org/xsd"> + <soapenv:Header/> + <soapenv:Body> + <ser:addTenant> + <!--Optional:--> + <ser:tenantInfoBean> + <!--Optional:--> + <xsd:active>1</xsd:active> + <!--Optional:--> + <xsd:admin>${tenant_user_name}</xsd:admin> + <!--Optional:--> + <xsd:adminPassword>${password}</xsd:adminPassword> + <!--Optional:--> + <xsd:createdDate>${createdDate}</xsd:createdDate> + <!--Optional:--> + <xsd:email>${email}</xsd:email> + <!--Optional:--> + <xsd:firstname>${firstName}</xsd:firstname> + <!--Optional:--> + <xsd:lastname>${lastName}</xsd:lastname> + <!--Optional:--> + <xsd:tenantDomain>${domain_name}</xsd:tenantDomain> + <!--Optional:--> + <xsd:tenantId>0</xsd:tenantId> + <!--Optional:--> + <xsd:usagePlan>${usagePlan}</xsd:usagePlan> + </ser:tenantInfoBean> + </ser:addTenant> + </soapenv:Body> +</soapenv:Envelope> + + urn:addTenant + true + false + + + + + + + + https://${server}:${port}/services/AuthenticationAdmin.AuthenticationAdminHttpsSoap11Endpoint/ + <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:aut="http://authentication.services.core.carbon.wso2.org"> + <soapenv:Header/> + <soapenv:Body> + <aut:logout/> + </soapenv:Body> +</soapenv:Envelope> + + urn:logout + true + false + + + + + 202 + + Assertion.response_code + false + 1 + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + true + false + false + false + false + false + 0 + true + + + /home/ace/Desktop/results_multi_user_multi_tenancy.jtl + + + + + continue + + false + 1 + + 1 + 1 + 1443769286000 + 1443769286000 + false + + + + + + false + + + import org.apache.jmeter.services.FileServer; + +String basePath = FileServer.getFileServer().getBaseDir() + File.separator; +vars.put("script-path", basePath); + + + + + + + var encoded = encodeURIComponent('Submit for Review'); +vars.put("encoded", encoded); + javascript + + + + + true + + + + 12 + + 1 + id + # + false + + + + + + + ${server} + ${port} + + + https + + publisher + GET + true + false + true + false + false + + + + + + SAMLRequest + //input[@type='hidden'][@name='SAMLRequest']/@value + false + true + false + + + + + RelayState + //input[@type='hidden'][@name='RelayState']/@value + false + true + false + + + + + SSOAuthSessionID + //input[@type='hidden'][@name='SSOAuthSessionID']/@value + false + true + false + + + + + + + + true + ${RelayState} + = + true + RelayState + + + true + ${SAMLRequest} + = + true + SAMLRequest + + + true + ${SSOAuthSessionID} + = + true + SSOAuthSessionID + + + + ${server} + ${port} + + + https + + samlsso + POST + true + false + true + false + HttpClient4 + false + + + + + + sessionDataKey + //input[@type='hidden'][@name='sessionDataKey']/@value + false + true + false + all + + + + + + + + true + ${RelayState} + = + true + RelayState + + + true + ${SAMLRequest} + = + true + SAMLRequest + + + true + ${SSOAuthSessionID} + = + true + SSOAuthSessionID + + + + ${server} + ${port} + + + https + + samlsso + POST + true + false + true + false + HttpClient4 + false + + + + + + sessionDataKey + //input[@type='hidden'][@name='sessionDataKey']/@value + false + true + false + all + + + + + + + + false + ${RelayState} + = + true + RelayState + + + false + ${sessionDataKey} + = + true + sessionDataKey + + + false + ${username} + = + true + username + + + false + ${password} + = + true + password + + + + ${server} + ${port} + + + https + + commonauth + GET + true + false + true + false + false + + + + + + RelayState1 + //input[@type='hidden'][@name='RelayState']/@value + false + true + false + + + + + SAMLResponse + //input[@type='hidden'][@name='SAMLResponse']/@value + false + true + false + + + + + You are now redirected back to + + Assertion.response_data + false + 16 + + + + + + + + true + ${RelayState1} + = + true + RelayState + + + true + ${SAMLResponse} + = + true + SAMLResponse + + + + ${server} + ${port} + + + https + + publisher/acs + POST + true + false + true + false + false + + + + + + Assertion.response_data + false + 16 + + + + + + + + ${server} + ${port} + + + https + + /publisher/csrf.js + GET + true + false + true + false + false + + + + + + + + ${server} + ${port} + + + https + + /publisher/csrf.js + POST + true + false + true + false + false + + + + + + + FETCH-CSRF-TOKEN + 1 + + + + + + false + X-CSRF-Token + X-CSRF-Token:(.*) + $1$ + no_token + + + + + + + + + ${script-path}test.apk + file + application/vnd.android.package-archive,.apk + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/mobileapp/upload + POST + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + false + response + (?s)(^.*) + $1$ + + 1 + + + + + "package" : "com.apkpure.aegon", "version" : "1.1.10" + + Assertion.response_data + false + 16 + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/mobile/isexist?name=${mobile-app} + GET + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + {"isExist" : false} + + Assertion.response_data + false + 8 + + + + + + + + ${script-path}image.png + bannerFile + image/png + + + ${script-path}image.png + screenshot1File + image/png + + + ${script-path}image.png + iconFile + image/png + + + + + + + true + ${response} + = + true + appmeta + + + false + 1WSO2Mobile + = + true + provider + + + false + enterprise + = + true + markettype + + + false + android + = + true + platform + + + false + ${invalid-mobile-app} + = + true + name + + + false + ${invalid-mobile-app} + = + true + displayName + + + false + ${invalid-mobile-app} + = + true + description + + + false + 1.1.10 + = + true + version + + + false + business + = + true + category + + + false + mobileapp + = + true + mobileapp + + + true + + = + true + visibility + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/asset/mobileapp + POST + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + "Special characters found in name" + + Assertion.response_data + false + 16 + + + + + + + + ${script-path}image.png + bannerFile + image/png + + + ${script-path}image.png + screenshot1File + image/png + + + ${script-path}image.png + iconFile + image/png + + + + + + + true + ${response} + = + true + appmeta + + + false + 1WSO2Mobile + = + true + provider + + + false + enterprise + = + true + markettype + + + false + android + = + true + platform + + + false + ${mobile-app} + = + true + name + + + false + ${mobile-app} + = + true + displayName + + + false + ${mobile-app} + = + true + description + + + false + 1.1.10 + = + true + version + + + false + business + = + true + category + + + false + mobileapp + = + true + mobileapp + + + true + + = + true + visibility + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/asset/mobileapp + POST + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + "ok" : "true", "message" : "Asset created." + + Assertion.response_data + false + 16 + + + + false + id + "id" : "(.*)" + $1$ + + + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/lifecycle/${encoded}/mobileapp/${id} + PUT + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + '${mobile-app}' mobileapp submitted for review successfully + + Assertion.response_data + false + 16 + + + + false + id + "id":"(.*)" + $1$ + + + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/mobile/delete/${id} + DELETE + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/logout + GET + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + false + true + false + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + + + + true + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + + + + + + + + continue + + false + 1 + + 1 + 1 + 1443769286000 + 1443769286000 + false + + + + + + false + + + import org.apache.jmeter.services.FileServer; + +String basePath = FileServer.getFileServer().getBaseDir() + File.separator; +vars.put("script-path", basePath); + + + + + + + var encoded = encodeURIComponent('Submit for Review'); +vars.put("encoded", encoded); + javascript + + + + + true + + + + 12 + + 1 + id + # + false + + + + + + + ${server} + ${port} + + + https + + publisher + GET + true + false + true + false + false + + + + + + SAMLRequest + //input[@type='hidden'][@name='SAMLRequest']/@value + false + true + false + + + + + RelayState + //input[@type='hidden'][@name='RelayState']/@value + false + true + false + + + + + SSOAuthSessionID + //input[@type='hidden'][@name='SSOAuthSessionID']/@value + false + true + false + + + + + + + + true + ${RelayState} + = + true + RelayState + + + true + ${SAMLRequest} + = + true + SAMLRequest + + + true + ${SSOAuthSessionID} + = + true + SSOAuthSessionID + + + + ${server} + ${port} + + + https + + samlsso + POST + true + false + true + false + HttpClient4 + false + + + + + + sessionDataKey + //input[@type='hidden'][@name='sessionDataKey']/@value + false + true + false + all + + + + + + + + false + ${RelayState} + = + true + RelayState + + + false + ${sessionDataKey} + = + true + sessionDataKey + + + false + ${username}@${domain_name} + = + true + username + + + false + ${password} + = + true + password + + + + ${server} + ${port} + + + https + + commonauth + GET + true + false + true + false + false + + + + + + RelayState1 + //input[@type='hidden'][@name='RelayState']/@value + false + true + false + + + + + SAMLResponse + //input[@type='hidden'][@name='SAMLResponse']/@value + false + true + false + + + + + You are now redirected back to + + Assertion.response_data + false + 16 + + + + + + + + true + ${RelayState1} + = + true + RelayState + + + true + ${SAMLResponse} + = + true + SAMLResponse + + + + ${server} + ${port} + + + https + + publisher/acs + POST + true + false + true + false + false + + + + + + Assertion.response_data + false + 16 + + + + + + + + ${server} + ${port} + + + https + + /publisher/csrf.js + GET + true + false + true + false + false + + + + + + + + ${server} + ${port} + + + https + + /publisher/csrf.js + POST + true + false + true + false + false + + + + + + + FETCH-CSRF-TOKEN + 1 + + + + + + false + X-CSRF-Token + X-CSRF-Token:(.*) + $1$ + no_token + + + + + + + + + ${script-path}test.apk + file + application/vnd.android.package-archive,.apk + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/mobileapp/upload + POST + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + false + response + (?s)(^.*) + $1$ + + 1 + + + + + "package" : "com.apkpure.aegon", "version" : "1.1.10" + + Assertion.response_data + false + 16 + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/mobile/isexist?name=${mobile-app} + GET + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + {"isExist" : false} + + Assertion.response_data + false + 8 + + + + + + + + ${script-path}image.png + bannerFile + image/png + + + ${script-path}image.png + screenshot1File + image/png + + + ${script-path}image.png + iconFile + image/png + + + + + + + true + ${response} + = + true + appmeta + + + false + 1WSO2Mobile + = + true + provider + + + false + enterprise + = + true + markettype + + + false + android + = + true + platform + + + false + ${invalid-mobile-app} + = + true + name + + + false + ${invalid-mobile-app} + = + true + displayName + + + false + ${invalid-mobile-app} + = + true + description + + + false + 1.1.10 + = + true + version + + + false + business + = + true + category + + + false + mobileapp + = + true + mobileapp + + + true + + = + true + visibility + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/asset/mobileapp + POST + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + "Special characters found in name" + + Assertion.response_data + false + 16 + + + + + + + + ${script-path}image.png + bannerFile + image/png + + + ${script-path}image.png + screenshot1File + image/png + + + ${script-path}image.png + iconFile + image/png + + + + + + + true + ${response} + = + true + appmeta + + + false + 1WSO2Mobile + = + true + provider + + + false + enterprise + = + true + markettype + + + false + android + = + true + platform + + + false + ${mobile-app} + = + true + name + + + false + ${mobile-app} + = + true + displayName + + + false + ${mobile-app} + = + true + description + + + false + 1.1.10 + = + true + version + + + false + business + = + true + category + + + false + mobileapp + = + true + mobileapp + + + true + + = + true + visibility + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/asset/mobileapp + POST + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + "ok" : "true", "message" : "Asset created." + + Assertion.response_data + false + 16 + + + + false + id + "id" : "(.*)" + $1$ + + + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/lifecycle/${encoded}/mobileapp/${id} + PUT + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + '${mobile-app}' mobileapp submitted for review successfully + + Assertion.response_data + false + 16 + + + + false + id + "id":"(.*)" + $1$ + + + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/api/mobile/delete/${id} + DELETE + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + + + + ${server} + ${port} + + + https + UTF-8 + publisher/logout + GET + true + false + true + true + false + + + + + + + X-CSRF-Token + ${X-CSRF-Token} + + + X-Requested-With + XmlHttpRequest + + + + + + + false + true + false + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + + + + true + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + + + + + + + + app_manager + true + false + false + false + + + + + diff --git a/modules/integration/tests-integration/src/test/resources/jmeter-scripts/image.png b/modules/integration/tests-integration/src/test/resources/jmeter-scripts/image.png new file mode 100644 index 00000000..df25ec4e Binary files /dev/null and b/modules/integration/tests-integration/src/test/resources/jmeter-scripts/image.png differ diff --git a/modules/integration/tests-integration/src/test/resources/jmeter-scripts/test.apk b/modules/integration/tests-integration/src/test/resources/jmeter-scripts/test.apk new file mode 100644 index 00000000..541d1630 Binary files /dev/null and b/modules/integration/tests-integration/src/test/resources/jmeter-scripts/test.apk differ diff --git a/modules/integration/tests-integration/src/test/resources/testng.xml b/modules/integration/tests-integration/src/test/resources/testng.xml index 299b8669..bdc46f60 100644 --- a/modules/integration/tests-integration/src/test/resources/testng.xml +++ b/modules/integration/tests-integration/src/test/resources/testng.xml @@ -58,51 +58,12 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -123,6 +84,11 @@ + + + + + diff --git a/pom.xml b/pom.xml index 3840b3d5..e8db1455 100644 --- a/pom.xml +++ b/pom.xml @@ -1513,7 +1513,7 @@ - 2.0.58 + 2.0.59 [2.0.0, 3.0.0)