diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml
index 51d8f9babea..f8c274ed3d0 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.annotations/pom.xml
@@ -22,13 +22,13 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.annotations
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - API Management Annotations
WSO2 Carbon - API Management Custom Annotation Module
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml
index 49a00f49e86..19826ffdf83 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.api/pom.xml
@@ -21,12 +21,12 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
org.wso2.carbon.apimgt.application.extension.api
war
WSO2 Carbon - API Application Management API
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml
index b9a88577b45..d0152c179fd 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.application.extension/pom.xml
@@ -22,12 +22,12 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
org.wso2.carbon.apimgt.application.extension
bundle
WSO2 Carbon - API Application Management
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml
index 729a51c7af9..5f93ad9f4c1 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/pom.xml
@@ -21,13 +21,13 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.handlers
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - API Security Handler Component
WSO2 Carbon - API Management Security Handler Module
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.client/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.client/pom.xml
index ef774699e8b..4409ee82ee1 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.client/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.client/pom.xml
@@ -13,13 +13,13 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.client
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - API Management Integration Client
WSO2 Carbon - API Management Integration Client
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.generated.client/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.generated.client/pom.xml
index 671a40050fd..c66e82883b2 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.generated.client/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.integration.generated.client/pom.xml
@@ -13,13 +13,13 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.generated.client
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - API Management Integration Generated Client
WSO2 Carbon - API Management Integration Client
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml
index f27a796a9c7..2e139f028bf 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/pom.xml
@@ -22,13 +22,13 @@
apimgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.webapp.publisher
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - API Management Webapp Publisher
WSO2 Carbon - API Management Webapp Publisher
diff --git a/components/apimgt-extensions/pom.xml b/components/apimgt-extensions/pom.xml
index 2c8ce4aede9..aa51092065d 100644
--- a/components/apimgt-extensions/pom.xml
+++ b/components/apimgt-extensions/pom.xml
@@ -22,13 +22,13 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
apimgt-extensions
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - API Management Extensions Component
http://wso2.org
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml
index 56f628685c2..0464a0276ae 100644
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.api/pom.xml
@@ -22,7 +22,7 @@
certificate-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml
index b3180772e70..5c4621db4d7 100644
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api/pom.xml
@@ -22,7 +22,7 @@
certificate-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml
index 072b20fe968..12a600bcc92 100644
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/pom.xml
@@ -21,13 +21,13 @@
org.wso2.carbon.devicemgt
certificate-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.certificate.mgt.core
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Certificate Management Core
WSO2 Carbon - Certificate Management Core
@@ -162,6 +162,21 @@
org.testng
testng
+
+ com.h2database.wso2
+ h2-database-engine
+ test
+
+
+ org.powermock
+ powermock-api-mockito
+ test
+
+
+ org.powermock
+ powermock-module-testng
+ test
+
org.wso2.carbon
org.wso2.carbon.logging
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java
index 5c82ea83a3d..10e70a5baa4 100644
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/main/java/org/wso2/carbon/certificate/mgt/core/dao/CertificateManagementDAOFactory.java
@@ -115,7 +115,7 @@ public class CertificateManagementDAOFactory {
currentTxState.set(TxState.CONNECTION_BORROWED);
}
- public static void openConnection() throws SQLException {
+ public static void openConnection() throws SQLException {
Connection conn = currentConnection.get();
if (conn != null) {
throw new IllegalTransactionStateException("A transaction is already active within the context of " +
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java
new file mode 100644
index 00000000000..38a16a7fa07
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/BaseDeviceManagementCertificateTest.java
@@ -0,0 +1,133 @@
+/*
+ * 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.carbon.certificate.mgt.core.common;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tomcat.jdbc.pool.PoolProperties;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.BeforeSuite;
+import org.w3c.dom.Document;
+import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.certificate.mgt.core.util.TestUtils;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
+
+import javax.sql.DataSource;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+import java.io.File;
+import java.sql.Connection;
+import java.sql.Statement;
+
+
+public abstract class BaseDeviceManagementCertificateTest {
+ private DataSource dataSource;
+ private static final Log log = LogFactory.getLog(BaseDeviceManagementCertificateTest.class);
+ private static final String DATASOURCE_LOCATION = "src/test/resources/data-source-config.xml";
+
+ @BeforeSuite
+ public void setupDataSource() throws Exception {
+ this.initDataSource();
+ this.initSQLScript();
+ initializeCarbonContext();
+ }
+
+ public void initDataSource() throws Exception {
+ this.dataSource = this.getDataSource(this.readDataSourceConfig());
+ DeviceManagementDAOFactory.init(dataSource);
+ GroupManagementDAOFactory.init(dataSource);
+ }
+
+ public void initDataSource(DataSource ds) throws Exception {
+ this.dataSource = ds;
+ DeviceManagementDAOFactory.init(dataSource);
+ GroupManagementDAOFactory.init(dataSource);
+ }
+
+ @BeforeClass
+ public abstract void init() throws Exception;
+
+ private DataSource getDataSource(DataSourceConfig config) {
+ PoolProperties properties = new PoolProperties();
+ properties.setUrl(config.getUrl());
+ properties.setDriverClassName(config.getDriverClassName());
+ properties.setUsername(config.getUser());
+ properties.setPassword(config.getPassword());
+ return new org.apache.tomcat.jdbc.pool.DataSource(properties);
+ }
+
+ private DataSourceConfig readDataSourceConfig() throws DeviceManagementException {
+ try {
+ File file = new File(DATASOURCE_LOCATION);
+ Document doc = DeviceManagerUtil.convertToDocument(file);
+ JAXBContext testDBContext = JAXBContext.newInstance(DataSourceConfig.class);
+ Unmarshaller unmarshaller = testDBContext.createUnmarshaller();
+ return (DataSourceConfig) unmarshaller.unmarshal(doc);
+ } catch (JAXBException e) {
+ throw new DeviceManagementException("Error occurred while reading data source configuration", e);
+ }
+ }
+
+ private void initSQLScript() throws Exception {
+ Connection conn = null;
+ Statement stmt = null;
+ try {
+ conn = this.getDataSource().getConnection();
+ stmt = conn.createStatement();
+ stmt.executeUpdate("RUNSCRIPT FROM './src/test/resources/sql/h2.sql'");
+ } finally {
+ TestUtils.cleanupResources(conn, stmt, null);
+ }
+ }
+
+ private void initializeCarbonContext() {
+
+ if (System.getProperty("carbon.home") == null) {
+ File file = new File("src/test/resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../../../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ }
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants
+ .SUPER_TENANT_DOMAIN_NAME);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+ }
+
+ public DataSource getDataSource() {
+ return dataSource;
+ }
+
+}
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java
new file mode 100644
index 00000000000..f3154d3bdc8
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/common/DataSourceConfig.java
@@ -0,0 +1,80 @@
+/*
+ * 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.carbon.certificate.mgt.core.common;
+
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlRootElement;
+
+/**
+ * Model class for DataSourceConfig.
+ */
+@XmlRootElement(name = "DataSourceConfig")
+public class DataSourceConfig {
+
+ private String url;
+ private String driverClassName;
+ private String user;
+ private String password;
+
+ @Override
+ public String toString() {
+ return "DataSourceConfig[" +
+ " Url ='" + url + '\'' +
+ ", DriverClassName ='" + driverClassName + '\'' +
+ ", UserName ='" + user + '\'' +
+ ", Password ='" + password + '\'' +
+ "]";
+ }
+
+ @XmlElement(name = "Url", nillable = false)
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ @XmlElement(name = "DriverClassName", nillable = false)
+ public String getDriverClassName() {
+ return driverClassName;
+ }
+
+ public void setDriverClassName(String driverClassName) {
+ this.driverClassName = driverClassName;
+ }
+
+ @XmlElement(name = "User", nillable = false)
+ public String getUser() {
+ return user;
+ }
+
+ public void setUser(String user) {
+ this.user = user;
+ }
+
+ @XmlElement(name = "Password", nillable = false)
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+}
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java
new file mode 100644
index 00000000000..a7e0629e5d2
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/impl/CertificateManagementServiceImplTests.java
@@ -0,0 +1,334 @@
+/*
+ * 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.carbon.certificate.mgt.core.impl;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.bouncycastle.cert.jcajce.JcaCertStore;
+import org.bouncycastle.cms.CMSAbsentContent;
+import org.bouncycastle.cms.CMSException;
+import org.bouncycastle.cms.CMSSignedData;
+import org.bouncycastle.cms.CMSSignedDataGenerator;
+import org.bouncycastle.pkcs.PKCS10CertificationRequest;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.certificate.mgt.core.common.BaseDeviceManagementCertificateTest;
+import org.wso2.carbon.certificate.mgt.core.dao.CertificateManagementDAOFactory;
+import org.wso2.carbon.certificate.mgt.core.dto.CAStatus;
+import org.wso2.carbon.certificate.mgt.core.dto.CertificateResponse;
+import org.wso2.carbon.certificate.mgt.core.dto.SCEPResponse;
+import org.wso2.carbon.certificate.mgt.core.exception.CertificateManagementException;
+import org.wso2.carbon.certificate.mgt.core.exception.KeystoreException;
+import org.wso2.carbon.certificate.mgt.core.service.CertificateManagementServiceImpl;
+import org.wso2.carbon.certificate.mgt.core.service.PaginationResult;
+import org.wso2.carbon.certificate.mgt.core.util.CSRGenerator;
+import org.wso2.carbon.certificate.mgt.core.util.CertificateManagementConstants;
+import org.wso2.carbon.certificate.mgt.core.util.DummyCertificate;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import sun.misc.BASE64Encoder;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.security.KeyPair;
+import java.security.PrivateKey;
+import java.security.Security;
+import java.security.cert.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Test cases for for CertificateManagementServiceImpl class methods.
+ *
+ */
+public class CertificateManagementServiceImplTests extends BaseDeviceManagementCertificateTest {
+
+ private static Log log = LogFactory.getLog(CertificateManagementServiceImplTests.class);
+ private static final String CA_CERT_PEM = "src/test/resources/ca_cert.pem";
+ private static final String RA_CERT_PEM = "src/test/resources/ra_cert.pem";
+ private CertificateManagementServiceImpl managementService;
+
+ @BeforeClass
+ public void init() throws Exception {
+ initDataSource();
+ CertificateManagementDAOFactory.init(this.getDataSource());
+ //set Bouncycastle as a provider for testing
+ Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
+ //save certificatemanagementservice instance as class variable
+ managementService = CertificateManagementServiceImpl.getInstance();
+ Assert.assertNotNull(managementService);
+ log.info("getInstance Test Successful");
+ }
+
+ @Test(description = "This test case tests retrieval of CA Certificate from the keystore")
+ public void testGetCACertificate() throws KeystoreException {
+ CertificateManagementServiceImpl instance = CertificateManagementServiceImpl.getInstance();
+ Certificate caCertificate = instance.getCACertificate();
+ Assert.assertNotNull(caCertificate);
+ Assert.assertEquals(caCertificate.getType(), CertificateManagementConstants.X_509);
+ log.info("GetCACertificate Test Successful");
+ }
+
+ @Test(description = "This test case tests retrieval of RA Certificate from the keystore")
+ public void testGetRACertificate() throws KeystoreException {
+ Certificate raCertificate = managementService.getRACertificate();
+ Assert.assertNotNull(raCertificate);
+ Assert.assertEquals(raCertificate.getType(), CertificateManagementConstants.X_509);
+ log.info("GetRACertificate Test Successful");
+ }
+
+ @Test(description = "This test case test generation of root certificates")
+ public void testGetRootCertificate() throws IOException, KeystoreException {
+ File caCert = new File(CA_CERT_PEM);
+ File raCert = new File(RA_CERT_PEM);
+ //read file to byte arrays
+ byte[] caBytes = FileUtils.readFileToByteArray(caCert);
+ byte[] raBytes = FileUtils.readFileToByteArray(raCert);
+ List rootCertificates = managementService.getRootCertificates(caBytes, raBytes);
+ Assert.assertNotNull(rootCertificates);
+ Assert.assertEquals(rootCertificates.get(0).getType(), CertificateManagementConstants.X_509);
+ Assert.assertEquals(rootCertificates.get(1).getType(), CertificateManagementConstants.X_509);
+ log.info("GetRootCertificate Test Successful");
+ }
+
+ @Test(description = "This test case tests generation of X509Certificate")
+ public void testGenerateX509Certificate() throws KeystoreException {
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ Assert.assertNotNull(x509Certificate);
+ Assert.assertEquals(x509Certificate.getType(), CertificateManagementConstants.X_509);
+ log.info("GenerateX509Certificate Test Successful");
+ }
+
+ @Test(description = "This test case tests retrieving SCEP CA Certificate")
+ public void testGetCACertSCEP() throws KeystoreException {
+ SCEPResponse caCertSCEP = managementService.getCACertSCEP();
+ Assert.assertNotNull(caCertSCEP);
+ Assert.assertEquals(caCertSCEP.getResultCriteria(), CAStatus.CA_RA_CERT_RECEIVED);
+ log.info("GetCACertSCEP Test Successful");
+ }
+
+ @Test
+ public void testGetCACapsSCEP() {
+ byte[] caCapsSCEP = managementService.getCACapsSCEP();
+ Assert.assertNotNull(caCapsSCEP);
+ Assert.assertEquals(caCapsSCEP, CertificateManagementConstants.POST_BODY_CA_CAPS.getBytes());
+ log.info("GetCACapsSCEP Test Successful");
+ }
+
+ @Test(description = "This test case tests generation of a X509Certificate from a CSR")
+ public void testGenerateCertificateFromCSR() throws KeystoreException, IOException {
+ CSRGenerator csrGeneration = new CSRGenerator();
+ KeyStoreReader keyStoreReader = new KeyStoreReader();
+ // Generate key pair
+ KeyPair keyPair = csrGeneration.generateKeyPair("RSA", 1024);
+ byte[] csrData = csrGeneration.generateCSR("SHA256WithRSA", keyPair);
+ PKCS10CertificationRequest certificationRequest;
+ PrivateKey privateKeyCA = keyStoreReader.getCAPrivateKey();
+ X509Certificate certCA = (X509Certificate) keyStoreReader.getCACertificate();
+ certificationRequest = new PKCS10CertificationRequest(csrData);
+ X509Certificate x509Certificate = managementService.generateCertificateFromCSR(privateKeyCA,
+ certificationRequest, certCA.getIssuerX500Principal().getName());
+ Assert.assertNotNull(x509Certificate);
+ Assert.assertEquals(x509Certificate.getType(), CertificateManagementConstants.X_509);
+ log.info("GenerateCertificateFromCSR Test Successful");
+ }
+
+ @Test(description = "This test case tests retrieval of a Certificate from the keystore from the Serial Number")
+ public void testGetCertificateBySerial() throws KeystoreException, DeviceManagementException {
+ X509Certificate x509Certificate = null;
+ //generate and save a certificate
+ x509Certificate = managementService.generateX509Certificate();
+ //initialize DeviceConfigurationManager
+ DeviceConfigurationManager.getInstance().initConfig();
+ CertificateResponse certificateBySerial = managementService.getCertificateBySerial(x509Certificate.getSerialNumber().toString());
+ Assert.assertNotNull(certificateBySerial);
+ Assert.assertEquals(certificateBySerial.getSerialNumber(), x509Certificate.getSerialNumber().toString());
+ log.info("GetCertificateBySerial Test Successful");
+ }
+
+ @Test(description = "This test case tests retrieval of a Certificate from the keystore from the Alias")
+ public void testGetCertificateByAlias() throws KeystoreException, DeviceManagementException {
+ X509Certificate x509Certificate = null;
+ //generate and save a certificate
+ x509Certificate = managementService.generateX509Certificate();
+ //initialize DeviceConfigurationManager
+ DeviceConfigurationManager.getInstance().initConfig();
+ Certificate certificateByAlias = managementService.getCertificateByAlias(x509Certificate.getSerialNumber().toString());
+ Assert.assertNotNull(certificateByAlias);
+ Assert.assertEquals(certificateByAlias.getType(), CertificateManagementConstants.X_509);
+ log.info("GetCertificateByAlias Test Successful");
+ }
+
+ @Test(description = "This test case tests Signature verification of a Certificate against the keystore")
+ public void testVerifySignature() throws KeystoreException, CertificateEncodingException, CMSException, IOException {
+ BASE64Encoder encoder = new BASE64Encoder();
+ //generate and save a certificate in the keystore
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ //Generate CMSdata
+ CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
+ List list = new ArrayList<>();
+ list.add(x509Certificate);
+ JcaCertStore store = new JcaCertStore(list);
+ generator.addCertificates(store);
+ CMSSignedData degenerateSd = generator.generate(new CMSAbsentContent());
+ byte[] signature = degenerateSd.getEncoded();
+ boolean verifySignature = managementService.verifySignature(encoder.encode(signature));
+ Assert.assertNotNull(verifySignature);
+ Assert.assertTrue(verifySignature);
+ log.info("VerifySignature Test Successful");
+ }
+
+ @Test(description = "This test case tests DN verification of a Certificate against the keystore")
+ public void testVerifySubjectDN() throws DeviceManagementException, KeystoreException {
+ DeviceConfigurationManager.getInstance().initConfig();
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ log.info(x509Certificate.getIssuerX500Principal().getName());
+ managementService.verifySubjectDN(x509Certificate.getIssuerDN().getName());
+ }
+
+ @Test(description = "This test case tests retrieval of a Certificate from the keystore from the Serial")
+ public void testRetrieveCertificate() throws KeystoreException, CertificateManagementException {
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ CertificateResponse certificateResponse = managementService.retrieveCertificate(x509Certificate.getSerialNumber().toString());
+ Assert.assertNotNull(certificateResponse);
+ Assert.assertEquals(x509Certificate.getSerialNumber(), certificateResponse.getCertificateserial());
+ }
+
+ @Test(description = "This test case tests the retrieval of Certificates from keystore in desired pagination")
+ public void testGetAllCertificatesPaginated() throws CertificateManagementException, KeystoreException {
+ managementService.generateX509Certificate();
+ managementService.generateX509Certificate();
+ PaginationResult allCertificates = managementService.getAllCertificates(0, 2);
+ Assert.assertEquals(allCertificates.getData().size(), 2);
+ log.info("GetAllCertificatesPaginated Test Successful");
+ }
+
+ @Test(description = "This test casae tests retrieval of all Certificates from keystore")
+ public void testGetCertificates() throws CertificateManagementException, KeystoreException {
+ List certificatesBefore = managementService.getCertificates();
+ managementService.generateX509Certificate();
+ managementService.generateX509Certificate();
+ List certificatesAfter = managementService.getCertificates();
+ Assert.assertNotNull(certificatesBefore);
+ Assert.assertNotNull(certificatesAfter);
+ Assert.assertEquals((certificatesBefore.size() + 2), certificatesAfter.size());
+ log.info("GetCertificates Test Successful");
+ }
+
+ @Test(description = "This test case tests deleting Certificate from the keystore")
+ public void testRemoveCertificate() throws CertificateManagementException, KeystoreException {
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ List certificates = managementService.getCertificates();
+ int size = certificates.size();
+ boolean removed = managementService.removeCertificate(x509Certificate.getSerialNumber().toString());
+ certificates = managementService.getCertificates();
+ int sizeAfter = certificates.size();
+ Assert.assertNotNull(removed);
+ Assert.assertTrue(removed);
+ Assert.assertEquals((size - 1), sizeAfter);
+ log.info("RemoveCertificate Test Successful");
+ }
+
+
+ @Test(description = "This test case tests searching for a list of certificates by the serial number")
+ public void testSearchCertificates() throws CertificateManagementException, KeystoreException {
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ List certificateResponses = managementService.searchCertificates(x509Certificate.getSerialNumber().toString());
+ Assert.assertNotNull(certificateResponses);
+ Assert.assertEquals(1, certificateResponses.size());
+ Assert.assertEquals(certificateResponses.get(0).getSerialNumber(), x509Certificate.getSerialNumber().toString());
+ log.info("SearchCertificates Test Successful");
+ }
+
+ @Test(description = "This test case tests generation of signed Certificate from a CSR")
+ public void testGetSignedCertificateFromCSR() throws KeystoreException {
+ CSRGenerator csrGeneration = new CSRGenerator();
+ BASE64Encoder encoder = new BASE64Encoder();
+ // Generate key pair
+ KeyPair keyPair = csrGeneration.generateKeyPair("RSA", 1024);
+ byte[] csrData = csrGeneration.generateCSR("SHA256WithRSA", keyPair);
+ X509Certificate signedCertificateFromCSR = managementService.getSignedCertificateFromCSR(encoder.encode(csrData));
+ Assert.assertNotNull(signedCertificateFromCSR);
+ Assert.assertEquals(signedCertificateFromCSR.getType(), CertificateManagementConstants.X_509);
+ log.info("GetSignedCertificateFromCSR Test Successful");
+ }
+
+ @Test(description = "This test case tests the extraction of Challenge token from a Certificate")
+ public void testExtractChallengeToken() throws KeystoreException {
+ X509Certificate x509Certificate1 = new DummyCertificate();
+ String token = managementService.extractChallengeToken(x509Certificate1);
+ Assert.assertNotNull(token);
+ Assert.assertEquals(token, DummyCertificate.EXT);
+ log.info("extractChallengeToken Test Successful");
+ }
+
+ @Test(description = "This test case tests saving a list of Certificates in the keystore")
+ public void testSaveCertificate() throws CertificateManagementException, IOException, CertificateException, KeystoreException {
+ File caCert = new File(CA_CERT_PEM);
+ int before = managementService.getCertificates().size();
+ byte[] caBytes = FileUtils.readFileToByteArray(caCert);
+ CertificateFactory cf = CertificateFactory.getInstance("X.509");
+ X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(caBytes));
+ List certificates = new ArrayList<>();
+ org.wso2.carbon.certificate.mgt.core.bean.Certificate certificateToStore =
+ new org.wso2.carbon.certificate.mgt.core.bean.Certificate();
+ certificateToStore.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId());
+ certificateToStore.setCertificate(cert);
+ certificates.add(certificateToStore);
+ managementService.saveCertificate(certificates);
+ int after = managementService.getCertificates().size();
+ Assert.assertEquals((before + 1), after);
+ log.info("SaveCertificate Test Successful");
+ }
+
+ @Test(description = "This test case tests converting a pem file to X509 Certificate")
+ public void testPemToX509Certificate() throws IOException, KeystoreException {
+ File caCert = new File(CA_CERT_PEM);
+ BASE64Encoder encoder = new BASE64Encoder();
+ byte[] caBytes = FileUtils.readFileToByteArray(caCert);
+ X509Certificate certificate = managementService.pemToX509Certificate(encoder.encode(caBytes));
+ Assert.assertNotNull(certificate);
+ Assert.assertEquals(certificate.getType(), CertificateManagementConstants.X_509);
+ log.info("PemToX509Certificate Test Successful");
+ }
+
+ @Test(description = "This test case tests extracting Certificate from the header Signature")
+ public void testExtractCertificateFromSignature() throws KeystoreException, CertificateEncodingException, CMSException, IOException {
+ BASE64Encoder encoder = new BASE64Encoder();
+ //generate and save a certificate in the keystore
+ X509Certificate x509Certificate = managementService.generateX509Certificate();
+ //Generate CMSdata
+ CMSSignedDataGenerator generator = new CMSSignedDataGenerator();
+ List list = new ArrayList<>();
+ list.add(x509Certificate);
+ JcaCertStore store = new JcaCertStore(list);
+ generator.addCertificates(store);
+ CMSSignedData degenerateSd = generator.generate(new CMSAbsentContent());
+ byte[] signature = degenerateSd.getEncoded();
+ X509Certificate certificate = managementService.extractCertificateFromSignature(encoder.encode(signature));
+ Assert.assertNotNull(certificate);
+ Assert.assertEquals(certificate.getType(), CertificateManagementConstants.X_509);
+ log.info("ExtractCertificateFromSignature Test Successful");
+ }
+
+
+}
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java
new file mode 100644
index 00000000000..5fa4f7dabd4
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/CSRGenerator.java
@@ -0,0 +1,87 @@
+/*
+ * 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.carbon.certificate.mgt.core.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.bouncycastle.operator.ContentSigner;
+import org.bouncycastle.operator.OperatorCreationException;
+import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
+import org.bouncycastle.pkcs.PKCS10CertificationRequest;
+import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder;
+import org.bouncycastle.pkcs.jcajce.JcaPKCS10CertificationRequestBuilder;
+
+import javax.security.auth.x500.X500Principal;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * Test class for generating a mock CSR request.
+ */
+public class CSRGenerator {
+ private static Log log = LogFactory.getLog(CSRGenerator.class);
+
+ /**
+ * Generate the desired CSR for signing
+ *
+ * @param sigAlg
+ * @param keyPair
+ * @return
+ */
+ public byte[] generateCSR(String sigAlg, KeyPair keyPair) {
+ ByteArrayOutputStream outStream = new ByteArrayOutputStream();
+ PrintStream printStream = new PrintStream(outStream);
+ try {
+ PKCS10CertificationRequestBuilder p10Builder = new JcaPKCS10CertificationRequestBuilder(
+ new X500Principal("CN=Requested Test Certificate"), keyPair.getPublic());
+ JcaContentSignerBuilder csBuilder = new JcaContentSignerBuilder("SHA256withRSA");
+ ContentSigner signer = csBuilder.build(keyPair.getPrivate());
+ PKCS10CertificationRequest csr = p10Builder.build(signer);
+ return csr.getEncoded();
+ } catch (OperatorCreationException ex) {
+ log.error("Error while Key generation operation", ex);
+ } catch (IOException ex) {
+ log.error("Error while generating CSR,ex");
+ }
+ return new byte[0];
+ }
+
+ /**
+ * Generate the desired keypair
+ *
+ * @param alg
+ * @param keySize
+ * @return
+ */
+ public KeyPair generateKeyPair(String alg, int keySize) {
+ try {
+ KeyPairGenerator keyPairGenerator = null;
+ keyPairGenerator = KeyPairGenerator.getInstance(alg);
+ keyPairGenerator.initialize(keySize);
+ return keyPairGenerator.generateKeyPair();
+ } catch (NoSuchAlgorithmException e) {
+ log.error("The provided algorithm is not found ",e);
+ }
+ return null;
+ }
+}
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java
new file mode 100644
index 00000000000..f276df46256
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/DummyCertificate.java
@@ -0,0 +1,180 @@
+/*
+ * 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.carbon.certificate.mgt.core.util;
+
+import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
+
+import java.math.BigInteger;
+import java.security.Principal;
+import java.security.PublicKey;
+import java.security.cert.CertificateEncodingException;
+import java.security.cert.CertificateExpiredException;
+import java.security.cert.CertificateNotYetValidException;
+import java.security.cert.CertificateException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SignatureException;
+import java.security.NoSuchProviderException;
+import java.security.cert.X509Certificate;
+import java.security.InvalidKeyException;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ * A Mock Certificate class with an extension provided.(Used only to test the extension)
+ */
+public class DummyCertificate extends X509Certificate {
+
+ public static final String EXT = "Dummy extension";
+ public static final String DN = "O=WSO2,OU=Mobile,C=LK,CN=123456789";
+
+ @Override
+ public void checkValidity() throws CertificateExpiredException, CertificateNotYetValidException {
+ }
+
+ @Override
+ public void checkValidity(Date date) throws CertificateExpiredException, CertificateNotYetValidException {
+ }
+
+ @Override
+ public int getVersion() {
+ return 0;
+ }
+
+ @Override
+ public BigInteger getSerialNumber() {
+ return new BigInteger("123456789");
+ }
+
+ @Override
+ public Principal getIssuerDN() {
+ return null;
+ }
+
+ @Override
+ public Principal getSubjectDN() {
+ return new Principal() {
+ @Override
+ public String getName() {
+ return DN;
+ }
+ };
+ }
+
+ @Override
+ public Date getNotBefore() {
+ return null;
+ }
+
+ @Override
+ public Date getNotAfter() {
+ return null;
+ }
+
+ @Override
+ public byte[] getTBSCertificate() throws CertificateEncodingException {
+ return new byte[0];
+ }
+
+ @Override
+ public byte[] getSignature() {
+ return new byte[0];
+ }
+
+ @Override
+ public String getSigAlgName() {
+ return null;
+ }
+
+ @Override
+ public String getSigAlgOID() {
+ return null;
+ }
+
+ @Override
+ public byte[] getSigAlgParams() {
+ return new byte[0];
+ }
+
+ @Override
+ public boolean[] getIssuerUniqueID() {
+ return new boolean[0];
+ }
+
+ @Override
+ public boolean[] getSubjectUniqueID() {
+ return new boolean[0];
+ }
+
+ @Override
+ public boolean[] getKeyUsage() {
+ return new boolean[0];
+ }
+
+ @Override
+ public int getBasicConstraints() {
+ return 0;
+ }
+
+ @Override
+ public byte[] getEncoded() throws CertificateEncodingException {
+ return new byte[0];
+ }
+
+ @Override
+ public void verify(PublicKey key) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException {
+ }
+
+ @Override
+ public void verify(PublicKey key, String sigProvider) throws CertificateException, NoSuchAlgorithmException, InvalidKeyException, NoSuchProviderException, SignatureException {
+ }
+
+ @Override
+ public String toString() {
+ return null;
+ }
+
+ @Override
+ public PublicKey getPublicKey() {
+ return null;
+ }
+
+ @Override
+ public boolean hasUnsupportedCriticalExtension() {
+ return false;
+ }
+
+ @Override
+ public Set getCriticalExtensionOIDs() {
+ return null;
+ }
+
+ @Override
+ public Set getNonCriticalExtensionOIDs() {
+ return null;
+ }
+
+ @Override
+ public byte[] getExtensionValue(String oid) {
+ if (oid.equals(PKCSObjectIdentifiers.pkcs_9_at_challengePassword.toString())) {
+ return EXT.getBytes();
+ } else {
+ return new byte[0];
+ }
+ }
+}
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/TestUtils.java b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/TestUtils.java
new file mode 100644
index 00000000000..34d6936676e
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/java/org/wso2/carbon/certificate/mgt/core/util/TestUtils.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2014, 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.carbon.certificate.mgt.core.util;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class TestUtils {
+
+ private static final Log log = LogFactory.getLog(TestUtils.class);
+
+ public static void cleanupResources(Connection conn, Statement stmt, ResultSet rs) {
+ if (rs != null) {
+ try {
+ rs.close();
+ } catch (SQLException e) {
+ log.warn("Error occurred while closing result set", e);
+ }
+ }
+ if (stmt != null) {
+ try {
+ stmt.close();
+ } catch (SQLException e) {
+ log.warn("Error occurred while closing prepared statement", e);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException e) {
+ log.warn("Error occurred while closing database connection", e);
+ }
+ }
+ }
+
+}
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/ca_cert.der b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/ca_cert.der
new file mode 100644
index 00000000000..72684b18205
Binary files /dev/null and b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/ca_cert.der differ
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/carbon.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/carbon.xml
new file mode 100644
index 00000000000..7f976a58cf5
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/carbon.xml
@@ -0,0 +1,655 @@
+
+
+
+
+
+
+
+ ${product.name}
+
+
+ ${product.key}
+
+
+ ${product.version}
+
+
+
+
+
+
+
+
+ local:/${carbon.context}/services/
+
+
+
+
+
+
+ ${default.server.role}
+
+
+
+
+
+
+ org.wso2.carbon
+
+
+ /
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 9999
+
+ 11111
+
+
+
+
+
+ 10389
+
+ 8000
+
+
+
+
+
+ 10500
+
+
+
+
+
+
+ org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory
+
+
+
+
+
+
+
+
+ java
+
+
+
+
+
+
+
+
+
+ false
+
+
+ false
+
+
+ 600
+
+
+
+ false
+
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+ ${carbon.home}/repository/deployment/server/
+
+
+ 15
+
+
+ ${carbon.home}/repository/conf/axis2/axis2.xml
+
+
+ 30000
+
+
+ ${carbon.home}/repository/deployment/client/
+
+ ${carbon.home}/repository/conf/axis2/axis2_client.xml
+
+ true
+
+
+
+
+
+
+
+
+
+ admin
+ Default Administrator Role
+
+
+ user
+ Default User Role
+
+
+
+
+
+
+
+
+
+
+
+ ${carbon.home}/repository/resources/security/wso2carbon.jks
+
+ JKS
+
+ wso2carbon
+
+ wso2carbon
+
+ wso2carbon
+
+
+
+
+
+ ${carbon.home}/repository/resources/security/client-truststore.jks
+
+ JKS
+
+ wso2carbon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserManager
+
+
+ false
+
+
+
+
+
+
+ ${carbon.home}/tmp/work
+
+
+
+
+
+ true
+
+
+ 10
+
+
+ 30
+
+
+
+
+
+ 100
+
+
+
+ keystore
+ certificate
+ *
+
+ org.wso2.carbon.ui.transports.fileupload.AnyFileUploadExecutor
+
+
+
+
+ jarZip
+
+ org.wso2.carbon.ui.transports.fileupload.JarZipUploadExecutor
+
+
+
+ dbs
+
+ org.wso2.carbon.ui.transports.fileupload.DBSFileUploadExecutor
+
+
+
+ tools
+
+ org.wso2.carbon.ui.transports.fileupload.ToolsFileUploadExecutor
+
+
+
+ toolsAny
+
+ org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor
+
+
+
+
+
+
+ - info
+ org.wso2.carbon.core.transports.util.InfoProcessor
+
+
+ - wsdl
+ org.wso2.carbon.core.transports.util.Wsdl11Processor
+
+
+ - wsdl2
+ org.wso2.carbon.core.transports.util.Wsdl20Processor
+
+
+ - xsd
+ org.wso2.carbon.core.transports.util.XsdProcessor
+
+
+
+
+
+ false
+ false
+ true
+ svn
+ http://svnrepo.example.com/repos/
+ username
+ password
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${require.carbon.servlet}
+
+
+
+
+ true
+
+
+
+
+
+
+ default repository
+ ${p2.repo.url}
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+ true
+
+
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
new file mode 100644
index 00000000000..bc996646e14
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+ jdbc/DM_DS
+
+
+
+
+ 8
+ 100
+ 20
+ 1000
+
+
+ https://localhost:9443
+ admin
+ admin
+
+
+ org.wso2.carbon.policy.mgt
+ true
+ 60000
+ 5
+ 8
+ 20
+
+ Simple
+
+
+
+ true
+
+
+ true
+ 86400
+
+
+ true
+ 300
+
+
+
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/certificate-config.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/certificate-config.xml
new file mode 100755
index 00000000000..949c4c2cd4c
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/certificate-config.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ ${carbon.home}/repository/conf/security/wso2certs.jks
+
+ JKS
+
+ wso2carbon
+
+ cacert
+
+ cacert
+
+ racert
+
+ racert
+
+
\ No newline at end of file
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/datasources/master-datasources.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/datasources/master-datasources.xml
new file mode 100644
index 00000000000..40b7e243437
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/datasources/master-datasources.xml
@@ -0,0 +1,85 @@
+
+
+
+
+ org.wso2.carbon.ndatasource.rdbms.RDBMSDataSourceReader
+
+
+
+
+
+ WSO2_CARBON_DB
+ The datasource used for registry and user manager
+
+ jdbc/WSO2CarbonDB
+
+
+
+ jdbc:h2:repository/database/WSO2CARBON_DB;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000
+ wso2carbon
+ wso2carbon
+ org.h2.Driver
+ 50
+ 60000
+ true
+ SELECT 1
+ 30000
+ false
+
+
+
+
+
+
+
+
+
+
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/log4j.properties b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/log4j.properties
new file mode 100644
index 00000000000..d1014499f95
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/log4j.properties
@@ -0,0 +1,165 @@
+#
+# Copyright 2017 WSO2, Inc. (http://wso2.com)
+#
+# Licensed 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.
+#
+
+#
+# This is the log4j configuration file used by WSO2 Carbon
+#
+# IMPORTANT : Please do not remove or change the names of any
+# of the Appenders defined here. The layout pattern & log file
+# can be changed using the WSO2 Carbon Management Console, and those
+# settings will override the settings in this file.
+#
+
+log4j.rootLogger=INFO, CARBON_CONSOLE, CARBON_LOGFILE, CARBON_MEMORY, CARBON_SYS_LOG
+
+log4j.logger.AUDIT_LOG=INFO, AUDIT_LOGFILE
+log4j.logger.org.apache.axis2.wsdl.codegen.writer.PrettyPrinter=ERROR, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.axis2.clustering=INFO, CARBON_CONSOLE, CARBON_LOGFILE
+log4j.logger.org.apache=INFO, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.catalina=WARN
+log4j.logger.org.apache.tomcat=WARN
+log4j.logger.org.wso2.carbon.apacheds=WARN
+log4j.logger.org.apache.directory.server.ldap=ERROR
+log4j.logger.org.apache.directory.server.core.event=WARN
+log4j.logger.com.atomikos=INFO,ATOMIKOS
+log4j.logger.org.quartz=WARN
+log4j.logger.org.apache.jackrabbit.webdav=WARN
+log4j.logger.org.apache.juddi=ERROR
+log4j.logger.org.apache.commons.digester.Digester=WARN
+log4j.logger.org.apache.jasper.compiler.TldLocationsCache=WARN
+log4j.logger.org.apache.qpid=WARN
+log4j.logger.org.apache.qpid.server.Main=INFO
+log4j.logger.qpid.message=WARN
+log4j.logger.qpid.message.broker.listening=INFO
+log4j.logger.org.apache.tiles=WARN
+log4j.logger.org.apache.commons.httpclient=ERROR
+log4j.logger.org.apache.coyote=WARN
+log4j.logger.org.apache.solr=ERROR
+log4j.logger.me.prettyprint.cassandra.hector.TimingLogger=ERROR
+log4j.logger.org.wso2=INFO
+log4j.logger.org.apache.axis2.enterprise=FATAL, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.opensaml.xml=WARN, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.shared.ldap=WARN, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.server.ldap.handlers=WARN, CARBON_LOGFILE, CARBON_MEMORY
+#Following are to remove false error messages from startup (IS)
+log4j.logger.org.apache.directory.shared.ldap.entry.DefaultServerAttribute=FATAL, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.server.core.DefaultDirectoryService=ERROR, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.shared.ldap.ldif.LdifReader=ERROR, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.server.ldap.LdapProtocolHandler=ERROR, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.server.core=ERROR, CARBON_LOGFILE, CARBON_MEMORY
+log4j.logger.org.apache.directory.server.ldap.LdapSession=ERROR, CARBON_LOGFILE, CARBON_MEMORY
+#Hive Related Log configurations
+log4j.logger.DataNucleus=ERROR
+log4j.logger.Datastore=ERROR
+log4j.logger.Datastore.Schema=ERROR
+log4j.logger.JPOX.Datastore=ERROR
+log4j.logger.JPOX.Plugin=ERROR
+log4j.logger.JPOX.MetaData=ERROR
+log4j.logger.JPOX.Query=ERROR
+log4j.logger.JPOX.General=ERROR
+log4j.logger.JPOX.Enhancer=ERROR
+log4j.logger.org.apache.hadoop.hive=WARN
+log4j.logger.hive=WARN
+log4j.logger.ExecMapper=WARN
+log4j.logger.ExecReducer=WARN
+log4j.logger.net.sf.ehcache.config.ConfigurationFactory=ERROR
+
+log4j.logger.trace.messages=TRACE,CARBON_TRACE_LOGFILE
+
+log4j.additivity.org.apache.axis2.clustering=false
+log4j.additivity.com.atomikos=false
+log4j.additivity.org.apache=false
+
+# CARBON_CONSOLE is set to be a ConsoleAppender using a PatternLayout.
+log4j.appender.CARBON_CONSOLE=org.wso2.carbon.utils.logging.appenders.CarbonConsoleAppender
+log4j.appender.CARBON_CONSOLE.layout=org.wso2.carbon.utils.logging.TenantAwarePatternLayout
+# ConversionPattern will be overridden by the configuration setting in the DB
+log4j.appender.CARBON_CONSOLE.layout.ConversionPattern=[%d] %P%5p {%c} - %x %m%n
+log4j.appender.CARBON_CONSOLE.layout.TenantPattern=%U%@%D[%T]
+log4j.appender.CARBON_CONSOLE.threshold=DEBUG
+
+# CARBON_MEMORY is set to be a MemoryAppender using a PatternLayout.
+log4j.appender.CARBON_MEMORY=org.wso2.carbon.utils.logging.appenders.MemoryAppender
+log4j.appender.CARBON_MEMORY.layout=org.apache.log4j.PatternLayout
+log4j.appender.CARBON_MEMORY.bufferSize=200
+# ConversionPattern will be overridden by the configuration setting in the DB
+#log4j.appender.CARBON_MEMORY.layout.ConversionPattern=[%d] %5p - %x %m {%c}%n
+log4j.appender.CARBON_MEMORY.layout.ConversionPattern=[%d] %5p {%c} - %x %m %n
+log4j.appender.CARBON_MEMORY.threshold=DEBUG
+
+
+# CARBON_LOGFILE is set to be a DailyRollingFileAppender using a PatternLayout.
+log4j.appender.CARBON_LOGFILE=org.wso2.carbon.utils.logging.appenders.CarbonDailyRollingFileAppender
+# Log file will be overridden by the configuration setting in the DB
+# This path should be relative to WSO2 Carbon Home
+log4j.appender.CARBON_LOGFILE.File=${carbon.home}/repository/logs/${instance.log}/wso2carbon${instance.log}.log
+log4j.appender.CARBON_LOGFILE.Append=true
+log4j.appender.CARBON_LOGFILE.layout=org.wso2.carbon.utils.logging.TenantAwarePatternLayout
+# ConversionPattern will be overridden by the configuration setting in the DB
+log4j.appender.CARBON_LOGFILE.layout.ConversionPattern=TID: [%T] [%S] [%d] %P%5p {%c} - %x %m %n
+log4j.appender.CARBON_LOGFILE.layout.TenantPattern=%U%@%D [%T] [%S]
+log4j.appender.CARBON_LOGFILE.threshold=DEBUG
+
+log4j.appender.CARBON_SYS_LOG = org.apache.log4j.net.SyslogAppender
+log4j.appender.CARBON_SYS_LOG.layout=org.apache.log4j.PatternLayout
+log4j.appender.CARBON_SYS_LOG.layout.ConversionPattern=[%d] %5p {%c} - %x %m %n
+log4j.appender.CARBON_SYS_LOG.SyslogHost=localhost
+log4j.appender.CARBON_SYS_LOG.Facility=USER
+log4j.appender.CARBON_SYS_LOG.threshold=DEBUG
+
+# LOGEVENT is set to be a LogEventAppender using a PatternLayout to send logs to LOGEVENT
+log4j.appender.LOGEVENT=org.wso2.carbon.logging.service.appender.LogEventAppender
+log4j.appender.LOGEVENT.url=tcp://10.100.3.103:7611
+log4j.appender.LOGEVENT.layout=org.wso2.carbon.utils.logging.TenantAwarePatternLayout
+log4j.appender.LOGEVENT.columnList=%T,%S,%A,%d,%c,%p,%m,%H,%I,%Stacktrace
+log4j.appender.LOGEVENT.userName=admin
+log4j.appender.LOGEVENT.password=admin
+#log4j.appender.LOGEVENT.password=secretAlias:Log4j.Appender.LOGEVENT.Password
+
+# Appender config to CARBON_TRACE_LOGFILE
+log4j.appender.CARBON_TRACE_LOGFILE=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.CARBON_TRACE_LOGFILE.File=${carbon.home}/repository/logs/${instance.log}/wso2carbon-trace-messages${instance.log}.log
+log4j.appender.CARBON_TRACE_LOGFILE.Append=true
+log4j.appender.CARBON_TRACE_LOGFILE.layout=org.wso2.carbon.utils.logging.TenantAwarePatternLayout
+log4j.appender.CARBON_TRACE_LOGFILE.layout.ConversionPattern=[%d] %P%5p {%c} - %x %m %n
+log4j.appender.CARBON_TRACE_LOGFILE.layout.TenantPattern=%U%@%D [%T] [%S]
+log4j.appender.CARBON_TRACE_LOGFILE.threshold=TRACE
+log4j.additivity.trace.messages=false
+
+# Appender config to AUDIT_LOGFILE
+log4j.appender.AUDIT_LOGFILE=org.apache.log4j.DailyRollingFileAppender
+log4j.appender.AUDIT_LOGFILE.File=${carbon.home}/repository/logs/audit.log
+log4j.appender.AUDIT_LOGFILE.Append=true
+log4j.appender.AUDIT_LOGFILE.layout=org.wso2.carbon.utils.logging.TenantAwarePatternLayout
+log4j.appender.AUDIT_LOGFILE.layout.ConversionPattern=[%d] %P%5p {%c}- %x %m %n
+log4j.appender.AUDIT_LOGFILE.layout.TenantPattern=%U%@%D [%T] [%S]
+log4j.appender.AUDIT_LOGFILE.threshold=INFO
+log4j.additivity.AUDIT_LOG=false
+
+# Appender config to send Atomikos transaction logs to new log file tm.out.
+log4j.appender.ATOMIKOS = org.apache.log4j.RollingFileAppender
+log4j.appender.ATOMIKOS.File = repository/logs/tm.out
+log4j.appender.ATOMIKOS.Append = true
+log4j.appender.ATOMIKOS.layout = org.apache.log4j.PatternLayout
+log4j.appender.ATOMIKOS.layout.ConversionPattern=%p %t %c - %m%n
+
+# This file is used to override the default logger settings, and is used to remove unwanted logs from Shindig appearing on the console.
+
+# Specification of Handler used by Console Logger
+handlers=java.util.logging.ConsoleHandler
+
+# Replacing default INFO level with SEVERE
+java.util.logging.ConsoleHandler.level=SEVERE
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/security/wso2certs.jks b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/security/wso2certs.jks
new file mode 100644
index 00000000000..c1e9ace3c23
Binary files /dev/null and b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/carbon-home/repository/conf/security/wso2certs.jks differ
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/certificate-config.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/certificate-config.xml
index e19786b8612..0e996abca5b 100755
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/certificate-config.xml
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/certificate-config.xml
@@ -1,8 +1,25 @@
+
- ${carbon.home}/repository/resources/security/wso2certs.jks
+ ${carbon.home}/repository/resources/wso2certs.jks
JKS
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/data-source-config.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/data-source-config.xml
new file mode 100644
index 00000000000..d9be5b3ac0e
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/data-source-config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ jdbc:h2:mem:cdm-test-db;DB_CLOSE_ON_EXIT=FALSE;MVCC=true
+ org.h2.Driver
+ wso2carbon
+ wso2carbon
+
+
+
+
+
+
+
+
+
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/log4j.properties b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/log4j.properties
deleted file mode 100644
index 2143753b407..00000000000
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,33 +0,0 @@
-#
-# Copyright 2015 WSO2, Inc. (http://wso2.com)
-#
-# 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.
-#
-
-#
-# This is the log4j configuration file used by WSO2 Carbon
-#
-# IMPORTANT : Please do not remove or change the names of any
-# of the Appenders defined here. The layout pattern & log file
-# can be changed using the WSO2 Carbon Management Console, and those
-# settings will override the settings in this file.
-#
-
-log4j.rootLogger=INFO, STD_OUT
-
-# Redirect log messages to console
-log4j.appender.STD_OUT=org.apache.log4j.ConsoleAppender
-log4j.appender.STD_OUT.Target=System.out
-log4j.appender.STD_OUT.layout=org.apache.log4j.PatternLayout
-log4j.appender.STD_OUT.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/sql/h2.sql b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/sql/h2.sql
new file mode 100644
index 00000000000..044898f9128
--- /dev/null
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/sql/h2.sql
@@ -0,0 +1,25 @@
+--
+-- 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.
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_CERTIFICATE (
+ ID INTEGER auto_increment NOT NULL,
+ SERIAL_NUMBER VARCHAR(500) DEFAULT NULL,
+ CERTIFICATE BLOB DEFAULT NULL,
+ TENANT_ID INTEGER DEFAULT 0,
+ USERNAME VARCHAR(500) DEFAULT NULL,
+ PRIMARY KEY (ID)
+);
\ No newline at end of file
diff --git a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml
index d05fefdb8a2..b76295f1086 100644
--- a/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml
+++ b/components/certificate-mgt/org.wso2.carbon.certificate.mgt.core/src/test/resources/testng.xml
@@ -1,12 +1,33 @@
+
+
-
+
+
+
-
\ No newline at end of file
+
+
diff --git a/components/certificate-mgt/pom.xml b/components/certificate-mgt/pom.xml
index 369f3056dfb..7edc09c333a 100644
--- a/components/certificate-mgt/pom.xml
+++ b/components/certificate-mgt/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
certificate-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Certificate Management Component
http://wso2.org
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml
index c6f5201f17e..19fa3b0fc4c 100644
--- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml
+++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.pull.notification/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.pull.notification/pom.xml
index a06e2d7c3e3..821ca49471d 100644
--- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.pull.notification/pom.xml
+++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.pull.notification/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm/pom.xml
index 487f6b34dd7..e5321fcd971 100644
--- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm/pom.xml
+++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http/pom.xml
index 1af98f3d775..ba8393bdd4c 100644
--- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http/pom.xml
+++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml
index d35ac2aadb6..9e40b3511d3 100644
--- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml
+++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml
index e96779f6fa9..aba3f1387df 100644
--- a/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml
+++ b/components/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp/pom.xml
@@ -22,7 +22,7 @@
device-mgt-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml
index 7e9bdf81d5a..3c10824fddd 100644
--- a/components/device-mgt-extensions/pom.xml
+++ b/components/device-mgt-extensions/pom.xml
@@ -22,7 +22,7 @@
carbon-devicemgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml
deleted file mode 100644
index cf5ad43962d..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-
- org.wso2.carbon.devicemgt
- device-mgt
- 3.0.128-SNAPSHOT
- ../pom.xml
-
-
- 4.0.0
- org.wso2.carbon.device.mgt.analytics.dashboard
- bundle
- WSO2 Carbon - Device Management Dashboard Analytics
- WSO2 Carbon - Device Management Dashboard Analytics
- http://wso2.org
-
-
-
- org.eclipse.osgi
- org.eclipse.osgi.services
-
-
- org.wso2.carbon
- org.wso2.carbon.logging
-
-
- org.wso2.carbon.devicemgt
- org.wso2.carbon.device.mgt.common
-
-
- org.wso2.carbon.devicemgt
- org.wso2.carbon.device.mgt.core
-
-
- org.wso2.carbon
- org.wso2.carbon.ndatasource.core
-
-
-
-
-
-
- org.apache.felix
- maven-scr-plugin
-
-
- org.apache.felix
- maven-bundle-plugin
- 1.4.0
- true
-
-
- ${project.artifactId}
- ${project.artifactId}
- ${carbon.device.mgt.version}
- Device Management Dashboard Analytics Bundle
-
- org.wso2.carbon.device.mgt.analytics.dashboard.dao,
- org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl,
- org.wso2.carbon.device.mgt.analytics.dashboard.impl,
- org.wso2.carbon.device.mgt.analytics.dashboard.internal
-
-
- org.wso2.carbon.device.mgt.analytics.dashboard,
- org.wso2.carbon.device.mgt.analytics.dashboard.util,
- org.wso2.carbon.device.mgt.analytics.dashboard.exception,
- org.wso2.carbon.device.mgt.analytics.dashboard.bean
-
-
- org.osgi.framework,
- org.osgi.service.component,
- org.apache.commons.logging.*,
- javax.sql,
- org.wso2.carbon.context,
- org.wso2.carbon.device.mgt.common.*,
- org.wso2.carbon.device.mgt.core.*,
- org.wso2.carbon.ndatasource.core.*;
-
-
-
-
-
- org.jacoco
- jacoco-maven-plugin
-
- ${basedir}/target/coverage-reports/jacoco-unit.exec
-
-
-
- jacoco-initialize
-
- prepare-agent
-
-
-
- jacoco-site
- test
-
- report
-
-
- ${basedir}/target/coverage-reports/jacoco-unit.exec
- ${basedir}/target/coverage-reports/site
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java
deleted file mode 100644
index 5a251fc9c29..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/GadgetDataService.java
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard;
-
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
-import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
-import org.wso2.carbon.device.mgt.common.PaginationResult;
-
-import java.util.List;
-
-/**
- * This interface exposes useful service layer functions to retrieve data
- * required by high level dashboard APIs.
- */
-public interface GadgetDataService {
-
- /**
- * This method is used to get a count of devices based on a defined filter set.
- * @param extendedFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total device count in the system
- * wrapped by the defined return format.
- * @return An object of type DeviceCountByGroup.
- * @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
- * value of extendedFilterSet is set with some
- * value other than "NON_COMPLIANT" or "UNMONITORED".
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
-
- /**
- * This method is used to get a count of devices non-compliant upon on a particular feature
- * and a defined filter set.
- * @param featureCode Code name of the non-compliant feature.
- * @param basicFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total non-compliant device count in the system
- * for the given feature-code, wrapped by the defined return format.
- * @return An object of type DeviceCountByGroup.
- * @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName)
- throws InvalidFeatureCodeValueException, DataAccessLayerException;
-
- /**
- * This method is used to get total count of devices currently enrolled under a particular tenant.
- * @return An object of type DeviceCountByGroup.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- DeviceCountByGroup getTotalDeviceCount(String userName) throws DataAccessLayerException;
-
- /**
- * This method is used to get device counts classified by connectivity statuses.
- * @return A list of objects of type DeviceCountByGroup.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getDeviceCountsByConnectivityStatuses(String userName) throws DataAccessLayerException;
-
- /**
- * This method is used to get device counts classified by potential vulnerabilities.
- * @return A list of objects of type DeviceCountByGroup.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getDeviceCountsByPotentialVulnerabilities(String userName) throws DataAccessLayerException;
-
- /**
- * This method is used to get non-compliant device counts classified by individual features.
- * @param startIndex Starting index of the data set to be retrieved.
- * @param resultCount Total count of the result set retrieved.
- * @return An object of type PaginationResult.
- * @throws InvalidStartIndexValueException This can occur if startIndex value is lesser than its minimum (0).
- * @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5).
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws
- InvalidStartIndexValueException, InvalidResultCountValueException, DataAccessLayerException;
-
- /**
- * This method is used to get device counts classified by platforms.
- * @param extendedFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total device counts per each platform in
- * the system, wrapped by the defined return format.
- * @return An object of type DeviceCountByGroup.
- * @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
- * value of extendedFilterSet is set with some
- * value other than "NON_COMPLIANT" or "UNMONITORED".
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
-
- /**
- * This method is used to get device counts non-compliant upon a particular feature classified by platforms.
- * @param featureCode Code name of the non-compliant feature.
- * @param basicFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total non-compliant device counts per each platform
- * in the system, wrapped by the defined return format.
- * @return A list of objects of type DeviceCountByGroup.
- * @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
- DataAccessLayerException;
-
- /**
- * This method is used to get device counts classified by ownership types.
- * @param extendedFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total device counts per each ownership
- * type in the system, wrapped by the defined return format.
- * @return A list of objects of type DeviceCountByGroup.
- * @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
- * value of extendedFilterSet is set with some
- * value other than "NON_COMPLIANT" or "UNMONITORED".
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
-
- /**
- * This method is used to get device counts non-compliant upon a particular feature
- * classified by ownership types.
- * @param featureCode Code name of the non-compliant feature.
- * @param basicFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total non-compliant device counts per each
- * ownership type in the system, wrapped by the defined return format.
- * @return A list of objects of type DeviceCountByGroup.
- * @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
- DataAccessLayerException;
-
- /**
- * This method is used to get a paginated list of devices with details, based on a defined filter set.
- * @param extendedFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined
- * filtering options, this method would return a paginated device list in the
- * system specified by result count, starting from specified start index, and
- * wrapped by the defined return format.
- * @param startIndex Starting index of the data set to be retrieved.
- * @param resultCount Total count of the result set retrieved.
- * @return An object of type PaginationResult.
- * @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
- * value of extendedFilterSet is set with some
- * value other than "NON_COMPLIANT" or "UNMONITORED".
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- * @throws InvalidStartIndexValueException This can occur if startIndex value is lesser than its minimum (0).
- * @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5).
- */
- @SuppressWarnings("unused")
- PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
- throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException,
- InvalidStartIndexValueException, InvalidResultCountValueException;
-
- /**
- * This method is used to get a paginated list of non-compliant devices with details,
- * upon a particular feature.
- * @param featureCode Code name of the non-compliant feature.
- * @param basicFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return a paginated device list in the system,
- * non-compliant by specified feature-code, result count, starting from specified
- * start index, and wrapped by the defined return format.
- * @param startIndex Starting index of the data set to be retrieved.
- * @param resultCount Total count of the result set retrieved.
- * @return An object of type PaginationResult.
- * @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- * @throws InvalidStartIndexValueException This can occur if startIndex value is lesser than its minimum (0).
- * @throws InvalidResultCountValueException This can occur if resultCount value is lesser than its minimum (5).
- */
- @SuppressWarnings("unused")
- PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
- int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
- DataAccessLayerException, InvalidStartIndexValueException,
- InvalidResultCountValueException;
-
- /**
- * This method is used to get a list of devices with details, based on a defined filter set.
- * @param extendedFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total device list in the system
- * wrapped by the defined return format.
- * @return A list of objects of type DeviceWithDetails.
- * @throws InvalidPotentialVulnerabilityValueException This can occur if potentialVulnerability
- * value of extendedFilterSet is set with some
- * value other than "NON_COMPLIANT" or "UNMONITORED".
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, DataAccessLayerException;
-
- /**
- * This method is used to get a list of non-compliant devices with details, upon a particular feature.
- * @param featureCode Code name of the non-compliant feature.
- * @param basicFilterSet An abstract representation of possible filtering options.
- * if this value is simply "null" or no values are set for the defined filtering
- * options, this method would return total set of non-compliant devices in the
- * system upon given feature-code, wrapped by the defined return format.
- * @return A list of objects of type DeviceWithDetails.
- * @throws InvalidFeatureCodeValueException This can occur if featureCode is set to null or empty.
- * @throws DataAccessLayerException This can occur due to errors connecting to database,
- * executing SQL query and retrieving data.
- */
- @SuppressWarnings("unused")
- List getFeatureNonCompliantDevicesWithDetails(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException,
- DataAccessLayerException;
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/BasicFilterSet.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/BasicFilterSet.java
deleted file mode 100644
index 901949ea845..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/BasicFilterSet.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.bean;
-
-public class BasicFilterSet {
-
- private String connectivityStatus;
- private String platform;
- private String ownership;
-
- public String getConnectivityStatus() {
- return connectivityStatus;
- }
-
- public void setConnectivityStatus(String connectivityStatus) {
- this.connectivityStatus = connectivityStatus;
- }
-
- public String getPlatform() {
- return platform;
- }
-
- @SuppressWarnings("unused")
- public void setPlatform(String platform) {
- this.platform = platform;
- }
-
- public String getOwnership() {
- return ownership;
- }
-
- @SuppressWarnings("unused")
- public void setOwnership(String ownership) {
- this.ownership = ownership;
- }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/DeviceCountByGroup.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/DeviceCountByGroup.java
deleted file mode 100644
index 43076fb0de4..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/DeviceCountByGroup.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.bean;
-
-public class DeviceCountByGroup {
-
- private String group;
- private String displayNameForGroup;
- private int deviceCount;
-
- @SuppressWarnings("unused")
- public String getGroup() {
- return group;
- }
-
- public void setGroup(String group) {
- this.group = group;
- }
-
- @SuppressWarnings("unused")
- public String getDisplayNameForGroup() {
- return displayNameForGroup;
- }
-
- public void setDisplayNameForGroup(String displayNameForGroup) {
- this.displayNameForGroup = displayNameForGroup;
- }
-
- @SuppressWarnings("unused")
- public int getDeviceCount() {
- return deviceCount;
- }
-
- public void setDeviceCount(int deviceCount) {
- this.deviceCount = deviceCount;
- }
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/DeviceWithDetails.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/DeviceWithDetails.java
deleted file mode 100644
index becadff9c9b..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/DeviceWithDetails.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.bean;
-
-public class DeviceWithDetails {
-
- private int deviceId;
- private String deviceIdentification;
- private String platform;
- private String ownershipType;
- private String connectivityStatus;
-
- @SuppressWarnings("unused")
- public int getDeviceId() {
- return deviceId;
- }
-
- public void setDeviceId(int deviceId) {
- this.deviceId = deviceId;
- }
-
- @SuppressWarnings("unused")
- public String getDeviceIdentification() {
- return deviceIdentification;
- }
-
- public void setDeviceIdentification(String deviceIdentification) {
- this.deviceIdentification = deviceIdentification;
- }
-
- @SuppressWarnings("unused")
- public String getPlatform() {
- return platform;
- }
-
- public void setPlatform(String platform) {
- this.platform = platform;
- }
-
- @SuppressWarnings("unused")
- public String getOwnershipType() {
- return ownershipType;
- }
-
- public void setOwnershipType(String ownershipType) {
- this.ownershipType = ownershipType;
- }
-
- @SuppressWarnings("unused")
- public String getConnectivityStatus() {
- return connectivityStatus;
- }
-
- public void setConnectivityStatus(String connectivityStatus) {
- this.connectivityStatus = connectivityStatus;
- }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/ExtendedFilterSet.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/ExtendedFilterSet.java
deleted file mode 100644
index b68a441a909..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/bean/ExtendedFilterSet.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.bean;
-
-public class ExtendedFilterSet extends BasicFilterSet {
-
- /*
- * Following property is an abstract filter, introduced @ service layer,
- * wrapping few (actual) low level database properties.
- */
- private String potentialVulnerability;
-
- public String getPotentialVulnerability() {
- return potentialVulnerability;
- }
-
- public void setPotentialVulnerability(String potentialVulnerability) {
- this.potentialVulnerability = potentialVulnerability;
- }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java
deleted file mode 100644
index 4cad3f22016..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/AbstractGadgetDataServiceDAO.java
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.dao;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
-import org.wso2.carbon.device.mgt.analytics.dashboard.exception.InvalidFeatureCodeValueException;
-import org.wso2.carbon.device.mgt.analytics.dashboard.exception.InvalidPotentialVulnerabilityValueException;
-import org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil;
-import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationException;
-import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
-
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUser;
-import static org.wso2.carbon.device.mgt.analytics.dashboard.util.APIUtil.getAuthenticatedUserTenantDomainId;
-
-public abstract class AbstractGadgetDataServiceDAO implements GadgetDataServiceDAO {
-
- private static final Log log = LogFactory.getLog(AbstractGadgetDataServiceDAO.class);
- @Override
- public DeviceCountByGroup getTotalDeviceCount(String userName) throws SQLException {
- int totalDeviceCount;
- try {
- totalDeviceCount = this.getFilteredDeviceCount(null, userName);
- } catch (InvalidPotentialVulnerabilityValueException e) {
- throw new AssertionError(e);
- }
- DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup();
- deviceCountByGroup.setGroup("total");
- deviceCountByGroup.setDisplayNameForGroup("Total");
- deviceCountByGroup.setDeviceCount(totalDeviceCount);
- return deviceCountByGroup;
- }
-
- @Override
- public DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException {
- int filteredDeviceCount = this.getFilteredDeviceCount(extendedFilterSet, userName);
- DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup();
- deviceCountByGroup.setGroup("filtered");
- deviceCountByGroup.setDisplayNameForGroup("Filtered");
- deviceCountByGroup.setDeviceCount(filteredDeviceCount);
- return deviceCountByGroup;
- }
-
- private int getFilteredDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException {
-
- Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- int filteredDeviceCount = 0;
- try {
- String sql;
- con = this.getConnection();
- if (APIUtil.isDeviceAdminUser()) {
- sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ?";
- } else {
- sql = "SELECT COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM "
- + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN" +
- " DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
- " POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? ";
- }
- // appending filters to support advanced filtering options
- // [1] appending filter columns
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- sql = sql + " AND POLICY__INFO." + column + " = ? ";
- }
- }
- // [2] appending filter column values, if exist
- stmt = con.prepareStatement(sql);
- stmt.setInt(1, tenantId);
- int index = 2;
- if (!APIUtil.isDeviceAdminUser()) {
- stmt.setString(2, userName);
- index = 3;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- while (rs.next()) {
- filteredDeviceCount = rs.getInt("DEVICE_COUNT");
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDeviceCount;
- }
-
- @Override
- public DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
-
- if (featureCode == null || featureCode.isEmpty()) {
- throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
- }
-
- Map filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- int filteredDeviceCount = 0;
- try {
- String sql;
- con = this.getConnection();
- if (APIUtil.isDeviceAdminUser()) {
- sql = "SELECT COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID =" +
- " ? AND FEATURE_CODE = ?";
- } else {
- sql = "SELECT COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND " +
- "FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? ";
- }
- // appending filters to support advanced filtering options
- // [1] appending filter columns
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- sql = sql + " AND FEATURE_INFO." + column + " = ?";
- }
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- stmt.setString(2, featureCode);
- int index = 3;
- if (!APIUtil.isDeviceAdminUser()) {
- stmt.setString(3, userName);
- index = 4;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- while (rs.next()) {
- filteredDeviceCount = rs.getInt("DEVICE_COUNT");
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
-
- DeviceCountByGroup deviceCountByGroup = new DeviceCountByGroup();
- deviceCountByGroup.setGroup("feature-non-compliant-and-filtered");
- deviceCountByGroup.setDisplayNameForGroup("Feature-non-compliant-and-filtered");
- deviceCountByGroup.setDeviceCount(filteredDeviceCount);
-
- return deviceCountByGroup;
- }
-
- @Override
- public List getDeviceCountsByConnectivityStatuses(String userName) throws SQLException {
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List deviceCountsByConnectivityStatuses = new ArrayList<>();
- try {
- String sql;
- con = this.getConnection();
- if (APIUtil.isDeviceAdminUser()) {
- sql = "SELECT CONNECTIVITY_STATUS, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 +
- " WHERE TENANT_ID = ? GROUP BY CONNECTIVITY_STATUS";
- } else {
- sql = "SELECT POLICY__INFO.CONNECTIVITY_STATUS AS CONNECTIVITY_STATUS, " +
- "COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM "
- + GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO " +
- "INNER JOIN DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID " +
- " AND POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? GROUP BY POLICY__INFO.CONNECTIVITY_STATUS";
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- if(!APIUtil.isDeviceAdminUser()){
- stmt.setString(2, userName);
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceCountByGroup deviceCountByConnectivityStatus;
- while (rs.next()) {
- deviceCountByConnectivityStatus = new DeviceCountByGroup();
- deviceCountByConnectivityStatus.setGroup(rs.getString("CONNECTIVITY_STATUS"));
- deviceCountByConnectivityStatus.setDisplayNameForGroup(rs.getString("CONNECTIVITY_STATUS"));
- deviceCountByConnectivityStatus.setDeviceCount(rs.getInt("DEVICE_COUNT"));
- deviceCountsByConnectivityStatuses.add(deviceCountByConnectivityStatus);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return deviceCountsByConnectivityStatuses;
- }
-
- @Override
- public List getDeviceCountsByPotentialVulnerabilities(String userName) throws SQLException {
- // getting non-compliant device count
- DeviceCountByGroup nonCompliantDeviceCount = new DeviceCountByGroup();
- nonCompliantDeviceCount.setGroup(GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT);
- nonCompliantDeviceCount.setDisplayNameForGroup("Non-compliant");
- nonCompliantDeviceCount.setDeviceCount(getNonCompliantDeviceCount());
-
- // getting unmonitored device count
- DeviceCountByGroup unmonitoredDeviceCount = new DeviceCountByGroup();
- unmonitoredDeviceCount.setGroup(GadgetDataServiceDAOConstants.PotentialVulnerability.UNMONITORED);
- unmonitoredDeviceCount.setDisplayNameForGroup("Unmonitored");
- unmonitoredDeviceCount.setDeviceCount(getUnmonitoredDeviceCount());
-
- List deviceCountsByPotentialVulnerabilities = new ArrayList<>();
- deviceCountsByPotentialVulnerabilities.add(nonCompliantDeviceCount);
- deviceCountsByPotentialVulnerabilities.add(unmonitoredDeviceCount);
-
- return deviceCountsByPotentialVulnerabilities;
- }
-
- private int getNonCompliantDeviceCount() throws SQLException {
- ExtendedFilterSet extendedFilterSet = new ExtendedFilterSet();
- extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT);
- try {
- String userName = getAuthenticatedUser();
- return this.getFilteredDeviceCount(extendedFilterSet, userName);
- } catch (InvalidPotentialVulnerabilityValueException e) {
- throw new AssertionError(e);
- }
- }
-
- private int getUnmonitoredDeviceCount() throws SQLException {
- ExtendedFilterSet extendedFilterSet = new ExtendedFilterSet();
- extendedFilterSet.setPotentialVulnerability(GadgetDataServiceDAOConstants.
- PotentialVulnerability.UNMONITORED);
- try {
- String userName = getAuthenticatedUser();
- return this.getFilteredDeviceCount(extendedFilterSet, userName);
- } catch (InvalidPotentialVulnerabilityValueException e) {
- throw new AssertionError(e);
- }
- }
-
- @Override
- public List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException {
-
- Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List filteredDeviceCountsByPlatforms = new ArrayList<>();
- try {
- con = this.getConnection();
- String sql, advancedSqlFiltering = "";
- // appending filters if exist, to support advanced filtering options
- // [1] appending filter columns, if exist
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? ";
- }
- }
- if (APIUtil.isDeviceAdminUser()) {
- sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
- DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " + advancedSqlFiltering +
- " GROUP BY PLATFORM";
- } else {
- sql = "SELECT POLICY__INFO.PLATFORM, COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
- "POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " GROUP BY " +
- "POLICY__INFO.PLATFORM";
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- int index = 2;
- if (!APIUtil.isDeviceAdminUser()) {
- stmt.setString(2, userName);
- index = 3;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceCountByGroup filteredDeviceCountByPlatform;
- while (rs.next()) {
- filteredDeviceCountByPlatform = new DeviceCountByGroup();
- filteredDeviceCountByPlatform.setGroup(rs.getString("PLATFORM"));
- filteredDeviceCountByPlatform.setDisplayNameForGroup(rs.getString("PLATFORM").toUpperCase());
- filteredDeviceCountByPlatform.setDeviceCount(rs.getInt("DEVICE_COUNT"));
- filteredDeviceCountsByPlatforms.add(filteredDeviceCountByPlatform);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDeviceCountsByPlatforms;
- }
-
- @Override
- public List
- getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
-
- if (featureCode == null || featureCode.isEmpty()) {
- throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
- }
-
- Map filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List filteredDeviceCountsByPlatforms = new ArrayList<>();
- try {
- con = this.getConnection();
- String sql, advancedSqlFiltering = "";
- // appending filters if exist, to support advanced filtering options
- // [1] appending filter columns, if exist
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- advancedSqlFiltering = advancedSqlFiltering + " AND FEATURE_INFO." + column + " = ? ";
- }
- }
- if (APIUtil.isDeviceAdminUser()) {
- sql = "SELECT PLATFORM, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
- DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
- advancedSqlFiltering + " GROUP BY PLATFORM";
- } else {
- sql = "SELECT FEATURE_INFO.PLATFORM, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID " +
- " AND FEATURE_INFO.TENANT_ID = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " +
- advancedSqlFiltering + " GROUP BY FEATURE_INFO.PLATFORM";
- }
-
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- stmt.setString(2, featureCode);
- int index = 3;
- if (!APIUtil.isDeviceAdminUser()) {
- stmt.setString(3, userName);
- index = 4;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceCountByGroup filteredDeviceCountByPlatform;
- while (rs.next()) {
- filteredDeviceCountByPlatform = new DeviceCountByGroup();
- filteredDeviceCountByPlatform.setGroup(rs.getString("PLATFORM"));
- filteredDeviceCountByPlatform.setDisplayNameForGroup(rs.getString("PLATFORM").toUpperCase());
- filteredDeviceCountByPlatform.setDeviceCount(rs.getInt("DEVICE_COUNT"));
- filteredDeviceCountsByPlatforms.add(filteredDeviceCountByPlatform);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDeviceCountsByPlatforms;
- }
-
- @Override
- public List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException {
-
- Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List filteredDeviceCountsByOwnershipTypes = new ArrayList<>();
- try {
- con = this.getConnection();
- String sql, advancedSqlFiltering = "";
- // appending filters if exist, to support advanced filtering options
- // [1] appending filter columns, if exist
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- advancedSqlFiltering = advancedSqlFiltering + " AND POLICY__INFO." + column + " = ? ";
- }
- }
- if(APIUtil.isDeviceAdminUser()){
- sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
- DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ? " +
- advancedSqlFiltering + "GROUP BY OWNERSHIP";
- }else{
- sql = "SELECT POLICY__INFO.OWNERSHIP, COUNT(POLICY__INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND POLICY__INFO.TENANT_ID" +
- " = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering + " GROUP BY POLICY__INFO.OWNERSHIP";
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- int index = 2;
- if(!APIUtil.isDeviceAdminUser()){
- stmt.setString(2, userName);
- index = 3;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceCountByGroup filteredDeviceCountByOwnershipType;
- while (rs.next()) {
- filteredDeviceCountByOwnershipType = new DeviceCountByGroup();
- filteredDeviceCountByOwnershipType.setGroup(rs.getString("OWNERSHIP"));
- filteredDeviceCountByOwnershipType.setDisplayNameForGroup(rs.getString("OWNERSHIP"));
- filteredDeviceCountByOwnershipType.setDeviceCount(rs.getInt("DEVICE_COUNT"));
- filteredDeviceCountsByOwnershipTypes.add(filteredDeviceCountByOwnershipType);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDeviceCountsByOwnershipTypes;
- }
-
- @Override
- public List
- getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
-
- if (featureCode == null || featureCode.isEmpty()) {
- throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
- }
-
- Map filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List filteredDeviceCountsByOwnershipTypes = new ArrayList<>();
- try {
- con = this.getConnection();
- String sql, advancedSqlFiltering = "";
- // appending filters if exist, to support advanced filtering options
- // [1] appending filter columns, if exist
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- advancedSqlFiltering = advancedSqlFiltering + " AND FEATURE_INFO." + column + " = ? ";
- }
- }
- if(APIUtil.isDeviceAdminUser()){
- sql = "SELECT OWNERSHIP, COUNT(DEVICE_ID) AS DEVICE_COUNT FROM " + GadgetDataServiceDAOConstants.
- DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO WHERE TENANT_ID = ? AND FEATURE_CODE = ? " +
- advancedSqlFiltering + "GROUP BY OWNERSHIP";
- }else{
- sql = "SELECT FEATURE_INFO.OWNERSHIP, COUNT(FEATURE_INFO.DEVICE_ID) AS DEVICE_COUNT FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 + " FEATURE_INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID " +
- "= ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? " + advancedSqlFiltering
- + " GROUP BY FEATURE_INFO.OWNERSHIP";
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- stmt.setString(2, featureCode);
- int index = 3;
- if(!APIUtil.isDeviceAdminUser()){
- stmt.setString(3, userName);
- index = 4;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceCountByGroup filteredDeviceCountByOwnershipType;
- while (rs.next()) {
- filteredDeviceCountByOwnershipType = new DeviceCountByGroup();
- filteredDeviceCountByOwnershipType.setGroup(rs.getString("OWNERSHIP"));
- filteredDeviceCountByOwnershipType.setDisplayNameForGroup(rs.getString("OWNERSHIP"));
- filteredDeviceCountByOwnershipType.setDeviceCount(rs.getInt("DEVICE_COUNT"));
- filteredDeviceCountsByOwnershipTypes.add(filteredDeviceCountByOwnershipType);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDeviceCountsByOwnershipTypes;
- }
-
- @Override
- public List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException {
-
- Map filters = this.extractDatabaseFiltersFromBean(extendedFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List filteredDevicesWithDetails = new ArrayList<>();
- try {
- con = this.getConnection();
- String sql;
- if(APIUtil.isDeviceAdminUser()){
- sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1 + " POLICY__INFO WHERE TENANT_ID = ?";
- }else{
- sql = "SELECT POLICY__INFO.DEVICE_ID, POLICY__INFO.DEVICE_IDENTIFICATION, POLICY__INFO.PLATFORM," +
- " POLICY__INFO.OWNERSHIP, POLICY__INFO.CONNECTIVITY_STATUS FROM "+
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_1+" POLICY__INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = POLICY__INFO.DEVICE_ID AND " +
- "POLICY__INFO.TENANT_ID = ? AND ENR_DB.OWNER = ?";
- }
- // appending filters to support advanced filtering options
- // [1] appending filter columns, if exist
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- sql = sql + " AND POLICY__INFO." + column + " = ?";
- }
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- int index = 2;
- if(!APIUtil.isDeviceAdminUser()){
- stmt.setString(2, userName);
- index = 3;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceWithDetails filteredDeviceWithDetails;
- while (rs.next()) {
- filteredDeviceWithDetails = new DeviceWithDetails();
- filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
- filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
- filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
- filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
- filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
- filteredDevicesWithDetails.add(filteredDeviceWithDetails);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDevicesWithDetails;
- }
-
- @Override
- public List getFeatureNonCompliantDevicesWithDetails(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException {
-
- if (featureCode == null || featureCode.isEmpty()) {
- throw new InvalidFeatureCodeValueException("Feature code should not be either null or empty.");
- }
-
- Map filters = this.extractDatabaseFiltersFromBean(basicFilterSet);
-
- Connection con;
- PreparedStatement stmt = null;
- ResultSet rs = null;
- int tenantId = getAuthenticatedUserTenantDomainId();
- List filteredDevicesWithDetails = new ArrayList<>();
- try {
- con = this.getConnection();
- String sql;
- if(APIUtil.isDeviceAdminUser()){
- sql = "SELECT DEVICE_ID, DEVICE_IDENTIFICATION, PLATFORM, OWNERSHIP, CONNECTIVITY_STATUS FROM " +
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2 +
- " WHERE TENANT_ID = ? AND FEATURE_CODE = ?";
- }else{
- sql = "SELECT FEATURE_INFO.DEVICE_ID, FEATURE_INFO.DEVICE_IDENTIFICATION, FEATURE_INFO.PLATFORM, " +
- "FEATURE_INFO.OWNERSHIP, FEATURE_INFO.CONNECTIVITY_STATUS FROM "+
- GadgetDataServiceDAOConstants.DatabaseView.DEVICES_VIEW_2+" FEATURE_INFO INNER JOIN " +
- "DM_ENROLMENT ENR_DB ON ENR_DB.DEVICE_ID = FEATURE_INFO.DEVICE_ID AND FEATURE_INFO.TENANT_ID" +
- " = ? AND FEATURE_INFO.FEATURE_CODE = ? AND ENR_DB.OWNER = ? ";
- }
- // appending filters to support advanced filtering options
- // [1] appending filter columns, if exist
- if (filters != null && filters.size() > 0) {
- for (String column : filters.keySet()) {
- sql = sql + " AND FEATURE_INFO." + column + " = ?";
- }
- }
- stmt = con.prepareStatement(sql);
- // [2] appending filter column values, if exist
- stmt.setInt(1, tenantId);
- stmt.setString(2, featureCode);
- int index = 3;
- if(!APIUtil.isDeviceAdminUser()){
- stmt.setString(3, userName);
- index = 4;
- }
- if (filters != null && filters.values().size() > 0) {
- int i = index;
- for (Object value : filters.values()) {
- if (value instanceof Integer) {
- stmt.setInt(i, (Integer) value);
- } else if (value instanceof String) {
- stmt.setString(i, (String) value);
- }
- i++;
- }
- }
- // executing query
- rs = stmt.executeQuery();
- // fetching query results
- DeviceWithDetails filteredDeviceWithDetails;
- while (rs.next()) {
- filteredDeviceWithDetails = new DeviceWithDetails();
- filteredDeviceWithDetails.setDeviceId(rs.getInt("DEVICE_ID"));
- filteredDeviceWithDetails.setDeviceIdentification(rs.getString("DEVICE_IDENTIFICATION"));
- filteredDeviceWithDetails.setPlatform(rs.getString("PLATFORM"));
- filteredDeviceWithDetails.setOwnershipType(rs.getString("OWNERSHIP"));
- filteredDeviceWithDetails.setConnectivityStatus(rs.getString("CONNECTIVITY_STATUS"));
- filteredDevicesWithDetails.add(filteredDeviceWithDetails);
- }
- } catch (DeviceAccessAuthorizationException e) {
- String msg = "Error occurred while checking device access authorization";
- log.error(msg, e);
- } finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, rs);
- }
- return filteredDevicesWithDetails;
- }
-
- protected Map extractDatabaseFiltersFromBean(BasicFilterSet basicFilterSet) {
- if (basicFilterSet == null) {
- return null;
- }
-
- Map filters = new LinkedHashMap<>();
-
- String connectivityStatus = basicFilterSet.getConnectivityStatus();
- if (connectivityStatus != null && !connectivityStatus.isEmpty()) {
- filters.put("CONNECTIVITY_STATUS", connectivityStatus);
- }
-
- String platform = basicFilterSet.getPlatform();
- if (platform != null && !platform.isEmpty()) {
- filters.put("PLATFORM", platform);
- }
-
- String ownership = basicFilterSet.getOwnership();
- if (ownership != null && !ownership.isEmpty()) {
- filters.put("OWNERSHIP", ownership);
- }
-
- return filters;
- }
-
- protected Map extractDatabaseFiltersFromBean(ExtendedFilterSet extendedFilterSet)
- throws InvalidPotentialVulnerabilityValueException {
- if (extendedFilterSet == null) {
- return null;
- }
-
- Map filters = this.extractDatabaseFiltersFromBean((BasicFilterSet) extendedFilterSet);
-
- String potentialVulnerability = extendedFilterSet.getPotentialVulnerability();
- if (potentialVulnerability != null && !potentialVulnerability.isEmpty()) {
- if (GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT.equals(potentialVulnerability) ||
- GadgetDataServiceDAOConstants.PotentialVulnerability.UNMONITORED.equals(potentialVulnerability)) {
- if (GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT.equals(potentialVulnerability)) {
- filters.put("IS_COMPLIANT", 0);
- } else {
- filters.put("POLICY_ID", -1);
- }
- } else {
- throw new InvalidPotentialVulnerabilityValueException("Invalid use of value for potential " +
- "vulnerability. Value of potential vulnerability could only be either " +
- GadgetDataServiceDAOConstants.PotentialVulnerability.NON_COMPLIANT + " or " +
- GadgetDataServiceDAOConstants.PotentialVulnerability.UNMONITORED + ".");
- }
- }
-
- return filters;
- }
-
- protected Connection getConnection() throws SQLException {
- return GadgetDataServiceDAOFactory.getConnection();
- }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java
deleted file mode 100644
index 0033f193273..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAO.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.dao;
-
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceWithDetails;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.DeviceCountByGroup;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.BasicFilterSet;
-import org.wso2.carbon.device.mgt.analytics.dashboard.bean.ExtendedFilterSet;
-import org.wso2.carbon.device.mgt.analytics.dashboard.exception.*;
-import org.wso2.carbon.device.mgt.common.PaginationResult;
-
-import java.sql.SQLException;
-import java.util.List;
-
-public interface GadgetDataServiceDAO {
-
- DeviceCountByGroup getDeviceCount(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException;
-
- DeviceCountByGroup getFeatureNonCompliantDeviceCount(String featureCode, BasicFilterSet basicFilterSet, String userName)
- throws InvalidFeatureCodeValueException, SQLException;
-
- DeviceCountByGroup getTotalDeviceCount(String userName) throws SQLException;
-
- List getDeviceCountsByConnectivityStatuses(String userName) throws SQLException;
-
- List getDeviceCountsByPotentialVulnerabilities(String userName) throws SQLException;
-
- PaginationResult getNonCompliantDeviceCountsByFeatures(int startIndex, int resultCount, String userName) throws
- InvalidStartIndexValueException, InvalidResultCountValueException, SQLException;
-
- List getDeviceCountsByPlatforms(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException;
-
- List getFeatureNonCompliantDeviceCountsByPlatforms(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException;
-
- List getDeviceCountsByOwnershipTypes(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException;
-
- List getFeatureNonCompliantDeviceCountsByOwnershipTypes(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException;
-
- PaginationResult getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, int startIndex, int resultCount, String userName)
- throws InvalidPotentialVulnerabilityValueException,
- InvalidStartIndexValueException, InvalidResultCountValueException, SQLException;
-
- PaginationResult getFeatureNonCompliantDevicesWithDetails(String featureCode, BasicFilterSet basicFilterSet,
- int startIndex, int resultCount, String userName) throws InvalidFeatureCodeValueException,
- InvalidStartIndexValueException, InvalidResultCountValueException, SQLException;
-
- List getDevicesWithDetails(ExtendedFilterSet extendedFilterSet, String userName)
- throws InvalidPotentialVulnerabilityValueException, SQLException;
-
- List getFeatureNonCompliantDevicesWithDetails(String featureCode,
- BasicFilterSet basicFilterSet, String userName) throws InvalidFeatureCodeValueException, SQLException;
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOConstants.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOConstants.java
deleted file mode 100644
index cd770b96514..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOConstants.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.dao;
-
-public final class GadgetDataServiceDAOConstants {
-
- public static class DatabaseView {
-
- public static final String DEVICES_VIEW_1 = "POLICY_COMPLIANCE_INFO";
- public static final String DEVICES_VIEW_2 = "FEATURE_NON_COMPLIANCE_INFO";
-
- private DatabaseView() {
- throw new AssertionError();
- }
-
- }
-
- public static class Pagination {
-
- // Minimum acceptable values for start index and result count
- public static final int MIN_START_INDEX = 0;
- public static final int MIN_RESULT_COUNT = 5;
-
- private Pagination() {
- throw new AssertionError();
- }
-
- }
-
- public static class PotentialVulnerability {
-
- // These constants do not hold actual database values
- // These are just abstract values defined and used @ Gadget Data Service DAO Implementation layer
- public static final String NON_COMPLIANT = "NON_COMPLIANT";
- public static final String UNMONITORED = "UNMONITORED";
-
- private PotentialVulnerability() {
- throw new AssertionError();
- }
-
- }
-
- private GadgetDataServiceDAOConstants() { throw new AssertionError(); }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java
deleted file mode 100644
index d202b685c13..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard/src/main/java/org/wso2/carbon/device/mgt/analytics/dashboard/dao/GadgetDataServiceDAOFactory.java
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.dashboard.dao;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.GenericGadgetDataServiceDAOImpl;
-import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.MSSQLGadgetDataServiceDAOImpl;
-import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.OracleGadgetDataServiceDAOImpl;
-import org.wso2.carbon.device.mgt.analytics.dashboard.dao.impl.PostgreSQLGadgetDataServiceDAOImpl;
-import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
-import org.wso2.carbon.device.mgt.common.IllegalTransactionStateException;
-import org.wso2.carbon.device.mgt.common.UnsupportedDatabaseEngineException;
-import org.wso2.carbon.device.mgt.core.config.datasource.DataSourceConfig;
-import org.wso2.carbon.device.mgt.core.config.datasource.JNDILookupDefinition;
-import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
-
-import javax.sql.DataSource;
-import java.sql.Connection;
-import java.sql.SQLException;
-import java.util.Hashtable;
-import java.util.List;
-
-@SuppressWarnings("unused")
-public class GadgetDataServiceDAOFactory {
-
- private static final Log log = LogFactory.getLog(GadgetDataServiceDAOFactory.class);
- private static DataSource dataSource;
- private static String databaseEngine;
- private static ThreadLocal currentConnection = new ThreadLocal<>();
-
- public static GadgetDataServiceDAO getGadgetDataServiceDAO() {
- if (databaseEngine != null) {
- switch (databaseEngine) {
- case DeviceManagementConstants.DataBaseTypes.DB_TYPE_H2:
- return new GenericGadgetDataServiceDAOImpl();
- case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MYSQL:
- return new GenericGadgetDataServiceDAOImpl();
- case DeviceManagementConstants.DataBaseTypes.DB_TYPE_MSSQL:
- return new MSSQLGadgetDataServiceDAOImpl();
- case DeviceManagementConstants.DataBaseTypes.DB_TYPE_POSTGRESQL:
- return new PostgreSQLGadgetDataServiceDAOImpl();
- case DeviceManagementConstants.DataBaseTypes.DB_TYPE_ORACLE:
- return new OracleGadgetDataServiceDAOImpl();
- default:
- throw new UnsupportedDatabaseEngineException("Unsupported database engine : " + databaseEngine);
- }
- }
- throw new IllegalStateException("Database engine has not initialized properly.");
- }
-
- public static void init(DataSourceConfig config) {
- dataSource = resolveDataSource(config);
- try {
- databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
- } catch (SQLException e) {
- log.error("Error occurred while retrieving config.datasource connection.", e);
- }
- }
-
- public static void init(DataSource dtSource) {
- dataSource = dtSource;
- try {
- databaseEngine = dataSource.getConnection().getMetaData().getDatabaseProductName();
- } catch (SQLException e) {
- log.error("Error occurred while retrieving config.datasource connection.", e);
- }
- }
-
- public static void openConnection() throws SQLException {
- Connection conn = currentConnection.get();
- if (conn != null) {
- throw new IllegalTransactionStateException("A transaction is already active within the context of " +
- "this particular thread. Therefore, calling 'beginTransaction/openConnection' while another " +
- "transaction is already active is a sign of improper transaction handling.");
- }
- conn = dataSource.getConnection();
- currentConnection.set(conn);
- }
-
- public static Connection getConnection() throws SQLException {
- Connection conn = currentConnection.get();
- if (conn == null) {
- throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
- "This might have ideally been caused by not properly initiating the transaction via " +
- "'beginTransaction'/'openConnection' methods.");
- }
- return conn;
- }
-
- public static void closeConnection() {
- Connection conn = currentConnection.get();
- if (conn == null) {
- throw new IllegalTransactionStateException("No connection is associated with the current transaction. " +
- "This might have ideally been caused by not properly initiating the transaction via " +
- "'beginTransaction'/'openConnection' methods.");
- }
- try {
- conn.close();
- } catch (SQLException e) {
- log.warn("Error occurred while close the connection.");
- }
- currentConnection.remove();
- }
-
-
- /**
- * Resolve data source from the data source definition.
- *
- * @param config data source configuration.
- * @return data source resolved from the data source definition.
- */
- private static DataSource resolveDataSource(DataSourceConfig config) {
- DataSource dataSource = null;
- if (config == null) {
- throw new RuntimeException(
- "Device Management Repository data source configuration is null and " +
- "thus, is not initialized.");
- }
- JNDILookupDefinition jndiConfig = config.getJndiLookupDefinition();
- if (jndiConfig != null) {
- if (log.isDebugEnabled()) {
- log.debug("Initializing Device Management Repository data source using the JNDI Lookup Definition.");
- }
- List jndiPropertyList = jndiConfig.getJndiProperties();
- if (jndiPropertyList != null) {
- Hashtable
- org.wso2.carbon.registry
- org.wso2.carbon.registry.indexing
-
-
- org.wso2.carbon.registry
- org.wso2.carbon.registry.common
+ org.wso2.carbon
+ org.wso2.carbon.securevault
- org.json.wso2
- json
+ org.apache.sling
+ org.apache.sling.testing.osgi-mock
@@ -118,9 +114,6 @@
org.wso2.carbon.context;version="${carbon.kernel.version.range}",
org.wso2.carbon.utils;version="${carbon.kernel.version.range}",
org.wso2.carbon.databridge.*;version="${carbon.analytics.common.version.range}",
- org.wso2.carbon.registry.core.*;resolution:=optional,
- org.wso2.carbon.registry.common.*;version="${carbon.registry.imp.pkg.version.range}",
- org.wso2.carbon.registry.indexing.*; version="${carbon.registry.imp.pkg.version.range}",
org.json;version="${commons-json.version}",
javax.xml.*,
javax.xml.parsers;version="${javax.xml.parsers.import.pkg.version}";resolution:=optional,
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java
index da430d5fd44..086b04c4a79 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherUtil.java
@@ -19,6 +19,7 @@
package org.wso2.carbon.device.mgt.analytics.data.publisher;
import org.w3c.dom.Document;
+import org.wso2.carbon.databridge.agent.DataPublisher;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
import javax.xml.XMLConstants;
@@ -28,6 +29,9 @@ import java.io.File;
public class DataPublisherUtil {
+ private DataPublisherUtil(){
+ }
+
public static Document convertToDocument(File file) throws DataPublisherConfigurationException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java
index 537e5b01b40..8753dc2af7b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DeviceDataPublisher.java
@@ -18,13 +18,6 @@
*/
package org.wso2.carbon.device.mgt.analytics.data.publisher;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.wso2.carbon.base.MultitenantConstants;
-import org.wso2.carbon.context.CarbonContext;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.databridge.agent.DataPublisher;
import org.wso2.carbon.databridge.agent.exception.DataEndpointAgentConfigurationException;
import org.wso2.carbon.databridge.agent.exception.DataEndpointAuthenticationException;
@@ -32,38 +25,16 @@ import org.wso2.carbon.databridge.agent.exception.DataEndpointConfigurationExcep
import org.wso2.carbon.databridge.agent.exception.DataEndpointException;
import org.wso2.carbon.databridge.commons.exception.TransportException;
import org.wso2.carbon.device.mgt.analytics.data.publisher.config.AnalyticsConfiguration;
-import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherAlreadyExistsException;
import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
-import org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DataPublisherDataHolder;
-import org.wso2.carbon.registry.core.Registry;
-import org.wso2.carbon.registry.core.Resource;
-import org.wso2.carbon.registry.core.exceptions.RegistryException;
-import org.wso2.carbon.registry.core.service.RegistryService;
-import org.wso2.carbon.registry.core.service.TenantRegistryLoader;
-
-import java.nio.charset.Charset;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
/**
* This is used to manage data publisher per tenant.
*/
public class DeviceDataPublisher {
- private static final Log log = LogFactory.getLog(DeviceDataPublisher.class);
- private static final String TENANT_DAS_CONFIG_LOCATION = "/das/config.json";
- private static final String USERNAME_CONFIG_TAG = "username";
- private static final String PASSWORD_CONFIG_TAG = "password";
- /**
- * map to store data publishers for each tenant.
- */
- private static Map dataPublisherMap;
+ private DataPublisher dataPublisher;
private static DeviceDataPublisher deviceDataPublisher;
- public DeviceDataPublisher() {
- dataPublisherMap = new ConcurrentHashMap<>();
- }
-
public static DeviceDataPublisher getInstance() {
if (deviceDataPublisher == null) {
synchronized (DeviceDataPublisher.class) {
@@ -78,144 +49,43 @@ public class DeviceDataPublisher {
/**
* this return the data publisher for the tenant.
*
- * @return
+ * @return instance of data publisher
* @throws DataPublisherConfigurationException
*
*/
public DataPublisher getDataPublisher() throws DataPublisherConfigurationException {
- String tenantDomain = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantDomain(true);
- //Get LoadBalancingDataPublisher which has been registered for the tenant.
- DataPublisher dataPublisher = getDataPublisher(tenantDomain);
- //If a LoadBalancingDataPublisher had not been registered for the tenant.
- if (dataPublisher == null) {
- AnalyticsConfiguration analyticsConfig = AnalyticsConfiguration.getInstance();
- if (!analyticsConfig.isEnable()) {
- return null;
- }
- String analyticsServerUrlGroups = analyticsConfig.getReceiverServerUrl();
- String analyticsServerUsername = analyticsConfig.getAdminUsername();
- String analyticsServerPassword = analyticsConfig.getAdminPassword();
- if (!MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(tenantDomain)) {
- int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
- String userInfo[] = getAnalyticsServerUserInfo(tenantId);
- if (userInfo != null) {
- analyticsServerUsername = userInfo[0];
- analyticsServerPassword = userInfo[1];
- }
- }
- //Create new DataPublisher for the tenant.
- try {
- dataPublisher = new DataPublisher(analyticsServerUrlGroups, analyticsServerUsername,
- analyticsServerPassword);
- //Add created DataPublisher.
- addDataPublisher(tenantDomain, dataPublisher);
- } catch (DataEndpointAgentConfigurationException e) {
- throw new DataPublisherConfigurationException("Configuration Exception on data publisher for " +
- "ReceiverGroup = " + analyticsServerUrlGroups + " for username " + analyticsServerUsername, e);
- } catch (DataEndpointException e) {
- throw new DataPublisherConfigurationException("Invalid ReceiverGroup = " + analyticsServerUrlGroups, e);
- } catch (DataEndpointConfigurationException e) {
- throw new DataPublisherConfigurationException("Invalid Data endpoint configuration.", e);
- } catch (DataEndpointAuthenticationException e) {
- throw new DataPublisherConfigurationException("Authentication Failed for user " +
- analyticsServerUsername, e);
- } catch (TransportException e) {
- throw new DataPublisherConfigurationException("Error occurred while retrieving data publisher", e);
- } catch (DataPublisherAlreadyExistsException e) {
- log.warn("Attempting to register a data publisher for the tenant " + tenantDomain +
- " when one already exists. Returning existing data publisher");
- return getDataPublisher(tenantDomain);
- }
- }
- return dataPublisher;
- }
-
- /**
- * Fetch the data publisher which has been registered under the tenant domain.
- *
- * @param tenantDomain - The tenant domain under which the data publisher is registered
- * @return - Instance of the DataPublisher which was registered. Null if not registered.
- */
- private DataPublisher getDataPublisher(String tenantDomain) {
- if (dataPublisherMap.containsKey(tenantDomain)) {
- return dataPublisherMap.get(tenantDomain);
- }
- return null;
- }
-
- /**
- * Adds a LoadBalancingDataPublisher to the data publisher map.
- *
- * @param tenantDomain - The tenant domain under which the data publisher will be registered.
- * @param dataPublisher - Instance of the LoadBalancingDataPublisher
- * @throws DataPublisherAlreadyExistsException
- * -
- * If a data publisher has already been registered under the tenant
- * domain
- */
- private void addDataPublisher(String tenantDomain, DataPublisher dataPublisher)
- throws DataPublisherAlreadyExistsException {
- if (dataPublisherMap.containsKey(tenantDomain)) {
- throw new DataPublisherAlreadyExistsException(
- "A DataPublisher has already been created for the tenant " + tenantDomain);
- }
-
- dataPublisherMap.put(tenantDomain, dataPublisher);
- }
-
- /**
- * retrieve the credential from registry
- */
- private String[] getAnalyticsServerUserInfo(int tenantId) throws DataPublisherConfigurationException {
- try {
- String config = getConfigRegistryResourceContent(tenantId, TENANT_DAS_CONFIG_LOCATION);
- JSONObject jsonConfigforDas = new JSONObject(config);
- String credential[] = new String[2];
- credential[0] = jsonConfigforDas.getString(USERNAME_CONFIG_TAG);
- credential[1] = jsonConfigforDas.getString(PASSWORD_CONFIG_TAG);
- return credential;
- } catch (RegistryException e) {
- throw new DataPublisherConfigurationException("Failed to load the registry for tenant " + tenantId, e);
- } catch (JSONException e) {
- throw new DataPublisherConfigurationException(
- "Failed to parse the credential from the registry for tenant " + tenantId, e);
- }
- }
-
- /**
- * get the credential detail from the registry for tenants.
- *
- * @param tenantId for identify tenant space.
- * @param registryLocation retrieve the config file from tenant space.
- * @return the config for tenant
- * @throws RegistryException
- */
- private String getConfigRegistryResourceContent(int tenantId, final String registryLocation)
- throws RegistryException {
- String content = null;
- try {
- PrivilegedCarbonContext.startTenantFlow();
- PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(tenantId, true);
- RegistryService registryService = DataPublisherDataHolder.getInstance().getRegistryService();
- if (registryService != null) {
- Registry registry = registryService.getConfigSystemRegistry(tenantId);
- this.loadTenantRegistry(tenantId);
- if (registry.resourceExists(registryLocation)) {
- Resource resource = registry.get(registryLocation);
- content = new String((byte[]) resource.getContent(), Charset.defaultCharset());
+ if (this.dataPublisher == null) {
+ synchronized (this) {
+ if (this.dataPublisher == null) {
+ AnalyticsConfiguration analyticsConfig = AnalyticsConfiguration.getInstance();
+ if (!analyticsConfig.isEnable()) {
+ return null;
+ }
+ String analyticsServerUrlGroups = analyticsConfig.getReceiverServerUrl();
+ String analyticsServerUsername = analyticsConfig.getAdminUsername();
+ String analyticsServerPassword = analyticsConfig.getAdminPassword();
+ try {
+ this.dataPublisher = new DataPublisher(analyticsServerUrlGroups, analyticsServerUsername,
+ analyticsServerPassword);
+ } catch (DataEndpointAgentConfigurationException e) {
+ throw new DataPublisherConfigurationException("Configuration Exception on data publisher for " +
+ "ReceiverGroup = " + analyticsServerUrlGroups + " for username " + analyticsServerUsername, e);
+ } catch (DataEndpointException e) {
+ throw new DataPublisherConfigurationException("Invalid ReceiverGroup = " + analyticsServerUrlGroups, e);
+ } catch (DataEndpointConfigurationException e) {
+ throw new DataPublisherConfigurationException("Invalid Data endpoint configuration.", e);
+ } catch (DataEndpointAuthenticationException e) {
+ throw new DataPublisherConfigurationException("Authentication Failed for user " +
+ analyticsServerUsername, e);
+ } catch (TransportException e) {
+ throw new DataPublisherConfigurationException("Error occurred while retrieving data publisher", e);
+ }
+ } else {
+ return this.dataPublisher;
}
}
- } finally {
- PrivilegedCarbonContext.endTenantFlow();
}
-
- return content;
- }
-
- private void loadTenantRegistry(int tenantId) throws RegistryException {
- TenantRegistryLoader tenantRegistryLoader = DataPublisherDataHolder.getInstance().getTenantRegistryLoader();
- DataPublisherDataHolder.getInstance().getIndexLoaderService().loadTenantIndex(tenantId);
- tenantRegistryLoader.loadTenantRegistry(tenantId);
+ return this.dataPublisher;
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java
index 8c08d5eccf4..b758d4cf1c8 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/AnalyticsConfiguration.java
@@ -98,8 +98,12 @@ public class AnalyticsConfiguration {
}
public static void init() throws DataPublisherConfigurationException {
+ init(AnalyticsConfiguration.DEVICE_ANALYTICS_CONFIG_PATH);
+ }
+
+ public static void init(String analyticsConfigPath) throws DataPublisherConfigurationException {
try {
- File authConfig = new File(AnalyticsConfiguration.DEVICE_ANALYTICS_CONFIG_PATH);
+ File authConfig = new File(analyticsConfigPath);
Document doc = DataPublisherUtil.convertToDocument(authConfig);
/* Un-marshaling device analytics configuration */
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/InvalidConfigurationStateException.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/InvalidConfigurationStateException.java
index 8603b21f166..b9686bac42f 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/InvalidConfigurationStateException.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/config/InvalidConfigurationStateException.java
@@ -26,20 +26,4 @@ public class InvalidConfigurationStateException extends RuntimeException {
super(message);
}
- public InvalidConfigurationStateException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public InvalidConfigurationStateException(String msg, Exception nestedEx) {
- super(msg, nestedEx);
- }
-
- public InvalidConfigurationStateException() {
- super();
- }
-
- public InvalidConfigurationStateException(Throwable cause) {
- super(cause);
- }
-
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherAlreadyExistsException.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherAlreadyExistsException.java
deleted file mode 100644
index 8646d92e572..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherAlreadyExistsException.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.data.publisher.exception;
-
-public class DataPublisherAlreadyExistsException extends Exception {
- public DataPublisherAlreadyExistsException() {
- super();
- }
-
- public DataPublisherAlreadyExistsException(String message) {
- super(message);
- }
-
- public DataPublisherAlreadyExistsException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public DataPublisherAlreadyExistsException(Throwable cause) {
- super(cause);
- }
-
- protected DataPublisherAlreadyExistsException(String message, Throwable cause,
- boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherConfigurationException.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherConfigurationException.java
index 7db8ae1009c..ea93c62a312 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherConfigurationException.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/exception/DataPublisherConfigurationException.java
@@ -19,9 +19,6 @@
package org.wso2.carbon.device.mgt.analytics.data.publisher.exception;
public class DataPublisherConfigurationException extends Exception {
- public DataPublisherConfigurationException() {
- super();
- }
public DataPublisherConfigurationException(String message) {
super(message);
@@ -31,14 +28,4 @@ public class DataPublisherConfigurationException extends Exception {
super(message, cause);
}
- public DataPublisherConfigurationException(Throwable cause) {
- super(cause);
- }
-
- protected DataPublisherConfigurationException(String message, Throwable cause,
- boolean enableSuppression,
- boolean writableStackTrace) {
- super(message, cause, enableSuppression, writableStackTrace);
- }
-
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherDataHolder.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherDataHolder.java
deleted file mode 100644
index 6f132b3fb82..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherDataHolder.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (c) 2016, 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.carbon.device.mgt.analytics.data.publisher.internal;
-
-import org.wso2.carbon.registry.core.service.RegistryService;
-import org.wso2.carbon.registry.core.service.TenantRegistryLoader;
-import org.wso2.carbon.registry.indexing.service.TenantIndexingLoader;
-
-public class DataPublisherDataHolder {
- private static DataPublisherDataHolder thisInstance = new DataPublisherDataHolder();
-
- private TenantRegistryLoader tenantRegistryLoader;
- private TenantIndexingLoader indexLoader;
- private RegistryService registryService;
- private DataPublisherDataHolder() {
- }
-
-
- public static DataPublisherDataHolder getInstance() {
- return thisInstance;
- }
-
- public void setTenantRegistryLoader(TenantRegistryLoader tenantRegistryLoader){
- this.tenantRegistryLoader = tenantRegistryLoader;
- }
-
- public TenantRegistryLoader getTenantRegistryLoader(){
- return tenantRegistryLoader;
- }
-
- public void setIndexLoaderService(TenantIndexingLoader indexLoader) {
- this.indexLoader = indexLoader;
- }
-
- public TenantIndexingLoader getIndexLoaderService(){
- return indexLoader;
- }
-
- public RegistryService getRegistryService() {
- return registryService;
- }
-
- public void setRegistryService(RegistryService registryService) {
- this.registryService = registryService;
- }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java
index 2314b738061..fe2cad0ea19 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/main/java/org/wso2/carbon/device/mgt/analytics/data/publisher/internal/DataPublisherServiceComponent.java
@@ -26,30 +26,10 @@ import org.osgi.service.component.ComponentContext;
import org.wso2.carbon.device.mgt.analytics.data.publisher.config.AnalyticsConfiguration;
import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherServiceImpl;
-import org.wso2.carbon.registry.core.service.RegistryService;
-import org.wso2.carbon.registry.core.service.TenantRegistryLoader;
-import org.wso2.carbon.registry.indexing.service.TenantIndexingLoader;
/**
* @scr.component name="org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DataPublisherServiceComponent"
* immediate="true"
- * @scr.reference name="registry.service"
- * interface="org.wso2.carbon.registry.core.service.RegistryService"
- * cardinality="1..1"
- * policy="dynamic"
- * bind="setRegistryService"
- * unbind="unsetRegistryService"
- * @scr.reference name="tenant.registryloader"
- * interface="org.wso2.carbon.registry.core.service.TenantRegistryLoader"
- * cardinality="1..1" policy="dynamic"
- * bind="setTenantRegistryLoader"
- * unbind="unsetTenantRegistryLoader"
- * @scr.reference name="tenant.indexloader"
- * interface="org.wso2.carbon.registry.indexing.service.TenantIndexingLoader"
- * cardinality="1..1"
- * policy="dynamic"
- * bind="setIndexLoader"
- * unbind="unsetIndexLoader"
*/
public class DataPublisherServiceComponent {
@@ -62,11 +42,9 @@ public class DataPublisherServiceComponent {
log.debug("Initializing device analytics bundle");
}
AnalyticsConfiguration.init();
-
BundleContext bundleCtx = componentCtx.getBundleContext();
this.analyticsServiceRef =
bundleCtx.registerService(EventsPublisherService.class, new EventsPublisherServiceImpl(), null);
-
if (log.isDebugEnabled()) {
log.debug("Device management analytics bundle has been successfully initialized");
}
@@ -86,35 +64,4 @@ public class DataPublisherServiceComponent {
log.debug("Device analytics bundle has been successfully deactivated");
}
}
-
- protected void setRegistryService(RegistryService registryService) {
- if (registryService != null && log.isDebugEnabled()) {
- log.debug("Registry service initialized");
- }
- DataPublisherDataHolder.getInstance().setRegistryService(registryService);
- }
-
- protected void unsetRegistryService(RegistryService registryService) {
- DataPublisherDataHolder.getInstance().setRegistryService(null);
- }
-
- protected void setTenantRegistryLoader(TenantRegistryLoader tenantRegistryLoader) {
- DataPublisherDataHolder.getInstance().setTenantRegistryLoader(tenantRegistryLoader);
- }
-
- protected void unsetTenantRegistryLoader(TenantRegistryLoader tenantRegistryLoader) {
- DataPublisherDataHolder.getInstance().setTenantRegistryLoader(null);
- }
-
- protected void setIndexLoader(TenantIndexingLoader indexLoader) {
- if (indexLoader != null && log.isDebugEnabled()) {
- log.debug("IndexLoader service initialized");
- }
- DataPublisherDataHolder.getInstance().setIndexLoaderService(indexLoader);
- }
-
- protected void unsetIndexLoader(TenantIndexingLoader indexLoader) {
- DataPublisherDataHolder.getInstance().setIndexLoaderService(null);
- }
-
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/BaseAnalyticsDataPublisherTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/BaseAnalyticsDataPublisherTest.java
new file mode 100644
index 00000000000..3d42a3020b3
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/BaseAnalyticsDataPublisherTest.java
@@ -0,0 +1,57 @@
+/*
+* 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.carbon.device.mgt.analytics.data.publisher;
+
+import org.testng.annotations.BeforeSuite;
+import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+
+import java.io.File;
+
+public class BaseAnalyticsDataPublisherTest {
+
+ @BeforeSuite
+ public void init() {
+ setUpCarbonHome();
+ }
+
+ private void setUpCarbonHome() {
+ if (System.getProperty("carbon.home") == null) {
+ File file = new File("src/test/resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ file = new File("../../../resources/carbon-home");
+ if (file.exists()) {
+ System.setProperty("carbon.home", file.getAbsolutePath());
+ }
+ }
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(MultitenantConstants
+ .SUPER_TENANT_DOMAIN_NAME);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID);
+ }
+
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherConfigTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherConfigTest.java
new file mode 100644
index 00000000000..e5bcab93787
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherConfigTest.java
@@ -0,0 +1,83 @@
+/*
+* 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.carbon.device.mgt.analytics.data.publisher;
+
+import junit.framework.Assert;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.config.AnalyticsConfiguration;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.config.InvalidConfigurationStateException;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.net.URL;
+
+/**
+ * This test class will validate the Data publisher configuration creation.
+ */
+public class DataPublisherConfigTest extends BaseAnalyticsDataPublisherTest {
+
+ @Test(description = "Validating the behaviour od getInstance of the config before calling the init",
+ expectedExceptions = InvalidConfigurationStateException.class)
+ public void testGetInstanceWithoutInit() throws NoSuchFieldException, IllegalAccessException {
+ Field configField = AnalyticsConfiguration.class.getDeclaredField("config");
+ configField.setAccessible(true);
+ configField.set(configField, null);
+ AnalyticsConfiguration.getInstance();
+ }
+
+ @Test(description = "Validating the behaviour od getInstance of the config before calling the init",
+ expectedExceptions = DataPublisherConfigurationException.class,
+ dependsOnMethods = "testGetInstanceWithoutInit")
+ public void testInitWithInvalidConfig() throws DataPublisherConfigurationException {
+ ClassLoader classLoader = this.getClass().getClassLoader();
+ URL invalidConfig = classLoader.getResource("carbon-home/repository/conf/etc/" +
+ "device-analytics-config-invalid.xml");
+ Assert.assertTrue("No configuration - device-analytics-config-invalid.xml found in resource dir",
+ invalidConfig != null);
+ File file = new File(invalidConfig.getFile());
+ AnalyticsConfiguration.init(file.getAbsolutePath());
+ }
+
+
+ @Test(description = "Validating the behaviour od getInstance of the config before calling the init",
+ expectedExceptions = DataPublisherConfigurationException.class,
+ dependsOnMethods = "testInitWithInvalidConfig")
+ public void testInitWithInvalidXML() throws DataPublisherConfigurationException {
+ ClassLoader classLoader = this.getClass().getClassLoader();
+ URL invalidConfig = classLoader.getResource("carbon-home/repository/conf/etc/" +
+ "device-analytics-config-invalid-xml.xml");
+ Assert.assertTrue("No configuration - device-analytics-config-invalid-xml.xml found in resource dir",
+ invalidConfig != null);
+ File file = new File(invalidConfig.getFile());
+ AnalyticsConfiguration.init(file.getAbsolutePath());
+ }
+
+
+ @Test(description = "Validating the init method with all required params",
+ dependsOnMethods = "testInitWithInvalidXML")
+ public void testInitWithValidConfig() throws DataPublisherConfigurationException {
+ AnalyticsConfiguration.init();
+ AnalyticsConfiguration analyticsConfiguration = AnalyticsConfiguration.getInstance();
+ Assert.assertEquals(analyticsConfiguration.getAdminPassword(), "testuserpwd");
+ Assert.assertEquals(analyticsConfiguration.getAdminUsername(), "testuser");
+ Assert.assertEquals(analyticsConfiguration.getReceiverServerUrl(), "tcp://localhost:7615");
+ Assert.assertTrue(analyticsConfiguration.isEnable());
+ }
+
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherServiceComponentTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherServiceComponentTest.java
new file mode 100644
index 00000000000..d5ffb75d487
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/DataPublisherServiceComponentTest.java
@@ -0,0 +1,67 @@
+/*
+* 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.carbon.device.mgt.analytics.data.publisher;
+
+
+import org.apache.sling.testing.mock.osgi.MockOsgi;
+import org.osgi.service.component.ComponentContext;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.internal.DataPublisherServiceComponent;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.util.TestComponentContext;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * This tesclass will be validating the behaviour of {@link DataPublisherServiceComponent}
+ */
+public class DataPublisherServiceComponentTest extends BaseAnalyticsDataPublisherTest {
+ private DataPublisherServiceComponent serviceComponent;
+
+ @BeforeClass
+ public void initTest() {
+ this.serviceComponent = new DataPublisherServiceComponent();
+ }
+
+ @Test (description = "Test bundle activation with exception thrown when service resgistration")
+ public void activateWithException() throws NoSuchMethodException, IllegalAccessException,
+ InvocationTargetException {
+ this.activate(new TestComponentContext());
+ }
+
+ @Test(dependsOnMethods = "activateWithException", description = "Test the bundle activation with succesful path")
+ public void activateWithoutException() throws NoSuchMethodException, InvocationTargetException,
+ IllegalAccessException {
+ this.activate(MockOsgi.newComponentContext());
+ }
+
+ @Test(dependsOnMethods = "activateWithoutException", description = "Test bundle deactivation")
+ public void deActivate() throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ Method method = this.serviceComponent.getClass().getDeclaredMethod("deactivate", ComponentContext.class);
+ method.setAccessible(true);
+ method.invoke(this.serviceComponent, MockOsgi.newComponentContext());
+ }
+
+ private void activate(ComponentContext componentContext) throws NoSuchMethodException, InvocationTargetException,
+ IllegalAccessException {
+ Method method = this.serviceComponent.getClass().getDeclaredMethod("activate", ComponentContext.class);
+ method.setAccessible(true);
+ method.invoke(this.serviceComponent, componentContext);
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/EventPublisherServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/EventPublisherServiceTest.java
new file mode 100644
index 00000000000..a7e5e8083df
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/EventPublisherServiceTest.java
@@ -0,0 +1,144 @@
+/*
+* 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.carbon.device.mgt.analytics.data.publisher;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.databridge.agent.AgentHolder;
+import org.wso2.carbon.databridge.agent.exception.DataEndpointAgentConfigurationException;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.config.AnalyticsConfiguration;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.config.InvalidConfigurationStateException;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.exception.DataPublisherConfigurationException;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
+import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherServiceImpl;
+
+import java.lang.reflect.Field;
+
+/**
+ * This test class will test the methods that are exposed from {@link EventsPublisherService}
+ */
+public class EventPublisherServiceTest extends BaseAnalyticsDataPublisherTest {
+
+ private static final String STREAM_NAME = "org.wso2.test.stream";
+ private static final String TENANT_DOMAIN = "test.com";
+
+ private EventsPublisherService eventsPublisherService;
+
+ @BeforeClass
+ public void initTest() {
+ this.eventsPublisherService = new EventsPublisherServiceImpl();
+ }
+
+ @Test(description = "Publish the event before initializing",
+ expectedExceptions = InvalidConfigurationStateException.class)
+ public void publishBeforeInit() throws DataPublisherConfigurationException, NoSuchFieldException,
+ IllegalAccessException, InstantiationException {
+ Field configField = AnalyticsConfiguration.class.getDeclaredField("config");
+ configField.setAccessible(true);
+ configField.set(configField, null);
+ this.eventsPublisherService.publishEvent(STREAM_NAME, "1.0.0", getEventProps(), getEventProps(),
+ getEventProps());
+ }
+
+ @Test(description = "Publish with analytics config disabled", dependsOnMethods = "publishBeforeInit")
+ public void publishWhenAnalyticsConfigDisabled() throws DataPublisherConfigurationException {
+ AnalyticsConfiguration.init();
+ AnalyticsConfiguration.getInstance().setEnable(false);
+ boolean published = this.eventsPublisherService.publishEvent(STREAM_NAME, "1.0.0", getEventProps(),
+ getEventProps(), getEventProps());
+ Assert.assertFalse(published);
+ }
+
+ @Test(description = "Publish the event after initializing", dependsOnMethods = "publishWhenAnalyticsConfigDisabled")
+ public void publishAfterInit() throws DataPublisherConfigurationException {
+ AnalyticsConfiguration.getInstance().setEnable(true);
+ boolean published = this.eventsPublisherService.publishEvent(STREAM_NAME, "1.0.0", getEventProps(),
+ getEventProps(), getEventProps());
+ Assert.assertTrue(published);
+ }
+
+ @Test(description = "Publish as tenant", dependsOnMethods = "publishAfterInit")
+ public void publishAsTenant() throws DataPublisherConfigurationException {
+ publishAsTenant(getEventProps());
+ }
+
+ @Test(description = "Publish the with no meta data as tenant", dependsOnMethods = "publishAsTenant",
+ expectedExceptions = DataPublisherConfigurationException.class)
+ public void publishAsTenantWithNoMetaData() throws DataPublisherConfigurationException {
+ publishAsTenant(null);
+ }
+
+ @Test(description = "Publish the with empty meta data as tenant", dependsOnMethods = "publishAsTenant",
+ expectedExceptions = DataPublisherConfigurationException.class)
+ public void publishAsTenantWithEmptyMetaData() throws DataPublisherConfigurationException {
+ publishAsTenant(new Object[0]);
+ }
+
+ @Test(description = "Publishing with invalid data publisher config",
+ dependsOnMethods = {"publishAsTenantWithEmptyMetaData", "publishAsTenantWithNoMetaData"},
+ expectedExceptions = DataPublisherConfigurationException.class)
+ public void publishWithDataEndpointConfigException() throws DataPublisherConfigurationException,
+ NoSuchFieldException, IllegalAccessException {
+ AnalyticsConfiguration analyticsConfiguration = AnalyticsConfiguration.getInstance();
+ analyticsConfiguration.setReceiverServerUrl("");
+ Field dataPublisherField = DeviceDataPublisher.class.getDeclaredField("deviceDataPublisher");
+ dataPublisherField.setAccessible(true);
+ dataPublisherField.set(dataPublisherField, null);
+ publishAsTenant(getEventProps());
+ }
+
+ @Test(description = "Publishing with invalid data publisher config",
+ dependsOnMethods = "publishWithDataEndpointConfigException",
+ expectedExceptions = DataPublisherConfigurationException.class)
+ public void publishWithDataAgentConfigException() throws DataPublisherConfigurationException,
+ NoSuchFieldException, IllegalAccessException, DataEndpointAgentConfigurationException {
+ AnalyticsConfiguration.init();
+ Field defaultAgentName = AgentHolder.getInstance().getClass().getDeclaredField("defaultDataEndpointAgentName");
+ defaultAgentName.setAccessible(true);
+ defaultAgentName.set(AgentHolder.getInstance(), "dummyAgent");
+ publishAsTenant(getEventProps());
+ }
+
+ @Test(description = "Publishing with invalid data publisher config",
+ dependsOnMethods = "publishWithDataAgentConfigException")
+ public void publishWithDataEndpointException() throws DataPublisherConfigurationException,
+ NoSuchFieldException, IllegalAccessException, DataEndpointAgentConfigurationException {
+ AnalyticsConfiguration.init();
+
+ }
+
+ private void publishAsTenant(Object[] metaData) throws DataPublisherConfigurationException {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain(TENANT_DOMAIN, true);
+ try {
+ boolean published = this.eventsPublisherService.publishEvent(STREAM_NAME, "1.0.0", metaData,
+ getEventProps(), getEventProps());
+ Assert.assertTrue(published);
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
+ private Object[] getEventProps() {
+ return new Object[]{"123"};
+ }
+
+
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/util/TestComponentContext.java b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/util/TestComponentContext.java
new file mode 100644
index 00000000000..adcb3cba2fa
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/java/org/wso2/carbon/device/mgt/analytics/data/publisher/util/TestComponentContext.java
@@ -0,0 +1,81 @@
+/*
+* 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.carbon.device.mgt.analytics.data.publisher.util;
+
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.ComponentInstance;
+
+import java.util.Dictionary;
+
+/**
+ * Mock implementation for component context.
+ */
+public class TestComponentContext implements ComponentContext {
+ @Override
+ public Dictionary getProperties() {
+ return null;
+ }
+
+ @Override
+ public Object locateService(String s) {
+ return null;
+ }
+
+ @Override
+ public Object locateService(String s, ServiceReference serviceReference) {
+ return null;
+ }
+
+ @Override
+ public Object[] locateServices(String s) {
+ return new Object[0];
+ }
+
+ @Override
+ public BundleContext getBundleContext() {
+ return null;
+ }
+
+ @Override
+ public Bundle getUsingBundle() {
+ return null;
+ }
+
+ @Override
+ public ComponentInstance getComponentInstance() {
+ return null;
+ }
+
+ @Override
+ public void enableComponent(String s) {
+
+ }
+
+ @Override
+ public void disableComponent(String s) {
+
+ }
+
+ @Override
+ public ServiceReference getServiceReference() {
+ return null;
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/carbon.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/carbon.xml
new file mode 100644
index 00000000000..31752cf9b44
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/carbon.xml
@@ -0,0 +1,656 @@
+
+
+
+
+
+
+
+
+ ${product.name}
+
+
+ ${product.key}
+
+
+ ${product.version}
+
+
+
+
+
+
+
+
+ local:/${carbon.context}/services/
+
+
+
+
+
+
+ ${default.server.role}
+
+
+
+
+
+
+ org.wso2.carbon
+
+
+ /
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 9999
+
+ 11111
+
+
+
+
+
+ 10389
+
+ 8000
+
+
+
+
+
+ 10500
+
+
+
+
+
+
+ org.wso2.carbon.tomcat.jndi.CarbonJavaURLContextFactory
+
+
+
+
+
+
+
+
+ java
+
+
+
+
+
+
+
+
+
+ false
+
+
+ false
+
+
+ 600
+
+
+
+ false
+
+
+
+
+
+
+
+ 30
+
+
+
+
+
+
+
+
+ 15
+
+
+
+
+
+ ${carbon.home}/repository/deployment/server/
+
+
+ 15
+
+
+ ${carbon.home}/repository/conf/axis2/axis2.xml
+
+
+ 30000
+
+
+ ${carbon.home}/repository/deployment/client/
+
+ ${carbon.home}/repository/conf/axis2/axis2_client.xml
+
+ true
+
+
+
+
+
+
+
+
+
+ admin
+ Default Administrator Role
+
+
+ user
+ Default User Role
+
+
+
+
+
+
+
+
+
+
+
+ ${carbon.home}/repository/resources/security/wso2carbon.jks
+
+ JKS
+
+ wso2carbon
+
+ wso2carbon
+
+ wso2carbon
+
+
+
+
+
+ ${carbon.home}/repository/resources/security/client-truststore.jks
+
+ JKS
+
+ wso2carbon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ UserManager
+
+
+ false
+
+
+
+
+
+
+ ${carbon.home}/tmp/work
+
+
+
+
+
+ true
+
+
+ 10
+
+
+ 30
+
+
+
+
+
+ 100
+
+
+
+ keystore
+ certificate
+ *
+
+ org.wso2.carbon.ui.transports.fileupload.AnyFileUploadExecutor
+
+
+
+
+ jarZip
+
+ org.wso2.carbon.ui.transports.fileupload.JarZipUploadExecutor
+
+
+
+ dbs
+
+ org.wso2.carbon.ui.transports.fileupload.DBSFileUploadExecutor
+
+
+
+ tools
+
+ org.wso2.carbon.ui.transports.fileupload.ToolsFileUploadExecutor
+
+
+
+ toolsAny
+
+ org.wso2.carbon.ui.transports.fileupload.ToolsAnyFileUploadExecutor
+
+
+
+
+
+
+ - info
+ org.wso2.carbon.core.transports.util.InfoProcessor
+
+
+ - wsdl
+ org.wso2.carbon.core.transports.util.Wsdl11Processor
+
+
+ - wsdl2
+ org.wso2.carbon.core.transports.util.Wsdl20Processor
+
+
+ - xsd
+ org.wso2.carbon.core.transports.util.XsdProcessor
+
+
+
+
+
+ false
+ false
+ true
+ svn
+ http://svnrepo.example.com/repos/
+ username
+ password
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${require.carbon.servlet}
+
+
+
+
+ true
+
+
+
+
+
+
+ default repository
+ ${p2.repo.url}
+
+
+
+
+
+
+
+ true
+
+
+
+
+
+ true
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/data-bridge/data-agent-config-invalid.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/data-bridge/data-agent-config-invalid.xml
new file mode 100644
index 00000000000..2d0264e3684
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/data-bridge/data-agent-config-invalid.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ Thrift
+ org.wso2.carbon.databridge.agent.endpoint.thrift.ThriftDataEndpointNoClass
+ src/test/resources/client-truststore.jks
+ wso2carbon
+ 32768
+ 200
+ 1
+ 30000
+ 1
+ 20
+ 30
+ 250
+ 250
+ 5500
+ 5000
+ 250
+ 250
+ 5500
+ 5000
+
+
+
+
+
+ Binary
+ org.wso2.carbon.databridge.agent.endpoint.binary.BinaryDataEndpoint
+ src/test/resources/client-truststore.jks
+ wso2carbon
+ 32768
+ 200
+ 1
+ 1
+ 30000
+ 20
+ 30
+ 250
+ 250
+ 5500
+ 5000
+ 250
+ 250
+ 5500
+ 5000
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/data-bridge/data-agent-config.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/data-bridge/data-agent-config.xml
new file mode 100644
index 00000000000..05215f7fc0c
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/data-bridge/data-agent-config.xml
@@ -0,0 +1,69 @@
+
+
+
+
+
+ Thrift
+ org.wso2.carbon.databridge.agent.endpoint.thrift.ThriftDataEndpoint
+ src/test/resources/client-truststore.jks
+ wso2carbon
+ 32768
+ 200
+ 1
+ 30000
+ 1
+ 20
+ 30
+ 250
+ 250
+ 5500
+ 5000
+ 250
+ 250
+ 5500
+ 5000
+
+
+
+
+
+ Binary
+ org.wso2.carbon.databridge.agent.endpoint.binary.BinaryDataEndpoint
+ src/test/resources/client-truststore.jks
+ wso2carbon
+ 32768
+ 200
+ 1
+ 1
+ 30000
+ 20
+ 30
+ 250
+ 250
+ 5500
+ 5000
+ 250
+ 250
+ 5500
+ 5000
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config-invalid-xml.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config-invalid-xml.xml
new file mode 100644
index 00000000000..4353624e503
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config-invalid-xml.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ tcp://localhost:7615
+ testuser
+ testuserpwd
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config-invalid.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config-invalid.xml
new file mode 100644
index 00000000000..624a05b5f41
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config-invalid.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+ tcp://localhost:7615
+ testuser
+ testuserpwd
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config.xml
new file mode 100644
index 00000000000..8edea74667b
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/etc/device-analytics-config.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+ true
+ tcp://localhost:7615
+ testuser
+ testuserpwd
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/registry.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/registry.xml
new file mode 100644
index 00000000000..a226ae80a81
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/carbon-home/repository/conf/registry.xml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+ wso2registry
+ false
+ true
+ /
+
+
+ jdbc:h2:./target/databasetest/CARBON_TEST
+
+ org.h2.Driver
+ 80
+ 60000
+ 5
+
+
+ false
+
+
+
+ true
+ true
+ true
+ true
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/client-truststore.jks b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/client-truststore.jks
new file mode 100644
index 00000000000..3b9fdfb9e84
Binary files /dev/null and b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/client-truststore.jks differ
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/testng.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/testng.xml
new file mode 100644
index 00000000000..8a3669fd4db
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/src/test/resources/testng.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
index 8f19946f316..8e7f8163390 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/pom.xml
@@ -22,7 +22,7 @@
device-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
@@ -300,11 +300,6 @@
org.wso2.carbon.apimgt.annotations
provided
-
- org.wso2.carbon.devicemgt
- org.wso2.carbon.device.mgt.analytics.dashboard
- provided
-
org.wso2.orbit.com.fasterxml.jackson.core
jackson-annotations
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java
index d719e90e000..254ad9a95eb 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.api/src/main/java/org/wso2/carbon/device/mgt/jaxrs/util/DeviceMgtAPIUtils.java
@@ -35,7 +35,6 @@ import org.wso2.carbon.analytics.api.AnalyticsDataAPI;
import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.core.util.Utils;
-import org.wso2.carbon.device.mgt.analytics.dashboard.GadgetDataService;
import org.wso2.carbon.device.mgt.analytics.data.publisher.service.EventsPublisherService;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
@@ -438,15 +437,6 @@ public class DeviceMgtAPIUtils {
return searchManagerService;
}
- public static GadgetDataService getGadgetDataService() {
- PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
- GadgetDataService gadgetDataService = (GadgetDataService) ctx.getOSGiService(GadgetDataService.class, null);
- if (gadgetDataService == null) {
- throw new IllegalStateException("Gadget Data Service has not been initialized.");
- }
- return gadgetDataService;
- }
-
public static GeoLocationProviderService getGeoService() {
PrivilegedCarbonContext ctx = PrivilegedCarbonContext.getThreadLocalCarbonContext();
GeoLocationProviderService
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml
index 358640533cb..c55bf82534b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.common/pom.xml
@@ -21,7 +21,7 @@
device-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml
index add0e87d77c..dd957edad74 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
device-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
@@ -163,11 +163,6 @@
org.wso2.carbon.devicemgt
org.wso2.carbon.device.mgt.common
-
- org.powermock
- powermock-api-mockito
- test
-
org.wso2.carbon.devicemgt
org.wso2.carbon.device.mgt.analytics.data.publisher
@@ -355,7 +350,11 @@
javassist
javassist
-
+
+
+ org.powermock
+ powermock-api-mockito
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java
index decb956f1ed..1dc588f0e13 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/AbstractDeviceDAOImpl.java
@@ -122,7 +122,14 @@ public abstract class AbstractDeviceDAOImpl implements DeviceDAO {
"e.DATE_OF_ENROLMENT, e.ID AS ENROLMENT_ID FROM DM_ENROLMENT e, (SELECT d.ID, d.DESCRIPTION, d.NAME, " +
"t.NAME AS DEVICE_TYPE, d.DEVICE_IDENTIFICATION FROM DM_DEVICE d, DM_DEVICE_TYPE t WHERE " +
"t.NAME = ? AND t.ID = d.DEVICE_TYPE_ID AND d.DEVICE_IDENTIFICATION = ? AND d.TENANT_ID = ?) d1 WHERE d1.ID = e.DEVICE_ID " +
- "AND TENANT_ID = ? ORDER BY e.DATE_OF_LAST_UPDATE DESC";
+ "AND TENANT_ID = ? ORDER BY e.DATE_OF_LAST_UPDATE DESC, e.STATUS ASC";
+ // Status adeed as an orderby clause to fix a bug : when an existing device is
+ // re-enrolled, earlier enrollment is marked as removed and a new enrollment is added.
+ // However, both enrollments share the same time stamp. When retrieving the device
+ // due to same timestamp, enrollment information is incorrect, intermittently. Hence
+ // status also should be taken into consideration when ordering. This should not present a
+ // problem for other status transitions, as there would be an intermediary removed
+ // state in between.
stmt = conn.prepareStatement(sql);
stmt.setString(1, deviceIdentifier.getType());
stmt.setString(2, deviceIdentifier.getId());
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java
index 36b56e357a4..91102990091 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceImpl.java
@@ -390,7 +390,7 @@ public class GeoLocationProviderServiceImpl implements GeoLocationProviderServic
}
}
- private EventProcessorAdminServiceStub getEventProcessorAdminServiceStub() throws JWTClientException {
+ protected EventProcessorAdminServiceStub getEventProcessorAdminServiceStub() throws JWTClientException {
//send alert to event-processing
String eventProcessorAdminServiceWSUrl = Utils.replaceSystemProperty(GeoServices.DAS_URL) +
"/services/EventProcessorAdminService";
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationEnrolmentMapping.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationEnrolmentMapping.java
index 4bccaaca929..faa0eab13b4 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationEnrolmentMapping.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationEnrolmentMapping.java
@@ -25,12 +25,12 @@ import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
*/
public class OperationEnrolmentMapping {
- int enrolmentId;
- int tenantId;
- long createdTime;
- String deviceType;
- String deviceId;
- EnrolmentInfo.Status deviceStatus;
+ private int enrolmentId;
+ private int tenantId;
+ private long createdTime;
+ private String deviceType;
+ private String deviceId;
+ private EnrolmentInfo.Status deviceStatus;
public int getTenantId() {
return tenantId;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationMgtConstants.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationMgtConstants.java
index b0bd195dee3..8da340170a4 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationMgtConstants.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationMgtConstants.java
@@ -22,7 +22,6 @@ public class OperationMgtConstants {
public final class DeviceConstants {
private DeviceConstants() {
- throw new AssertionError();
}
public static final String DEVICE_ID_NOT_FOUND = "Device not found for device id: %s";
@@ -30,8 +29,8 @@ public class OperationMgtConstants {
public final class OperationCodes {
private OperationCodes() {
- throw new AssertionError();
}
+
public static final String POLICY_REVOKE = "POLICY_REVOKE";
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java
index 58b0083b056..e58341da8af 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/OperationDAO.java
@@ -31,8 +31,6 @@ public interface OperationDAO {
int addOperation(Operation operation) throws OperationManagementDAOException;
- void updateOperation(Operation operation) throws OperationManagementDAOException;
-
Operation getOperation(int operationId) throws OperationManagementDAOException;
Operation getOperationByDeviceAndId(int enrolmentId, int operationId) throws OperationManagementDAOException;
@@ -66,8 +64,6 @@ public interface OperationDAO {
Activity getActivityByDevice(int operationId, int deviceId) throws OperationManagementDAOException;
- List getActivitiesUpdatedAfter(long timestamp) throws OperationManagementDAOException;
-
List getActivitiesUpdatedAfter(long timestamp, int limit, int offset) throws OperationManagementDAOException;
int getActivityCountUpdatedAfter(long timestamp) throws OperationManagementDAOException;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/CommandOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/CommandOperationDAOImpl.java
index ac64d6550c5..ca5c5a46ea7 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/CommandOperationDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/CommandOperationDAOImpl.java
@@ -53,23 +53,6 @@ public class CommandOperationDAOImpl extends GenericOperationDAOImpl {
return operationId;
}
- @Override
- public void updateOperation(Operation operation) throws OperationManagementDAOException {
- PreparedStatement stmt = null;
- try {
- Connection connection = OperationManagementDAOFactory.getConnection();
- stmt = connection.prepareStatement(
- "UPDATE DM_COMMAND_OPERATION SET ENABLED = ? WHERE OPERATION_ID = ?");
- stmt.setBoolean(1, operation.isEnabled());
- stmt.setInt(2, operation.getId());
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new OperationManagementDAOException("Error occurred while adding operation metadata", e);
- } finally {
- OperationManagementDAOUtil.cleanupResources(stmt);
- }
- }
-
public CommandOperation getOperation(int id) throws OperationManagementDAOException {
PreparedStatement stmt = null;
ResultSet rs = null;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ConfigOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ConfigOperationDAOImpl.java
index a2aefc111fc..632d3dec993 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ConfigOperationDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ConfigOperationDAOImpl.java
@@ -58,46 +58,6 @@ public class ConfigOperationDAOImpl extends GenericOperationDAOImpl {
return operationId;
}
- @Override
- public void updateOperation(Operation operation) throws OperationManagementDAOException {
- PreparedStatement stmt = null;
- ByteArrayOutputStream bao = null;
- ObjectOutputStream oos = null;
- try {
- super.updateOperation(operation);
- Connection connection = OperationManagementDAOFactory.getConnection();
- stmt = connection.prepareStatement("UPDATE FROM DM_CONFIG_OPERATION SET OPERATION_CONFIG = ? " +
- "WHERE OPERATION_ID = ?");
- bao = new ByteArrayOutputStream();
- oos = new ObjectOutputStream(bao);
- oos.writeObject(operation);
-
- stmt.setBytes(1, bao.toByteArray());
- stmt.setInt(2, operation.getId());
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new OperationManagementDAOException("Error occurred while update policy operation metadata", e);
- } catch (IOException e) {
- throw new OperationManagementDAOException("Error occurred while serializing policy operation object", e);
- } finally {
- if (bao != null) {
- try {
- bao.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ByteArrayOutputStream", e);
- }
- }
- if (oos != null) {
- try {
- oos.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ObjectOutputStream", e);
- }
- }
- OperationManagementDAOUtil.cleanupResources(stmt);
- }
- }
-
@Override
public Operation getOperation(int operationId) throws OperationManagementDAOException {
PreparedStatement stmt = null;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java
index 7ab5a4bd94d..a575d18cf3e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/GenericOperationDAOImpl.java
@@ -85,23 +85,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
}
}
- @Override
- public void updateOperation(Operation operation) throws OperationManagementDAOException {
- PreparedStatement stmt = null;
- try {
- Connection connection = OperationManagementDAOFactory.getConnection();
- stmt = connection.prepareStatement("UPDATE DM_OPERATION SET RECEIVED_TIMESTAMP=? " +
- "WHERE ID=?");
- stmt.setTimestamp(1, new Timestamp(new Date().getTime()));
- stmt.setInt(2, operation.getId());
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new OperationManagementDAOException("Error occurred while update operation metadata", e);
- } finally {
- OperationManagementDAOUtil.cleanupResources(stmt);
- }
- }
-
public boolean updateOperationStatus(int enrolmentId, int operationId, Operation.Status status)
throws OperationManagementDAOException {
PreparedStatement stmt = null;
@@ -403,11 +386,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
return activity;
}
- @Override
- public List getActivitiesUpdatedAfter(long timestamp) throws OperationManagementDAOException {
- return this.getActivitiesUpdatedAfter(timestamp, 0, 0);
- }
-
@Override
public List getActivitiesUpdatedAfter(long timestamp, int limit,
int offset) throws OperationManagementDAOException {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/PolicyOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/PolicyOperationDAOImpl.java
index f24cfb3ae3b..7f142b7d04c 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/PolicyOperationDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/PolicyOperationDAOImpl.java
@@ -82,46 +82,6 @@ public class PolicyOperationDAOImpl extends GenericOperationDAOImpl {
return operationId;
}
- @Override
- public void updateOperation(Operation operation) throws OperationManagementDAOException {
- PreparedStatement stmt = null;
- ByteArrayOutputStream bao = null;
- ObjectOutputStream oos = null;
- try {
- super.updateOperation(operation);
- Connection connection = OperationManagementDAOFactory.getConnection();
- stmt = connection.prepareStatement("UPDATE DM_POLICY_OPERATION SET OPERATION_DETAILS=? " +
- "WHERE OPERATION_ID=?");
- bao = new ByteArrayOutputStream();
- oos = new ObjectOutputStream(bao);
- oos.writeObject(operation);
-
- stmt.setBytes(1, bao.toByteArray());
- stmt.setInt(2, operation.getId());
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new OperationManagementDAOException("Error occurred while update policy operation metadata", e);
- } catch (IOException e) {
- throw new OperationManagementDAOException("Error occurred while serializing policy operation object", e);
- } finally {
- if (bao != null) {
- try {
- bao.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ByteArrayOutputStream", e);
- }
- }
- if (oos != null) {
- try {
- oos.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ObjectOutputStream", e);
- }
- }
- OperationManagementDAOUtil.cleanupResources(stmt);
- }
- }
-
@Override
public Operation getOperation(int operationId) throws OperationManagementDAOException {
PreparedStatement stmt = null;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ProfileOperationDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ProfileOperationDAOImpl.java
index 78b88f9855f..9223b3c030a 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ProfileOperationDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/dao/impl/ProfileOperationDAOImpl.java
@@ -82,47 +82,6 @@ public class ProfileOperationDAOImpl extends GenericOperationDAOImpl {
return operationId;
}
- @Override
- public void updateOperation(Operation operation) throws OperationManagementDAOException {
- PreparedStatement stmt = null;
- ByteArrayOutputStream bao = null;
- ObjectOutputStream oos = null;
- try {
- super.updateOperation(operation);
- Connection connection = OperationManagementDAOFactory.getConnection();
- stmt = connection.prepareStatement("UPDATE DM_PROFILE_OPERATION SET OPERATION_DETAILS=? " +
- "WHERE OPERATION_ID=?");
-
- bao = new ByteArrayOutputStream();
- oos = new ObjectOutputStream(bao);
- oos.writeObject(operation);
-
- stmt.setBytes(1, bao.toByteArray());
- stmt.setInt(2, operation.getId());
- stmt.executeUpdate();
- } catch (SQLException e) {
- throw new OperationManagementDAOException("Error occurred while update operation metadata", e);
- } catch (IOException e) {
- throw new OperationManagementDAOException("Error occurred while serializing profile operation object", e);
- } finally {
- if (bao != null) {
- try {
- bao.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ByteArrayOutputStream", e);
- }
- }
- if (oos != null) {
- try {
- oos.close();
- } catch (IOException e) {
- log.warn("Error occurred while closing ObjectOutputStream", e);
- }
- }
- OperationManagementDAOUtil.cleanupResources(stmt);
- }
- }
-
public Operation getOperation(int id) throws OperationManagementDAOException {
PreparedStatement stmt = null;
ResultSet rs = null;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java
index ab31f82599f..4c1454015b6 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceImpl.java
@@ -1741,6 +1741,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
if (requireDeviceInfo) {
this.getAllDeviceInfo(userDevices);
}
+ devices.addAll(userDevices);
}
return devices;
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java
index c81b4e4eb3b..010b47b8d0e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManager.java
@@ -108,7 +108,10 @@ public class TestDeviceManager implements DeviceManager {
@Override
public License getLicense(String languageCode) throws LicenseManagementException {
- return null;
+ License testLicense = new License();
+ testLicense.setText("This is a dummy license for test device type.");
+ testLicense.setLanguage("ENG");
+ return testLicense;
}
@Override
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java
index 882cc266f6d..f44e65ee0d5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestTaskServiceImpl.java
@@ -38,6 +38,10 @@ public class TestTaskServiceImpl implements TaskService {
this.taskManager = new TestTaskManagerImpl();
}
+ public void setTaskManager(TaskManager taskManager) {
+ this.taskManager = taskManager;
+ }
+
@Override
public TaskManager getTaskManager(String s) throws TaskException {
return this.taskManager;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestUtils.java
index 29aad743c83..4b10c865c25 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestUtils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestUtils.java
@@ -22,6 +22,7 @@ import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.GroupPaginationRequest;
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
+import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.registry.core.config.RegistryContext;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
@@ -108,7 +109,7 @@ public class TestUtils {
public static List getDeviceIdentifiersList(){
DeviceIdentifier identifier = new DeviceIdentifier();
identifier.setId("12345");
- identifier.setType("Test");
+ identifier.setType(TestDataHolder.TEST_DEVICE_TYPE);
List list = new ArrayList<>();
list.add(identifier);
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java
index e5c21cdcd84..466d92becf2 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/BaseDeviceManagementTest.java
@@ -18,6 +18,9 @@
*/
package org.wso2.carbon.device.mgt.core.common;
+import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.ConfigurationContextFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.jdbc.pool.PoolProperties;
@@ -47,6 +50,7 @@ import org.wso2.carbon.registry.core.internal.RegistryDataHolder;
import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService;
import org.wso2.carbon.registry.core.service.RegistryService;
import org.wso2.carbon.user.core.service.RealmService;
+import org.wso2.carbon.utils.ConfigurationContextService;
import javax.sql.DataSource;
import javax.xml.bind.JAXBContext;
@@ -80,7 +84,7 @@ public abstract class BaseDeviceManagementTest {
NotificationManagementDAOFactory.init(dataSource);
}
- private void initServices() throws DeviceManagementException, RegistryException {
+ private void initServices() throws DeviceManagementException, RegistryException, AxisFault {
DeviceConfigurationManager.getInstance().initConfig();
DeviceManagementProviderService deviceMgtService = new DeviceManagementProviderServiceImpl();
DeviceManagementServiceComponent.notifyStartupListeners();
@@ -89,6 +93,8 @@ public abstract class BaseDeviceManagementTest {
DeviceManagementDataHolder.getInstance().setDeviceAccessAuthorizationService(new DeviceAccessAuthorizationServiceImpl());
DeviceManagementDataHolder.getInstance().setGroupManagementProviderService(new GroupManagementProviderServiceImpl());
DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
+ DeviceManagementDataHolder.getInstance().setEmailSenderService(new TestEmailSenderService());
+ DeviceManagementDataHolder.getInstance().setConfigurationContextService(getConfigContextService());
}
private RegistryService getRegistryService() throws RegistryException {
@@ -101,6 +107,12 @@ public abstract class BaseDeviceManagementTest {
return context.getEmbeddedRegistryService();
}
+ private ConfigurationContextService getConfigContextService() throws RegistryException, AxisFault {
+ ConfigurationContext context = ConfigurationContextFactory.createConfigurationContextFromFileSystem
+ ("src/test/resources/carbon-home/repository/conf/axis2/axis2.xml");
+ return new ConfigurationContextService(context, null);
+ }
+
@BeforeClass
public abstract void init() throws Exception;
@@ -163,47 +175,6 @@ public abstract class BaseDeviceManagementTest {
}
}
- public void deleteData() {
- Connection conn = null;
- try {
- conn = getDataSource().getConnection();
- conn.setAutoCommit(false);
- String[] cleanupTables = new String[]{"DM_NOTIFICATION","DM_DEVICE_OPERATION_RESPONSE","DM_ENROLMENT_OP_MAPPING", "DM_CONFIG_OPERATION",
- "DM_POLICY_OPERATION", "DM_COMMAND_OPERATION", "DM_PROFILE_OPERATION", "DM_DEVICE_GROUP_MAP",
- "DM_GROUP", "DM_ENROLMENT", "DM_DEVICE_APPLICATION_MAPPING",
- "DM_APPLICATION", "DM_DEVICE", "DM_DEVICE_TYPE"};
- for (String table : cleanupTables) {
- this.cleanData(conn, table);
- }
- conn.commit();
- } catch (SQLException e) {
- try {
- if (conn != null) {
- conn.rollback();
- }
- } catch (SQLException e1) {
- log.error("Error occurred while roll-backing the transaction", e);
- }
- String msg = "Error occurred while cleaning up temporary data generated during test execution";
- log.error(msg, e);
- Assert.fail(msg, e);
- } finally {
- if (conn != null) {
- try {
- conn.close();
- } catch (SQLException e) {
- log.warn("Error occurred while closing the connection", e);
- }
- }
- }
- }
-
- private void cleanData(Connection conn, String tableName) throws SQLException {
- try (PreparedStatement stmt = conn.prepareStatement("DELETE FROM " + tableName)) {
- stmt.execute();
- }
- }
-
protected DataSource getDataSource() {
return dataSource;
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java
index a23fdbc638a..355ec9a55ac 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestDataHolder.java
@@ -18,11 +18,12 @@ package org.wso2.carbon.device.mgt.core.common;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
-import org.wso2.carbon.device.mgt.common.PaginationRequest;
+import org.wso2.carbon.device.mgt.common.MonitoringOperation;
+import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
import org.wso2.carbon.device.mgt.common.app.mgt.Application;
+import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
-import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import java.util.ArrayList;
@@ -32,11 +33,12 @@ import java.util.Properties;
public class TestDataHolder {
- public final static String TEST_DEVICE_TYPE = "Test";
+ public final static String TEST_DEVICE_TYPE = "TEST-DEVICE-TYPE";
public final static Integer SUPER_TENANT_ID = -1234;
public final static String SUPER_TENANT_DOMAIN = "carbon.super";
public final static String initialDeviceIdentifier = "12345";
public final static String OWNER = "admin";
+ public static final String OPERATION_CONFIG = "TEST-OPERATION-";
public static Device initialTestDevice;
public static DeviceType initialTestDeviceType;
@@ -55,6 +57,28 @@ public class TestDataHolder {
return device;
}
+ public static DeviceInfo generateDummyDeviceInfo() {
+ DeviceInfo deviceInfo = new DeviceInfo();
+ deviceInfo.setIMEI("IMEI-12345");
+ deviceInfo.setIMSI("IMSI-12344");
+ deviceInfo.setDeviceModel("DUMMY_MODEL");
+ deviceInfo.setVendor("WSO2");
+ deviceInfo.setOsVersion("OREO");
+ deviceInfo.setOsBuildDate("24-05-2017");
+ deviceInfo.setBatteryLevel(25.0);
+ deviceInfo.setInternalTotalMemory(1.5);
+ deviceInfo.setInternalAvailableMemory(2.5);
+ deviceInfo.setExternalTotalMemory(16.76);
+ deviceInfo.setExternalAvailableMemory(4.56);
+ deviceInfo.setConnectionType("CON_TYPE");
+ deviceInfo.setSsid("SSID");
+ deviceInfo.setCpuUsage(23.5);
+ deviceInfo.setTotalRAMMemory(1.5);
+ deviceInfo.setAvailableRAMMemory(2.33);
+ deviceInfo.setPluggedIn(true);
+ return deviceInfo;
+ }
+
public static Notification getNotification(int notificationId, String status, String deviceId,
String description, String deviceName, int operationId,
String deviceType) {
@@ -98,6 +122,21 @@ public class TestDataHolder {
return devices;
}
+ public static Device generateDummyDeviceData(DeviceIdentifier deviceIdentifier) {
+ Device device = new Device();
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setDateOfEnrolment(new Date().getTime());
+ enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
+ enrolmentInfo.setOwner(OWNER);
+ enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD);
+ enrolmentInfo.setStatus(EnrolmentInfo.Status.CREATED);
+ device.setEnrolmentInfo(enrolmentInfo);
+ device.setDescription("Test Description");
+ device.setDeviceIdentifier(deviceIdentifier.getId());
+ device.setType(deviceIdentifier.getType());
+ return device;
+ }
+
public static DeviceType generateDeviceTypeData(String devTypeName) {
DeviceType deviceType = new DeviceType();
deviceType.setName(devTypeName);
@@ -126,4 +165,29 @@ public class TestDataHolder {
deviceGroup.setOwner(OWNER);
return deviceGroup;
}
+
+ public static OperationMonitoringTaskConfig generateMonitoringTaskConfig(boolean enabled, int frequency,
+ int numberOfOperations) {
+ OperationMonitoringTaskConfig taskConfig = new OperationMonitoringTaskConfig();
+ List operationList = new ArrayList<>();
+
+ while (--numberOfOperations >= 0) {
+ operationList.add(generateMonitoringOperation(OPERATION_CONFIG + String.valueOf(numberOfOperations),
+ 1 + (int) (Math.random() * 4)));
+ }
+
+ taskConfig.setEnabled(enabled);
+ taskConfig.setFrequency(frequency);
+ taskConfig.setMonitoringOperation(operationList);
+
+ return taskConfig;
+ }
+
+ private static MonitoringOperation generateMonitoringOperation(String name, int recurrentTimes) {
+ MonitoringOperation operation = new MonitoringOperation();
+ operation.setTaskName(name);
+ operation.setRecurrentTimes(recurrentTimes);
+
+ return operation;
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestEmailSenderService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestEmailSenderService.java
new file mode 100644
index 00000000000..fc1e174f720
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/common/TestEmailSenderService.java
@@ -0,0 +1,30 @@
+/*
+ * 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.carbon.device.mgt.core.common;
+
+import org.wso2.carbon.email.sender.core.EmailContext;
+import org.wso2.carbon.email.sender.core.EmailSendingFailedException;
+import org.wso2.carbon.email.sender.core.EmailTransportNotConfiguredException;
+import org.wso2.carbon.email.sender.core.service.EmailSenderService;
+
+public class TestEmailSenderService implements EmailSenderService {
+ @Override
+ public void sendEmail(EmailContext emailCtx) throws EmailSendingFailedException, EmailTransportNotConfiguredException {
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceTest.java
new file mode 100644
index 00000000000..26aad9a9085
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/geo/service/GeoLocationProviderServiceTest.java
@@ -0,0 +1,244 @@
+/*
+ * 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.carbon.device.mgt.core.geo.service;
+
+import org.mockito.Mockito;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.DeviceManagementConstants;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.geo.service.Alert;
+import org.wso2.carbon.device.mgt.common.geo.service.GeoFence;
+import org.wso2.carbon.device.mgt.common.geo.service.GeoLocationBasedServiceException;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.event.processor.stub.EventProcessorAdminServiceStub;
+import org.wso2.carbon.identity.jwt.client.extension.exception.JWTClientException;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.rmi.RemoteException;
+import java.util.List;
+
+public class GeoLocationProviderServiceTest {
+
+ private static final String DEVICE_TYPE = "GL_TEST_TYPE";
+ private static final String DEVICE_ID = "GL-TEST-DEVICE-ID-1";
+ private static final String SAMPLE_GEO_JSON = "12121";
+ private static final String SAMPLE_AREA_NAME = "CUSTOM_NAME";
+ private static final String SAMPLE_QUERY_NAME = "QUERY_NAME";
+ private static final String SAMPLE_PROXIMITY_DISATANCE = "100";
+ private static final String SAMPLE_PROXIMITY_TIME = "50";
+ private static final String SAMPLE_SPEED_ALERT_VALUE = "120";
+ private static final String SAMPLE_STATIONARY_TIME = "1500";
+ private static final String SAMPLE_FLUCTUATION_RADIUS = "2000";
+
+ private EventProcessorAdminServiceStub mockEventProcessorAdminServiceStub;
+ private GeoLocationProviderServiceImpl geoLocationProviderServiceImpl;
+
+ @BeforeClass
+ public void init() throws Exception {
+ initMocks();
+ enrollDevice();
+ }
+
+ @Test (description = "Create a sample geo exit-alert with relevant details.")
+ public void createGeoExitAlert() throws GeoLocationBasedServiceException {
+ Boolean result = geoLocationProviderServiceImpl.
+ createGeoAlert(getExitAlert(), getDeviceIdentifier(), DeviceManagementConstants.GeoServices.ALERT_TYPE_EXIT);
+ Assert.assertEquals(result, Boolean.TRUE);
+ }
+
+ @Test (description = "Create a sample geo within-alert with relevant details.")
+ public void createGeoWithinAlert() throws GeoLocationBasedServiceException {
+ Boolean result = geoLocationProviderServiceImpl.
+ createGeoAlert(getWithinAlert(), getDeviceIdentifier(), DeviceManagementConstants.GeoServices.ALERT_TYPE_WITHIN);
+ Assert.assertEquals(result, Boolean.TRUE);
+ }
+
+ @Test (description = "Create a sample geo proximity-alert with relevant details.")
+ public void createGeoProximityAlert() throws GeoLocationBasedServiceException {
+ Boolean result = geoLocationProviderServiceImpl.
+ createGeoAlert(getProximityAlert(), getDeviceIdentifier(), DeviceManagementConstants.GeoServices.ALERT_TYPE_PROXIMITY);
+ Assert.assertEquals(result, Boolean.TRUE);
+ }
+
+ @Test (description = "Create a sample geo speed-alert with relevant details.")
+ public void createGeoSpeedAlert() throws GeoLocationBasedServiceException {
+ Boolean result = geoLocationProviderServiceImpl.
+ createGeoAlert(getSpeedAlert(), getDeviceIdentifier(), DeviceManagementConstants.GeoServices.ALERT_TYPE_SPEED);
+ Assert.assertEquals(result, Boolean.TRUE);
+ }
+
+ @Test (description = "Create a sample geo stationary-alert with relevant details.")
+ public void createGeoStationaryAlert() throws GeoLocationBasedServiceException {
+ Boolean result = geoLocationProviderServiceImpl.
+ createGeoAlert(getStationaryAlert(), getDeviceIdentifier(), DeviceManagementConstants.GeoServices.ALERT_TYPE_STATIONARY);
+ Assert.assertEquals(result, Boolean.TRUE);
+ }
+
+ @Test (description = "Create a sample geo traffic-alert with relevant details.")
+ public void createGeoTrafficAlert() throws GeoLocationBasedServiceException {
+ Boolean result = geoLocationProviderServiceImpl.
+ createGeoAlert(getTrafficAlert(), getDeviceIdentifier(), DeviceManagementConstants.GeoServices.ALERT_TYPE_TRAFFIC);
+ Assert.assertEquals(result, Boolean.TRUE);
+ }
+
+ @Test(dependsOnMethods = "createGeoSpeedAlert", description = "retrieve saved geo speed-alert.")
+ public void getGeoSpeedAlerts() throws GeoLocationBasedServiceException {
+ String result;
+ result = geoLocationProviderServiceImpl.getSpeedAlerts(getDeviceIdentifier());
+ Assert.assertNotNull(result);
+ Assert.assertEquals(result, "{'speedLimit':" + SAMPLE_SPEED_ALERT_VALUE + "}");
+ }
+
+ @Test(dependsOnMethods = "createGeoTrafficAlert" , description = "retrieve saved geo exit-alert.")
+ public void getGeoTrafficAlerts() throws GeoLocationBasedServiceException {
+ List geoFences;
+ geoFences = geoLocationProviderServiceImpl.getTrafficAlerts(getDeviceIdentifier());
+ Assert.assertNotNull(geoFences);
+ GeoFence geoFenceNode = geoFences.get(0);
+ Assert.assertEquals(geoFenceNode.getGeoJson(), "{\n" +
+ " \"" + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON + "\": \"" + SAMPLE_GEO_JSON + "\"\n" +
+ "}");
+ }
+
+ @Test(dependsOnMethods = "createGeoStationaryAlert", description = "retrieve saved geo stationary-alert.")
+ public void getGeoStationaryAlerts() throws GeoLocationBasedServiceException {
+ List geoFences;
+ geoFences = geoLocationProviderServiceImpl.getStationaryAlerts(getDeviceIdentifier());
+ Assert.assertNotNull(geoFences);
+ GeoFence geoFenceNode = geoFences.get(0);
+ Assert.assertEquals(geoFenceNode.getAreaName(), SAMPLE_AREA_NAME);
+ Assert.assertEquals(geoFenceNode.getQueryName(), SAMPLE_QUERY_NAME);
+ Assert.assertEquals(geoFenceNode.getStationaryTime(), SAMPLE_STATIONARY_TIME);
+ }
+
+ private void initMocks() throws JWTClientException, RemoteException {
+ mockEventProcessorAdminServiceStub = Mockito.mock(EventProcessorAdminServiceStub.class);
+ geoLocationProviderServiceImpl = Mockito.mock(GeoLocationProviderServiceImpl.class, Mockito.CALLS_REAL_METHODS);
+ Mockito.doReturn(mockEventProcessorAdminServiceStub).
+ when(geoLocationProviderServiceImpl).getEventProcessorAdminServiceStub();
+ Mockito.doReturn("success").
+ when(mockEventProcessorAdminServiceStub).validateExecutionPlan(Mockito.anyString());
+ }
+
+ private DeviceIdentifier getDeviceIdentifier() {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId("1234");
+ deviceIdentifier.setType("TEST");
+ return deviceIdentifier;
+ }
+
+ private Alert getWithinAlert() {
+ Alert alert = new Alert();
+ alert.setDeviceId(DEVICE_ID);
+ alert.setCepAction("CEP_ACTION");
+ alert.setParseData("{\n" +
+ " \" " + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON + "\": \"" + SAMPLE_GEO_JSON + "\"\n" +
+ "}");
+ alert.setCustomName(SAMPLE_AREA_NAME);
+ alert.setExecutionPlan("EXECUTION_PLAN");
+ alert.setQueryName(SAMPLE_QUERY_NAME);
+ return alert;
+ }
+
+ private Alert getExitAlert() {
+ Alert alert = new Alert();
+ alert.setDeviceId(DEVICE_ID);
+ alert.setQueryName(SAMPLE_QUERY_NAME);
+ alert.setCustomName(SAMPLE_AREA_NAME);
+ alert.setStationeryTime(SAMPLE_STATIONARY_TIME);
+ alert.setFluctuationRadius(SAMPLE_FLUCTUATION_RADIUS);
+ alert.setParseData("{\n" +
+ " \" " + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON + "\": \"" + SAMPLE_GEO_JSON + "\"\n" +
+ "}");
+ alert.setExecutionPlan("EXECUTION_PLAN");
+ return alert;
+ }
+
+ private Alert getProximityAlert() {
+ Alert alert = new Alert();
+ alert.setDeviceId(DEVICE_ID);
+ alert.setProximityTime(SAMPLE_PROXIMITY_TIME);
+ alert.setProximityDistance(SAMPLE_PROXIMITY_DISATANCE);
+ alert.setParseData("{\n" +
+ " \" " + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON + "\": \"" + SAMPLE_GEO_JSON + "\"\n" +
+ "}");
+ return alert;
+ }
+
+ private Alert getSpeedAlert() {
+ Alert alert = new Alert();
+ alert.setDeviceId(DEVICE_ID);
+ alert.setParseData("{\n" +
+ " \"" + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON + "\": \"" + SAMPLE_GEO_JSON + "\",\n" +
+ " \"" + DeviceManagementConstants.GeoServices.SPEED_ALERT_VALUE + "\": \"" + SAMPLE_SPEED_ALERT_VALUE + "\"\n" +
+ "}");
+ return alert;
+ }
+
+ private Alert getStationaryAlert() {
+ Alert alert = new Alert();
+ alert.setDeviceId(DEVICE_ID);
+ alert.setQueryName(SAMPLE_QUERY_NAME);
+ alert.setCustomName(SAMPLE_AREA_NAME);
+ alert.setStationeryTime(SAMPLE_STATIONARY_TIME);
+ alert.setFluctuationRadius(SAMPLE_FLUCTUATION_RADIUS);
+ alert.setParseData("{\n" +
+ " \"" + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON + "\": \"" + SAMPLE_GEO_JSON + "\"\n" +
+ "}");
+ return alert;
+ }
+
+ private Alert getTrafficAlert() {
+ Alert alert = new Alert();
+ alert.setDeviceId(DEVICE_ID);
+ alert.setParseData("{\n" +
+ " \"" + DeviceManagementConstants.GeoServices.GEO_FENCE_GEO_JSON +"\": \"" + SAMPLE_GEO_JSON + "\"\n" +
+ "}");
+ alert.setCustomName(SAMPLE_AREA_NAME);
+ alert.setExecutionPlan("EXECUTION_PLAN");
+ alert.setQueryName(SAMPLE_QUERY_NAME);
+ return alert;
+ }
+
+ private void enrollDevice() throws Exception {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE);
+ Device device = TestDataHolder.generateDummyDeviceData(deviceIdentifier);
+ DeviceManagementProviderService deviceMgtService = DeviceManagementDataHolder.getInstance().
+ getDeviceManagementProvider();
+ deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
+ deviceMgtService.enrollDevice(device);
+
+ Device returnedDevice = deviceMgtService.getDevice(deviceIdentifier);
+
+ if (!returnedDevice.getDeviceIdentifier().equals(deviceIdentifier.getId())) {
+ throw new Exception("Incorrect device with ID - " + device.getDeviceIdentifier() + " returned!");
+ }
+ }
+
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/task/PushNotificationSchedulerTaskTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/task/PushNotificationSchedulerTaskTest.java
new file mode 100644
index 00000000000..64a01788bfe
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/push/notification/mgt/task/PushNotificationSchedulerTaskTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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.carbon.device.mgt.core.push.notification.mgt.task;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
+import org.wso2.carbon.device.mgt.core.operation.TestNotificationStrategy;
+import org.wso2.carbon.device.mgt.core.operation.mgt.OperationMapping;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationDAO;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOException;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+
+import java.sql.SQLException;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This class contains unit tests to test {@link PushNotificationSchedulerTask} class.
+ */
+public class PushNotificationSchedulerTaskTest extends BaseDeviceManagementTest {
+ private static final Log log = LogFactory.getLog(PushNotificationSchedulerTask.class);
+ private DeviceManagementProviderService deviceMgtProviderService;
+ private PushNotificationSchedulerTask pushNotificationSchedulerTask;
+ private OperationDAO operationDAO;
+
+ @BeforeClass
+ public void init() throws DeviceManagementException, RegistryException {
+ DeviceConfigurationManager.getInstance().initConfig();
+ log.info("Initializing Push Notification Scheduler Test Class");
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ this.deviceMgtProviderService = Mockito.mock(DeviceManagementProviderServiceImpl.class, Mockito.CALLS_REAL_METHODS);
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(this.deviceMgtProviderService);
+ this.operationDAO = OperationManagementDAOFactory.getOperationDAO();
+ this.pushNotificationSchedulerTask = new PushNotificationSchedulerTask();
+ }
+
+ @Test(description = "Tests the push notification scheduling for devices")
+ public void testPushNotificationScheduler()
+ throws DeviceManagementException, OperationManagementException, SQLException,
+ OperationManagementDAOException {
+ try {
+ log.info("Attempting to execute push notification task scheduler");
+ Mockito.doReturn(new TestNotificationStrategy()).when(this.deviceMgtProviderService)
+ .getNotificationStrategyByDeviceType(Mockito.anyString());
+ Mockito.doReturn(new org.wso2.carbon.device.mgt.common.operation.mgt.Operation())
+ .when(this.deviceMgtProviderService).getOperation(Mockito.anyString(), Mockito.anyInt());
+ this.pushNotificationSchedulerTask.run();
+ OperationManagementDAOFactory.openConnection();
+ Map> operationMappingsTenantMap = operationDAO
+ .getOperationMappingsByStatus(Operation.Status.PENDING, Operation.PushNotificationStatus.SCHEDULED,
+ DeviceConfigurationManager.getInstance().getDeviceManagementConfig()
+ .getPushNotificationConfiguration().getSchedulerBatchSize());
+ Assert.assertEquals(operationMappingsTenantMap.size(), 0);
+ log.info("Push notification task execution complete.");
+ } finally {
+ OperationManagementDAOFactory.closeConnection();
+ }
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java
index 4cb26bc170a..1975a56828a 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderServiceTest.java
@@ -23,11 +23,19 @@ import org.testng.annotations.Test;
import org.wso2.carbon.device.mgt.common.Device;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
+import org.wso2.carbon.device.mgt.common.PaginationRequest;
+import org.wso2.carbon.device.mgt.common.TransactionManagementException;
+import org.wso2.carbon.device.mgt.common.configuration.mgt.ConfigurationManagementException;
+import org.wso2.carbon.device.mgt.common.license.mgt.License;
import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
import org.wso2.carbon.device.mgt.core.authorization.DeviceAccessAuthorizationServiceImpl;
import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.device.details.mgt.dao.DeviceDetailsDAO;
+import org.wso2.carbon.device.mgt.core.device.details.mgt.dao.DeviceDetailsMgtDAOException;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
@@ -40,14 +48,17 @@ import org.wso2.carbon.user.core.service.RealmService;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
import java.io.InputStream;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
+import java.util.Properties;
public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTest {
private static final Log log = LogFactory.getLog(DeviceManagementProviderServiceTest.class);
private DeviceManagementProviderService providerService;
private static final String DEVICE_TYPE = "RANDOM_DEVICE_TYPE";
- private static final String DEVICE_TYPE_2 = "RANDOM_DEVICE_TYPE";
+ private DeviceDetailsDAO deviceDetailsDAO = DeviceManagementDAOFactory.getDeviceDetailsDAO();
DeviceManagementProviderService deviceMgtService;
@@ -65,7 +76,6 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
-
}
private RegistryService getRegistryService() throws RegistryException {
@@ -170,39 +180,39 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
}
}
-// @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
-// public void testReEnrollmentofSameDeviceWithOtherUser() {
-//
-// EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
-// enrolmentInfo.setDateOfEnrolment(new Date().getTime());
-// enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
-// enrolmentInfo.setOwner("user1");
-// enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD);
-// enrolmentInfo.setStatus(EnrolmentInfo.Status.CREATED);
-//
-// Device alternateDevice = TestDataHolder.generateDummyDeviceData("12345", DEVICE_TYPE,
-// enrolmentInfo);
-//
-// try {
-// Device retrievedDevice1 = deviceMgtService.getDevice(new DeviceIdentifier("12345", DEVICE_TYPE));
-//
-// deviceMgtService.enrollDevice(alternateDevice);
-// Device retrievedDevice2 = deviceMgtService.getDevice(new DeviceIdentifier(alternateDevice
-// .getDeviceIdentifier(), alternateDevice.getType()));
-//
-// log.info(retrievedDevice1.getEnrolmentInfo().getOwner());
-// log.info(retrievedDevice2.getEnrolmentInfo().getOwner());
-//
-// Assert.assertFalse(retrievedDevice1.getEnrolmentInfo().getOwner().equalsIgnoreCase
-// (retrievedDevice2.getEnrolmentInfo().getOwner()));
-// } catch (DeviceManagementException e) {
-// String msg = "Error Occured while enrolling device";
-// Assert.fail(msg, e);
-// }
-// }
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
+ public void testReEnrollmentofSameDeviceWithOtherUser() {
+
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo();
+ enrolmentInfo.setDateOfEnrolment(new Date().getTime());
+ enrolmentInfo.setDateOfLastUpdate(new Date().getTime());
+ enrolmentInfo.setOwner("user1");
+ enrolmentInfo.setOwnership(EnrolmentInfo.OwnerShip.BYOD);
+ enrolmentInfo.setStatus(EnrolmentInfo.Status.CREATED);
+ Device alternateDevice = TestDataHolder.generateDummyDeviceData("12345", DEVICE_TYPE,
+ enrolmentInfo);
- @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
+ try {
+ Device retrievedDevice1 = deviceMgtService.getDevice(new DeviceIdentifier("12345", DEVICE_TYPE));
+
+ deviceMgtService.enrollDevice(alternateDevice);
+ Device retrievedDevice2 = deviceMgtService.getDevice(new DeviceIdentifier(alternateDevice
+ .getDeviceIdentifier(), alternateDevice.getType()));
+
+ log.info(retrievedDevice1.getEnrolmentInfo().getOwner());
+ log.info(retrievedDevice2.getEnrolmentInfo().getOwner());
+
+ Assert.assertFalse(retrievedDevice1.getEnrolmentInfo().getOwner().equalsIgnoreCase
+ (retrievedDevice2.getEnrolmentInfo().getOwner()));
+ } catch (DeviceManagementException e) {
+ String msg = "Error Occured while enrolling device";
+ Assert.fail(msg, e);
+ }
+ }
+
+
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"})
public void testDisenrollment() {
Device device = TestDataHolder.generateDummyDeviceData(DEVICE_TYPE);
try {
@@ -320,5 +330,187 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
}
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDevice() {
+ try {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier("12345",DEVICE_TYPE));
+ Assert.assertTrue(device.getDeviceIdentifier().equalsIgnoreCase("12345"));
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviceWithInfo() {
+ try {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier("12345", DEVICE_TYPE)
+ , true);
+ Assert.assertTrue(device.getDeviceInfo() != null);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviceWithOutInfo() {
+ try {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier("12345", DEVICE_TYPE)
+ , false);
+ Assert.assertTrue(device.getDeviceInfo() == null);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetAllDevicesOfRole() {
+ try {
+ List devices = deviceMgtService.getAllDevicesOfRole("admin");
+ Assert.assertTrue(devices.size() > 0);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testDeviceByOwner() {
+ try {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier("12345",
+ DEVICE_TYPE), "admin", true);
+ Assert.assertTrue(device != null);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testDeviceByDate() {
+ try {
+ Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier("12345",
+ DEVICE_TYPE));
+
+ DeviceManagementDAOFactory.beginTransaction();
+
+ //Device details table will be reffered when looking for last updated time
+ //This dao entry is to mimic a device info operation
+ deviceDetailsDAO.addDeviceInformation(initialDevice.getId(), TestDataHolder
+ .generateDummyDeviceInfo());
+ } catch (DeviceManagementException e) {
+ e.printStackTrace();
+ } catch (TransactionManagementException e) {
+ e.printStackTrace();
+ } catch (DeviceDetailsMgtDAOException e) {
+ e.printStackTrace();
+ } finally {
+ DeviceManagementDAOFactory.closeConnection();
+ }
+
+ try {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier("12345",
+ DEVICE_TYPE), yesterday());
+ Assert.assertTrue(device != null);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testDeviceByDate"})
+ public void testDeviceByDateAndOwner() {
+ try {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier("12345",
+ DEVICE_TYPE), "admin", yesterday(), true);
+ Assert.assertTrue(device != null);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test
+ public void testGetAvaliableDeviceTypes() {
+ try {
+ List deviceTypes = deviceMgtService.getAvailableDeviceTypes();
+ Assert.assertTrue(!deviceTypes.isEmpty());
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetAllDevices() {
+ try {
+ List devices = deviceMgtService.getAllDevices();
+ Assert.assertTrue(!devices.isEmpty());
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testDeviceByDate"})
+ public void testGetAllDevicesWithInfo() {
+ try {
+ List devices = deviceMgtService.getAllDevices(true);
+ Assert.assertTrue(!devices.isEmpty());
+ Assert.assertTrue(devices.get(0).getDeviceInfo() != null);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testDeviceByDate"})
+ public void testGetLicense() {
+ try {
+ License license = deviceMgtService.getLicense(DEVICE_TYPE, "ENG");
+ Assert.assertTrue(license.getLanguage().equalsIgnoreCase("ENG"));
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(expectedExceptions = DeviceManagementException.class)
+ public void testSendRegistrationEmailNoMetaInfo() throws ConfigurationManagementException, DeviceManagementException {
+ deviceMgtService.sendRegistrationEmail(null);
+ Assert.assertTrue(false);
+ }
+
+ @Test
+ public void testSendRegistrationEmailSuccessFlow() {
+ try {
+ String recipient = "test-user@wso2.com";
+ Properties props = new Properties();
+ props.setProperty("first-name", "Test");
+ props.setProperty("username", "User");
+ props.setProperty("password", "!@#$$$%");
+
+ EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props);
+
+ deviceMgtService.sendRegistrationEmail(metaInfo);
+ Assert.assertTrue(true);
+ } catch (ConfigurationManagementException e) {
+ Assert.assertTrue(false, "Error in sending registration email : Configration " +
+ "related error" + e.getMessage());
+ } catch (DeviceManagementException e) {
+ Assert.assertTrue(false, "Error in sending registration email" +
+ e.getMessage());
+ }
+ }
+
+ private Date yesterday() {
+ final Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DATE, -1);
+ return cal.getTime();
+ }
+
}
\ No newline at end of file
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceTest.java
index 994ef33e8e1..7ac1c9a2d8e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/service/GroupManagementProviderServiceTest.java
@@ -27,6 +27,7 @@ import org.wso2.carbon.device.mgt.common.*;
import org.wso2.carbon.device.mgt.common.group.mgt.*;
import org.wso2.carbon.device.mgt.core.TestUtils;
import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
+import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.config.cache.DeviceCacheConfiguration;
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
@@ -266,7 +267,7 @@ public class GroupManagementProviderServiceTest extends BaseDeviceManagementTest
public void getGroupsByDeviceIdentifier() throws GroupManagementException {
DeviceIdentifier identifier = new DeviceIdentifier();
identifier.setId("12345");
- identifier.setType("Test");
+ identifier.setType(TestDataHolder.TEST_DEVICE_TYPE);
List groups = groupManagementProviderService.getGroups(identifier);
Assert.assertNotNull(groups);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
index 2db940a4ec9..b0a452b2a25 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
@@ -1,48 +1,50 @@
+/*
+ * 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.carbon.device.mgt.core.task;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.mockito.Mock;
import org.mockito.Mockito;
-import org.opensaml.xml.signature.P;
-import org.powermock.api.mockito.PowerMockito;
-import org.quartz.impl.StdSchedulerFactory;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import org.wso2.carbon.device.mgt.common.MonitoringOperation;
-import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
import org.wso2.carbon.device.mgt.core.TestTaskServiceImpl;
-import org.wso2.carbon.device.mgt.core.TestUtils;
import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
-import org.wso2.carbon.device.mgt.core.permission.mgt.PermissionUtils;
-import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerServiceImpl;
import org.wso2.carbon.ntask.common.TaskException;
import org.wso2.carbon.ntask.core.TaskInfo;
import org.wso2.carbon.ntask.core.TaskManager;
-import org.wso2.carbon.ntask.core.TaskUtils;
-import org.wso2.carbon.ntask.core.impl.QuartzCachedThreadPool;
import org.wso2.carbon.ntask.core.internal.TasksDSComponent;
import org.wso2.carbon.ntask.core.service.TaskService;
import org.wso2.carbon.ntask.core.service.impl.TaskServiceImpl;
-import org.wso2.carbon.registry.core.exceptions.RegistryException;
import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Properties;
public class DeviceTaskManagerServiceTest {
private static final Log log = LogFactory.getLog(DeviceTaskManagerService.class);
private static final String TASK_TYPE = "DEVICE_MONITORING";
private DeviceTaskManagerService deviceTaskManagerService;
- @Mock private TaskService taskService;
+ private TaskService taskService;
- @BeforeClass public void init() throws Exception {
+ @BeforeClass
+ public void init() throws Exception {
DeviceConfigurationManager.getInstance().initConfig();
log.info("Initializing Device Task Manager Service Test Suite");
this.taskService = new TestTaskServiceImpl();
@@ -54,30 +56,31 @@ public class DeviceTaskManagerServiceTest {
taskServiceField.set(null, Mockito.mock(TaskServiceImpl.class, Mockito.RETURNS_MOCKS));
}
- @Test(groups = "Device Task Manager")
+ @Test(groups = "Device Task Manager Service Test Group")
public void testStartTask() {
try {
log.debug("Attempting to start task from testStartTask");
- this.deviceTaskManagerService
- .startTask(TestDataHolder.TEST_DEVICE_TYPE, generateValidMonitoringTaskConfig("DEVICE_INFO"));
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 1));
TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
Assert.assertNotNull(taskManager
- .getTask(TestDataHolder.TEST_DEVICE_TYPE + String.valueOf(TestDataHolder.SUPER_TENANT_ID)));
+ .getTask(TestDataHolder.TEST_DEVICE_TYPE +
+ String.valueOf(TestDataHolder.SUPER_TENANT_ID)));
log.debug("Task Successfully started");
} catch (DeviceMgtTaskException | TaskException e) {
Assert.fail("Exception occurred when starting the task", e);
}
}
- @Test(groups = "Device Task Manager", dependsOnMethods = "testStartTask")
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testStartTask")
public void testUpdateTask() {
try {
log.debug("Attempting to update task from testStartTask");
- this.deviceTaskManagerService
- .updateTask(TestDataHolder.TEST_DEVICE_TYPE, generateValidMonitoringTaskConfig("DEVICE_LOCATION"));
- Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 30000, 1));
+ Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
Assert.assertEquals(taskManager.getAllTasks().size(), 1);
log.debug("Task Successfully updated");
} catch (DeviceMgtTaskException | TaskException e) {
@@ -85,12 +88,12 @@ public class DeviceTaskManagerServiceTest {
}
}
- @Test(groups = "Device Task Manager", dependsOnMethods = "testUpdateTask")
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateTask")
public void testStopTask() {
log.debug("Attempting to stop task from testStopTask");
try {
- this.deviceTaskManagerService
- .stopTask(TestDataHolder.TEST_DEVICE_TYPE, generateValidMonitoringTaskConfig("DEVICE_LOCATION"));
+ this.deviceTaskManagerService.stopTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 30000, 1));
TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
Assert.assertEquals(taskManager.getAllTasks().size(), 0);
} catch (DeviceMgtTaskException | TaskException e) {
@@ -98,27 +101,117 @@ public class DeviceTaskManagerServiceTest {
}
}
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testStopTask", expectedExceptions = {
+ DeviceMgtTaskException.class })
+ public void testUpdateUnscheduledTask() throws DeviceMgtTaskException {
+ log.debug("Attempting to update unscheduled task");
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 1));
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask", expectedExceptions = {
+ DeviceMgtTaskException.class })
+ public void testStartTaskWhenUnableToRetrieveTaskManager()
+ throws DeviceMgtTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to get TaskManager", TaskException.Code.UNKNOWN)).when(taskService)
+ .getTaskManager(TASK_TYPE);
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask", expectedExceptions = {
+ DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenUnableToRetrieveTaskManager()
+ throws DeviceMgtTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to get TaskManager", TaskException.Code.UNKNOWN)).when(taskService)
+ .getTaskManager(TASK_TYPE);
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testStartTaskWhenFailedToRegisterTaskType()
+ throws DeviceMgtTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to register task type", TaskException.Code.UNKNOWN)).when(taskService)
+ .registerTaskType(TASK_TYPE);
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testStartTaskWhenFailedToRegisterTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to register task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .registerTask(Mockito.any(TaskInfo.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.startTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
- private OperationMonitoringTaskConfig generateValidMonitoringTaskConfig(String operationConfig) {
- OperationMonitoringTaskConfig validTaskConfig = new OperationMonitoringTaskConfig();
- List operationList = new ArrayList<>();
- MonitoringOperation operation = new MonitoringOperation();
- operation.setTaskName(operationConfig);
- operation.setRecurrentTimes(1);
- operationList.add(operation);
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenFailedToRegisterTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to register task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .registerTask(Mockito.any(TaskInfo.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
- validTaskConfig.setEnabled(true);
- validTaskConfig.setFrequency(60000);
- validTaskConfig.setMonitoringOperation(operationList);
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenFailedToRescheduleTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to reschedule task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .rescheduleTask(Mockito.any(String.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
+ }
- return validTaskConfig;
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testUpdateTaskWhenFailedToDeleteTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to delete task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .deleteTask(Mockito.any(String.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.updateTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
}
- private Properties getStandardQuartzProps() {
- Properties result = new Properties();
- result.put("org.quartz.scheduler.skipUpdateCheck", "true");
- result.put("org.quartz.threadPool.class", QuartzCachedThreadPool.class.getName());
- return result;
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {DeviceMgtTaskException.class })
+ public void testStopTaskWhenFailedToDeleteTask()
+ throws DeviceMgtTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to delete task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .deleteTask(Mockito.any(String.class));
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ this.deviceTaskManagerService.stopTask(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 2));
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerTest.java
new file mode 100644
index 00000000000..ff020451cf7
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerTest.java
@@ -0,0 +1,185 @@
+/*
+ * 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.carbon.device.mgt.core.task;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
+import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+import org.wso2.carbon.device.mgt.core.TestUtils;
+import org.wso2.carbon.device.mgt.core.authorization.DeviceAccessAuthorizationServiceImpl;
+import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
+import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
+import org.wso2.carbon.device.mgt.core.operation.TestNotificationStrategy;
+import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderServiceImpl;
+import org.wso2.carbon.device.mgt.core.task.impl.DeviceDetailsRetrieverTask;
+import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerImpl;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * This is a test class to test the functionality in {@link DeviceTaskManager}.
+ */
+public class DeviceTaskManagerTest extends BaseDeviceManagementTest {
+
+ private static final Log log = LogFactory.getLog(DeviceTaskManagerTest.class);
+ private static final String NEW_DEVICE_TYPE = "NEW-DEVICE-TYPE";
+ private static final String DEVICE_DETAIL_RETRIEVER_OPPCONFIG = "{\"isEnabled\":true,\"frequency\":60000," +
+ "\"monitoringOperation\":[{\"taskName\":\"DEVICE_INFO\",\"recurrentTimes\":2}]}";
+ private List deviceIds;
+ private DeviceTaskManager deviceTaskManager;
+ private DeviceManagementProviderService deviceMgtProviderService;
+ private OperationManager operationManager;
+
+ @BeforeClass
+ public void init() throws DeviceManagementException, RegistryException {
+ log.info("Initializing Device Task Manager Test Suite");
+ this.deviceIds = new ArrayList<>();
+ for (int i = 0; i < 5; i++) {
+ deviceIds.add(new DeviceIdentifier(UUID.randomUUID().toString(), TestDataHolder.TEST_DEVICE_TYPE));
+ }
+ List devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
+ this.deviceMgtProviderService = new DeviceManagementProviderServiceImpl();
+
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(this.deviceMgtProviderService);
+ DeviceManagementDataHolder.getInstance()
+ .setRegistryService(TestUtils.getRegistryService(DeviceTaskManagerTest.class));
+ DeviceManagementDataHolder.getInstance()
+ .setDeviceAccessAuthorizationService(new DeviceAccessAuthorizationServiceImpl());
+ DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
+ NotificationStrategy notificationStrategy = new TestNotificationStrategy();
+ this.operationManager = new OperationManagerImpl(TestDataHolder.TEST_DEVICE_TYPE, notificationStrategy);
+ this.deviceMgtProviderService.registerDeviceType(
+ new TestDeviceManagementService(TestDataHolder.TEST_DEVICE_TYPE, TestDataHolder.SUPER_TENANT_DOMAIN));
+ for (Device device : devices) {
+ this.deviceMgtProviderService.enrollDevice(device);
+ }
+ this.deviceTaskManager = new DeviceTaskManagerImpl(TestDataHolder.TEST_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 60000, 3));
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Getting the task frequency from the scheduler")
+ public void testGetTaskFrequency() throws DeviceMgtTaskException {
+ log.info("Attempting to retrieve task frequency.");
+ Assert.assertEquals(this.deviceTaskManager.getTaskFrequency(), 60000);
+ log.info("Successfully retrieved task frequency.");
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Testing if the task is enabled")
+ public void testIsTaskEnabled() throws DeviceMgtTaskException {
+ log.info("Attempting to retrieve task status.");
+ Assert.assertTrue(this.deviceTaskManager.isTaskEnabled());
+ log.info("Successfully retrieved task status.");
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Testing adding operations to devices.")
+ public void testAddOperation() throws DeviceMgtTaskException, OperationManagementException {
+ log.info("Attempting to add operations for devices.");
+ this.deviceTaskManager.addOperations();
+ for (DeviceIdentifier deviceId : deviceIds) {
+ List extends Operation> operationList = this.operationManager.getOperations(deviceId);
+ Assert.assertNotNull(operationList);
+ Assert.assertEquals(operationList.size(), 3);
+ }
+ log.info("Successfully added operations for devices.");
+ }
+
+ @Test(groups = "Device Task Manager Test Group",
+ description = "Testing adding operations when no devices are available")
+ public void testAddOperationsWithoutDevices() throws DeviceManagementException, DeviceMgtTaskException {
+ this.deviceMgtProviderService.registerDeviceType(
+ new TestDeviceManagementService(NEW_DEVICE_TYPE, TestDataHolder.SUPER_TENANT_DOMAIN));
+ DeviceTaskManager taskManager = new DeviceTaskManagerImpl(NEW_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 50000, 3));
+ taskManager.addOperations();
+ }
+
+ @Test(groups = "Device Task Manager Test Group", dependsOnMethods = "testAddOperationsWithoutDevices",
+ description = "Testing adding operations when no operations are scheduled")
+ public void testAddOperationsWithoutOperations() throws DeviceMgtTaskException {
+ DeviceTaskManager taskManager = new DeviceTaskManagerImpl(NEW_DEVICE_TYPE,
+ TestDataHolder.generateMonitoringTaskConfig(true, 50000, 3));
+ taskManager.addOperations();
+ }
+
+ @Test(groups = "Device Task Manager Test Group", description = "Testing device detail retriever task execution")
+ public void testDeviceDetailRetrieverTaskExecute() throws OperationManagementException {
+ DeviceDetailsRetrieverTask deviceDetailsRetrieverTask = new DeviceDetailsRetrieverTask();
+ Map map = new HashMap<>();
+ map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
+ map.put("OPPCONFIG", DEVICE_DETAIL_RETRIEVER_OPPCONFIG);
+ deviceDetailsRetrieverTask.setProperties(map);
+ deviceDetailsRetrieverTask.execute();
+ for (DeviceIdentifier deviceId : deviceIds) {
+ List extends Operation> operationList = this.operationManager.getOperations(deviceId);
+ Assert.assertNotNull(operationList);
+ Assert.assertEquals(operationList.size(), 4,
+ "Expected number of operations is 4 after adding the device detail retriever operation");
+ Assert.assertEquals(operationList.get(0).getCode(), "DEVICE_INFO",
+ "Operation code of the device detail retriever task should be DEVICE_LOCATION");
+ }
+ }
+
+ @Test(groups = "Device Task Manager Test Group",
+ description = "Testing device detail retriever task execution for tenants")
+ public void testDeviceDetailRetrieverTaskExecuteForAllTenants() throws OperationManagementException {
+ DeviceDetailsRetrieverTask deviceDetailsRetrieverTask = new DeviceDetailsRetrieverTask();
+ System.setProperty("is.cloud", "true");
+ Map map = new HashMap<>();
+ map.put("DEVICE_TYPE", TestDataHolder.TEST_DEVICE_TYPE);
+ map.put("OPPCONFIG", DEVICE_DETAIL_RETRIEVER_OPPCONFIG);
+ deviceDetailsRetrieverTask.setProperties(map);
+ deviceDetailsRetrieverTask.execute();
+ for (DeviceIdentifier deviceId : deviceIds) {
+ List extends Operation> operationList = this.operationManager.getOperations(deviceId);
+ Assert.assertNotNull(operationList);
+ Assert.assertEquals(operationList.size(), 4);
+ Assert.assertEquals(operationList.get(0).getCode(), "DEVICE_INFO",
+ "Operation code of the device detail retriever task should be DEVICE_LOCATION");
+ }
+ }
+
+ @AfterClass
+ public void cleanup() throws DeviceManagementException {
+ for (DeviceIdentifier deviceId: deviceIds) {
+ this.deviceMgtProviderService.disenrollDevice(deviceId);
+ }
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
index fcebed343c1..6eda125c3f1 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
@@ -1,3 +1,20 @@
+/*
+ * 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.carbon.device.mgt.core.task;
import org.wso2.carbon.ntask.common.TaskException;
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml
index 3e27f034453..7830b7fbe33 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/testng.xml
@@ -42,10 +42,13 @@
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml
index 5b5b4703542..cfc757cabcf 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/pom.xml
@@ -22,7 +22,7 @@
device-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java
index 1f1ee0d8683..6e2aff8b35d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManager.java
@@ -83,9 +83,7 @@ public class DeviceTypeManager implements DeviceManager {
if (deviceTypeConfiguration.getFeatures() != null && deviceTypeConfiguration.getFeatures().
getFeature() != null) {
List features = deviceTypeConfiguration.getFeatures().getFeature();
- if (features != null) {
- featureManager = new ConfigurationBasedFeatureManager(features);
- }
+ featureManager = new ConfigurationBasedFeatureManager(features);
}
if (deviceTypeConfiguration.getDeviceAuthorizationConfig() != null) {
requiredDeviceTypeAuthorization = deviceTypeConfiguration.getDeviceAuthorizationConfig().
@@ -119,7 +117,8 @@ public class DeviceTypeManager implements DeviceManager {
try {
defaultPlatformConfiguration = this.getDefaultConfiguration();
} catch (DeviceManagementException e) {
- String msg = "Error occurred while default platform configuration";
+ String msg =
+ "Error occurred while getting default platform configuration for the device type " + deviceType;
throw new DeviceTypeDeployerPayloadException(msg, e);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/DeviceTypeConfigurationException.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/DeviceTypeConfigurationException.java
index d044e7ebebe..14b0d7445c5 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/DeviceTypeConfigurationException.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/DeviceTypeConfigurationException.java
@@ -21,33 +21,10 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template.config.except
public class DeviceTypeConfigurationException extends Exception {
private static final long serialVersionUID = -3151279431229070297L;
-
- public DeviceTypeConfigurationException(int errorCode, String message) {
- super(message);
- }
-
- public DeviceTypeConfigurationException(int errorCode, String message, Throwable cause) {
- super(message, cause);
- }
-
+
public DeviceTypeConfigurationException(String msg, Exception nestedEx) {
super(msg, nestedEx);
}
- public DeviceTypeConfigurationException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public DeviceTypeConfigurationException(String msg) {
- super(msg);
- }
-
- public DeviceTypeConfigurationException() {
- super();
- }
-
- public DeviceTypeConfigurationException(Throwable cause) {
- super(cause);
- }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/InvalidConfigurationStateException.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/InvalidConfigurationStateException.java
deleted file mode 100644
index 3d39345327c..00000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/config/exception/InvalidConfigurationStateException.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2015, 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.carbon.device.mgt.extensions.device.type.template.config.exception;
-
-public class InvalidConfigurationStateException extends RuntimeException {
-
- private static final long serialVersionUID = -3151279411229070297L;
-
- public InvalidConfigurationStateException(int errorCode, String message) {
- super(message);
- }
-
- public InvalidConfigurationStateException(int errorCode, String message, Throwable cause) {
- super(message, cause);
- }
-
- public InvalidConfigurationStateException(String msg, Exception nestedEx) {
- super(msg, nestedEx);
- }
-
- public InvalidConfigurationStateException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public InvalidConfigurationStateException(String msg) {
- super(msg);
- }
-
- public InvalidConfigurationStateException() {
- super();
- }
-
- public InvalidConfigurationStateException(Throwable cause) {
- super(cause);
- }
-
-}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java
index ceedeb74546..0e1502f34a0 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PropertyBasedPluginDAOImpl.java
@@ -126,14 +126,13 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO {
}
public boolean updateDevice(Device device) throws DeviceTypeMgtPluginException {
- boolean status = false;
- Connection conn = null;
+ Connection conn;
PreparedStatement stmt = null;
try {
conn = deviceTypeDAOHandler.getConnection();
stmt = conn.prepareStatement(
- "UPDATE DM_DEVICE_PROPERTIES SET PROPERTY_VALUE = ? WHERE DEVICE_TYPE_NAME = ? AND " +
- "DEVICE_IDENTIFICATION = ? AND PROPERTY_NAME = ? AND TENANT_ID= ?");
+ "UPDATE DM_DEVICE_PROPERTIES SET PROPERTY_VALUE = ? WHERE DEVICE_TYPE_NAME = ? AND "
+ + "DEVICE_IDENTIFICATION = ? AND PROPERTY_NAME = ? AND TENANT_ID= ?");
for (Device.Property property : device.getProperties()) {
if (!deviceProps.contains(property.getName())) {
@@ -149,8 +148,8 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO {
stmt.executeBatch();
return true;
} catch (SQLException e) {
- String msg = "Error occurred while modifying the device '" +
- device.getDeviceIdentifier() + "' data on" + deviceType;
+ String msg = "Error occurred while modifying the device '" + device.getDeviceIdentifier() + "' data on"
+ + deviceType;
log.error(msg, e);
throw new DeviceTypeMgtPluginException(msg, e);
} finally {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java
index 1919e88f429..a07808a9ffe 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeMgtPluginException.java
@@ -22,6 +22,10 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template.exception;
*/
public class DeviceTypeMgtPluginException extends Exception{
+ public DeviceTypeMgtPluginException(String msg) {
+ super(msg);
+ }
+
public DeviceTypeMgtPluginException(String msg, Exception nestedEx) {
super(msg, nestedEx);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java
index d409d22b385..56ab67d7bf3 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/util/DeviceTypeUtils.java
@@ -25,6 +25,7 @@ import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException;
import org.wso2.carbon.device.mgt.extensions.internal.DeviceTypeExtensionDataHolder;
import org.wso2.carbon.registry.api.RegistryException;
+import org.wso2.carbon.registry.api.RegistryService;
import org.wso2.carbon.registry.api.Resource;
import org.wso2.carbon.registry.core.Registry;
@@ -101,25 +102,28 @@ public class DeviceTypeUtils {
public static Registry getConfigurationRegistry() throws DeviceTypeMgtPluginException {
try {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
- return DeviceTypeExtensionDataHolder.getInstance().getRegistryService()
- .getConfigSystemRegistry(tenantId);
+ org.wso2.carbon.registry.core.service.RegistryService registryService = DeviceTypeExtensionDataHolder
+ .getInstance().getRegistryService();
+ if (registryService == null) {
+ throw new DeviceTypeMgtPluginException("Registry Service is not initialized properly");
+ }
+ return registryService.getConfigSystemRegistry(tenantId);
} catch (RegistryException e) {
throw new DeviceTypeMgtPluginException("Error in retrieving conf registry instance: " + e.getMessage(), e);
}
}
public static boolean putRegistryResource(String path, Resource resource) throws DeviceTypeMgtPluginException {
- boolean status;
try {
- DeviceTypeUtils.getConfigurationRegistry().beginTransaction();
- DeviceTypeUtils.getConfigurationRegistry().put(path, resource);
- DeviceTypeUtils.getConfigurationRegistry().commitTransaction();
- status = true;
+ Registry registry = getConfigurationRegistry();
+ registry.beginTransaction();
+ registry.put(path, resource);
+ registry.commitTransaction();
+ return true;
} catch (RegistryException e) {
- throw new DeviceTypeMgtPluginException("Error occurred while persisting registry resource : " +
- e.getMessage(), e);
+ throw new DeviceTypeMgtPluginException(
+ "Error occurred while persisting registry resource : " + e.getMessage(), e);
}
- return status;
}
public static Resource getRegistryResource(String path) throws DeviceTypeMgtPluginException {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/license/mgt/file/FileSystemBasedLicenseManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/license/mgt/file/FileSystemBasedLicenseManager.java
index 30878f924cf..7d7da9891ab 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/license/mgt/file/FileSystemBasedLicenseManager.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/license/mgt/file/FileSystemBasedLicenseManager.java
@@ -39,9 +39,15 @@ public class FileSystemBasedLicenseManager implements LicenseManager {
String licenseConfigPath =
PATH_MOBILE_PLUGIN_CONF_DIR + File.separator + deviceType + File.separator + "license.xml";
File licenseConfig = new File(licenseConfigPath);
+
+ if (!licenseConfig.exists()) {
+ throw new LicenseManagementException(
+ "License file not found in the path for the device type " + deviceType);
+ }
JAXBContext context = JAXBContext.newInstance(License.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
return (License) unmarshaller.unmarshal(licenseConfig);
+
} catch (JAXBException e) {
throw new LicenseManagementException("Error occurred while un-marshalling license configuration " +
"used for '" + deviceType + "' platform from file system", e);
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
index d2d9060d12e..06c0a3a0fb9 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
@@ -18,13 +18,26 @@
package org.wso2.carbon.device.mgt.extensions.device.type.template;
+import org.h2.jdbcx.JdbcDataSource;
+import org.mockito.Mockito;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DataSource;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceDetails;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceTypeConfiguration;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Properties;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.exception.DeviceTypeConfigurationException;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceDAODefinition;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceTypeDAOHandler;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceTypePluginDAOImpl;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.DeviceTypePluginDAOManager;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.PropertyBasedPluginDAOImpl;
import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeDeployerPayloadException;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException;
import org.wso2.carbon.device.mgt.extensions.utils.Utils;
import org.xml.sax.SAXException;
@@ -32,7 +45,11 @@ import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
+import java.lang.reflect.Field;
import java.net.URL;
+import java.sql.Connection;
+import java.util.ArrayList;
+import java.util.List;
/**
* This class tests the negative scenarios in {@link DeviceTypeManager} initialization;
@@ -40,15 +57,22 @@ import java.net.URL;
public class DeviceTypeManagerNegativeTest {
private DeviceTypeConfiguration defectiveDeviceTypeConfiguration1;
private DeviceTypeConfiguration defectiveDeviceTypeConfiguration2;
+ private DeviceTypeConfiguration defectiveDeviceTypeConfiguration3;
private DeviceTypeConfiguration androidDeviceTypeConfiguration;
private DeviceTypeConfigIdentifier deviceTypeConfigIdentifier;
+ private DeviceTypeManager androidDeviceTypeManager;
+ private DeviceTypeDAOHandler deviceTypeDAOHandler;
private final String DEFECTIVE_DEVICE_TYPE = "defectiveDeviceType";
private final String TABLE_NAME = "DEFECTIVE_DEVICE";
+ private DeviceIdentifier deviceIdentifier;
+ private final String ANDROID_DEVICE_TYPE = "android";
+ private PropertyBasedPluginDAOImpl propertyBasedPluginDAO;
+ private Device sampleDevice;
@BeforeTest
public void setup()
throws SAXException, JAXBException, ParserConfigurationException, DeviceTypeConfigurationException,
- IOException {
+ IOException, NoSuchFieldException, IllegalAccessException {
ClassLoader classLoader = getClass().getClassLoader();
URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "defective-devicetype.xml");
File configurationFile = null;
@@ -76,6 +100,37 @@ public class DeviceTypeManagerNegativeTest {
if (configurationFile != null) {
androidDeviceTypeConfiguration = Utils.getDeviceTypeConfiguration(configurationFile.getAbsoluteFile());
}
+
+ resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "defective-devicetype3.xml");
+ if (resourceUrl != null) {
+ configurationFile = new File(resourceUrl.getFile());
+ }
+ if (configurationFile != null) {
+ defectiveDeviceTypeConfiguration3 = Utils
+ .getDeviceTypeConfiguration(configurationFile.getAbsoluteFile());
+ }
+ createDefectiveDeviceTypeManager();
+ deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(Utils.TEST_STRING);
+ deviceIdentifier.setType(ANDROID_DEVICE_TYPE);
+
+ DeviceDetails deviceDetails = new DeviceDetails();
+ Properties properties = new Properties();
+ List propertyList = new ArrayList<>();
+ propertyList.add(Utils.TEST_STRING);
+ properties.addProperties(propertyList);
+
+ deviceDetails.setProperties(properties);
+ propertyBasedPluginDAO = new PropertyBasedPluginDAOImpl(deviceDetails,
+ deviceTypeDAOHandler, ANDROID_DEVICE_TYPE);
+ sampleDevice = new Device();
+ sampleDevice.setDeviceIdentifier(Utils.TEST_STRING);
+ List deviceProperties = new ArrayList<>();
+ Device.Property property = new Device.Property();
+ property.setName(Utils.TEST_STRING);
+ property.setValue(Utils.TEST_STRING);
+ deviceProperties.add(property);
+ sampleDevice.setProperties(deviceProperties);
}
@Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without defining the "
@@ -121,4 +176,168 @@ public class DeviceTypeManagerNegativeTest {
new DeviceTypeManager(deviceTypeConfigIdentifier, androidDeviceTypeConfiguration);
}
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation when having a "
+ + "defective platform configuration ", expectedExceptions = {DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Error occurred while getting default platform configuration for the "
+ + "device type wrong *")
+ public void testWithDefectivePlatformConfiguration() {
+ DeviceTypeConfigIdentifier wrongDeviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier("wrong",
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+ new DeviceTypeManager(wrongDeviceTypeConfigIdentifier, androidDeviceTypeConfiguration);
+ }
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation when having a "
+ + "defective platform configuration ", expectedExceptions = {DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Error while looking up the data source:.*")
+ public void testWithoutDeviceSpecificTable() {
+ new DeviceTypeManager(deviceTypeConfigIdentifier, defectiveDeviceTypeConfiguration3);
+ }
+
+ @Test(description = "This test case tests the behaviour of the isEnrolled when the relevant tables are not there",
+ expectedExceptions = {DeviceManagementException.class},
+ expectedExceptionsMessageRegExp = "Error while checking the enrollment status of android device.*")
+ public void testIsEnrolled() throws DeviceManagementException {
+ androidDeviceTypeManager.isEnrolled(deviceIdentifier);
+ }
+
+ @Test(description = "This test case tests the behaviour of the modifyEnrollment when the relevant tables "
+ + "are not there",
+ expectedExceptions = {DeviceManagementException.class},
+ expectedExceptionsMessageRegExp = "Error while updating the enrollment of the.*")
+ public void testModifyEnrollment() throws DeviceManagementException {
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceIdentifier.getId());
+ device.setType(deviceIdentifier.getType());
+ androidDeviceTypeManager.modifyEnrollment(device);
+ }
+
+ @Test(description = "This test case tests the behaviour of the getAllDevices when the relevant tables "
+ + "are not there",
+ expectedExceptions = {DeviceManagementException.class},
+ expectedExceptionsMessageRegExp = "Error occurred while fetching all.*")
+ public void testGetAllDevices() throws DeviceManagementException {
+ androidDeviceTypeManager.getAllDevices();
+ }
+
+ @Test(description = "This test case tests the behaviour of the updateDeviceInfo when the relevant tables "
+ + "are not there",
+ expectedExceptions = {DeviceManagementException.class},
+ expectedExceptionsMessageRegExp = "Error occurred while fetching the.*")
+ public void testUpdateDeviceInfo() throws DeviceManagementException {
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceIdentifier.getId());
+ device.setType(deviceIdentifier.getType());
+ androidDeviceTypeManager.updateDeviceInfo(deviceIdentifier, device);
+ }
+
+ @Test(description = ("This test case tests the behaviour of the enrollDevice when the relevant tables are not "
+ + "there"), expectedExceptions = {DeviceManagementException.class},
+ expectedExceptionsMessageRegExp = "Error while enrolling the.*", dependsOnMethods = {"testIsEnrolled"})
+ public void testEnrollDevice() throws DeviceManagementException {
+ Device device = new Device();
+ device.setDeviceIdentifier(deviceIdentifier.getId());
+ device.setType(deviceIdentifier.getType());
+ Mockito.doReturn(false).when(androidDeviceTypeManager).isEnrolled(Mockito.any());
+ androidDeviceTypeManager.enrollDevice(device);
+ }
+
+ @Test(description = ("This test case tests the behaviour of the updateDeviceInfo when the relevant tables are not "
+ + "there"), expectedExceptions = {DeviceManagementException.class},
+ expectedExceptionsMessageRegExp = "Error occurred while updating the.*", dependsOnMethods =
+ {"testUpdateDeviceInfo"})
+ public void testUpdateDeviceWithMock() throws DeviceManagementException {
+ Mockito.doReturn(new Device()).when(androidDeviceTypeManager).getDevice(Mockito.any());
+ androidDeviceTypeManager.updateDeviceInfo(deviceIdentifier, sampleDevice);
+ }
+
+ @Test(description = "This test case tests the behaviour of addDevice when the relevant tables are not available",
+ expectedExceptions = { DeviceTypeMgtPluginException.class },
+ expectedExceptionsMessageRegExp = "Error occurred while adding the device .*")
+ public void testAddDevice() throws DeviceTypeMgtPluginException {
+ propertyBasedPluginDAO.addDevice(sampleDevice);
+ }
+
+ @Test(description = "This test case tests the behaviour of getDevice when the relevant tables are not available",
+ expectedExceptions = { DeviceTypeMgtPluginException.class },
+ expectedExceptionsMessageRegExp = "Error occurred while fetching device .*")
+ public void testGetPropertyBasedDevice() throws DeviceTypeMgtPluginException {
+ propertyBasedPluginDAO.getDevice("id");
+ }
+
+ @Test(description = "This test case tests the behaviour of the getAllDevices method of the PropertyBasedPuginDAO",
+ expectedExceptions = {DeviceTypeMgtPluginException.class}, expectedExceptionsMessageRegExp = "Error "
+ + "occurred while fetching all.*")
+ public void testGetAllPropertyBasedDevices() throws DeviceTypeMgtPluginException {
+ propertyBasedPluginDAO.getAllDevices();
+ }
+
+ @Test(description = "This test case tests the behaviour of the updateDevice method of the PropertyBasedPuginDAO",
+ expectedExceptions = {DeviceTypeMgtPluginException.class}, expectedExceptionsMessageRegExp = "Error "
+ + "occurred while modifying the device.*")
+ public void testUpdateDevice() throws DeviceTypeMgtPluginException {
+ propertyBasedPluginDAO.updateDevice(sampleDevice);
+ }
+
+ /**
+ * To create a defective device type manager for testing.
+ * @throws NoSuchFieldException No Such Field Exception.
+ * @throws SAXException SAX Exception.
+ * @throws JAXBException JAXB Exception
+ * @throws ParserConfigurationException Parser Configuration Exception.
+ * @throws DeviceTypeConfigurationException Device Type Configuration Exception.
+ * @throws IOException IO Exception.
+ * @throws IllegalAccessException Illegal Access Exception.
+ */
+ private void createDefectiveDeviceTypeManager()
+ throws NoSuchFieldException, SAXException, JAXBException, ParserConfigurationException,
+ DeviceTypeConfigurationException, IOException, IllegalAccessException {
+ Field datasourceField = DeviceTypeDAOHandler.class.getDeclaredField("dataSource");
+ datasourceField.setAccessible(true);
+ Field currentConnection = DeviceTypeDAOHandler.class.getDeclaredField("currentConnection");
+ currentConnection.setAccessible(true);
+ Field deviceTypePluginDAOField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypePluginDAO");
+ deviceTypePluginDAOField.setAccessible(true);
+ Field deviceTypeDAOHandlerField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypeDAOHandler");
+ deviceTypeDAOHandlerField.setAccessible(true);
+
+ ClassLoader classLoader = getClass().getClassLoader();
+ URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "android.xml");
+ File androidConfiguration = null;
+ if (resourceUrl != null) {
+ androidConfiguration = new File(resourceUrl.getFile());
+ }
+ DeviceTypeConfiguration androidDeviceConfiguration = Utils.getDeviceTypeConfiguration(androidConfiguration);
+ androidDeviceTypeManager = Mockito.mock(DeviceTypeManager.class, Mockito.CALLS_REAL_METHODS);
+
+ deviceTypeDAOHandler = Mockito
+ .mock(DeviceTypeDAOHandler.class, Mockito.CALLS_REAL_METHODS);
+
+ JdbcDataSource dataSource = new JdbcDataSource();
+ dataSource.setURL("jdbc:h2:mem:notexist;DB_CLOSE_DELAY=-1");
+ dataSource.setUser("sa");
+ dataSource.setPassword("sa");
+ datasourceField.set(deviceTypeDAOHandler, dataSource);
+ currentConnection.set(deviceTypeDAOHandler, new ThreadLocal());
+
+ DeviceDAODefinition deviceDAODefinition = Utils.getDeviceDAODefinition(androidDeviceConfiguration);
+ DeviceTypePluginDAOImpl deviceTypePluginDAO = new DeviceTypePluginDAOImpl(deviceDAODefinition,
+ deviceTypeDAOHandler);
+ DeviceTypePluginDAOManager deviceTypePluginDAOManager = Mockito
+ .mock(DeviceTypePluginDAOManager.class, Mockito.CALLS_REAL_METHODS);
+ deviceTypePluginDAOField.set(deviceTypePluginDAOManager, deviceTypePluginDAO);
+ deviceTypeDAOHandlerField.set(deviceTypePluginDAOManager, deviceTypeDAOHandler);
+
+ Field deviceTypePluginDAOManagerField = DeviceTypeManager.class.getDeclaredField("deviceTypePluginDAOManager");
+ deviceTypePluginDAOManagerField.setAccessible(true);
+ deviceTypePluginDAOManagerField.set(androidDeviceTypeManager, deviceTypePluginDAOManager);
+
+ Field propertiesExist = DeviceTypeManager.class.getDeclaredField("propertiesExist");
+ propertiesExist.setAccessible(true);
+ Field deviceType = DeviceTypeManager.class.getDeclaredField("deviceType");
+ deviceType.setAccessible(true);
+
+ deviceType.set(androidDeviceTypeManager, ANDROID_DEVICE_TYPE);
+ propertiesExist.set(androidDeviceTypeManager, true);
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java
index 27ebd3f8277..d6f732cf13e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerTest.java
@@ -170,8 +170,8 @@ public class DeviceTypeManagerTest {
Assert.assertTrue(customDeviceTypeManager.enrollDevice(customDevice), "Custom device type enrollment failed.");
List properties = customDevice.getProperties();
Device.Property property = new Device.Property();
- property.setName("test");
- property.setValue("test");
+ property.setName(Utils.TEST_STRING);
+ property.setValue(Utils.TEST_STRING);
properties.add(property);
customDevice.setProperties(properties);
Assert.assertFalse(customDeviceTypeManager.enrollDevice(customDevice),
@@ -239,8 +239,8 @@ public class DeviceTypeManagerTest {
list.add(property);
}
- sampleDevice1 = new Device("testdevice", androidDeviceType, "test", "testdevice", null, null, list);
- sampleDevice2 = new Device("testdevice1", androidDeviceType, "test", "testdevice", null, null, list);
+ sampleDevice1 = new Device("testdevice", androidDeviceType, Utils.TEST_STRING, "testdevice", null, null, list);
+ sampleDevice2 = new Device("testdevice1", androidDeviceType, Utils.TEST_STRING, "testdevice", null, null, list);
}
/**
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java
index 7c4ff9ec2c6..b6beda3c2c0 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest.java
@@ -42,9 +42,13 @@ import javax.xml.bind.JAXBException;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
/**
* This test case contains the tests for {@link HTTPDeviceTypeManagerService} and {@link DeviceTypeGeneratorServiceImpl}
@@ -75,7 +79,8 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
@Test(description = "This test case tests the enrollment of newly added device type")
public void testEnrollDevice() throws DeviceManagementException {
String deviceId = "testdevice1";
- Device sampleDevice1 = new Device(deviceId, androidSenseDeviceType, "test", "testdevice", null, null, null);
+ Device sampleDevice1 = new Device(deviceId, androidSenseDeviceType, Utils.TEST_STRING, "testdevice", null, null,
+ null);
Assert.assertTrue(httpDeviceTypeManagerService.getDeviceManager().enrollDevice(sampleDevice1),
"Enrollment of " + androidSenseDeviceType + " device failed");
Assert.assertTrue(httpDeviceTypeManagerService.getDeviceManager()
@@ -108,7 +113,7 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
ConfigurationEntry configurationEntry = configurationEntries.get(0);
- Assert.assertEquals(configurationEntry.getName(), "test",
+ Assert.assertEquals(configurationEntry.getName(), Utils.TEST_STRING,
"Platform Configuration for device type " + "sample is not saved correctly");
String contentType = configurationEntry.getContentType();
@@ -142,6 +147,28 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
httpDeviceTypeManagerService.getDeviceManager().enrollDevice(null);
}
+ @Test(description = "This test case tests the getDeviceTypeConfiguration method",
+ dependsOnMethods = {"testPopulateDeviceManagementService"})
+ public void testGetDeviceTypeConfiguration()
+ throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ Method getDeviceTypeConfiguration = HTTPDeviceTypeManagerService.class
+ .getDeclaredMethod("getDeviceTypeConfiguration", String.class, DeviceTypeMetaDefinition.class);
+ getDeviceTypeConfiguration.setAccessible(true);
+ List properties = new ArrayList<>();
+ properties.add(Utils.TEST_STRING);
+ deviceTypeMetaDefinition.setProperties(properties);
+ Map mapProperties = new HashMap<>();
+ mapProperties.put(Utils.TEST_STRING, Utils.TEST_STRING);
+ PushNotificationConfig pushNotificationConfig = new PushNotificationConfig("push", true, mapProperties);
+ deviceTypeMetaDefinition.setPushNotificationConfig(pushNotificationConfig);
+ DeviceTypeConfiguration deviceTypeConfiguration = (DeviceTypeConfiguration) getDeviceTypeConfiguration
+ .invoke(httpDeviceTypeManagerService, "android", deviceTypeMetaDefinition);
+ Assert.assertEquals(deviceTypeMetaDefinition.getProperties().size(),
+ deviceTypeConfiguration.getDeviceDetails().getProperties().getProperty().size(), "Number of "
+ + "properties added in device-type meta definition is not equal to the properties added in "
+ + "the DeviceType Configuration");
+ }
+
/**
* To create a sample device type meta defintion.
* @throws SAXException SAX Exception.
@@ -180,6 +207,13 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
commonFeature.setCode(feature.getCode());
commonFeature.setDescription(feature.getDescription());
commonFeature.setName(feature.getName());
+ org.wso2.carbon.device.mgt.common.Feature.MetadataEntry metadataEntry = new org.wso2.carbon.device.mgt
+ .common.Feature.MetadataEntry();
+ metadataEntry.setId(1);
+ metadataEntry.setValue(Utils.TEST_STRING);
+ List metadataEntries = new ArrayList<>();
+ metadataEntries.add(metadataEntry);
+ commonFeature.setMetadataEntries(metadataEntries);
features.add(commonFeature);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java
index d35b8eba93e..8a2634d0f80 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/Utils.java
@@ -56,6 +56,7 @@ import java.util.List;
*/
public class Utils {
public static final String DEVICE_TYPE_FOLDER = "device-types" + File.separator;
+ public static final String TEST_STRING = "test";
/**
* To get the device type configuration based on the configuration file
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java
new file mode 100644
index 00000000000..c5a6f419cd2
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/utils/UtilsTest.java
@@ -0,0 +1,126 @@
+/*
+ * 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.carbon.device.mgt.extensions.utils;
+
+import org.testng.Assert;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.license.mgt.License;
+import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.DeviceTypeConfigIdentifier;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeMgtPluginException;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.util.DeviceSchemaInitializer;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.util.DeviceTypeUtils;
+import org.wso2.carbon.device.mgt.extensions.license.mgt.file.FileSystemBasedLicenseManager;
+import org.wso2.carbon.device.mgt.extensions.license.mgt.registry.RegistryBasedLicenseManager;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/**
+ * This is a test case for testing common utilities used.
+ */
+public class UtilsTest {
+ private FileSystemBasedLicenseManager fileSystemBasedLicenseManager;
+
+ @BeforeTest
+ public void setup() {
+ fileSystemBasedLicenseManager = new FileSystemBasedLicenseManager();
+ }
+
+ @Test(description = "This testcase tests the functionality of the DeviceSchemaInitializer")
+ public void testDeviceSchemaInitializer()
+ throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ String deviceType = "sample2";
+ String expectedDBLocation =
+ System.getProperty("carbon.home") + File.separator + "dbscripts" + File.separator + "cdm"
+ + File.separator + "plugins" + File.separator + deviceType + File.separator + "h2.sql";
+ DeviceSchemaInitializer deviceSchemaInitializer = new DeviceSchemaInitializer(null, deviceType,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+ Method getDbScriptLocation = DeviceSchemaInitializer.class
+ .getDeclaredMethod("getDbScriptLocation", String.class);
+ getDbScriptLocation.setAccessible(true);
+
+ String dbLocation = (String) getDbScriptLocation.invoke(deviceSchemaInitializer, "h2");
+ Assert.assertEquals(dbLocation, expectedDBLocation,
+ "Expected DB location for the device type is not retrieved");
+ }
+
+ @Test(description = "This test case tests the getLicense method of the FileBasedLicenseManager")
+ public void testFileBasedLicenseManagerGetLicense() throws LicenseManagementException {
+ License fileBasedLicense = fileSystemBasedLicenseManager.getLicense(Utils.TEST_STRING,"en_US");
+ Assert.assertEquals(fileBasedLicense.getText(), "This is a file based license",
+ "FileBased License cannot " + "be retrieved by FileBasedLicenseManager");
+ }
+
+ @Test(description = "This test case tests the behaviour of file based license manager when the relevant license "
+ + "is missing in file system", expectedExceptions = {LicenseManagementException.class},
+ expectedExceptionsMessageRegExp = "License file not found in the path for the device type test2")
+ public void testFileBasedLicenseManagerGetNonExistingLicense() throws LicenseManagementException {
+ fileSystemBasedLicenseManager.getLicense("test2","en_US");
+ }
+
+ @Test(description = "This test case make sure the File Based License cannot be added without adding directly to "
+ + "file system", expectedExceptions = {UnsupportedOperationException.class},
+ expectedExceptionsMessageRegExp = "'addLicense' method is not supported in FileSystemBasedLicenseManager")
+ public void testFileBasedLicenseManagerAddLicense() throws LicenseManagementException {
+ fileSystemBasedLicenseManager.addLicense(Utils.TEST_STRING, null);
+ }
+
+ @Test(description = "This test case tests the DeviceTypeConfigIdentifier equals method")
+ public void testDeviceTypeConfigIdentifier() {
+ DeviceTypeConfigIdentifier deviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier("sample",
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+ DeviceTypeConfigIdentifier clonedDeviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier("sample",
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+ Assert.assertTrue(deviceTypeConfigIdentifier.equals(clonedDeviceTypeConfigIdentifier),
+ "Clone device type config identifier gives wrong results for equals check.");
+ Assert.assertFalse(deviceTypeConfigIdentifier.equals(null),
+ "Device Type config identifier object comparison gives wrong results.");
+ }
+
+ @Test(description = "This test cases tests the registry based license addition")
+ public void testAddRegistryBasedLicense() throws LicenseManagementException {
+ String newLicenseString = "New License";
+ License fileBasedLicense = fileSystemBasedLicenseManager.getLicense(Utils.TEST_STRING, "en_US");
+ RegistryBasedLicenseManager registryBasedLicenseManager = new RegistryBasedLicenseManager();
+ registryBasedLicenseManager.addLicense(Utils.TEST_STRING, fileBasedLicense);
+ Assert.assertEquals(fileBasedLicense.getText(),
+ registryBasedLicenseManager.getLicense(Utils.TEST_STRING, "en_US").getText(),
+ "Registry license addition failed");
+ fileBasedLicense.setText(newLicenseString);
+ registryBasedLicenseManager.addLicense(Utils.TEST_STRING, fileBasedLicense);
+ Assert.assertEquals(registryBasedLicenseManager.getLicense(Utils.TEST_STRING, "en_US").getText(),
+ newLicenseString, "Registry license update failed");
+ }
+
+ @Test(description = "This test case tests the GetConfigurationRegistry method when the registry service is "
+ + "unavailable", dependsOnMethods = {"testDeviceSchemaInitializer", "testDeviceTypeConfigIdentifier",
+ "testAddRegistryBasedLicense"},
+ expectedExceptions = {DeviceTypeMgtPluginException.class},
+ expectedExceptionsMessageRegExp = "Error in retrieving conf registry instance:.*")
+ public void testGetConfigurationRegistry() throws DeviceTypeMgtPluginException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(4);
+ DeviceTypeUtils.getConfigurationRegistry();
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugin-configs/mobile/wrong-default-platform-configuration.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugin-configs/mobile/wrong-default-platform-configuration.xml
new file mode 100644
index 00000000000..645805d7a87
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugin-configs/mobile/wrong-default-platform-configuration.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugins/test/license.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugins/test/license.xml
new file mode 100644
index 00000000000..7bf018734d3
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/etc/device-mgt-plugins/test/license.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+ en_US
+ 1.0.0
+ This is a file based license
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml
index 0bb97a7dc97..036b3dda067 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/carbon-home/repository/conf/registry.xml
@@ -24,7 +24,7 @@
wso2registry
false
- true
+ false
/
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml
index 176469c3299..0320698ff49 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml
@@ -51,6 +51,11 @@
true
+
+
+ true
+
+
+
+
+
+
+ defective
+
+
+
+
+
+
+ Control Bulb
+ Control Bulb on Arduino Uno
+
+
+ state
+
+
+
+
+
+
+ true
+
+
+
+ en_US
+ 1.0.0
+ This is license text
+
+
+
+
+ jdbc/MobileAndroidDM_DS
+
+
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/testng.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/testng.xml
index f37097fda10..661e7dd0ddc 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/testng.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/testng.xml
@@ -29,6 +29,7 @@
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml
index 6a094e5a846..30e36caf3eb 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.ui/pom.xml
@@ -22,7 +22,7 @@
device-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml
index 52aa0f88b80..69a2a2637a8 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.url.printer/pom.xml
@@ -23,7 +23,7 @@
device-mgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/pom.xml b/components/device-mgt/pom.xml
index b46ea319f6a..eda7460652d 100644
--- a/components/device-mgt/pom.xml
+++ b/components/device-mgt/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
@@ -37,7 +37,6 @@
org.wso2.carbon.device.mgt.common
org.wso2.carbon.device.mgt.extensions
org.wso2.carbon.device.mgt.ui
- org.wso2.carbon.device.mgt.analytics.dashboard
org.wso2.carbon.device.mgt.api
org.wso2.carbon.device.mgt.analytics.data.publisher
org.wso2.carbon.device.mgt.url.printer
diff --git a/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml b/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml
index 54578c77896..b2a2550d54f 100644
--- a/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml
+++ b/components/email-sender/org.wso2.carbon.email.sender.core/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
email-sender
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/email-sender/pom.xml b/components/email-sender/pom.xml
index 1d71323cbb5..570304d23b0 100644
--- a/components/email-sender/pom.xml
+++ b/components/email-sender/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
diff --git a/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml b/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml
index 75afb3309b5..396e9f5055d 100644
--- a/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml
+++ b/components/identity-extensions/org.wso2.carbon.device.mgt.oauth.extensions/pom.xml
@@ -22,13 +22,13 @@
org.wso2.carbon.devicemgt
identity-extensions
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.oauth.extensions
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - OAuth Extensions
http://wso2.org
diff --git a/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml b/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml
index 38bc34bc0cf..0eb7fa38734 100644
--- a/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml
+++ b/components/identity-extensions/org.wso2.carbon.identity.authenticator.backend.oauth/pom.xml
@@ -21,7 +21,7 @@
identity-extensions
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
4.0.0
diff --git a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml
index d4cbf4780ff..5b85940c953 100644
--- a/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml
+++ b/components/identity-extensions/org.wso2.carbon.identity.jwt.client.extension/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
identity-extensions
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/components/identity-extensions/pom.xml b/components/identity-extensions/pom.xml
index 9089204ee81..7fd48618ec1 100644
--- a/components/identity-extensions/pom.xml
+++ b/components/identity-extensions/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
diff --git a/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml b/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml
index 8ef5b9987b3..3f21bfd509c 100644
--- a/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml
+++ b/components/policy-mgt/org.wso2.carbon.complex.policy.decision.point/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
policy-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.complex.policy.decision.point
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Policy Decision Point
WSO2 Carbon - Policy Decision Point
diff --git a/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml
index f724bd95edd..62c9d89e1be 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.decision.point/pom.xml
@@ -3,14 +3,14 @@
org.wso2.carbon.devicemgt
policy-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.decision.point
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Policy Decision Point
WSO2 Carbon - Policy Decision Point
diff --git a/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml
index 83b3483dabc..677cd14ad85 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.information.point/pom.xml
@@ -3,7 +3,7 @@
org.wso2.carbon.devicemgt
policy-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
@@ -11,7 +11,7 @@
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.information.point
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Policy Information Point
WSO2 Carbon - Policy Information Point
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml
index 1a2629aa574..b9bf3abffe6 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.common/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
policy-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.mgt.common
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Policy Management Common
WSO2 Carbon - Policy Management Common
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml
index f0f112329da..7d40f0b4fc0 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
policy-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.mgt.core
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Policy Management Core
WSO2 Carbon - Policy Management Core
@@ -77,6 +77,7 @@
!org.wso2.carbon.policy.mgt.core.internal,
org.wso2.carbon.policy.mgt.core.*
+ *
@@ -205,6 +206,28 @@
test
+
+
+ commons-dbcp.wso2
+ commons-dbcp
+ 1.4.0.wso2v1
+ test
+
+
+
+ commons-pool.wso2
+ commons-pool
+ 1.5.6.wso2v1
+ test
+
+
+
+
+ org.mockito
+ mockito-core
+ 2.10.0
+
+
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
index 88af6eb50ae..79626eb4854 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/main/java/org/wso2/carbon/policy/mgt/core/mgt/impl/PolicyManagerImpl.java
@@ -232,7 +232,7 @@ public class PolicyManagerImpl implements PolicyManager {
policyDAO.addDeviceGroupsToPolicy(policy);
}
- if (policy.getPolicyCriterias() != null) {
+ if (policy.getPolicyCriterias() != null && !policy.getPolicyCriterias().isEmpty()) {
List criteria = policy.getPolicyCriterias();
for (PolicyCriterion criterion : criteria) {
if (!policyDAO.checkCriterionExists(criterion.getName())) {
@@ -794,7 +794,7 @@ public class PolicyManagerImpl implements PolicyManager {
List deviceList = new ArrayList<>();
List deviceIds;
try {
- DeviceManagementProviderService service = new DeviceManagementProviderServiceImpl();
+ DeviceManagementProviderService service = PolicyManagementDataHolder.getInstance().getDeviceManagementService();
List allDevices = service.getAllDevices();
PolicyManagementDAOFactory.openConnection();
deviceIds = policyDAO.getPolicyAppliedDevicesIds(policyId);
@@ -1092,9 +1092,9 @@ public class PolicyManagerImpl implements PolicyManager {
String type = null;
if (deviceIdentifiers.size() > 0) {
type = deviceIdentifiers.get(0).getType();
+ PolicyManagementDataHolder.getInstance().getDeviceManagementService().addOperation(type,
+ this.getPolicyRevokeOperation(), deviceIdentifiers);
}
- PolicyManagementDataHolder.getInstance().getDeviceManagementService().addOperation(type,
- this.getPolicyRevokeOperation(), deviceIdentifiers);
} catch (InvalidDeviceException e) {
String msg = "Invalid DeviceIdentifiers found.";
log.error(msg, e);
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java
index 482a205f65f..9e86417fd01 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/BasePolicyManagementDAOTest.java
@@ -122,7 +122,7 @@ public abstract class BasePolicyManagementDAOTest {
}
}
- private void initSQLScript() throws Exception {
+ protected void initSQLScript() throws Exception {
Connection conn = null;
Statement stmt = null;
try {
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImplTest.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImplTest.java
new file mode 100644
index 00000000000..75e5bb69b8b
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/PolicyManagerServiceImplTest.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (c) 2016, 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.carbon.policy.mgt.core;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.DeviceNotFoundException;
+import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
+import org.wso2.carbon.device.mgt.common.group.mgt.DeviceGroup;
+import org.wso2.carbon.device.mgt.common.group.mgt.GroupAlreadyExistException;
+import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Operation;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManagementException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.OperationManager;
+import org.wso2.carbon.device.mgt.common.policy.mgt.DeviceGroupWrapper;
+import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
+import org.wso2.carbon.device.mgt.common.policy.mgt.Profile;
+import org.wso2.carbon.device.mgt.common.policy.mgt.ProfileFeature;
+import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature;
+import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
+import org.wso2.carbon.device.mgt.core.authorization.DeviceAccessAuthorizationServiceImpl;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
+import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
+import org.wso2.carbon.device.mgt.core.operation.mgt.PolicyOperation;
+import org.wso2.carbon.device.mgt.core.operation.mgt.ProfileOperation;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.GroupManagementProviderServiceImpl;
+import org.wso2.carbon.policy.mgt.common.PolicyEvaluationPoint;
+import org.wso2.carbon.policy.mgt.common.PolicyManagementException;
+import org.wso2.carbon.policy.mgt.core.enforcement.DelegationTask;
+import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
+import org.wso2.carbon.policy.mgt.core.mock.TypeADeviceManagementService;
+import org.wso2.carbon.policy.mgt.core.services.SimplePolicyEvaluationTest;
+import org.wso2.carbon.policy.mgt.core.task.MonitoringTask;
+import org.wso2.carbon.policy.mgt.core.util.PolicyManagementConstants;
+import org.wso2.carbon.registry.core.config.RegistryContext;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.internal.RegistryDataHolder;
+import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService;
+import org.wso2.carbon.registry.core.service.RegistryService;
+import org.wso2.carbon.user.core.service.RealmService;
+
+import java.io.InputStream;
+import java.sql.Timestamp;
+import java.util.ArrayList;
+import java.util.List;
+
+public class PolicyManagerServiceImplTest extends BasePolicyManagementDAOTest {
+
+ private static final Log log = LogFactory.getLog(PolicyManagerServiceImpl.class);
+
+ private static final String DEVICE_TYPE_A = "deviceTypeA";
+ private static final String DEVICE1 = "device1";
+ private static final String GROUP1 = "group1";
+ private static final String POLICY1 = "policy1";
+ private static final String POLICY1_FEATURE1_CODE = "DISALLOW_ADJUST_VOLUME";
+ private static final String ADMIN_USER = "admin";
+
+ private DeviceManagementProviderService deviceMgtService;
+ private GroupManagementProviderService groupMgtService;
+ private OperationManager operationManager;
+ private PolicyManagerService policyManagerService;
+
+ private Policy policy1;
+
+ @BeforeClass
+ public void init() throws Exception {
+ super.initSQLScript();
+
+ DeviceConfigurationManager.getInstance().initConfig();
+ log.info("Initializing policy tests");
+
+ deviceMgtService = new DeviceManagementProviderServiceImpl();
+ groupMgtService = new GroupManagementProviderServiceImpl();
+
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceMgtService);
+ DeviceManagementDataHolder.getInstance().setRegistryService(getRegistryService());
+ DeviceManagementDataHolder.getInstance().setDeviceAccessAuthorizationService(new DeviceAccessAuthorizationServiceImpl());
+ DeviceManagementDataHolder.getInstance().setGroupManagementProviderService(groupMgtService);
+ DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
+
+ PolicyEvaluationPoint policyEvaluationPoint = new SimplePolicyEvaluationTest();
+ PolicyManagementDataHolder.getInstance().setPolicyEvaluationPoint("Simple", policyEvaluationPoint);
+ PolicyManagementDataHolder.getInstance().setDeviceManagementService(deviceMgtService);
+ }
+
+ private RegistryService getRegistryService() throws RegistryException {
+ RealmService realmService = new InMemoryRealmService();
+ RegistryDataHolder.getInstance().setRealmService(realmService);
+ DeviceManagementDataHolder.getInstance().setRealmService(realmService);
+ InputStream is = this.getClass().getClassLoader().getResourceAsStream("carbon-home/repository/conf/registry.xml");
+ RegistryContext context = RegistryContext.getBaseInstance(is, realmService);
+ context.setSetup(true);
+ return context.getEmbeddedRegistryService();
+ }
+
+ private boolean enrollDevice(String deviceName, String deviceType) {
+ boolean success = false;
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo(
+ ADMIN_USER, EnrolmentInfo.OwnerShip.BYOD, EnrolmentInfo.Status.ACTIVE);
+ Device device1 = new Device(deviceName, deviceType, deviceName, deviceName, enrolmentInfo, null, null);
+ try {
+ success = deviceMgtService.enrollDevice(device1);
+ } catch (DeviceManagementException e) {
+ String msg = "Failed to enroll a device.";
+ log.error(msg, e);
+ Assert.fail();
+ }
+ return success;
+ }
+
+ private void createDeviceGroup(String groupName) {
+ DeviceGroup deviceGroup = new DeviceGroup(groupName);
+ deviceGroup.setDescription(groupName);
+ deviceGroup.setOwner(ADMIN_USER);
+ try {
+ groupMgtService.createGroup(deviceGroup, null, null);
+ } catch (GroupAlreadyExistException | GroupManagementException e) {
+ String msg = "Failed to create group: " + groupName;
+ log.error(msg, e);
+ Assert.fail(msg);
+ }
+ }
+
+ private void addDeviceToGroup(DeviceIdentifier deviceIdentifier, String groupName) {
+ List groupDevices = new ArrayList<>();
+ groupDevices.add(deviceIdentifier);
+ try {
+ DeviceGroup group = groupMgtService.getGroup(groupName);
+ groupMgtService.addDevices(group.getGroupId(), groupDevices);
+ } catch (DeviceNotFoundException | GroupManagementException e) {
+ String msg = "Failed to add device " + deviceIdentifier.getId() + " to group " + groupName;
+ log.error(msg, e);
+ Assert.fail(msg);
+ }
+ }
+
+ @Test
+ public void addPolicy() throws DeviceManagementException, GroupManagementException, PolicyManagementException {
+ int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
+ policyManagerService = new PolicyManagerServiceImpl();
+
+ deviceMgtService.registerDeviceType(new TypeADeviceManagementService());
+ operationManager = new OperationManagerImpl(DEVICE_TYPE_A);
+ enrollDevice(DEVICE1, DEVICE_TYPE_A);
+ createDeviceGroup(GROUP1);
+ DeviceGroup group1 = groupMgtService.getGroup(GROUP1);
+ addDeviceToGroup(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), GROUP1);
+
+ Profile profile = new Profile();
+ profile.setTenantId(tenantId);
+ profile.setCreatedDate(new Timestamp(System.currentTimeMillis()));
+ profile.setDeviceType(DEVICE_TYPE_A);
+
+ List profileFeatures = new ArrayList();
+ ProfileFeature profileFeature = new ProfileFeature();
+ profileFeature.setContent("{'enable':'true'}");
+ profileFeature.setDeviceType(DEVICE_TYPE_A);
+ profileFeature.setFeatureCode(POLICY1_FEATURE1_CODE);
+ profileFeatures.add(profileFeature);
+ profile.setProfileFeaturesList(profileFeatures);
+ profile.setProfileName("tp_profile1");
+ profile.setUpdatedDate(new Timestamp(System.currentTimeMillis()));
+
+ DeviceGroupWrapper deviceGroupWrapper = new DeviceGroupWrapper();
+ deviceGroupWrapper.setId(group1.getGroupId());
+ deviceGroupWrapper.setName(GROUP1);
+ deviceGroupWrapper.setOwner(ADMIN_USER);
+ deviceGroupWrapper.setTenantId(tenantId);
+ List deviceGroupWrappers = new ArrayList<>();
+ deviceGroupWrappers.add(deviceGroupWrapper);
+
+ policy1 = new Policy();
+ policy1.setPolicyName(POLICY1);
+ policy1.setDescription(POLICY1);
+ policy1.setProfile(profile);
+ policy1.setOwnershipType("BYOD");
+ policy1.setActive(false);
+ policy1.setRoles(new ArrayList<>());
+ policy1.setUsers(new ArrayList<>());
+ policy1.setCompliance(PolicyManagementConstants.ENFORCE);
+ policy1.setDeviceGroups(deviceGroupWrappers);
+ List devices = new ArrayList();
+ policy1.setDevices(devices);
+ policy1.setTenantId(PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId());
+ policy1 = policyManagerService.addPolicy(policy1);
+
+ int policyCount = policyManagerService.getPolicyCount();
+ Assert.assertEquals(policyCount, 1, "Policy count should be 1");
+
+ List allPolicies = policyManagerService.getPolicies(DEVICE_TYPE_A);
+ boolean policyFound = false;
+ for (Policy policy : allPolicies) {
+ String policyName = policy.getPolicyName();
+ if (POLICY1.equals(policyName)) {
+ policyFound = true;
+ break;
+ }
+ }
+ Assert.assertTrue(policyFound, POLICY1 + " was not added.");
+ }
+
+ @Test(dependsOnMethods = "addPolicy")
+ public void activatePolicy() throws PolicyManagementException {
+ policyManagerService.getPAP().activatePolicy(policy1.getId());
+ Policy effectivePolicy = policyManagerService.getEffectivePolicy(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
+ Assert.assertEquals(effectivePolicy.getPolicyName(), POLICY1, POLICY1 + " was not activated for " + DEVICE1);
+ }
+
+ @Test(dependsOnMethods = "activatePolicy")
+ public void applyPolicy() throws PolicyManagementException, OperationManagementException {
+ new DelegationTask().execute();
+ Policy appliedPolicy = policyManagerService.getAppliedPolicyToDevice(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
+ Assert.assertEquals(appliedPolicy.getPolicyName(), POLICY1, POLICY1 + " was not applied on " + DEVICE1);
+
+ List extends Operation> operations = operationManager.getPendingOperations(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
+ boolean policyOperationFound = false;
+ for (Operation operation : operations) {
+ if (policyOperationFound) {
+ break;
+ }
+ if (PolicyOperation.POLICY_OPERATION_CODE.equals(operation.getCode())) {
+ Object o = operation.getPayLoad();
+ if (o instanceof ArrayList) {
+ ArrayList profileOps = (ArrayList) o;
+ for (Object op : profileOps) {
+ if (op instanceof ProfileOperation) {
+ ProfileOperation profileOperation = (ProfileOperation) op;
+ if (POLICY1_FEATURE1_CODE.equals(profileOperation.getCode())) {
+ policyOperationFound = true;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ Assert.assertTrue(policyOperationFound, "Policy operation for " + POLICY1 + " was not added to " + DEVICE1);
+ }
+
+ @Test(dependsOnMethods = "applyPolicy")
+ public void checkCompliance() throws PolicyComplianceException {
+ new MonitoringTask().execute();
+
+ List complianceFeatures = new ArrayList<>();
+ ComplianceFeature complianceFeature = new ComplianceFeature();
+ ProfileFeature profileFeature = new ProfileFeature();
+ profileFeature.setContent("{'enable':'false'}");
+ profileFeature.setDeviceType(DEVICE_TYPE_A);
+ profileFeature.setFeatureCode(POLICY1_FEATURE1_CODE);
+ complianceFeature.setFeature(profileFeature);
+ complianceFeature.setFeatureCode(profileFeature.getFeatureCode());
+ complianceFeature.setMessage("Test message");
+ complianceFeature.setCompliance(true);
+ complianceFeatures.add(complianceFeature);
+ policyManagerService.checkCompliance(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), complianceFeatures);
+ boolean deviceCompliance = policyManagerService.isCompliant(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
+
+ Assert.assertTrue(deviceCompliance, "Policy was not compliant");
+ }
+
+ @Test(dependsOnMethods = "checkCompliance")
+ public void checkNonCompliance() throws PolicyComplianceException {
+ new MonitoringTask().execute();
+
+ List complianceFeatures = new ArrayList<>();
+ ComplianceFeature complianceFeature = new ComplianceFeature();
+ ProfileFeature profileFeature = new ProfileFeature();
+ profileFeature.setContent("{'enable':'false'}");
+ profileFeature.setDeviceType(DEVICE_TYPE_A);
+ profileFeature.setFeatureCode(POLICY1_FEATURE1_CODE);
+ complianceFeature.setFeature(profileFeature);
+ complianceFeature.setFeatureCode(profileFeature.getFeatureCode());
+ complianceFeature.setMessage("Test message");
+ complianceFeature.setCompliance(false);
+ complianceFeatures.add(complianceFeature);
+ policyManagerService.checkCompliance(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A), complianceFeatures);
+ boolean deviceCompliance = policyManagerService.isCompliant(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
+
+ Assert.assertFalse(deviceCompliance, "Policy was compliant even though the response was not compliant");
+ }
+
+ @Test(dependsOnMethods = "inactivatePolicy")
+ public void updatePolicy() throws PolicyManagementException {
+ Policy policy1Temp = policyManagerService.getPAP().getPolicy(policy1.getId());
+ policy1Temp.setDescription("Updated policy1");
+ policy1Temp = policyManagerService.updatePolicy(policy1Temp);
+
+ Policy policy1Updated = policyManagerService.getPAP().getPolicy(policy1.getId());
+ Assert.assertEquals(policy1Updated.getDescription(), policy1Temp.getDescription(), "Policy was not updated successfully.");
+ }
+
+ @Test(dependsOnMethods = "checkNonCompliance")
+ public void inactivatePolicy() throws PolicyManagementException {
+ policyManagerService.getPAP().inactivatePolicy(policy1.getId());
+ new DelegationTask().execute();
+ Policy effectivePolicy = policyManagerService.getEffectivePolicy(new DeviceIdentifier(DEVICE1, DEVICE_TYPE_A));
+ Assert.assertNull(effectivePolicy, POLICY1 + " (after inactivation) is still applied for " + DEVICE1);
+ }
+
+ @Test(dependsOnMethods = "updatePolicy")
+ public void deletePolicy() throws PolicyManagementException {
+ policyManagerService.deletePolicy(policy1.getId());
+ Policy tempPolicy = policyManagerService.getPAP().getPolicy(policy1.getId());
+ Assert.assertNull(tempPolicy, "Policy was not deleted successfully");
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TestPolicyMonitoringManager.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TestPolicyMonitoringManager.java
new file mode 100644
index 00000000000..56ff683f038
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TestPolicyMonitoringManager.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2016, 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.carbon.policy.mgt.core.mock;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.policy.mgt.Policy;
+import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
+import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.ComplianceFeature;
+import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.NonComplianceData;
+import org.wso2.carbon.device.mgt.common.policy.mgt.monitor.PolicyComplianceException;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestPolicyMonitoringManager implements PolicyMonitoringManager {
+
+ private static Log log = LogFactory.getLog(TestPolicyMonitoringManager.class);
+ @Override
+ public NonComplianceData checkPolicyCompliance(DeviceIdentifier deviceIdentifier, Policy policy, Object response)
+ throws PolicyComplianceException {
+ if (log.isDebugEnabled()) {
+ log.debug("Checking policy compliance status of device '" + deviceIdentifier.getId() + "'");
+ }
+ NonComplianceData nonComplianceData = new NonComplianceData();
+ if (response == null || policy == null) {
+ return nonComplianceData;
+ }
+
+ List complianceFeatures = (List) response;
+ List nonComplianceFeatures = new ArrayList<>();
+
+ for (ComplianceFeature complianceFeature : complianceFeatures) {
+ if (!complianceFeature.isCompliant()) {
+ nonComplianceFeatures.add(complianceFeature);
+ nonComplianceData.setStatus(false);
+ break;
+ }
+ }
+ nonComplianceData.setComplianceFeatures(nonComplianceFeatures);
+
+ return nonComplianceData;
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TypeADeviceManagementService.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TypeADeviceManagementService.java
new file mode 100644
index 00000000000..df070ab3c2d
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TypeADeviceManagementService.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2016, 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.carbon.policy.mgt.core.mock;
+
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.DeviceManager;
+import org.wso2.carbon.device.mgt.common.DeviceStatusTaskPluginConfig;
+import org.wso2.carbon.device.mgt.common.InitialOperationConfig;
+import org.wso2.carbon.device.mgt.common.MonitoringOperation;
+import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
+import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
+import org.wso2.carbon.device.mgt.common.app.mgt.ApplicationManager;
+import org.wso2.carbon.device.mgt.common.policy.mgt.PolicyMonitoringManager;
+import org.wso2.carbon.device.mgt.common.pull.notification.PullNotificationSubscriber;
+import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
+import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
+
+import java.util.ArrayList;
+
+public class TypeADeviceManagementService implements DeviceManagementService {
+
+ public static String DEVICE_TYPE = "deviceTypeA";
+
+ public TypeADeviceManagementService() {
+ super();
+ }
+
+ @Override
+ public void init() throws DeviceManagementException {
+
+ }
+
+ @Override
+ public String getType() {
+ return DEVICE_TYPE;
+ }
+
+ @Override
+ public OperationMonitoringTaskConfig getOperationMonitoringConfig() {
+ OperationMonitoringTaskConfig operationMonitoringTaskConfig = new OperationMonitoringTaskConfig();
+ operationMonitoringTaskConfig.setMonitoringOperation(new ArrayList());
+ return operationMonitoringTaskConfig;
+ }
+
+ @Override
+ public DeviceManager getDeviceManager() {
+ return new TypeADeviceManager();
+ }
+
+ @Override
+ public ApplicationManager getApplicationManager() {
+ return null;
+ }
+
+ @Override
+ public ProvisioningConfig getProvisioningConfig() {
+ return new ProvisioningConfig("carbon.super", true);
+ }
+
+ @Override
+ public PushNotificationConfig getPushNotificationConfig() {
+ return null;
+ }
+
+ @Override
+ public PolicyMonitoringManager getPolicyMonitoringManager() {
+ return new TestPolicyMonitoringManager();
+ }
+
+ @Override
+ public InitialOperationConfig getInitialOperationConfig() {
+ return null;
+ }
+
+ @Override
+ public PullNotificationSubscriber getPullNotificationSubscriber() {
+ return null;
+ }
+
+ @Override
+ public DeviceStatusTaskPluginConfig getDeviceStatusTaskPluginConfig() {
+ return null;
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TypeADeviceManager.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TypeADeviceManager.java
new file mode 100644
index 00000000000..60f93fa485a
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/mock/TypeADeviceManager.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2016, 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.carbon.policy.mgt.core.mock;
+
+import org.wso2.carbon.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.DeviceManager;
+import org.wso2.carbon.device.mgt.common.EnrolmentInfo;
+import org.wso2.carbon.device.mgt.common.FeatureManager;
+import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
+import org.wso2.carbon.device.mgt.common.license.mgt.License;
+import org.wso2.carbon.device.mgt.common.license.mgt.LicenseManagementException;
+
+import java.util.List;
+
+public class TypeADeviceManager implements DeviceManager {
+
+ @Override
+ public FeatureManager getFeatureManager() {
+ return null;
+ }
+
+ @Override
+ public boolean saveConfiguration(PlatformConfiguration configuration)
+ throws DeviceManagementException {
+ return false;
+ }
+
+ @Override public PlatformConfiguration getConfiguration() throws DeviceManagementException {
+ return null;
+ }
+
+ @Override
+ public boolean enrollDevice(Device device) throws DeviceManagementException {
+ return true;
+ }
+
+ @Override
+ public boolean modifyEnrollment(Device device) throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean isActive(DeviceIdentifier deviceId) throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean setActive(DeviceIdentifier deviceId, boolean status) throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public List getAllDevices() throws DeviceManagementException {
+ return null;
+ }
+
+ @Override
+ public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
+ return null;
+ }
+
+ @Override
+ public boolean updateDeviceInfo(DeviceIdentifier deviceIdentifier, Device device)
+ throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean setOwnership(DeviceIdentifier deviceId, String ownershipType)
+ throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean isClaimable(DeviceIdentifier deviceId) throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public boolean setStatus(DeviceIdentifier deviceId, String currentOwner, EnrolmentInfo.Status status)
+ throws DeviceManagementException {
+ return false;
+ }
+
+ @Override
+ public License getLicense(String languageCode) throws LicenseManagementException {
+ return null;
+ }
+
+ @Override
+ public void addLicense(License license) throws LicenseManagementException {
+
+ }
+
+ @Override
+ public boolean requireDeviceAuthorization() {
+ return false;
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TaskSchedulerServiceImplTest.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TaskSchedulerServiceImplTest.java
new file mode 100644
index 00000000000..8186a66f208
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TaskSchedulerServiceImplTest.java
@@ -0,0 +1,210 @@
+/*
+ * 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.carbon.policy.mgt.core.task;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.core.config.DeviceConfigurationManager;
+import org.wso2.carbon.device.mgt.core.config.policy.PolicyConfiguration;
+import org.wso2.carbon.ntask.common.TaskException;
+import org.wso2.carbon.ntask.core.TaskInfo;
+import org.wso2.carbon.ntask.core.TaskManager;
+import org.wso2.carbon.ntask.core.internal.TasksDSComponent;
+import org.wso2.carbon.ntask.core.service.TaskService;
+import org.wso2.carbon.ntask.core.service.impl.TaskServiceImpl;
+import org.wso2.carbon.policy.mgt.common.PolicyMonitoringTaskException;
+import org.wso2.carbon.policy.mgt.core.internal.PolicyManagementDataHolder;
+import org.wso2.carbon.policy.mgt.core.util.PolicyManagementConstants;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.lang.reflect.Field;
+
+public class TaskSchedulerServiceImplTest {
+ private static final Log log = LogFactory.getLog(TaskSchedulerServiceImplTest.class);
+ private static final String TEST_DEVICE_TYPE = "TEST-DEVICE-TYPE";
+ private TaskScheduleService policyTaskSchedulerService;
+ private TaskService taskService;
+
+ @BeforeClass
+ public void init() throws Exception {
+ DeviceConfigurationManager.getInstance().initConfig();
+ log.info("Initializing Device Task Manager Service Test Suite");
+ this.taskService = new TestTaskServiceImpl();
+ PolicyManagementDataHolder.getInstance().setTaskService(this.taskService);
+ Field taskServiceField = TasksDSComponent.class.getDeclaredField("taskService");
+ taskServiceField.setAccessible(true);
+ taskServiceField.set(null, Mockito.mock(TaskServiceImpl.class, Mockito.RETURNS_MOCKS));
+ PolicyConfiguration policyConfiguration = new PolicyConfiguration();
+ policyConfiguration.setMonitoringEnable(true);
+ DeviceConfigurationManager.getInstance().getDeviceManagementConfig()
+ .setPolicyConfiguration(policyConfiguration);
+ this.policyTaskSchedulerService = new TaskScheduleServiceImpl();
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group")
+ public void testStartTask() {
+ try {
+ log.debug("Attempting to start task from testStartTask");
+ this.policyTaskSchedulerService.startTask(60000);
+ TaskManager taskManager = this.taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
+ Assert.assertNotNull(taskManager.getTask(PolicyManagementConstants.MONITORING_TASK_NAME + "_" + String
+ .valueOf(MultitenantConstants.SUPER_TENANT_ID)));
+ log.debug("Task Successfully started");
+ } catch (PolicyMonitoringTaskException | TaskException e) {
+ Assert.fail("Exception occurred when starting the task", e);
+ }
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testStartTask")
+ public void testIsTaskScheduled() {
+ try {
+ Assert.assertTrue(this.policyTaskSchedulerService.isTaskScheduled());
+ } catch (PolicyMonitoringTaskException e) {
+ Assert.fail("Exception occurred when trying to check if task is scheduled.");
+ }
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testStartTask")
+ public void testUpdateTask() {
+ try {
+ log.debug("Attempting to update task from testStartTask");
+ TaskManager taskManager = this.taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ this.policyTaskSchedulerService.updateTask(30000);
+ Assert.assertEquals(this.taskService.getRegisteredTaskTypes().size(), 1);
+ Assert.assertEquals(taskManager.getAllTasks().size(), 1);
+ log.debug("Task Successfully updated");
+ } catch (PolicyMonitoringTaskException | TaskException e) {
+ Assert.fail("Exception occurred when updating the task", e);
+ }
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateTask")
+ public void testStopTask() {
+ log.debug("Attempting to stop task from testStopTask");
+ try {
+ this.policyTaskSchedulerService.stopTask();
+ TaskManager taskManager = this.taskService.getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ Assert.assertEquals(taskManager.getAllTasks().size(), 0);
+ } catch (PolicyMonitoringTaskException | TaskException e) {
+ Assert.fail("Exception occurred when stopping the task", e);
+ }
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testStopTask", expectedExceptions = {
+ PolicyMonitoringTaskException.class })
+ public void testUpdateUnscheduledTask() throws PolicyMonitoringTaskException {
+ log.debug("Attempting to update unscheduled task");
+ this.policyTaskSchedulerService.updateTask(50000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testStartTaskWhenUnableToRetrieveTaskManager() throws PolicyMonitoringTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to get TaskManager", TaskException.Code.UNKNOWN)).when(taskService)
+ .getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.startTask(10000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testUpdateTaskWhenUnableToRetrieveTaskManager() throws PolicyMonitoringTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to get TaskManager", TaskException.Code.UNKNOWN)).when(taskService)
+ .getTaskManager(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.updateTask(20000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testStartTaskWhenFailedToRegisterTaskType() throws PolicyMonitoringTaskException, TaskException {
+ TaskService taskService = Mockito.mock(TestTaskServiceImpl.class);
+ Mockito.doThrow(new TaskException("Unable to register task type", TaskException.Code.UNKNOWN)).when(taskService)
+ .registerTaskType(PolicyManagementConstants.MONITORING_TASK_TYPE);
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.startTask(20000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testStartTaskWhenFailedToRegisterTask() throws PolicyMonitoringTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to register task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .registerTask(Mockito.any(TaskInfo.class));
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.startTask(30000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testUpdateTaskWhenFailedToRegisterTask() throws PolicyMonitoringTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to register task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .registerTask(Mockito.any(TaskInfo.class));
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.updateTask(18000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testUpdateTaskWhenFailedToRescheduleTask() throws PolicyMonitoringTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to reschedule task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .rescheduleTask(Mockito.any(String.class));
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.updateTask(40000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testUpdateTaskWhenFailedToDeleteTask() throws PolicyMonitoringTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to delete task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .deleteTask(Mockito.any(String.class));
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.updateTask(12000);
+ }
+
+ @Test(groups = "Policy Task Schedule Service Test Group", dependsOnMethods = "testUpdateUnscheduledTask",
+ expectedExceptions = {PolicyMonitoringTaskException.class })
+ public void testStopTaskWhenFailedToDeleteTask() throws PolicyMonitoringTaskException, TaskException {
+ TestTaskServiceImpl taskService = new TestTaskServiceImpl();
+ TaskManager taskManager = Mockito.mock(TestTaskManagerImpl.class);
+ taskService.setTaskManager(taskManager);
+ Mockito.doThrow(new TaskException("Unable to delete task", TaskException.Code.UNKNOWN)).when(taskManager)
+ .deleteTask(Mockito.any(String.class));
+ PolicyManagementDataHolder.getInstance().setTaskService(taskService);
+ this.policyTaskSchedulerService.stopTask();
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TestTaskManagerImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TestTaskManagerImpl.java
new file mode 100644
index 00000000000..cf15c76b0a4
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TestTaskManagerImpl.java
@@ -0,0 +1,100 @@
+/*
+ * 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.carbon.policy.mgt.core.task;
+
+import org.wso2.carbon.ntask.common.TaskException;
+import org.wso2.carbon.ntask.core.TaskInfo;
+import org.wso2.carbon.ntask.core.TaskManager;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class TestTaskManagerImpl implements TaskManager {
+ private List registeredTasks;
+
+ public TestTaskManagerImpl() {
+ this.registeredTasks = new ArrayList<>();
+ }
+
+ @Override
+ public void initStartupTasks() throws TaskException {
+
+ }
+
+ @Override
+ public void scheduleTask(String taskName) throws TaskException {
+
+ }
+
+ @Override
+ public void rescheduleTask(String taskName) throws TaskException {
+
+ }
+
+ @Override
+ public boolean deleteTask(String taskName) throws TaskException {
+ for (TaskInfo task : this.registeredTasks) {
+ if (taskName.equals(task.getName())) {
+ this.registeredTasks.remove(task);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void pauseTask(String taskName) throws TaskException {
+
+ }
+
+ @Override
+ public void resumeTask(String taskName) throws TaskException {
+
+ }
+
+ @Override
+ public void registerTask(TaskInfo taskInfo) throws TaskException {
+ this.registeredTasks.add(taskInfo);
+ }
+
+ @Override
+ public TaskState getTaskState(String taskName) throws TaskException {
+ return null;
+ }
+
+ @Override
+ public TaskInfo getTask(String taskName) throws TaskException {
+ for (TaskInfo task : this.registeredTasks) {
+ if (taskName.contains(task.getName())) {
+ return task;
+ }
+ }
+ return null;
+ }
+
+ @Override
+ public List getAllTasks() throws TaskException {
+ return this.registeredTasks;
+ }
+
+ @Override
+ public boolean isTaskScheduled(String taskName) throws TaskException {
+ return this.registeredTasks.size() > 0;
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TestTaskServiceImpl.java b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TestTaskServiceImpl.java
new file mode 100644
index 00000000000..5c3ba651e51
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/java/org/wso2/carbon/policy/mgt/core/task/TestTaskServiceImpl.java
@@ -0,0 +1,81 @@
+/*
+ * 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.carbon.policy.mgt.core.task;
+
+import org.wso2.carbon.ntask.common.TaskException;
+import org.wso2.carbon.ntask.core.TaskManager;
+import org.wso2.carbon.ntask.core.service.TaskService;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+public class TestTaskServiceImpl implements TaskService {
+ private Set registeredTaskTypes;
+ private TaskManager taskManager;
+
+ public TestTaskServiceImpl() {
+
+ this.registeredTaskTypes = new HashSet<>();
+ this.taskManager = new TestTaskManagerImpl();
+ }
+
+ @Override
+ public TaskManager getTaskManager(String s) throws TaskException {
+ return this.taskManager;
+ }
+
+ @Override
+ public List getAllTenantTaskManagersForType(String s) throws TaskException {
+ return null;
+ }
+
+ @Override
+ public void registerTaskType(String s) throws TaskException {
+ this.registeredTaskTypes.add(s);
+ }
+
+ @Override
+ public Set getRegisteredTaskTypes() {
+ return this.registeredTaskTypes;
+ }
+
+ @Override
+ public void serverInitialized() {
+
+ }
+
+ @Override
+ public boolean isServerInit() {
+ return true;
+ }
+
+ @Override
+ public TaskServiceConfiguration getServerConfiguration() {
+ return null;
+ }
+
+ @Override
+ public void runAfterRegistrationActions() throws TaskException {
+
+ }
+
+ public void setTaskManager(TaskManager taskManager) {
+ this.taskManager = taskManager;
+ }
+}
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/dbscripts/h2.sql b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/dbscripts/h2.sql
new file mode 100644
index 00000000000..f6b31c78d91
--- /dev/null
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/dbscripts/h2.sql
@@ -0,0 +1,429 @@
+CREATE TABLE IF NOT EXISTS REG_CLUSTER_LOCK (
+ REG_LOCK_NAME VARCHAR (20),
+ REG_LOCK_STATUS VARCHAR (20),
+ REG_LOCKED_TIME TIMESTAMP,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (REG_LOCK_NAME)
+);
+
+CREATE TABLE IF NOT EXISTS REG_LOG (
+ REG_LOG_ID INTEGER AUTO_INCREMENT,
+ REG_PATH VARCHAR (2000),
+ REG_USER_ID VARCHAR (31) NOT NULL,
+ REG_LOGGED_TIME TIMESTAMP NOT NULL,
+ REG_ACTION INTEGER NOT NULL,
+ REG_ACTION_DATA VARCHAR (500),
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (REG_LOG_ID, REG_TENANT_ID)
+);
+
+CREATE INDEX IF NOT EXISTS REG_LOG_IND_BY_REG_LOGTIME ON REG_LOG(REG_LOGGED_TIME, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_PATH(
+ REG_PATH_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_PATH_VALUE VARCHAR(2000) NOT NULL,
+ REG_PATH_PARENT_ID INT,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_PATH PRIMARY KEY(REG_PATH_ID, REG_TENANT_ID)
+);
+CREATE INDEX IF NOT EXISTS REG_PATH_IND_BY_NAME ON REG_PATH(REG_PATH_VALUE, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_PATH_IND_BY_PARENT_ID ON REG_PATH(REG_PATH_PARENT_ID, REG_TENANT_ID);
+
+
+CREATE TABLE IF NOT EXISTS REG_CONTENT (
+ REG_CONTENT_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_CONTENT_DATA LONGBLOB,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_CONTENT PRIMARY KEY(REG_CONTENT_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_CONTENT_HISTORY (
+ REG_CONTENT_ID INTEGER NOT NULL,
+ REG_CONTENT_DATA LONGBLOB,
+ REG_DELETED SMALLINT,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_CONTENT_HISTORY PRIMARY KEY(REG_CONTENT_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE (
+ REG_PATH_ID INTEGER NOT NULL,
+ REG_NAME VARCHAR(256),
+ REG_VERSION INTEGER NOT NULL AUTO_INCREMENT,
+ REG_MEDIA_TYPE VARCHAR(500),
+ REG_CREATOR VARCHAR(31) NOT NULL,
+ REG_CREATED_TIME TIMESTAMP NOT NULL,
+ REG_LAST_UPDATOR VARCHAR(31),
+ REG_LAST_UPDATED_TIME TIMESTAMP NOT NULL,
+ REG_DESCRIPTION VARCHAR(1000),
+ REG_CONTENT_ID INTEGER,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ REG_UUID VARCHAR(100) NOT NULL,
+ CONSTRAINT PK_REG_RESOURCE PRIMARY KEY(REG_VERSION, REG_TENANT_ID)
+);
+
+ALTER TABLE REG_RESOURCE ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_FK_BY_CONTENT_ID FOREIGN KEY (REG_CONTENT_ID, REG_TENANT_ID) REFERENCES REG_CONTENT (REG_CONTENT_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_NAME ON REG_RESOURCE(REG_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_PATH_ID_NAME ON REG_RESOURCE(REG_PATH_ID, REG_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_UUID ON REG_RESOURCE(REG_UUID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_TENANT ON REG_RESOURCE(REG_TENANT_ID, REG_UUID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_IND_BY_TYPE ON REG_RESOURCE(REG_TENANT_ID, REG_MEDIA_TYPE);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_HISTORY (
+ REG_PATH_ID INTEGER NOT NULL,
+ REG_NAME VARCHAR(256),
+ REG_VERSION INTEGER NOT NULL,
+ REG_MEDIA_TYPE VARCHAR(500),
+ REG_CREATOR VARCHAR(31) NOT NULL,
+ REG_CREATED_TIME TIMESTAMP NOT NULL,
+ REG_LAST_UPDATOR VARCHAR(31),
+ REG_LAST_UPDATED_TIME TIMESTAMP NOT NULL,
+ REG_DESCRIPTION VARCHAR(1000),
+ REG_CONTENT_ID INTEGER,
+ REG_DELETED SMALLINT,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ REG_UUID VARCHAR(100) NOT NULL,
+ CONSTRAINT PK_REG_RESOURCE_HISTORY PRIMARY KEY(REG_VERSION, REG_TENANT_ID)
+);
+
+ALTER TABLE REG_RESOURCE_HISTORY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_HIST_FK_BY_PATHID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_HISTORY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_HIST_FK_BY_CONTENT_ID FOREIGN KEY (REG_CONTENT_ID, REG_TENANT_ID) REFERENCES REG_CONTENT_HISTORY (REG_CONTENT_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_HISTORY_IND_BY_NAME ON REG_RESOURCE_HISTORY(REG_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_HISTORY_IND_BY_PATH_ID_NAME ON REG_RESOURCE(REG_PATH_ID, REG_NAME, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_COMMENT (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_COMMENT_TEXT VARCHAR(500) NOT NULL,
+ REG_USER_ID VARCHAR(31) NOT NULL,
+ REG_COMMENTED_TIME TIMESTAMP NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_COMMENT PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_COMMENT (
+ REG_COMMENT_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_COMMENT ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_COMMENT_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_COMMENT ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_COMMENT_FK_BY_COMMENT_ID FOREIGN KEY (REG_COMMENT_ID, REG_TENANT_ID) REFERENCES REG_COMMENT (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_COMMENT_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_COMMENT(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_COMMENT_IND_BY_VERSION ON REG_RESOURCE_COMMENT(REG_VERSION, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_RATING (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_RATING INTEGER NOT NULL,
+ REG_USER_ID VARCHAR(31) NOT NULL,
+ REG_RATED_TIME TIMESTAMP NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_RATING PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_RATING (
+ REG_RATING_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_RATING ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_RATING_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_RATING ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_RATING_FK_BY_RATING_ID FOREIGN KEY (REG_RATING_ID, REG_TENANT_ID) REFERENCES REG_RATING (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_RATING_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_RATING(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_RATING_IND_BY_VERSION ON REG_RESOURCE_RATING(REG_VERSION, REG_TENANT_ID);
+
+
+CREATE TABLE IF NOT EXISTS REG_TAG (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_TAG_NAME VARCHAR(500) NOT NULL,
+ REG_USER_ID VARCHAR(31) NOT NULL,
+ REG_TAGGED_TIME TIMESTAMP NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_TAG PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_TAG (
+ REG_TAG_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_TAG ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_TAG_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_TAG ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_TAG_FK_BY_TAG_ID FOREIGN KEY (REG_TAG_ID, REG_TENANT_ID) REFERENCES REG_TAG (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_TAG_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_TAG(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_TAG_IND_BY_VERSION ON REG_RESOURCE_TAG(REG_VERSION, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_PROPERTY (
+ REG_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_NAME VARCHAR(100) NOT NULL,
+ REG_VALUE VARCHAR(1000),
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_PROPERTY PRIMARY KEY(REG_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_RESOURCE_PROPERTY (
+ REG_PROPERTY_ID INTEGER NOT NULL,
+ REG_VERSION INTEGER,
+ REG_PATH_ID INTEGER,
+ REG_RESOURCE_NAME VARCHAR(256),
+ REG_TENANT_ID INTEGER DEFAULT 0
+);
+
+ALTER TABLE REG_RESOURCE_PROPERTY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_PROPERTY_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+ALTER TABLE REG_RESOURCE_PROPERTY ADD CONSTRAINT IF NOT EXISTS REG_RESOURCE_PROPERTY_FK_BY_TAG_ID FOREIGN KEY (REG_PROPERTY_ID, REG_TENANT_ID) REFERENCES REG_PROPERTY (REG_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_PROPERTY_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_RESOURCE_PROPERTY(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_RESOURCE_PROPERTY_IND_BY_VERSION ON REG_RESOURCE_PROPERTY(REG_VERSION, REG_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS REG_ASSOCIATION (
+ REG_ASSOCIATION_ID INTEGER AUTO_INCREMENT,
+ REG_SOURCEPATH VARCHAR (2000) NOT NULL,
+ REG_TARGETPATH VARCHAR (2000) NOT NULL,
+ REG_ASSOCIATION_TYPE VARCHAR (2000) NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (REG_ASSOCIATION_ID, REG_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS REG_SNAPSHOT (
+ REG_SNAPSHOT_ID INTEGER NOT NULL AUTO_INCREMENT,
+ REG_PATH_ID INTEGER NOT NULL,
+ REG_RESOURCE_NAME VARCHAR (256),
+ REG_RESOURCE_VIDS LONGBLOB NOT NULL,
+ REG_TENANT_ID INTEGER DEFAULT 0,
+ CONSTRAINT PK_REG_SNAPSHOT PRIMARY KEY(REG_SNAPSHOT_ID, REG_TENANT_ID)
+);
+
+ALTER TABLE REG_SNAPSHOT ADD CONSTRAINT IF NOT EXISTS REG_SNAPSHOT_FK_BY_PATH_ID FOREIGN KEY (REG_PATH_ID, REG_TENANT_ID) REFERENCES REG_PATH (REG_PATH_ID, REG_TENANT_ID);
+CREATE INDEX IF NOT EXISTS REG_SNAPSHOT_IND_BY_PATH_ID_AND_RESOURCE_NAME ON REG_SNAPSHOT(REG_PATH_ID, REG_RESOURCE_NAME, REG_TENANT_ID);
+
+-- ################################
+-- USER MANAGER TABLES
+-- ################################
+
+CREATE TABLE IF NOT EXISTS UM_TENANT (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DOMAIN_NAME VARCHAR(255) NOT NULL,
+ UM_EMAIL VARCHAR(255),
+ UM_ACTIVE BOOLEAN DEFAULT FALSE,
+ UM_CREATED_DATE TIMESTAMP NOT NULL,
+ UM_USER_CONFIG LONGBLOB NOT NULL,
+ PRIMARY KEY (UM_ID),
+ UNIQUE(UM_DOMAIN_NAME));
+
+CREATE TABLE IF NOT EXISTS UM_DOMAIN(
+ UM_DOMAIN_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DOMAIN_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_DOMAIN_ID, UM_TENANT_ID)
+);
+
+CREATE INDEX IF NOT EXISTS INDEX_UM_TENANT_UM_DOMAIN_NAME ON UM_TENANT (UM_DOMAIN_NAME);
+
+CREATE TABLE IF NOT EXISTS UM_USER (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_USER_PASSWORD VARCHAR(255) NOT NULL,
+ UM_SALT_VALUE VARCHAR(31),
+ UM_REQUIRE_CHANGE BOOLEAN DEFAULT FALSE,
+ UM_CHANGED_TIME TIMESTAMP NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ UNIQUE(UM_USER_NAME, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_SYSTEM_USER (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_USER_PASSWORD VARCHAR(255) NOT NULL,
+ UM_SALT_VALUE VARCHAR(31),
+ UM_REQUIRE_CHANGE BOOLEAN DEFAULT FALSE,
+ UM_CHANGED_TIME TIMESTAMP NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ UNIQUE(UM_USER_NAME, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_USER_ATTRIBUTE (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ATTR_NAME VARCHAR(255) NOT NULL,
+ UM_ATTR_VALUE VARCHAR(1024),
+ UM_PROFILE_ID VARCHAR(255),
+ UM_USER_ID INTEGER,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_USER_ID, UM_TENANT_ID) REFERENCES UM_USER(UM_ID, UM_TENANT_ID));
+
+CREATE INDEX IF NOT EXISTS UM_USER_ID_INDEX ON UM_USER_ATTRIBUTE(UM_USER_ID);
+
+CREATE TABLE IF NOT EXISTS UM_ROLE (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_NAME VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_SHARED_ROLE BOOLEAN DEFAULT FALSE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID),
+ UNIQUE(UM_ROLE_NAME, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_MODULE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_MODULE_NAME VARCHAR(100),
+ UNIQUE(UM_MODULE_NAME),
+ PRIMARY KEY(UM_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_MODULE_ACTIONS(
+ UM_ACTION VARCHAR(255) NOT NULL,
+ UM_MODULE_ID INTEGER NOT NULL,
+ PRIMARY KEY(UM_ACTION, UM_MODULE_ID),
+ FOREIGN KEY (UM_MODULE_ID) REFERENCES UM_MODULE(UM_ID) ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS UM_PERMISSION (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_RESOURCE_ID VARCHAR(255) NOT NULL,
+ UM_ACTION VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_MODULE_ID INTEGER DEFAULT 0,
+ UNIQUE(UM_RESOURCE_ID,UM_ACTION, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+CREATE INDEX IF NOT EXISTS INDEX_UM_PERMISSION_UM_RESOURCE_ID_UM_ACTION ON UM_PERMISSION (UM_RESOURCE_ID, UM_ACTION, UM_TENANT_ID);
+
+CREATE TABLE IF NOT EXISTS UM_ROLE_PERMISSION (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_PERMISSION_ID INTEGER NOT NULL,
+ UM_ROLE_NAME VARCHAR(255) NOT NULL,
+ UM_IS_ALLOWED SMALLINT NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_DOMAIN_ID INTEGER,
+ FOREIGN KEY (UM_PERMISSION_ID, UM_TENANT_ID) REFERENCES UM_PERMISSION(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ FOREIGN KEY (UM_DOMAIN_ID, UM_TENANT_ID) REFERENCES UM_DOMAIN(UM_DOMAIN_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_USER_PERMISSION (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_PERMISSION_ID INTEGER NOT NULL,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_IS_ALLOWED SMALLINT NOT NULL,
+ UNIQUE (UM_PERMISSION_ID, UM_USER_NAME, UM_TENANT_ID),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ FOREIGN KEY (UM_PERMISSION_ID, UM_TENANT_ID) REFERENCES UM_PERMISSION(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+CREATE TABLE IF NOT EXISTS UM_USER_ROLE (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_USER_ID INTEGER NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE (UM_USER_ID, UM_ROLE_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_ROLE(UM_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_USER_ID, UM_TENANT_ID) REFERENCES UM_USER(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID));
+
+
+CREATE TABLE IF NOT EXISTS UM_SHARED_USER_ROLE(
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_USER_ID INTEGER NOT NULL,
+ UM_USER_TENANT_ID INTEGER NOT NULL,
+ UM_ROLE_TENANT_ID INTEGER NOT NULL,
+ UNIQUE(UM_USER_ID,UM_ROLE_ID,UM_USER_TENANT_ID, UM_ROLE_TENANT_ID),
+ FOREIGN KEY(UM_ROLE_ID,UM_ROLE_TENANT_ID) REFERENCES UM_ROLE(UM_ID,UM_TENANT_ID) ON DELETE CASCADE ,
+ FOREIGN KEY(UM_USER_ID,UM_USER_TENANT_ID) REFERENCES UM_USER(UM_ID,UM_TENANT_ID) ON DELETE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS UM_ACCOUNT_MAPPING(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER NOT NULL,
+ UM_USER_STORE_DOMAIN VARCHAR(100),
+ UM_ACC_LINK_ID INTEGER NOT NULL,
+ UNIQUE(UM_USER_NAME, UM_TENANT_ID, UM_USER_STORE_DOMAIN, UM_ACC_LINK_ID),
+ FOREIGN KEY (UM_TENANT_ID) REFERENCES UM_TENANT(UM_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID)
+);
+
+
+CREATE TABLE IF NOT EXISTS UM_DIALECT(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DIALECT_URI VARCHAR(255) NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE(UM_DIALECT_URI, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+
+CREATE TABLE IF NOT EXISTS UM_CLAIM(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DIALECT_ID INTEGER NOT NULL,
+ UM_CLAIM_URI VARCHAR(255) NOT NULL,
+ UM_DISPLAY_TAG VARCHAR(255),
+ UM_DESCRIPTION VARCHAR(255),
+ UM_MAPPED_ATTRIBUTE_DOMAIN VARCHAR(255),
+ UM_MAPPED_ATTRIBUTE VARCHAR(255),
+ UM_REG_EX VARCHAR(255),
+ UM_SUPPORTED SMALLINT,
+ UM_REQUIRED SMALLINT,
+ UM_DISPLAY_ORDER INTEGER,
+ UM_CHECKED_ATTRIBUTE SMALLINT,
+ UM_READ_ONLY SMALLINT,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE(UM_DIALECT_ID, UM_CLAIM_URI,UM_MAPPED_ATTRIBUTE_DOMAIN, UM_TENANT_ID),
+ FOREIGN KEY(UM_DIALECT_ID, UM_TENANT_ID) REFERENCES UM_DIALECT(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_PROFILE_CONFIG(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_DIALECT_ID INTEGER,
+ UM_PROFILE_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ FOREIGN KEY(UM_DIALECT_ID, UM_TENANT_ID) REFERENCES UM_DIALECT(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+
+CREATE TABLE IF NOT EXISTS UM_HYBRID_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_HYBRID_USER_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255),
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UM_DOMAIN_ID INTEGER,
+ UNIQUE (UM_USER_NAME, UM_ROLE_ID, UM_TENANT_ID,UM_DOMAIN_ID),
+ FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_HYBRID_ROLE(UM_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ FOREIGN KEY (UM_DOMAIN_ID, UM_TENANT_ID) REFERENCES UM_DOMAIN(UM_DOMAIN_ID, UM_TENANT_ID) ON DELETE CASCADE,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_HYBRID_REMEMBER_ME (
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255) NOT NULL,
+ UM_COOKIE_VALUE VARCHAR(1024),
+ UM_CREATED_TIME TIMESTAMP,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_SYSTEM_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_ROLE_NAME VARCHAR(255),
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS UM_SYSTEM_USER_ROLE(
+ UM_ID INTEGER NOT NULL AUTO_INCREMENT,
+ UM_USER_NAME VARCHAR(255),
+ UM_ROLE_ID INTEGER NOT NULL,
+ UM_TENANT_ID INTEGER DEFAULT 0,
+ UNIQUE (UM_USER_NAME, UM_ROLE_ID, UM_TENANT_ID),
+ FOREIGN KEY (UM_ROLE_ID, UM_TENANT_ID) REFERENCES UM_SYSTEM_ROLE(UM_ID, UM_TENANT_ID),
+ PRIMARY KEY (UM_ID, UM_TENANT_ID)
+);
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
index 0cd15645055..df960ed64ec 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/cdm-config.xml
@@ -54,5 +54,11 @@
true
300
+
+ 100
+ 2000
+ 10
+ false
+
diff --git a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/registry.xml b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/registry.xml
index 01ffe07c150..191df680001 100644
--- a/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/registry.xml
+++ b/components/policy-mgt/org.wso2.carbon.policy.mgt.core/src/test/resources/carbon-home/repository/conf/registry.xml
@@ -28,9 +28,19 @@
/
- jdbc/WSO2CarbonDB
+ jdbc:h2:./target/databasetest/CARBON_TEST
+
+ org.h2.Driver
+ 80
+ 60000
+ 5
+
+
+
+
+
+
+
+ true
+ admin
+
+ admin
+ admin
+
+ everyone
+ false
+ 500
+ jdbc:h2:target/databasetest/CARBON_TEST
+ org.h2.Driver
+ 50
+ 60000
+ 5
+
+
+ [\S]{5,30}$
+ [\\S]{5,30}
+ SELECT * FROM UM_USER WHERE UM_USER_NAME=? AND UM_TENANT_ID=?
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SHA-256
+ true
+ false
+ false
+ wso2.com
+ true
+ 100
+
+
+ INSERT INTO UM_ROLE (UM_ROLE_NAME, UM_TENANT_ID) VALUES (?, ?)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.wso2.carbon.user.core.tenant.JDBCTenantManager
+
+
+ true
+
+
+
+ login
+ manage-configuration
+ manage-security
+ upload-services
+ manage-services
+ manage-lc-configuration
+ manage-mediation
+ monitor-system
+ delegate-identity
+
+
+
diff --git a/components/policy-mgt/pom.xml b/components/policy-mgt/pom.xml
index 0f34bf31fc6..6749c51f287 100644
--- a/components/policy-mgt/pom.xml
+++ b/components/policy-mgt/pom.xml
@@ -23,13 +23,13 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
policy-mgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Policy Management Component
http://wso2.org
diff --git a/components/test-coverage/pom.xml b/components/test-coverage/pom.xml
index c440e67ceb2..e5768b743f5 100644
--- a/components/test-coverage/pom.xml
+++ b/components/test-coverage/pom.xml
@@ -21,7 +21,7 @@
carbon-devicemgt
org.wso2.carbon.devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
@@ -51,9 +51,6 @@
${basedir}/../${device.mgt}/org.wso2.carbon.device.mgt.common
${basedir}/../${device.mgt}/org.wso2.carbon.device.mgt.api
${basedir}/../${device.mgt}/org.wso2.carbon.device.mgt.extensions
-
- ${basedir}/../${device.mgt}/org.wso2.carbon.device.mgt.analytics.dashboard
-
${basedir}/../${device.mgt}/org.wso2.carbon.device.mgt.analytics.data.publisher
@@ -186,6 +183,9 @@
+
+
+
@@ -217,14 +217,6 @@
-
-
-
-
-
-
-
-
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml
index 3cfdbb3f482..18c559ff957 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/pom.xml
@@ -21,14 +21,14 @@
org.wso2.carbon.devicemgt
webapp-authenticator-framework
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.webapp.authenticator.framework
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
bundle
WSO2 Carbon - Web Application Authenticator Framework Bundle
WSO2 Carbon - Web Application Authenticator Framework Bundle
diff --git a/components/webapp-authenticator-framework/pom.xml b/components/webapp-authenticator-framework/pom.xml
index 416798aa08f..8d9c3af156a 100644
--- a/components/webapp-authenticator-framework/pom.xml
+++ b/components/webapp-authenticator-framework/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
webapp-authenticator-framework
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Webapp Authenticator Framework
http://wso2.org
diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml
index d1b90b4ae46..492422103fa 100644
--- a/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml
+++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.application.extension.feature/pom.xml
@@ -21,14 +21,14 @@
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.application.extension.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - API Management Application Extension Feature
http://wso2.org
This feature contains an implementation of a api application registration, which takes care of subscription
diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml
index 069807949a9..434193f3126 100644
--- a/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml
+++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.handler.server.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.handler.server.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Management - APIM handler Server Feature
http://wso2.org
This feature contains the handler for the api authentications
diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.integration.client.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.integration.client.feature/pom.xml
index 936f6424195..2a66d35b7d1 100644
--- a/features/apimgt-extensions/org.wso2.carbon.apimgt.integration.client.feature/pom.xml
+++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.integration.client.feature/pom.xml
@@ -21,13 +21,13 @@
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.client.feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - APIM Integration Client Feature
http://wso2.org
diff --git a/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml b/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml
index 6013ee713f0..21c0399875b 100644
--- a/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml
+++ b/features/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher.feature/pom.xml
@@ -21,14 +21,14 @@
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.webapp.publisher.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - API Management Webapp Publisher Feature
http://wso2.org
This feature contains an implementation of a Tomcat lifecycle listener, which takes care of publishing
diff --git a/features/apimgt-extensions/pom.xml b/features/apimgt-extensions/pom.xml
index b045cedf923..56a6447737c 100644
--- a/features/apimgt-extensions/pom.xml
+++ b/features/apimgt-extensions/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - API Management Extensions Feature
http://wso2.org
diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml
index 1770f627231..8da8c402196 100644
--- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml
+++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.api.feature/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
certificate-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml
index a15a4f1c277..2ac02154e90 100644
--- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml
+++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.cert.admin.api.feature/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
certificate-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml
index 2006387e0f9..a43df2dbb6b 100644
--- a/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml
+++ b/features/certificate-mgt/org.wso2.carbon.certificate.mgt.server.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
certificate-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.certificate.mgt.server.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Certificate Management Server Feature
http://wso2.org
This feature contains the core bundles required for back-end Certificate Management functionality
diff --git a/features/certificate-mgt/pom.xml b/features/certificate-mgt/pom.xml
index 1e1ddb4c4c5..7a2b4a9c833 100644
--- a/features/certificate-mgt/pom.xml
+++ b/features/certificate-mgt/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
certificate-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Certificate Management Feature
http://wso2.org
diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml
index 3886dbf7a42..be6690416df 100644
--- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml
+++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Type Deployer Feature
http://wso2.org
WSO2 Carbon - Device Type Deployer Feature
diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml
index 041e279945e..52347ab7277 100644
--- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml
+++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - FCM Based Push Notification Provider Feature
http://wso2.org
WSO2 Carbon - MQTT Based Push Notification Provider Feature
diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature/pom.xml
index 140e3028d05..1d4e231be00 100644
--- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature/pom.xml
+++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - MQTT Based Push Notification Provider Feature
http://wso2.org
WSO2 Carbon - MQTT Based Push Notification Provider Feature
diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml
index 8e361295dc0..271901b4945 100644
--- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml
+++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - MQTT Based Push Notification Provider Feature
http://wso2.org
WSO2 Carbon - MQTT Based Push Notification Provider Feature
diff --git a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml
index d31759fc267..6950163a530 100644
--- a/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml
+++ b/features/device-mgt-extensions/org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - XMPP Based Push Notification Provider Feature
http://wso2.org
WSO2 Carbon - XMPP Based Push Notification Provider Feature
diff --git a/features/device-mgt-extensions/pom.xml b/features/device-mgt-extensions/pom.xml
index ba63b0965a3..0ab0dbf720d 100644
--- a/features/device-mgt-extensions/pom.xml
+++ b/features/device-mgt-extensions/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml
deleted file mode 100644
index 3c6c8610aa4..00000000000
--- a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.dashboard.feature/pom.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
- org.wso2.carbon.devicemgt
- device-mgt-feature
- 3.0.128-SNAPSHOT
- ../pom.xml
-
- 4.0.0
-
- org.wso2.carbon.device.mgt.analytics.dashboard.feature
- 3.0.128-SNAPSHOT
- pom
- WSO2 Carbon - Device Management Dashboard Analytics Feature
- WSO2 Carbon - Device Management Dashboard Analytics Feature
- http://wso2.org
-
-
-
- org.wso2.carbon.devicemgt
- org.wso2.carbon.device.mgt.analytics.dashboard
-
-
-
-
-
-
- org.wso2.maven
- carbon-p2-plugin
- ${carbon.p2.plugin.version}
-
-
- p2-feature-generation
- package
-
- p2-feature-gen
-
-
- org.wso2.carbon.device.mgt.analytics.dashboard
- ../../../features/etc/feature.properties
-
-
- org.wso2.carbon.p2.category.type:server
- org.eclipse.equinox.p2.type.group:false
-
-
-
-
- org.wso2.carbon.devicemgt:org.wso2.carbon.device.mgt.analytics.dashboard:${carbon.device.mgt.version}
-
-
-
- org.wso2.carbon.core.server:${carbon.kernel.version}
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml
index 49c90a3a618..8a2a841978a 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.analytics.data.publisher.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Management Server Feature
http://wso2.org
This feature contains bundles related to device analytics data publisher
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml
index b25a613d42b..3786b295a09 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.api.feature/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml
index cba58e06835..441f9f72d62 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.extensions.feature/pom.xml
@@ -4,14 +4,14 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Management Extensions Feature
http://wso2.org
This feature contains common extensions used by key device management functionalities
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml
index 13950abc328..7897bfe92d3 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.feature/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml
index c5b370e626b..ff1c7b14f05 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.server.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.server.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Management Server Feature
http://wso2.org
This feature contains the core bundles required for Back-end Device Management functionality
diff --git a/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml b/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml
index 0a4a5a491a0..8af4e3f62f1 100644
--- a/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml
+++ b/features/device-mgt/org.wso2.carbon.device.mgt.ui.feature/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml
index d6efafd33ed..783edb6b0fa 100644
--- a/features/device-mgt/pom.xml
+++ b/features/device-mgt/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
@@ -39,7 +39,6 @@
org.wso2.carbon.device.mgt.feature
org.wso2.carbon.device.mgt.extensions.feature
org.wso2.carbon.device.mgt.analytics.data.publisher.feature
- org.wso2.carbon.device.mgt.analytics.dashboard.feature
\ No newline at end of file
diff --git a/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml b/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml
index e9016fe4a76..502ec9639cb 100644
--- a/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml
+++ b/features/email-sender/org.wso2.carbon.email.sender.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
email-sender-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.email.sender.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Email Sender Feature
http://wso2.org
This feature contains the core bundles required for email sender related functionality
diff --git a/features/email-sender/pom.xml b/features/email-sender/pom.xml
index 752a5d2b024..c3ff389df32 100644
--- a/features/email-sender/pom.xml
+++ b/features/email-sender/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
email-sender-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Email Sender Feature
http://wso2.org
diff --git a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml
index 8fd94c7022d..f4c9333745f 100644
--- a/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml
+++ b/features/jwt-client/org.wso2.carbon.identity.jwt.client.extension.feature/pom.xml
@@ -23,14 +23,14 @@
org.wso2.carbon.devicemgt
jwt-client-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.identity.jwt.client.extension.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - JWT Client Feature
http://wso2.org
This feature contains jwt client implementation from which we can get a access token using the jwt
diff --git a/features/jwt-client/pom.xml b/features/jwt-client/pom.xml
index 646aee8f83f..e831d60b4c3 100644
--- a/features/jwt-client/pom.xml
+++ b/features/jwt-client/pom.xml
@@ -23,13 +23,13 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
jwt-client-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - JWT Client Extension Feature
http://wso2.org
diff --git a/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml b/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml
index 2c108adfedf..2da753548c5 100644
--- a/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml
+++ b/features/oauth-extensions/org.wso2.carbon.device.mgt.oauth.extensions.feature/pom.xml
@@ -23,14 +23,14 @@
org.wso2.carbon.devicemgt
oauth-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.oauth.extensions.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Mgt OAuth Extensions Feature
http://wso2.org
This feature contains devicemgt related OAuth extensions
diff --git a/features/oauth-extensions/pom.xml b/features/oauth-extensions/pom.xml
index 9167945b26e..a8ba4c82f2d 100644
--- a/features/oauth-extensions/pom.xml
+++ b/features/oauth-extensions/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
oauth-extensions-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Device Management OAuth Extensions Feature
http://wso2.org
diff --git a/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml b/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml
index bcbe4a8a051..8765527a64e 100644
--- a/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml
+++ b/features/policy-mgt/org.wso2.carbon.policy.mgt.server.feature/pom.xml
@@ -23,14 +23,14 @@
org.wso2.carbon.devicemgt
policy-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.policy.mgt.server.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Policy Management Server Feature
http://wso2.org
This feature contains the core bundles required for Back-end Device Management functionality
diff --git a/features/policy-mgt/pom.xml b/features/policy-mgt/pom.xml
index 11a9f8bfff1..cf75e5f0db1 100644
--- a/features/policy-mgt/pom.xml
+++ b/features/policy-mgt/pom.xml
@@ -23,14 +23,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
policy-mgt-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Policy Management Feature
http://wso2.org
diff --git a/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml b/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml
index 57795ee9ee0..9e6f805bbfa 100644
--- a/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml
+++ b/features/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework.server.feature/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
webapp-authenticator-framework-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.webapp.authenticator.framework.server.feature
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Webapp Authenticator Framework Server Feature
http://wso2.org
This feature contains the core bundles required for Back-end Device Management functionality
diff --git a/features/webapp-authenticator-framework/pom.xml b/features/webapp-authenticator-framework/pom.xml
index 90b888c2fa9..9a18f9301a4 100644
--- a/features/webapp-authenticator-framework/pom.xml
+++ b/features/webapp-authenticator-framework/pom.xml
@@ -22,14 +22,14 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
webapp-authenticator-framework-feature
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
pom
WSO2 Carbon - Webapp Authenticator Framework Feature
http://wso2.org
diff --git a/pom.xml b/pom.xml
index 84415fef0bb..c46e64bc481 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
pom
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
WSO2 Carbon - Device Management - Parent
http://wso2.org
WSO2 Connected Device Manager Components
@@ -241,11 +241,6 @@
org.wso2.carbon.device.mgt.analytics.data.publisher
${carbon.device.mgt.version}
-
- org.wso2.carbon.devicemgt
- org.wso2.carbon.device.mgt.analytics.dashboard
- ${carbon.device.mgt.version}
-
org.wso2.carbon.devicemgt
org.wso2.carbon.device.mgt.server.feature
@@ -402,6 +397,18 @@
+
+ org.wso2.carbon
+ org.wso2.carbon.securevault
+ ${carbon.kernel.version}
+ test
+
+
+ org.apache.sling
+ org.apache.sling.testing.osgi-mock
+ ${apache.osgi.mock.version}
+ test
+
org.wso2.carbon.governance
org.wso2.carbon.governance.api
@@ -1784,7 +1791,7 @@
2.2.1
6.1.1
- 4.4.11
+ 4.4.17
4.4.9
[4.4.0, 5.0.0)
1.5.4
@@ -1851,7 +1858,7 @@
1.2.11.wso2v10
- 3.0.128-SNAPSHOT
+ 3.0.140-SNAPSHOT
4.4.8
@@ -1963,6 +1970,9 @@
1.6.1
+
+ 2.3.2
+
2.1.7-wso2v7
1.5.11.wso2v15
diff --git a/pull_request_template.md b/pull_request_template.md
new file mode 100644
index 00000000000..9b32185a461
--- /dev/null
+++ b/pull_request_template.md
@@ -0,0 +1,52 @@
+## Purpose
+> Describe the problems, issues, or needs driving this feature/fix and include links to related issues in the following format: Resolves issue1, issue2, etc.
+
+## Goals
+> Describe the solutions that this feature/fix will introduce to resolve the problems described above
+
+## Approach
+> Describe how you are implementing the solutions. Include an animated GIF or screenshot if the change affects the UI (email documentation@wso2.com to review all UI text). Include a link to a Markdown file or Google doc if the feature write-up is too long to paste here.
+
+## User stories
+> Summary of user stories addressed by this change>
+
+## Release note
+> Brief description of the new feature or bug fix as it will appear in the release notes
+
+## Documentation
+> Link(s) to product documentation that addresses the changes of this PR. If no doc impact, enter “N/A” plus brief explanation of why there’s no doc impact
+
+## Training
+> Link to the PR for changes to the training content in https://github.com/wso2/WSO2-Training, if applicable
+
+## Certification
+> Type “Sent” when you have provided new/updated certification questions, plus four answers for each question (correct answer highlighted in bold), based on this change. Certification questions/answers should be sent to certification@wso2.com and NOT pasted in this PR. If there is no impact on certification exams, type “N/A” and explain why.
+
+## Marketing
+> Link to drafts of marketing content that will describe and promote this feature, including product page changes, technical articles, blog posts, videos, etc., if applicable
+
+## Automation tests
+ - Unit tests
+ > Code coverage information
+ - Integration tests
+ > Details about the test cases and coverage
+
+## Security checks
+ - Followed secure coding standards in http://wso2.com/technical-reports/wso2-secure-engineering-guidelines? yes/no
+ - Ran FindSecurityBugs plugin and verified report? yes/no
+ - Confirmed that this PR doesn't commit any keys, passwords, tokens, usernames, or other secrets? yes/no
+
+## Samples
+> Provide high-level details about the samples related to this feature
+
+## Related PRs
+> List any other related PRs
+
+## Migrations (if applicable)
+> Describe migration steps and platforms on which migration has been tested
+
+## Test environment
+> List all JDK versions, operating systems, databases, and browser/versions on which this feature/fix was tested
+
+## Learning
+> Describe the research phase and any blog posts, patterns, libraries, or add-ons you used to solve the problem.
\ No newline at end of file