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 ae0e73e573..3e7496e796 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.annotations
- 3.0.119-SNAPSHOT
+ 3.0.136-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 42aa825998..2491289e4e 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
- 3.0.119-SNAPSHOT
+ 3.0.136-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 f8bf274932..6c08f55444 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
- 3.0.119-SNAPSHOT
+ 3.0.136-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 30dd544cf6..23a01c76ff 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.handlers
- 3.0.119-SNAPSHOT
+ 3.0.136-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 0250ef26dd..b1e60b0c05 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.client
- 3.0.119-SNAPSHOT
+ 3.0.136-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 cbff246940..5cc97beee5 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.generated.client
- 3.0.119-SNAPSHOT
+ 3.0.136-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 457245f712..2a3a560981 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.webapp.publisher
- 3.0.119-SNAPSHOT
+ 3.0.136-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 40884aab4e..c5e920ef96 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
apimgt-extensions
- 3.0.119-SNAPSHOT
+ 3.0.136-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 ef34e9582c..b653352d9e 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.119-SNAPSHOT
+ 3.0.136-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 82b9807d1e..ac8b84e484 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.119-SNAPSHOT
+ 3.0.136-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 d6a1717c85..351a0f589f 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.certificate.mgt.core
- 3.0.119-SNAPSHOT
+ 3.0.136-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 5c82ea83a3..10e70a5baa 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 0000000000..38a16a7fa0
--- /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 0000000000..f3154d3bdc
--- /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 0000000000..a7e0629e5d
--- /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 0000000000..5fa4f7dabd
--- /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 0000000000..f276df4625
--- /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 0000000000..34d6936676
--- /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 0000000000..72684b1820
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 0000000000..7f976a58cf
--- /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 0000000000..bc996646e1
--- /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 0000000000..949c4c2cd4
--- /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 0000000000..40b7e24343
--- /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 0000000000..d1014499f9
--- /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 0000000000..c1e9ace3c2
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 e19786b861..0e996abca5 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 0000000000..d9be5b3ac0
--- /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 2143753b40..0000000000
--- 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 0000000000..044898f912
--- /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 d05fefdb8a..b76295f108 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 40f36104f5..cb93b5abdd 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
certificate-mgt
- 3.0.119-SNAPSHOT
+ 3.0.136-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 d55bc97f1d..e925abec3d 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.119-SNAPSHOT
+ 3.0.136-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 b2925624ff..aeda965f48 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.119-SNAPSHOT
+ 3.0.136-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 357648e0e1..b3faf21c9f 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.119-SNAPSHOT
+ 3.0.136-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 fc61f4406a..bbc52fa987 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.119-SNAPSHOT
+ 3.0.136-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 f8d08598d5..10767ceb62 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.119-SNAPSHOT
+ 3.0.136-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 f002b62ecc..ad578868fc 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml
index f644364d44..67004d0d2c 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.119-SNAPSHOT
+ 3.0.136-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
index 45989e24c2..9ca2f2cbfe 100644
--- 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
@@ -3,7 +3,7 @@
org.wso2.carbon.devicemgt
device-mgt
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml
index cdeda03579..fb5e95c2db 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.analytics.data.publisher/pom.xml
@@ -22,7 +22,7 @@
org.wso2.carbon.devicemgt
device-mgt
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
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 9af367168d..4f7611215c 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
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 a8d7a3ac15..531e9f28b3 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.119-SNAPSHOT
+ 3.0.136-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 8c537a3a2c..ff1280a6ed 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
@@ -224,10 +224,7 @@
org.powermock
powermock-module-testng
-
-
- org.powermock
- powermock-api-mockito
+ test
org.wso2.carbon
@@ -353,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/authorization/DeviceAccessAuthorizationServiceImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/authorization/DeviceAccessAuthorizationServiceImpl.java
index f5f209d61f..10699b2f4d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/authorization/DeviceAccessAuthorizationServiceImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/authorization/DeviceAccessAuthorizationServiceImpl.java
@@ -20,11 +20,10 @@ package org.wso2.carbon.device.mgt.core.authorization;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.context.CarbonContext;
-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.authorization.DeviceAccessAuthorizationException;
import org.wso2.carbon.device.mgt.common.authorization.DeviceAccessAuthorizationService;
import org.wso2.carbon.device.mgt.common.authorization.DeviceAuthorizationResult;
@@ -36,11 +35,9 @@ import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.core.permission.mgt.PermissionUtils;
import org.wso2.carbon.user.api.UserRealm;
import org.wso2.carbon.user.api.UserStoreException;
-
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
+
/**
* Implementation of DeviceAccessAuthorization service.
@@ -233,7 +230,7 @@ public class DeviceAccessAuthorizationServiceImpl implements DeviceAccessAuthori
return userRealm.getAuthorizationManager()
.isUserAuthorized(removeTenantDomain(username),
PermissionUtils.getAbsolutePermissionPath(CDM_ADMIN_PERMISSION),
- PermissionMethod.UI_EXECUTE);
+ CarbonConstants.UI_PERMISSION_ACTION);
}
return false;
}
@@ -265,22 +262,6 @@ public class DeviceAccessAuthorizationServiceImpl implements DeviceAccessAuthori
return PermissionUtils.putPermission(permission);
}
- private Map getOwnershipOfDevices(List devices) {
- Map ownershipData = new HashMap<>();
- EnrolmentInfo enrolmentInfo;
- String owner;
- for (Device device : devices) {
- enrolmentInfo = device.getEnrolmentInfo();
- if (enrolmentInfo != null) {
- owner = enrolmentInfo.getOwner();
- if (owner != null && !owner.isEmpty()) {
- ownershipData.put(device.getDeviceIdentifier(), owner);
- }
- }
- }
- return ownershipData;
- }
-
public static final class PermissionMethod {
public static final String READ = "read";
public static final String WRITE = "write";
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/DeviceConfigurationManager.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/DeviceConfigurationManager.java
index 51b6b63f2e..47b6caa11f 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/DeviceConfigurationManager.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/config/DeviceConfigurationManager.java
@@ -57,9 +57,9 @@ public class DeviceConfigurationManager {
return deviceConfigManager;
}
- public synchronized void initConfig() throws DeviceManagementException {
+ public synchronized void initConfig(String configLocation) throws DeviceManagementException {
try {
- File deviceMgtConfig = new File(DeviceConfigurationManager.DEVICE_MGT_CONFIG_PATH);
+ File deviceMgtConfig = new File(configLocation);
Document doc = DeviceManagerUtil.convertToDocument(deviceMgtConfig);
/* Un-marshaling Device Management configuration */
@@ -72,15 +72,8 @@ public class DeviceConfigurationManager {
}
}
- private static Schema getSchema() throws DeviceManagementException {
- try {
- File deviceManagementSchemaConfig = new File(DeviceConfigurationManager.DEVICE_MGT_CONFIG_SCHEMA_PATH);
- SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
- return factory.newSchema(deviceManagementSchemaConfig);
- } catch (SAXException e) {
- throw new DeviceManagementException("Error occurred while initializing the schema of " +
- "device-mgt-config.xml", e);
- }
+ public void initConfig() throws DeviceManagementException {
+ this.initConfig(DEVICE_MGT_CONFIG_PATH);
}
public DeviceManagementConfig getDeviceManagementConfig() {
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 decb956f1e..1dc588f0e1 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 36b56e357a..9110299009 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 4bccaaca92..faa0eab13b 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/OperationManagerImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java
index 772c5268e5..ccb69a1e0b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/operation/mgt/OperationManagerImpl.java
@@ -141,7 +141,7 @@ public class OperationManagerImpl implements OperationManager {
org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operationDto =
OperationDAOUtil.convertOperation(operation);
int operationId = this.lookupOperationDAO(operation).addOperation(operationDto);
- boolean isScheduledOperation = this.isTaskScheduledOperation(operation, deviceIds);
+ boolean isScheduledOperation = this.isTaskScheduledOperation(operation);
boolean isNotRepeated = false;
boolean isScheduled = false;
@@ -344,18 +344,22 @@ public class OperationManagerImpl implements OperationManager {
PaginationResult paginationResult = null;
List operations = new ArrayList<>();
String owner = request.getOwner();
+ try {
+ if (!DeviceManagerUtil.isDeviceExists(deviceId)) {
+ throw new OperationManagementException("Device not found for given device " +
+ "Identifier:" + deviceId.getId() + " and given type : " +
+ deviceId.getType());
+ }
+ } catch (DeviceManagementException e) {
+ throw new OperationManagementException("Error while checking the existence of the device identifier - "
+ + deviceId.getId() + " of the device type - " + deviceId.getType(), e);
+ }
if (!isActionAuthorized(deviceId)) {
throw new OperationManagementException("User '" + getUser() + "' is not authorized to access the '" +
deviceId.getType() + "' device, which carries the identifier '" +
deviceId.getId() + "' of owner '" + owner + "'");
}
-
EnrolmentInfo enrolmentInfo = this.getEnrolmentInfo(deviceId, owner);
- if (enrolmentInfo == null) {
- throw new OperationManagementException("Device not found for given device " +
- "Identifier:" + deviceId.getId() + " and given type" +
- deviceId.getType());
- }
int enrolmentId = enrolmentInfo.getId();
try {
OperationManagementDAOFactory.openConnection();
@@ -530,9 +534,8 @@ public class OperationManagerImpl implements OperationManager {
try {
int enrolmentId = enrolmentInfo.getId();
OperationManagementDAOFactory.beginTransaction();
- boolean isUpdated = false;
if (operation.getStatus() != null) {
- isUpdated = operationDAO.updateOperationStatus(enrolmentId, operationId,
+ operationDAO.updateOperationStatus(enrolmentId, operationId,
org.wso2.carbon.device.mgt.core.dto.operation.mgt.
Operation.Status.valueOf(operation.getStatus().
toString()));
@@ -806,25 +809,6 @@ public class OperationManagerImpl implements OperationManager {
}
}
- private OperationDAO lookupOperationDAO(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation operation) {
-
- if (operation instanceof org.wso2.carbon.device.mgt.core.dto.operation.mgt.CommandOperation ||
- operation.getType().equals(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Type.COMMAND)) {
- return commandOperationDAO;
- } else if (operation instanceof org.wso2.carbon.device.mgt.core.dto.operation.mgt.ProfileOperation ||
- operation.getType().equals(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Type.PROFILE)) {
- return profileOperationDAO;
- } else if (operation instanceof org.wso2.carbon.device.mgt.core.dto.operation.mgt.ConfigOperation ||
- operation.getType().equals(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Type.CONFIG)) {
- return configOperationDAO;
- } else if (operation instanceof org.wso2.carbon.device.mgt.core.dto.operation.mgt.PolicyOperation ||
- operation.getType().equals(org.wso2.carbon.device.mgt.core.dto.operation.mgt.Operation.Type.POLICY)) {
- return policyOperationDAO;
- } else {
- return operationDAO;
- }
- }
-
private String getUser() {
return CarbonContext.getThreadLocalCarbonContext().getUsername();
}
@@ -867,26 +851,6 @@ public class OperationManagerImpl implements OperationManager {
return isUserAuthorized;
}
- private int getEnrolmentByStatus(DeviceIdentifier deviceId,
- EnrolmentInfo.Status status) throws OperationManagementException {
- int enrolmentId;
- try {
- DeviceManagementDAOFactory.openConnection();
- int tenantId = CarbonContext.getThreadLocalCarbonContext().getTenantId();
- enrolmentId = deviceDAO.getEnrolmentByStatus(deviceId, status, tenantId);
- } catch (DeviceManagementDAOException e) {
- throw new OperationManagementException("Error occurred while retrieving metadata of '" +
- deviceId.getType() + "' device carrying the identifier '" +
- deviceId.getId() + "'", e);
- } catch (SQLException e) {
- throw new OperationManagementException(
- "Error occurred while opening a connection to the data source", e);
- } finally {
- DeviceManagementDAOFactory.closeConnection();
- }
- return enrolmentId;
- }
-
private EnrolmentInfo getEnrolmentInfo(DeviceIdentifier deviceId, String owner) throws OperationManagementException {
EnrolmentInfo enrolmentInfo = null;
try {
@@ -959,39 +923,15 @@ public class OperationManagerImpl implements OperationManager {
return updateStatus;
}
- private boolean isTaskScheduledOperation(Operation operation, List deviceIds) {
+ private boolean isTaskScheduledOperation(Operation operation) {
DeviceManagementProviderService deviceManagementProviderService = DeviceManagementDataHolder.getInstance().
getDeviceManagementProvider();
-
List monitoringOperations = deviceManagementProviderService.getMonitoringOperationList(deviceType);//Get task list from each device type
-
for (MonitoringOperation op : monitoringOperations) {
if (operation.getCode().equals(op.getTaskName())) {
return true;
}
}
-
-// for(String dti : taskOperation){
-// if (dti.equals(deviceType)) {
-// monitoringOperations = deviceTypeSpecificTasks.get(dti);
-//
-// }
-// }
-//
-// for(DeviceIdentifier deviceIdentifier : deviceIds){
-// String deviceType = deviceIdentifier.getType();
-//
-//
-//
-// }
-
-// TaskConfiguration taskConfiguration = DeviceConfigurationManager.getInstance().getDeviceManagementConfig().
-// getTaskConfiguration();
-// for (TaskConfiguration.Operation op : taskConfiguration.getOperations()) {
-// if (operation.getCode().equals(op.getOperationName())) {
-// return true;
-// }
-// }
return false;
}
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 b0bd195dee..8da340170a 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 58b0083b05..e58341da8a 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 ac64d6550c..ca5c5a46ea 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 052a9aeccb..632d3dec99 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;
@@ -118,6 +78,8 @@ public class ConfigOperationDAOImpl extends GenericOperationDAOImpl {
bais = new ByteArrayInputStream(operationDetails);
ois = new ObjectInputStream(bais);
configOperation = (ConfigOperation) ois.readObject();
+ configOperation.setId(rs.getInt("OPERATION_ID"));
+ configOperation.setEnabled(rs.getBoolean("ENABLED"));
}
} catch (IOException e) {
throw new OperationManagementDAOException("IO Error occurred while de serialize the policy operation " +
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 7ab5a4bd94..a575d18cf3 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 f24cfb3ae3..7f142b7d04 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 78b88f9855..9223b3c030 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/DeviceManagementProviderService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java
index bd5e6d5897..ff278493f9 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/service/DeviceManagementProviderService.java
@@ -481,8 +481,6 @@ public interface DeviceManagementProviderService {
*/
PlatformConfiguration getConfiguration(String deviceType) throws DeviceManagementException;
- void updateDeviceEnrolmentInfo(Device device, EnrolmentInfo.Status active) throws DeviceManagementException;
-
/**
* This method is used to check whether the device is enrolled with the give user.
*
@@ -510,8 +508,6 @@ public interface DeviceManagementProviderService {
boolean enrollDevice(Device device) throws DeviceManagementException;
- PlatformConfiguration getConfiguration() throws DeviceManagementException;
-
boolean saveConfiguration(PlatformConfiguration configuration) throws DeviceManagementException;
boolean disenrollDevice(DeviceIdentifier deviceId) throws DeviceManagementException;
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 da66d7c9b6..4c1454015b 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
@@ -129,11 +129,6 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
return dms.saveConfiguration(configuration);
}
- @Override
- public PlatformConfiguration getConfiguration() throws DeviceManagementException {
- return null;
- }
-
@Override
public PlatformConfiguration getConfiguration(String deviceType) throws DeviceManagementException {
DeviceManager dms =
@@ -1746,6 +1741,7 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
if (requireDeviceInfo) {
this.getAllDeviceInfo(userDevices);
}
+ devices.addAll(userDevices);
}
return devices;
}
@@ -1895,41 +1891,6 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
return result;
}
- @Override
- public void updateDeviceEnrolmentInfo(Device device, EnrolmentInfo.Status status) throws DeviceManagementException {
- try {
- if (device == null || status == null) {
- String msg = "Received incomplete data for updateDeviceEnrolmentInfo";
- log.error(msg);
- throw new DeviceManagementException(msg);
- }
- if (log.isDebugEnabled()) {
- log.debug("Updating enrolment for device: " + device.getId() + " of type '" + device.getType() + "'");
- }
- DeviceManagementDAOFactory.beginTransaction();
- device.getEnrolmentInfo().setDateOfLastUpdate(new Date().getTime());
- device.getEnrolmentInfo().setStatus(status);
- deviceDAO.updateDevice(device, this.getTenantId());
- DeviceManagementDAOFactory.commitTransaction();
- } catch (DeviceManagementDAOException e) {
- DeviceManagementDAOFactory.rollbackTransaction();
- String msg = "Error occurred while updating device enrolment status for " + device.getDeviceIdentifier() +
- " of type " + device.getType();
- log.error(msg, e);
- throw new DeviceManagementException(msg, e);
- } catch (TransactionManagementException e) {
- String msg = "Error occurred while initiating transaction";
- log.error(msg, e);
- throw new DeviceManagementException(msg, e);
- } catch (Exception e) {
- String msg = "Error occurred in updateDeviceEnrolmentInfo";
- log.error(msg, e);
- throw new DeviceManagementException(msg, e);
- } finally {
- DeviceManagementDAOFactory.closeConnection();
- }
- }
-
@Override
public void registerDeviceManagementService(DeviceManagementService deviceManagementService) {
if (log.isDebugEnabled()) {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DeviceManagerUtil.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DeviceManagerUtil.java
index 5d81c89e49..63193ff070 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DeviceManagerUtil.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/util/DeviceManagerUtil.java
@@ -486,6 +486,13 @@ public final class DeviceManagerUtil {
return true;
}
+ public static boolean isDeviceExists(DeviceIdentifier deviceIdentifier) throws DeviceManagementException {
+ Device device = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().getDevice(deviceIdentifier,
+ false);
+ return !(device == null || device.getDeviceIdentifier() == null ||
+ device.getDeviceIdentifier().isEmpty() || device.getEnrolmentInfo() == null);
+ }
+
private static CacheManager getCacheManager() {
return Caching.getCacheManagerFactory().getCacheManager(DeviceManagementConstants.DM_CACHE_MANAGER);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java
index fca34667aa..f83100b442 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/TestDeviceManagementService.java
@@ -31,10 +31,18 @@ public class TestDeviceManagementService implements DeviceManagementService {
private String providerType;
private String tenantDomain;
+ private String operationCode;
+
+ public TestDeviceManagementService(String deviceType, String tenantDomain, String operationCode) {
+ providerType = deviceType;
+ this.tenantDomain = tenantDomain;
+ this.operationCode = operationCode;
+ }
public TestDeviceManagementService(String deviceType, String tenantDomain) {
providerType = deviceType;
this.tenantDomain = tenantDomain;
+ this.operationCode = "default";
}
@Override
@@ -48,12 +56,10 @@ public class TestDeviceManagementService implements DeviceManagementService {
taskConfig.setEnabled(true);
taskConfig.setFrequency(3000);
List monitoringOperations = new ArrayList<>();
- for (int i = 0; i < 5; i++) {
- MonitoringOperation monitoringOperation = new MonitoringOperation();
- monitoringOperation.setTaskName("OPERATION-" + i);
- monitoringOperation.setRecurrentTimes(i);
- monitoringOperations.add(monitoringOperation);
- }
+ MonitoringOperation monitoringOperation = new MonitoringOperation();
+ monitoringOperation.setTaskName(operationCode);
+ monitoringOperation.setRecurrentTimes(2);
+ monitoringOperations.add(monitoringOperation);
taskConfig.setMonitoringOperation(monitoringOperations);
return taskConfig;
}
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 c81b4e4eb3..010b47b8d0 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 7210942ca5..f44e65ee0d 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
@@ -17,73 +17,34 @@
*/
package org.wso2.carbon.device.mgt.core;
+import org.wso2.carbon.device.mgt.core.task.TestTaskManagerImpl;
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.service.TaskService;
+import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class TestTaskServiceImpl implements TaskService {
- @Override
- public TaskManager getTaskManager(String s) throws TaskException {
- return new TaskManager() {
- @Override
- public void initStartupTasks() throws TaskException {
-
- }
-
- @Override
- public void scheduleTask(String s) throws TaskException {
-
- }
-
- @Override
- public void rescheduleTask(String s) throws TaskException {
-
- }
-
- @Override
- public boolean deleteTask(String s) throws TaskException {
- return false;
- }
-
- @Override
- public void pauseTask(String s) throws TaskException {
-
- }
+ private Set registeredTaskTypes;
+ private TaskManager taskManager;
- @Override
- public void resumeTask(String s) throws TaskException {
+ public TestTaskServiceImpl() {
- }
-
- @Override
- public void registerTask(TaskInfo taskInfo) throws TaskException {
-
- }
-
- @Override
- public TaskState getTaskState(String s) throws TaskException {
- return null;
- }
-
- @Override
- public TaskInfo getTask(String s) throws TaskException {
- return null;
- }
+ this.registeredTaskTypes = new HashSet<>();
+ this.taskManager = new TestTaskManagerImpl();
+ }
- @Override
- public List getAllTasks() throws TaskException {
- return null;
- }
+ public void setTaskManager(TaskManager taskManager) {
+ this.taskManager = taskManager;
+ }
- @Override
- public boolean isTaskScheduled(String s) throws TaskException {
- return false;
- }
- };
+ @Override
+ public TaskManager getTaskManager(String s) throws TaskException {
+ return this.taskManager;
}
@Override
@@ -93,12 +54,12 @@ public class TestTaskServiceImpl implements TaskService {
@Override
public void registerTaskType(String s) throws TaskException {
-
+ this.registeredTaskTypes.add(s);
}
@Override
public Set getRegisteredTaskTypes() {
- return null;
+ return this.registeredTaskTypes;
}
@Override
@@ -108,7 +69,7 @@ public class TestTaskServiceImpl implements TaskService {
@Override
public boolean isServerInit() {
- return false;
+ return true;
}
@Override
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 1a21646150..4b10c865c2 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,7 +22,16 @@ 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;
+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.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -58,7 +67,6 @@ public class TestUtils {
}
}
-
public static DeviceGroup createDeviceGroup1(){
DeviceGroup group = new DeviceGroup();
group.setName("TEST_GROUP_01");
@@ -101,11 +109,21 @@ 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);
return list;
}
+
+ public static RegistryService getRegistryService(Class clazz) throws RegistryException {
+ RealmService realmService = new InMemoryRealmService();
+ RegistryDataHolder.getInstance().setRealmService(realmService);
+ DeviceManagementDataHolder.getInstance().setRealmService(realmService);
+ InputStream is = clazz.getClassLoader().getResourceAsStream("carbon-home/repository/conf/registry.xml");
+ RegistryContext context = RegistryContext.getBaseInstance(is, realmService);
+ context.setSetup(true);
+ return context.getEmbeddedRegistryService();
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/authorization/DeviceAccessAuthorizationServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/authorization/DeviceAccessAuthorizationServiceTest.java
new file mode 100644
index 0000000000..0d47d369cd
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/authorization/DeviceAccessAuthorizationServiceTest.java
@@ -0,0 +1,356 @@
+/*
+ * 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.authorization;
+
+import org.apache.commons.dbcp.BasicDataSource;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.CarbonConstants;
+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.authorization.DeviceAccessAuthorizationException;
+import org.wso2.carbon.device.mgt.common.authorization.DeviceAuthorizationResult;
+import org.wso2.carbon.device.mgt.common.group.mgt.GroupManagementException;
+import org.wso2.carbon.device.mgt.common.group.mgt.RoleDoesNotExistException;
+import org.wso2.carbon.device.mgt.common.permission.mgt.PermissionManagementException;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+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.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.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.api.UserStoreException;
+import org.wso2.carbon.user.api.UserStoreManager;
+import org.wso2.carbon.user.api.Permission;
+import org.wso2.carbon.user.core.service.RealmService;
+import org.wso2.carbon.user.core.tenant.JDBCTenantManager;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.List;
+import java.util.HashMap;
+import java.util.Arrays;
+
+/**
+ * Unit tests for DeviceAccessAuthorizationServiceTest
+ */
+public class DeviceAccessAuthorizationServiceTest {
+ private static final Log log = LogFactory.getLog(DeviceAccessAuthorizationServiceTest.class);
+ private static final String DEVICE_TYPE = "AUTH_SERVICE_TEST_TYPE";
+ private static final int NO_OF_DEVICES = 5;
+ private static final String ADMIN_USER = "admin";
+ private static final String NON_ADMIN_ALLOWED_USER = "nonAdmin";
+ private static final String NORMAL_USER = "normal";
+ private static final String ADMIN_ROLE = "adminRole";
+ private static final String NON_ADMIN_ROLE = "nonAdminRole";
+ private static final String DEFAULT_GROUP = "defaultGroup";
+ private static final String DEVICE_ID_PREFIX = "AUTH-SERVICE-TEST-DEVICE-ID-";
+ private static final String USER_CLAIM_EMAIL_ADDRESS = "http://wso2.org/claims/emailaddress";
+ private static final String USER_CLAIM_FIRST_NAME = "http://wso2.org/claims/givenname";
+ private static final String USER_CLAIM_LAST_NAME = "http://wso2.org/claims/lastname";
+ private static final String ADMIN_PERMISSION = "/permission/admin";
+ private static final String NON_ADMIN_PERMISSION = "/permission/admin/manage/device-mgt/devices/owning-device/view";
+ private static final String FIRST_NAME = "firstName";
+ private static final String LAST_NAME = "lastName";
+ private static final String EMAIL = "email";
+ private static final String PASSWORD = "password";
+ private DeviceAccessAuthorizationServiceImpl deviceAccessAuthorizationService;
+ private List deviceIds = new ArrayList<>();
+ private List groupDeviceIds = new ArrayList<>();
+ private Map defaultUserClaims;
+
+ @BeforeClass
+ public void init() throws Exception {
+ DeviceConfigurationManager.getInstance().initConfig();
+ log.info("Initializing test environment to test DeviceAccessAuthorization Class");
+ for (int i = 0; i < NO_OF_DEVICES; i++) {
+ deviceIds.add(new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE));
+ }
+ List devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
+ DeviceManagementProviderService deviceMgtService = new DeviceManagementProviderServiceImpl();
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceMgtService);
+ DeviceManagementDataHolder.getInstance().setRegistryService(getRegistryService());
+ DeviceManagementDataHolder.getInstance().setGroupManagementProviderService(new
+ GroupManagementProviderServiceImpl());
+ DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
+ deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
+ for (Device device : devices) {
+ deviceMgtService.enrollDevice(device);
+ }
+ List returnedDevices = deviceMgtService.getAllDevices(DEVICE_TYPE);
+ for (Device device : returnedDevices) {
+ if (!device.getDeviceIdentifier().startsWith(DEVICE_ID_PREFIX)) {
+ throw new Exception("Incorrect device with ID - " + device.getDeviceIdentifier() + " returned!");
+ }
+ }
+ deviceAccessAuthorizationService = Mockito.mock(DeviceAccessAuthorizationServiceImpl.class,
+ Mockito.CALLS_REAL_METHODS);
+ defaultUserClaims = buildDefaultUserClaims(FIRST_NAME, LAST_NAME, EMAIL);
+ initializeTestEnvironment();
+ //Starting tenant flow
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID, true);
+ }
+
+ private RegistryService getRegistryService() throws RegistryException, UserStoreException {
+ RealmService realmService = new InMemoryRealmService();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ BasicDataSource dataSource = new BasicDataSource();
+ String connectionUrl = "jdbc:h2:./target/databasetest/CARBON_TEST";
+ dataSource.setUrl(connectionUrl);
+ dataSource.setDriverClassName("org.h2.Driver");
+ JDBCTenantManager jdbcTenantManager = new JDBCTenantManager(dataSource,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+ realmService.setTenantManager(jdbcTenantManager);
+ 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 void initializeTestEnvironment() throws UserStoreException, GroupManagementException,
+ RoleDoesNotExistException, DeviceNotFoundException {
+ //creating UI permission
+ Permission adminPermission = new Permission(ADMIN_PERMISSION, CarbonConstants.UI_PERMISSION_ACTION);
+ Permission deviceViewPermission = new Permission(NON_ADMIN_PERMISSION, CarbonConstants.UI_PERMISSION_ACTION);
+ UserStoreManager userStoreManager = DeviceManagementDataHolder.getInstance().getRealmService()
+ .getTenantUserRealm(MultitenantConstants.SUPER_TENANT_ID).getUserStoreManager();
+ //Adding a non Admin User
+ userStoreManager.addUser(NON_ADMIN_ALLOWED_USER, PASSWORD, null, defaultUserClaims, null);
+ //Adding a normal user
+ userStoreManager.addUser(NORMAL_USER, PASSWORD, null, defaultUserClaims, null);
+ //Adding role with permission to Admin user
+ userStoreManager.addRole(ADMIN_ROLE, new String[]{ADMIN_USER}, new Permission[]{adminPermission});
+ //Adding role with permission to non Admin user
+ userStoreManager.addRole(NON_ADMIN_ROLE, new String[]{NON_ADMIN_ALLOWED_USER},
+ new Permission[]{deviceViewPermission});
+ //Creating default group
+ GroupManagementProviderService groupManagementProviderService = DeviceManagementDataHolder.getInstance()
+ .getGroupManagementProviderService();
+ groupManagementProviderService.createDefaultGroup(DEFAULT_GROUP);
+ int groupId = groupManagementProviderService.getGroup(DEFAULT_GROUP).getGroupId();
+ //Sharing group with admin and non admin roles
+ groupManagementProviderService.manageGroupSharing(groupId, new ArrayList<>(Arrays.asList(ADMIN_ROLE,
+ NON_ADMIN_ROLE)));
+ //Adding first 2 devices to the group
+ groupDeviceIds.add(deviceIds.get(0));
+ groupDeviceIds.add(deviceIds.get(1));
+ groupManagementProviderService.addDevices(groupId, groupDeviceIds);
+ }
+
+ private Map buildDefaultUserClaims(String firstName, String lastName, String emailAddress) {
+ Map defaultUserClaims = new HashMap<>();
+ defaultUserClaims.put(USER_CLAIM_FIRST_NAME, firstName);
+ defaultUserClaims.put(USER_CLAIM_LAST_NAME, lastName);
+ defaultUserClaims.put(USER_CLAIM_EMAIL_ADDRESS, emailAddress);
+ if (log.isDebugEnabled()) {
+ log.debug("Default claim map is created for new user: " + defaultUserClaims.toString());
+ }
+ return defaultUserClaims;
+ }
+
+ //Admin User test cases
+ @Test(description = "Check authorization giving a device identifier and username")
+ public void userAuthDevIdUserName() throws Exception {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ for (DeviceIdentifier deviceId : deviceIds) {
+ Assert.assertTrue(deviceAccessAuthorizationService.isUserAuthorized(deviceId, ADMIN_USER),
+ "Device access authorization for admin user failed");
+ }
+ }
+
+ @Test(description = "Authorization for multiple device identifiers and username")
+ public void userAuthDevIdUserNameResult() throws DeviceAccessAuthorizationException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(deviceIds, ADMIN_USER);
+ Assert.assertEquals(deviceAuthorizationResult.getAuthorizedDevices().size(), 5,
+ "Expected 5 authorized devices for admin user");
+ Assert.assertEquals(deviceAuthorizationResult.getUnauthorizedDevices().size(), 0,
+ "Expected 0 un-authorized devices for admin user");
+ }
+
+ @Test(description = "Authorization by device identifier")
+ public void userAuthDevId() throws Exception {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ for (DeviceIdentifier deviceId : deviceIds) {
+ Assert.assertTrue(deviceAccessAuthorizationService.isUserAuthorized(deviceId),
+ "Authorize user from device identifier failed");
+ }
+ }
+
+ @Test(description = "Authorization by multiple device identifiers")
+ public void userAuthDevIdResult() throws Exception {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(deviceIds);
+ Assert.assertEquals(deviceAuthorizationResult.getAuthorizedDevices().size(), 5,
+ "Expected 5 authorized devices for admin user");
+ Assert.assertEquals(deviceAuthorizationResult.getUnauthorizedDevices().size(), 0,
+ "Expected 0 un-authorized devices for admin user");
+ }
+
+ @Test(description = "Check current user is a device administrator")
+ public void isDevAdminAdminUser() throws DeviceAccessAuthorizationException, UserStoreException,
+ PermissionManagementException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ Assert.assertTrue(deviceAccessAuthorizationService.isDeviceAdminUser(),
+ "Admin user failed to authorize as admin");
+ }
+
+ //Non admin user tests
+ @Test(description = "Check authorization by device identifier and permission Allowed test case")
+ public void userAuthDevIdPermission() throws DeviceAccessAuthorizationException, UserStoreException,
+ PermissionManagementException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ Assert.assertTrue(deviceAccessAuthorizationService.isUserAuthorized(deviceIds.get(0),
+ new String[]{NON_ADMIN_PERMISSION}), "Non admin user with permissions attempt to access failed");
+ }
+
+ @Test(description = "Check authorization by device identifier and permission Not-allowed test case")
+ public void userAuthFalseDevIdPermission() throws DeviceAccessAuthorizationException, UserStoreException,
+ PermissionManagementException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ Assert.assertFalse(deviceAccessAuthorizationService.isUserAuthorized(deviceIds.get(3),
+ new String[]{NON_ADMIN_PERMISSION}), "Non admin user accessing not allowed device authorized");
+ }
+
+ @Test(description = "Authorization by giving a device identifier, username and permission Allowed test case")
+ public void userAuthDevIdUserNamePermission() throws DeviceAccessAuthorizationException, UserStoreException,
+ PermissionManagementException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ Assert.assertTrue(deviceAccessAuthorizationService.isUserAuthorized(deviceIds.get(0), NON_ADMIN_ALLOWED_USER,
+ new String[]{NON_ADMIN_PERMISSION}), "Non admin user with permissions attempt to access failed");
+ }
+
+ @Test(description = "Authorization by giving a device identifier, username and permission Not-allowed test case")
+ public void userAuthFalseDevIdUserNamePermission() throws DeviceAccessAuthorizationException, UserStoreException,
+ PermissionManagementException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ Assert.assertFalse(deviceAccessAuthorizationService.isUserAuthorized(deviceIds.get(3), NON_ADMIN_ALLOWED_USER,
+ new String[]{NON_ADMIN_PERMISSION}), "Non admin user accessing not allowed device authorized");
+ }
+
+ @Test(description = "Authorization by giving device identifiers and permission")
+ public void userAuthDevIdPermissionResult() throws DeviceAccessAuthorizationException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(deviceIds, new String[]{NON_ADMIN_PERMISSION});
+ Assert.assertEquals(deviceAuthorizationResult.getAuthorizedDevices().size(), 2,
+ "Non admin user authentication to 2 devices in a shared group failed");
+ Assert.assertEquals(deviceAuthorizationResult.getUnauthorizedDevices().size(), 3,
+ "Non admin user authentication to 3 devices in a non-shared group failed");
+ }
+
+ @Test(description = "Authorization by giving device identifiers, username and permission")
+ public void userAuthDevIdUserNamePermissionResult() throws DeviceAccessAuthorizationException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(deviceIds, NON_ADMIN_ALLOWED_USER, new String[]{NON_ADMIN_PERMISSION});
+ Assert.assertEquals(deviceAuthorizationResult.getAuthorizedDevices().size(), 2,
+ "Non admin user authentication to 2 devices in a shared group failed");
+ Assert.assertEquals(deviceAuthorizationResult.getUnauthorizedDevices().size(), 3,
+ "Non admin user authentication to 3 devices in a non-shared group failed");
+ }
+
+ @Test(description = "Authorization for device admin called by normal user")
+ public void isDevAdminNormalUser() throws DeviceAccessAuthorizationException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NORMAL_USER);
+ Assert.assertFalse(deviceAccessAuthorizationService.isDeviceAdminUser(), "Normal user allowed as admin user");
+ }
+
+ //Check branches of isUserAuthorized
+ @Test(description = "Checking branch - user is device owner")
+ public void nonAdminDeviceOwner() throws DeviceAccessAuthorizationException, DeviceManagementException {
+
+ //Creating a temporary device
+ Device device = new Device();
+ EnrolmentInfo enrolmentInfo = new EnrolmentInfo(NON_ADMIN_ALLOWED_USER, EnrolmentInfo.OwnerShip.BYOD, null);
+ device.setEnrolmentInfo(enrolmentInfo);
+ device.setName("temp");
+ device.setType(DEVICE_TYPE);
+ device.setDeviceIdentifier("1234");
+ DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().enrollDevice(device);
+
+ //temporary device identifier
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setType(DEVICE_TYPE);
+ deviceIdentifier.setId("1234");
+
+ List tempList = new ArrayList<>();
+ tempList.add(deviceIdentifier);
+
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(tempList, NON_ADMIN_ALLOWED_USER, new String[]{NON_ADMIN_PERMISSION});
+ Assert.assertEquals(deviceAuthorizationResult.getAuthorizedDevices().size(), 1,
+ "Non admin device owner failed to access device");
+ Assert.assertEquals(deviceAuthorizationResult.getUnauthorizedDevices().size(), 0,
+ "Non admin device owner failed to access device");
+ }
+
+ @Test(description = "Check authorization without giving permissions")
+ public void userAuthWithoutPermissions() throws DeviceAccessAuthorizationException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(deviceIds, NON_ADMIN_ALLOWED_USER, null);
+ Assert.assertEquals(deviceAuthorizationResult.getAuthorizedDevices().size(), 0,
+ "Non admin user try authentication without permission failed");
+ Assert.assertEquals(deviceAuthorizationResult.getUnauthorizedDevices().size(), 5,
+ "Non admin user try authentication without permission failed");
+ }
+
+ //check Exception cases
+ @Test(description = "check a null username in isUserAuthorized method")
+ public void callUserAuthWithoutUsername() throws DeviceAccessAuthorizationException {
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(NON_ADMIN_ALLOWED_USER);
+ DeviceAuthorizationResult deviceAuthorizationResult = deviceAccessAuthorizationService.
+ isUserAuthorized(deviceIds, "", new String[]{NON_ADMIN_PERMISSION});
+ Assert.assertEquals(deviceAuthorizationResult, null,
+ "Not null result for empty username in isUserAuthorized method");
+ }
+
+ @AfterClass
+ public void clearAll() {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+
+}
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 e22cd0ac62..21261bef2b 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,11 +18,13 @@
*/
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;
import org.testng.Assert;
-import org.testng.annotations.AfterSuite;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeSuite;
import org.w3c.dom.Document;
@@ -30,17 +32,33 @@ import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.core.TestUtils;
+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.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.dao.GroupManagementDAOFactory;
+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.notification.mgt.dao.NotificationManagementDAOFactory;
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.device.mgt.core.service.GroupManagementProviderServiceImpl;
import org.wso2.carbon.device.mgt.core.util.DeviceManagerUtil;
+import org.wso2.carbon.email.sender.core.service.EmailSenderServiceImpl;
+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 org.wso2.carbon.utils.ConfigurationContextService;
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.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
@@ -56,6 +74,7 @@ public abstract class BaseDeviceManagementTest {
this.initDataSource();
this.initSQLScript();
this.initializeCarbonContext();
+ this.initServices();
}
protected void initDataSource() throws Exception {
@@ -66,6 +85,42 @@ public abstract class BaseDeviceManagementTest {
NotificationManagementDAOFactory.init(dataSource);
}
+ protected void initServices() throws DeviceManagementException, RegistryException {
+ DeviceConfigurationManager.getInstance().initConfig();
+ DeviceManagementProviderService deviceMgtService = new DeviceManagementProviderServiceImpl();
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceMgtService);
+ DeviceManagementDataHolder.getInstance().setRegistryService(getRegistryService());
+ 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 {
+ 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 ConfigurationContextService getConfigContextService() throws RegistryException {
+ ConfigurationContext context =
+ null;
+ try {
+ context = ConfigurationContextFactory.createConfigurationContextFromFileSystem
+ ("src/test/resources/carbon-home/repository/conf/axis2/axis2.xml");
+ } catch (AxisFault axisFault) {
+ axisFault.printStackTrace();
+ }
+ ConfigurationContextService service = new ConfigurationContextService(context, null);
+ return service;
+ }
+
@BeforeClass
public abstract void init() throws Exception;
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 863098c4d4..355ec9a55a 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,10 +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.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;
@@ -31,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;
@@ -54,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) {
@@ -97,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);
@@ -125,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 0000000000..fc1e174f72
--- /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 0000000000..26aad9a908
--- /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/notification/mgt/NotificationManagementServiceImplTests.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/notification/mgt/NotificationManagementServiceImplTests.java
index 87de357830..21e729293d 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/notification/mgt/NotificationManagementServiceImplTests.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/notification/mgt/NotificationManagementServiceImplTests.java
@@ -25,6 +25,8 @@ 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.EntityDoesNotExistException;
+import org.wso2.carbon.device.mgt.common.PaginationRequest;
+import org.wso2.carbon.device.mgt.common.PaginationResult;
import org.wso2.carbon.device.mgt.common.notification.mgt.Notification;
import org.wso2.carbon.device.mgt.common.notification.mgt.NotificationManagementException;
import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
@@ -81,7 +83,8 @@ public class NotificationManagementServiceImplTests {
deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
for (Device device : devices) {
- deviceMgtService.enrollDevice(device);
+ Assert.assertTrue(deviceMgtService.enrollDevice(device), "Device with Identifier - " +
+ device.getDeviceIdentifier() + " is not enrolled.");
}
List returnedDevices = deviceMgtService.getAllDevices(DEVICE_TYPE);
@@ -110,7 +113,8 @@ public class NotificationManagementServiceImplTests {
Notification notification = TestDataHolder.getNotification(i, Notification.Status.NEW.toString(),
testDeviceIdentifier.toString(), TEST_NOTIFICATION_DESCRIPTION, DEVICE_ID_PREFIX + i,
NOTIFICATION_OPERATION_ID, DEVICE_TYPE);
- Assert.assertTrue(notificationManagementService.addNotification(testDeviceIdentifier, notification));
+ Assert.assertTrue(notificationManagementService.addNotification(testDeviceIdentifier, notification),
+ "Adding notification failed for [" + notification.toString() + "]");
}
}
@@ -125,15 +129,26 @@ public class NotificationManagementServiceImplTests {
DEVICE_TYPE), notification);
}
+ @Test(expectedExceptions = NotificationManagementException.class, description = "This tests the method getDevice which" +
+ " is called internally in addNotification for DeviceManagementException exception passing null device Id.")
+ public void getDevice() throws NotificationManagementException {
+ DeviceIdentifier testDeviceIdentifier = new DeviceIdentifier(DEVICE_ID_PREFIX + 123, DEVICE_TYPE);
+ Notification notification = TestDataHolder.getNotification(1, Notification.Status.NEW.toString(),
+ testDeviceIdentifier.toString(), TEST_NOTIFICATION_DESCRIPTION, DEVICE_ID_PREFIX + 123,
+ NOTIFICATION_OPERATION_ID, DEVICE_TYPE);
+ notificationManagementService.addNotification(null, notification);
+ }
+
@Test(dependsOnMethods = "addNotification", description = "This tests the updateNotification Method" +
" and check whether it returns true ( got updated )")
public void updateNotification() throws NotificationManagementException {
for (int i = 1; i <= NO_OF_DEVICES; i++) {
DeviceIdentifier testDeviceIdentifier = new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE);
Notification notification = TestDataHolder.getNotification(i, Notification.Status.CHECKED.toString(),
- testDeviceIdentifier.toString(), TEST_NOTIFICATION_DESCRIPTION, DEVICE_ID_PREFIX + i, NOTIFICATION_OPERATION_ID,
- DEVICE_TYPE);
- Assert.assertTrue(notificationManagementService.updateNotification(notification));
+ testDeviceIdentifier.toString(), TEST_NOTIFICATION_DESCRIPTION, DEVICE_ID_PREFIX + i,
+ NOTIFICATION_OPERATION_ID, DEVICE_TYPE);
+ Assert.assertTrue(notificationManagementService.updateNotification(notification), "Notification " +
+ "update failed for [" + notification.toString() + "]");
}
}
@@ -141,7 +156,8 @@ public class NotificationManagementServiceImplTests {
"and check whether it got updated")
public void updateNotificationStatus() throws NotificationManagementException {
for (int i = 1; i <= NO_OF_DEVICES; i++) {
- Assert.assertTrue(notificationManagementService.updateNotificationStatus(i, Notification.Status.CHECKED));
+ Assert.assertTrue(notificationManagementService.updateNotificationStatus(i, Notification.Status.CHECKED),
+ "Notification update status failed for notification id:- " + i);
}
}
@@ -149,7 +165,8 @@ public class NotificationManagementServiceImplTests {
" method by listing down all the notifications.")
public void getAllNotifications() throws NotificationManagementException {
List returnedNotifications = notificationManagementService.getAllNotifications();
- Assert.assertEquals(returnedNotifications.size(), NO_OF_DEVICES);
+ Assert.assertEquals(returnedNotifications.size(), NO_OF_DEVICES, "No. of notifications added is not " +
+ "equal to no. of notifications retrieved.");
}
@Test(dependsOnMethods = "updateNotificationStatus", description = "this method retries notification by id" +
@@ -157,17 +174,46 @@ public class NotificationManagementServiceImplTests {
public void getNotification() throws NotificationManagementException {
for (int i = 1; i <= NO_OF_DEVICES; i++) {
Notification returnedNotification = notificationManagementService.getNotification(i);
- Assert.assertEquals(returnedNotification.getNotificationId(), i);
- Assert.assertEquals(returnedNotification.getStatus(), Notification.Status.CHECKED);
- Assert.assertEquals(returnedNotification.getDescription(), TEST_NOTIFICATION_DESCRIPTION);
- Assert.assertEquals(returnedNotification.getOperationId(), NOTIFICATION_OPERATION_ID);
+ Assert.assertEquals(returnedNotification.getNotificationId(), i, "Returned notification ID is not " +
+ "same as added notification Id.");
+ Assert.assertEquals(returnedNotification.getStatus(), Notification.Status.CHECKED, "Returned " +
+ "notification status is not same as added notification status.");
+ Assert.assertEquals(returnedNotification.getDescription(), TEST_NOTIFICATION_DESCRIPTION, "Returned" +
+ " notification description is not same as added notification description.");
+ Assert.assertEquals(returnedNotification.getOperationId(), NOTIFICATION_OPERATION_ID, "Returned " +
+ "notification operation ID is not same as added notification operation Id.");
}
}
@Test(dependsOnMethods = "updateNotificationStatus", description = "this method gets all notification by status checked")
public void getNotificationsByStatus() throws NotificationManagementException {
- List returnedNotifications = notificationManagementService.getNotificationsByStatus(Notification.Status.CHECKED);
- Assert.assertEquals(returnedNotifications.size(), NO_OF_NOTIFICATIONS);
+ List returnedNotifications = notificationManagementService.getNotificationsByStatus(Notification.
+ Status.CHECKED);
+ Assert.assertEquals(returnedNotifications.size(), NO_OF_NOTIFICATIONS, "Returned no. of notification is " +
+ "not same as added no. of notifications.");
+ }
+
+ @Test(dependsOnMethods = "addNotification", description = "this tests for getAllNotification method by passing " +
+ "pagination request and validates the no. of total records and filtered records. ")
+ public void getAllNotificationsWithPaginationRequest() throws NotificationManagementException {
+ PaginationRequest request = new PaginationRequest(1, 2);
+ PaginationResult result = notificationManagementService.getAllNotifications(request);
+ Assert.assertEquals(result.getRecordsFiltered(), NO_OF_NOTIFICATIONS, "Returned filtered records is " +
+ "not same as added filtered records.");
+ Assert.assertEquals(result.getRecordsTotal(), NO_OF_NOTIFICATIONS, "Returned no. of records is not " +
+ "same as added no. of records.");
+ }
+
+ @Test(dependsOnMethods = "updateNotificationStatus", description = "this tests for getAllNotification method by" +
+ " passing pagination request & status and validates the no. of total records and filtered records. ")
+ public void getAllNotificationsWithPaginationRequestAndStatus() throws NotificationManagementException {
+ PaginationRequest request = new PaginationRequest(1, 2);
+ PaginationResult result = notificationManagementService.getNotificationsByStatus(Notification.Status.CHECKED,
+ request);
+ Assert.assertEquals(result.getRecordsFiltered(), NO_OF_NOTIFICATIONS, "Returned filtered records is not " +
+ "same as added filtered records.");
+ Assert.assertEquals(result.getRecordsTotal(), NO_OF_NOTIFICATIONS, "Returned no. of records is not same" +
+ " as added no. of records.");
}
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementTests.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementTests.java
index 3107e0448b..6ee4c3af37 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementTests.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementTests.java
@@ -25,6 +25,7 @@ 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.EnrolmentInfo;
import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
import org.wso2.carbon.device.mgt.common.PaginationRequest;
import org.wso2.carbon.device.mgt.common.PaginationResult;
@@ -36,38 +37,28 @@ 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.DeviceManagementConstants;
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.internal.DeviceManagementDataHolder;
-import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
import org.wso2.carbon.device.mgt.core.operation.mgt.CommandOperation;
import org.wso2.carbon.device.mgt.core.operation.mgt.ConfigOperation;
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.GroupManagementProviderServiceImpl;
-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 org.wso2.carbon.utils.multitenancy.MultitenantConstants;
-import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
/**
* This is the testcase which covers the methods from {@link OperationManager}
*/
-public class OperationManagementTests {
+public class OperationManagementTests extends BaseDeviceManagementTest {
private static final String DEVICE_TYPE = "OP_TEST_TYPE";
private static final String DEVICE_ID_PREFIX = "OP-TEST-DEVICE-ID-";
@@ -79,26 +70,22 @@ public class OperationManagementTests {
private static final int NO_OF_DEVICES = 5;
private static final String ADMIN_USER = "admin";
private static final String NON_ADMIN_USER = "test";
+ private static final String INVALID_DEVICE = "ThisIsInvalid";
private List deviceIds = new ArrayList<>();
private OperationManager operationMgtService;
+ private DeviceManagementProviderService deviceMgmtProvider;
private Activity commandActivity;
private long commandActivityBeforeUpdatedTimestamp;
@BeforeClass
public void init() throws Exception {
- DeviceConfigurationManager.getInstance().initConfig();
for (int i = 0; i < NO_OF_DEVICES; i++) {
deviceIds.add(new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE));
}
List devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
- DeviceManagementProviderService deviceMgtService = new DeviceManagementProviderServiceImpl();
- DeviceManagementServiceComponent.notifyStartupListeners();
- DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceMgtService);
- DeviceManagementDataHolder.getInstance().setRegistryService(getRegistryService());
- DeviceManagementDataHolder.getInstance().setDeviceAccessAuthorizationService(new DeviceAccessAuthorizationServiceImpl());
- DeviceManagementDataHolder.getInstance().setGroupManagementProviderService(new GroupManagementProviderServiceImpl());
- DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(null);
+ DeviceManagementProviderService deviceMgtService = DeviceManagementDataHolder.getInstance().
+ getDeviceManagementProvider();
deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
for (Device device : devices) {
@@ -110,39 +97,65 @@ public class OperationManagementTests {
throw new Exception("Incorrect device with ID - " + device.getDeviceIdentifier() + " returned!");
}
}
+ this.deviceMgmtProvider = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider();
NotificationStrategy notificationStrategy = new TestNotificationStrategy();
this.operationMgtService = new OperationManagerImpl(DEVICE_TYPE, notificationStrategy);
}
- 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();
- }
-
@Test
- public void addCommandOperation() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
- this.commandActivity = this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
+ public void addCommandOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ this.commandActivity = this.operationMgtService.addOperation(
+ getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
this.deviceIds);
validateOperationResponse(this.commandActivity, ActivityStatus.Status.PENDING);
}
+ @Test
+ public void addCommandOperationInvalidDeviceIds() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ startTenantFlowAsNonAdmin();
+ try {
+ ArrayList invalidDevices = new ArrayList<>();
+ for (int i = 0; i < 3; i++) {
+ invalidDevices.add(new DeviceIdentifier(INVALID_DEVICE + i, DEVICE_TYPE));
+ }
+ invalidDevices.addAll(this.deviceIds);
+ Activity activity = this.operationMgtService.addOperation(getOperation(new CommandOperation(),
+ Operation.Type.COMMAND, COMMAND_OPERATON_CODE), invalidDevices);
+ Assert.assertEquals(activity.getActivityStatus().size(), invalidDevices.size(),
+ "The operation response for add operation only have - " + activity.getActivityStatus().size());
+ for (int i = 0; i < activity.getActivityStatus().size(); i++) {
+ ActivityStatus status = activity.getActivityStatus().get(i);
+ if (i < 3) {
+ Assert.assertEquals(status.getStatus(), ActivityStatus.Status.INVALID);
+ } else {
+ Assert.assertEquals(status.getStatus(), ActivityStatus.Status.UNAUTHORIZED);
+ }
+ }
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
+
@Test(expectedExceptions = InvalidDeviceException.class)
- public void addEmptyDevicesCommandOperation() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
- this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
+ public void addEmptyDevicesCommandOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND,
+ COMMAND_OPERATON_CODE),
new ArrayList<>());
}
@Test(expectedExceptions = InvalidDeviceException.class)
- public void addNonInitializedDevicesCommandOperation() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
+ public void addNonInitializedDevicesCommandOperation() throws DeviceManagementException,
+ OperationManagementException,
+ InvalidDeviceException {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
List deviceIdentifiers = new ArrayList<>();
deviceIdentifiers.add(deviceIdentifier);
- this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
+ this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND,
+ COMMAND_OPERATON_CODE),
deviceIdentifiers);
}
@@ -150,7 +163,8 @@ public class OperationManagementTests {
public void addNonAdminUserDevicesCommandOperation() throws DeviceManagementException, OperationManagementException,
InvalidDeviceException {
startTenantFlowAsNonAdmin();
- Activity activity = this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
+ Activity activity = this.operationMgtService.addOperation(getOperation(new CommandOperation(),
+ Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
deviceIds);
PrivilegedCarbonContext.endTenantFlow();
validateOperationResponse(activity, ActivityStatus.Status.UNAUTHORIZED);
@@ -163,27 +177,33 @@ public class OperationManagementTests {
}
@Test(dependsOnMethods = "addCommandOperation")
- public void addPolicyOperation() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
- Activity activity = this.operationMgtService.addOperation(getOperation(new PolicyOperation(), Operation.Type.POLICY, POLICY_OPERATION_CODE),
+ public void addPolicyOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ Activity activity = this.operationMgtService.addOperation(getOperation(new PolicyOperation(),
+ Operation.Type.POLICY, POLICY_OPERATION_CODE),
this.deviceIds);
validateOperationResponse(activity, ActivityStatus.Status.PENDING);
}
@Test(dependsOnMethods = "addPolicyOperation")
- public void addConfigOperation() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
- Activity activity = this.operationMgtService.addOperation(getOperation(new ConfigOperation(), Operation.Type.CONFIG, CONFIG_OPERATION_CODE),
+ public void addConfigOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ Activity activity = this.operationMgtService.addOperation(getOperation(new ConfigOperation(),
+ Operation.Type.CONFIG, CONFIG_OPERATION_CODE),
this.deviceIds);
validateOperationResponse(activity, ActivityStatus.Status.PENDING);
}
@Test(dependsOnMethods = "addConfigOperation")
- public void addProfileOperation() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
- Activity activity = this.operationMgtService.addOperation(getOperation(new ProfileOperation(), Operation.Type.PROFILE, PROFILE_OPERATION_CODE),
+ public void addProfileOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ Activity activity = this.operationMgtService.addOperation(getOperation(new ProfileOperation(),
+ Operation.Type.PROFILE, PROFILE_OPERATION_CODE),
this.deviceIds);
validateOperationResponse(activity, ActivityStatus.Status.PENDING);
}
- private Operation getOperation(Operation operation, Operation.Type type, String code) {
+ static Operation getOperation(Operation operation, Operation.Type type, String code) {
String date = new SimpleDateFormat(DATE_FORMAT_NOW).format(new Date());
operation.setCreatedTimeStamp(date);
operation.setType(type);
@@ -192,8 +212,8 @@ public class OperationManagementTests {
}
private void validateOperationResponse(Activity activity, ActivityStatus.Status expectedStatus) {
- Assert.assertEquals(activity.getActivityStatus().size(), NO_OF_DEVICES, "The operation reponse for add operation only have - " +
- activity.getActivityStatus().size());
+ Assert.assertEquals(activity.getActivityStatus().size(), NO_OF_DEVICES, "The operation response for add " +
+ "operation only have - " + activity.getActivityStatus().size());
for (ActivityStatus status : activity.getActivityStatus()) {
Assert.assertEquals(status.getStatus(), expectedStatus);
}
@@ -208,7 +228,8 @@ public class OperationManagementTests {
}
@Test(dependsOnMethods = "addProfileOperation", expectedExceptions = OperationManagementException.class)
- public void getOperationsAsNonAdmin() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
+ public void getOperationsAsNonAdmin() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
try {
startTenantFlowAsNonAdmin();
for (DeviceIdentifier deviceIdentifier : deviceIds) {
@@ -220,15 +241,18 @@ public class OperationManagementTests {
}
@Test(dependsOnMethods = "getOperations")
- public void getPendingOperations() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
+ public void getPendingOperations() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
for (DeviceIdentifier deviceIdentifier : deviceIds) {
List operations = this.operationMgtService.getPendingOperations(deviceIdentifier);
- Assert.assertEquals(operations.size(), 4, "The pending operations should be 4, but found only " + operations.size());
+ Assert.assertEquals(operations.size(), 4, "The pending operations should be 4, but found only "
+ + operations.size());
}
}
@Test(dependsOnMethods = "getOperations", expectedExceptions = OperationManagementException.class)
- public void getPendingOperationsAsNonAdmin() throws DeviceManagementException, OperationManagementException, InvalidDeviceException {
+ public void getPendingOperationsAsNonAdmin() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
try {
startTenantFlowAsNonAdmin();
for (DeviceIdentifier deviceIdentifier : deviceIds) {
@@ -328,17 +352,30 @@ public class OperationManagementTests {
Assert.assertTrue(operation.getType().equals(Operation.Type.POLICY));
}
+ @Test(dependsOnMethods = "updateOperation", expectedExceptions = OperationManagementException.class)
+ public void getNextPendingOperationAsNonAdmin() throws OperationManagementException {
+ startTenantFlowAsNonAdmin();
+ try {
+ DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
+ this.operationMgtService.getNextPendingOperation(deviceIdentifier);
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
@Test(dependsOnMethods = "getNextPendingOperation")
public void getOperationByDeviceAndOperationId() throws OperationManagementException {
DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
- String operationId = this.commandActivity.getActivityId().
- replace(DeviceManagementConstants.OperationAttributes.ACTIVITY, "");
Operation operation = this.operationMgtService.getOperationByDeviceAndOperationId(deviceIdentifier,
- Integer.parseInt(operationId));
+ getOperationId(this.commandActivity.getActivityId()));
Assert.assertTrue(operation.getStatus().equals(Operation.Status.COMPLETED));
Assert.assertTrue(operation.getType().equals(Operation.Type.COMMAND));
}
+ private int getOperationId(String activityId) {
+ return Integer.parseInt(activityId.replace(DeviceManagementConstants.OperationAttributes.ACTIVITY, ""));
+ }
+
@Test(dependsOnMethods = "getNextPendingOperation", expectedExceptions = OperationManagementException.class)
public void getOperationByDeviceAndOperationIdNonAdmin() throws OperationManagementException {
startTenantFlowAsNonAdmin();
@@ -356,12 +393,14 @@ public class OperationManagementTests {
@Test(dependsOnMethods = "getOperationByDeviceAndOperationId")
public void getOperationsByDeviceAndStatus() throws OperationManagementException, DeviceManagementException {
DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
- List operation = this.operationMgtService.getOperationsByDeviceAndStatus(deviceIdentifier, Operation.Status.PENDING);
+ List operation = this.operationMgtService.getOperationsByDeviceAndStatus(deviceIdentifier,
+ Operation.Status.PENDING);
Assert.assertEquals(operation.size(), 3);
}
@Test(dependsOnMethods = "getOperationByDeviceAndOperationId", expectedExceptions = OperationManagementException.class)
- public void getOperationsByDeviceAndStatusByNonAdmin() throws OperationManagementException, DeviceManagementException {
+ public void getOperationsByDeviceAndStatusByNonAdmin() throws OperationManagementException,
+ DeviceManagementException {
startTenantFlowAsNonAdmin();
try {
DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
@@ -438,4 +477,180 @@ public class OperationManagementTests {
Assert.assertTrue(this.operationMgtService.getNotificationStrategy() != null);
}
+ @Test(dependsOnMethods = {"getOperationByActivityIdAndDevice", "getOperationByActivityIdAndDeviceAsNonAdmin"})
+ public void getOperationForInactiveDevice() throws DeviceManagementException, OperationManagementException {
+ boolean disEnrolled = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider().
+ disenrollDevice(deviceIds.get(0));
+ Assert.assertTrue(disEnrolled);
+ List operations = this.operationMgtService.getOperations(deviceIds.get(0));
+ Assert.assertTrue(operations == null);
+ }
+
+ @Test(dependsOnMethods = "getOperationForInactiveDevice", expectedExceptions = OperationManagementException.class)
+ public void getPaginatedOperationDeviceForInvalidDevice() throws DeviceManagementException,
+ OperationManagementException {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID, true);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ try {
+ PaginationRequest request = new PaginationRequest(1, 2);
+ request.setDeviceType(DEVICE_TYPE);
+ request.setOwner(ADMIN_USER);
+ PaginationResult result = this.operationMgtService.getOperations
+ (new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE), request);
+ Assert.assertEquals(result.getRecordsFiltered(), 4);
+ Assert.assertEquals(result.getData().size(), 2);
+ Assert.assertEquals(result.getRecordsTotal(), 4);
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
+ @Test(dependsOnMethods = "getOperationForInactiveDevice", expectedExceptions = OperationManagementException.class)
+ public void getPendingOperationDeviceForInvalidDevice() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getPendingOperations(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE));
+ }
+
+ @Test(dependsOnMethods = "getPendingOperationDeviceForInvalidDevice",
+ expectedExceptions = OperationManagementException.class)
+ public void getNextPendingOperationDeviceForInvalidDevice() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getNextPendingOperation(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE));
+ }
+
+ @Test(dependsOnMethods = "getNextPendingOperationDeviceForInvalidDevice",
+ expectedExceptions = OperationManagementException.class)
+ public void getUpdateOperationForInvalidDevice() throws DeviceManagementException, OperationManagementException {
+ this.operationMgtService.updateOperation(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE),
+ getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE));
+ }
+
+ @Test(dependsOnMethods = "getUpdateOperationForInvalidDevice",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByDeviceAndOperationIdInvalidDevice() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getOperationByDeviceAndOperationId(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE),
+ getOperationId(this.commandActivity.getActivityId()));
+ }
+
+ @Test(dependsOnMethods = "getOperationByDeviceAndOperationIdInvalidDevice",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationsByDeviceAndStatusInvalidDevice() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getOperationsByDeviceAndStatus(new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE),
+ Operation.Status.PENDING);
+ }
+
+ @Test(dependsOnMethods = "getOperationsByDeviceAndStatusInvalidDevice",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationsInvalidOperationId() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getOperation(123445);
+ }
+
+ @Test(dependsOnMethods = "getOperationsInvalidOperationId", expectedExceptions = IllegalArgumentException.class)
+ public void getOperationsByActivityIdInvalidActivityId() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getOperationByActivityId(DeviceManagementConstants.OperationAttributes.ACTIVITY + 0);
+ }
+
+ @Test(dependsOnMethods = "getOperationsByActivityIdInvalidActivityId",
+ expectedExceptions = IllegalArgumentException.class)
+ public void getOperationByActivityIdAndDeviceInvalidActivityId() throws DeviceManagementException,
+ OperationManagementException {
+ this.operationMgtService.getOperationByActivityIdAndDevice(
+ DeviceManagementConstants.OperationAttributes.ACTIVITY + 0,
+ new DeviceIdentifier(INVALID_DEVICE, DEVICE_TYPE));
+ }
+
+ @Test(dependsOnMethods = "getOperationByActivityIdAndDeviceInvalidActivityId")
+ public void getPendingOperationsInactiveEnrollment() throws DeviceManagementException,
+ OperationManagementException {
+ changeStatus(EnrolmentInfo.Status.INACTIVE);
+ List operations = this.operationMgtService.getPendingOperations(this.deviceIds.get(1));
+ Assert.assertTrue(operations != null);
+ Assert.assertEquals(operations.size(), 4);
+ changeStatus(EnrolmentInfo.Status.ACTIVE);
+ }
+
+ private void changeStatus(EnrolmentInfo.Status status) throws DeviceManagementException,
+ OperationManagementException {
+ Device device = this.deviceMgmtProvider.getDevice(this.deviceIds.get(1));
+ Assert.assertTrue(device != null);
+ Assert.assertEquals(device.getType(), DEVICE_TYPE);
+ Assert.assertTrue(device.getEnrolmentInfo() != null);
+ device.getEnrolmentInfo().setStatus(status);
+ boolean modified = this.deviceMgmtProvider.changeDeviceStatus(this.deviceIds.get(1), status);
+ Assert.assertTrue(modified);
+ device = this.deviceMgmtProvider.getDevice(this.deviceIds.get(1));
+ Assert.assertEquals(device.getEnrolmentInfo().getStatus(), status);
+ }
+
+ @Test(dependsOnMethods = "getPendingOperationsInactiveEnrollment")
+ public void getNextPendingOperationInactiveEnrollment() throws DeviceManagementException,
+ OperationManagementException {
+ changeStatus(EnrolmentInfo.Status.INACTIVE);
+ Operation operation = this.operationMgtService.getNextPendingOperation(this.deviceIds.get(1));
+ Assert.assertTrue(operation != null);
+ changeStatus(EnrolmentInfo.Status.ACTIVE);
+ }
+
+ @Test(dependsOnMethods = "getNextPendingOperationInactiveEnrollment")
+ public void getNextPendingOperationForAllOperations() throws DeviceManagementException,
+ OperationManagementException {
+ for (int i = 0; i < 4; i++) {
+ Operation operation = this.operationMgtService.getNextPendingOperation(this.deviceIds.get(1));
+ operation.setStatus(Operation.Status.COMPLETED);
+ this.operationMgtService.updateOperation(deviceIds.get(1), operation);
+ }
+ Assert.assertTrue(this.operationMgtService.getNextPendingOperation(this.deviceIds.get(1)) == null);
+ }
+
+ @Test(dependsOnMethods = "getNextPendingOperationForAllOperations")
+ public void getOperationByDeviceAndOperationIdForAllOperations() throws DeviceManagementException,
+ OperationManagementException {
+ for (int i = 1; i <= 4; i++) {
+ Operation operation = this.operationMgtService.getOperationByDeviceAndOperationId(this.deviceIds.get(1), i);
+ Assert.assertEquals(operation.getStatus(), Operation.Status.COMPLETED);
+ }
+ }
+
+ @Test(dependsOnMethods = "getOperationByDeviceAndOperationIdForAllOperations")
+ public void getOperationForAllOperations() throws DeviceManagementException,
+ OperationManagementException {
+ for (int i = 1; i <= 4; i++) {
+ Operation operation = this.operationMgtService.getOperation(i);
+ Assert.assertTrue(operation != null);
+ }
+ }
+
+ @Test(dependsOnMethods = "getOperationForAllOperations")
+ public void addCustomPolicyOperation() throws OperationManagementException, InvalidDeviceException {
+ this.addCustomOperation(Operation.Type.POLICY, DeviceManagementConstants.AuthorizationSkippedOperationCodes.
+ POLICY_OPERATION_CODE);
+ }
+
+ @Test(dependsOnMethods = "getOperationForAllOperations")
+ public void addCustomMonitorOperation() throws OperationManagementException, InvalidDeviceException {
+ this.addCustomOperation(Operation.Type.COMMAND, DeviceManagementConstants.AuthorizationSkippedOperationCodes.
+ MONITOR_OPERATION_CODE);
+ }
+
+ @Test(dependsOnMethods = "getOperationForAllOperations")
+ public void addCustomPolicyRevokeOperation() throws OperationManagementException, InvalidDeviceException {
+ this.addCustomOperation(Operation.Type.POLICY, DeviceManagementConstants.AuthorizationSkippedOperationCodes.
+ POLICY_REVOKE_OPERATION_CODE);
+ }
+
+ private void addCustomOperation(Operation.Type type, String operationCode) throws OperationManagementException, InvalidDeviceException {
+ Operation operation = new Operation();
+ operation.setCode(operationCode);
+ operation.setType(type);
+ Activity activity = this.operationMgtService.addOperation(operation, Collections.singletonList(this.deviceIds.get(2)));
+ Assert.assertEquals(activity.getActivityStatus().size(), 1);
+ for (ActivityStatus status : activity.getActivityStatus()) {
+ Assert.assertEquals(status.getStatus(), ActivityStatus.Status.PENDING);
+ }
+ }
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/ScheduledTaskOperationTests.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/ScheduledTaskOperationTests.java
new file mode 100644
index 0000000000..269563b3a8
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/ScheduledTaskOperationTests.java
@@ -0,0 +1,117 @@
+/*
+* 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.operation;
+
+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.DeviceManagementException;
+import org.wso2.carbon.device.mgt.common.InvalidDeviceException;
+import org.wso2.carbon.device.mgt.common.operation.mgt.Activity;
+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.core.TestDeviceManagementService;
+import org.wso2.carbon.device.mgt.core.TestTaskServiceImpl;
+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.operation.mgt.CommandOperation;
+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.task.DeviceTaskManagerService;
+import org.wso2.carbon.device.mgt.core.task.impl.DeviceTaskManagerServiceImpl;
+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.utils.multitenancy.MultitenantConstants;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.wso2.carbon.device.mgt.core.operation.OperationManagementTests.getOperation;
+
+/**
+ * This class tests the tasks based operations of {@link OperationManager}
+ */
+public class ScheduledTaskOperationTests extends BaseDeviceManagementTest {
+ private static final String DEVICE_TYPE = "OP_SCHEDULE_TEST_TYPE";
+ private static final String DEVICE_ID_PREFIX = "OP-SCHEDULED_TEST-DEVICE-ID-";
+ private static final String COMMAND_OPERATON_CODE = "COMMAND-TEST";
+ private static final int NO_OF_DEVICES = 5;
+ private static final String DS_TASK_COMPONENT_FIELD = "taskService";
+ private static final String CDM_CONFIG_LOCATION = "src" + File.separator + "test" + File.separator + "resources" +
+ File.separator + "config" + File.separator + "operation" + File.separator + "cdm-config.xml";
+
+ private List deviceIds = new ArrayList<>();
+ private OperationManager operationMgtService;
+
+ @BeforeClass
+ public void init() throws Exception {
+ for (int i = 0; i < NO_OF_DEVICES; i++) {
+ deviceIds.add(new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE));
+ }
+ List devices = TestDataHolder.generateDummyDeviceData(this.deviceIds);
+ DeviceManagementProviderService deviceMgtService = DeviceManagementDataHolder.getInstance().getDeviceManagementProvider();
+ initTaskService();
+ deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME, COMMAND_OPERATON_CODE));
+ for (Device device : devices) {
+ deviceMgtService.enrollDevice(device);
+ }
+ List returnedDevices = deviceMgtService.getAllDevices(DEVICE_TYPE);
+ for (Device device : returnedDevices) {
+ if (!device.getDeviceIdentifier().startsWith(DEVICE_ID_PREFIX)) {
+ throw new Exception("Incorrect device with ID - " + device.getDeviceIdentifier() + " returned!");
+ }
+ }
+ DeviceConfigurationManager.getInstance().initConfig(CDM_CONFIG_LOCATION);
+ TestNotificationStrategy notificationStrategy = new TestNotificationStrategy();
+ this.operationMgtService = new OperationManagerImpl(DEVICE_TYPE, notificationStrategy);
+ }
+
+
+ private void initTaskService() throws NoSuchFieldException, IllegalAccessException {
+ TaskService taskService = new TestTaskServiceImpl();
+ DeviceManagementDataHolder.getInstance().setTaskService(taskService);
+ DeviceTaskManagerService deviceTaskManager = new DeviceTaskManagerServiceImpl();
+ DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(deviceTaskManager);
+ Field taskServiceField = TasksDSComponent.class.getDeclaredField(DS_TASK_COMPONENT_FIELD);
+ taskServiceField.setAccessible(true);
+ taskServiceField.set(null, Mockito.mock(TaskServiceImpl.class, Mockito.RETURNS_MOCKS));
+
+ }
+
+ @Test
+ public void addCommandOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException, NoSuchFieldException {
+ Activity activity = this.operationMgtService.addOperation(getOperation(new CommandOperation(), Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
+ this.deviceIds);
+ Assert.assertEquals(activity.getActivityStatus(), null);
+ Assert.assertEquals(activity.getType(), Activity.Type.COMMAND);
+ }
+
+
+
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/TestNotificationStrategy.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/TestNotificationStrategy.java
index 28afa2da1f..c10fc0372f 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/TestNotificationStrategy.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/TestNotificationStrategy.java
@@ -22,7 +22,14 @@ import org.wso2.carbon.device.mgt.common.push.notification.NotificationStrategy;
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationConfig;
import org.wso2.carbon.device.mgt.common.push.notification.PushNotificationExecutionFailedException;
+import java.util.HashMap;
+
public class TestNotificationStrategy implements NotificationStrategy {
+ private PushNotificationConfig pushNotificationConfig;
+
+ public TestNotificationStrategy(){
+ this.pushNotificationConfig = new PushNotificationConfig("TEST", true, new HashMap<>());
+ }
@Override
public void init() {
@@ -46,6 +53,6 @@ public class TestNotificationStrategy implements NotificationStrategy {
@Override
public PushNotificationConfig getConfig() {
- return null;
+ return pushNotificationConfig;
}
}
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 0000000000..64a01788bf
--- /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 144a3a4e6b..1975a56828 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
@@ -24,11 +24,19 @@ 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;
import org.wso2.carbon.registry.core.config.RegistryContext;
@@ -40,13 +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 DeviceDetailsDAO deviceDetailsDAO = DeviceManagementDAOFactory.getDeviceDetailsDAO();
DeviceManagementProviderService deviceMgtService;
@@ -64,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 {
@@ -77,6 +88,17 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
return context.getEmbeddedRegistryService();
}
+ @Test
+ public void testGetAvailableDeviceTypes() {
+ try {
+ List deviceTypes = deviceMgtService.getDeviceTypes();
+ Assert.assertTrue(deviceTypes.size() > 0);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting the device types";
+ Assert.fail(msg, e);
+ }
+ }
+
@Test
public void testNullDeviceEnrollment() {
try {
@@ -87,17 +109,50 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
}
@Test
- public void testSuccessfullDeviceEnrollment() {
+ public void testSuccessfulDeviceEnrollment() {
Device device = TestDataHolder.generateDummyDeviceData(DEVICE_TYPE);
try {
boolean enrollmentStatus = deviceMgtService.enrollDevice(device);
Assert.assertTrue(enrollmentStatus);
} catch (DeviceManagementException e) {
- String msg = "Error Occured while enrolling device";
+ String msg = "Error occurred while enrolling device";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = "testSuccessfulDeviceEnrollment")
+ public void testIsEnrolled() {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(TestDataHolder.initialDeviceIdentifier);
+ deviceIdentifier.setType(DEVICE_TYPE);
+ boolean enrollmentStatus = deviceMgtService.isEnrolled(deviceIdentifier);
+ Assert.assertTrue(enrollmentStatus);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while checking enrollment status.";
Assert.fail(msg, e);
}
}
+ @Test
+ public void testIsEnrolledForNonExistingDevice() {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId("34535235235235235");
+ deviceIdentifier.setType(DEVICE_TYPE);
+ boolean enrollmentStatus = deviceMgtService.isEnrolled(deviceIdentifier);
+ Assert.assertFalse(enrollmentStatus);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while checking enrollment status.";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(expectedExceptions = DeviceManagementException.class)
+ public void testIsEnrolledForNullDevice() throws DeviceManagementException {
+ deviceMgtService.isEnrolled(null);
+ }
+
@Test
public void testNonExistentDeviceType() {
Device device = TestDataHolder.generateDummyDeviceData("abc");
@@ -105,13 +160,13 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
boolean enrollmentStatus = deviceMgtService.enrollDevice(device);
Assert.assertFalse(enrollmentStatus);
} catch (DeviceManagementException e) {
- String msg = "Error Occured while enrolling device";
+ String msg = "Error occurred while enrolling device";
Assert.fail(msg, e);
}
}
- @Test(dependsOnMethods = {"testSuccessfullDeviceEnrollment"})
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testReEnrollmentofSameDeviceUnderSameUser() {
Device device = TestDataHolder.generateDummyDeviceData(DEVICE_TYPE);
@@ -120,47 +175,46 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(enrollment);
} catch (DeviceManagementException e) {
- String msg = "Error Occured while enrolling device";
+ String msg = "Error occurred 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);
-//
-// 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);
- @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
+ 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 = {"testReEnrollmentofSameDeviceWithOtherUser"})
public void testDisenrollment() {
Device device = TestDataHolder.generateDummyDeviceData(DEVICE_TYPE);
-
try {
boolean disenrollmentStatus = deviceMgtService.disenrollDevice(new DeviceIdentifier
(device
@@ -170,9 +224,293 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(disenrollmentStatus);
} catch (DeviceManagementException e) {
- String msg = "Error Occured while enrolling device";
+ String msg = "Error occurred while enrolling device";
Assert.fail(msg, e);
}
}
-}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviceCount() {
+ try {
+ int count = deviceMgtService.getDeviceCount();
+ Assert.assertTrue(count > 0);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting the device count";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviceCountForUser() {
+ try {
+ int count = deviceMgtService.getDeviceCount(TestDataHolder.OWNER);
+ Assert.assertTrue(count > 0);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting the device count";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test
+ public void testGetDeviceCountForNonExistingUser() {
+ try {
+ int count = deviceMgtService.getDeviceCount("ABCD");
+ Assert.assertEquals(count, 0);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while getting the device count";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(expectedExceptions = DeviceManagementException.class)
+ public void testGetDeviceCountForNullUser() throws DeviceManagementException {
+ deviceMgtService.getDeviceCount(null);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testIsActive() {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(TestDataHolder.initialDeviceIdentifier);
+ deviceIdentifier.setType(DEVICE_TYPE);
+ Assert.assertTrue(deviceMgtService.isActive(deviceIdentifier));
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while checking the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test
+ public void testIsActiveForNonExistingDevice() {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId("34535235235235235");
+ deviceIdentifier.setType("TEST_TYPE");
+ Assert.assertFalse(deviceMgtService.isActive(deviceIdentifier));
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while checking the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testSetActive() {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId(TestDataHolder.initialDeviceIdentifier);
+ deviceIdentifier.setType(DEVICE_TYPE);
+ Assert.assertFalse(deviceMgtService.setActive(deviceIdentifier, true));
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test
+ public void testSetActiveForNonExistingDevice() {
+ try {
+ DeviceIdentifier deviceIdentifier = new DeviceIdentifier();
+ deviceIdentifier.setId("34535235235235235");
+ deviceIdentifier.setType("TEST_TYPE");
+ Assert.assertFalse(deviceMgtService.setActive(deviceIdentifier, true));
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status for non-existing device";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviceEnrolledTenants() {
+ try {
+ List tenants = deviceMgtService.getDeviceEnrolledTenants();
+ Assert.assertEquals(tenants.size(), 1);
+ } catch (DeviceManagementException e) {
+ String msg = "Error occurred while updating the device status";
+ Assert.fail(msg, e);
+ }
+ }
+
+ @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 56fe67888c..e1c3be07cc 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
@@ -34,6 +34,7 @@ import org.wso2.carbon.device.mgt.common.group.mgt.GroupNotExistException;
import org.wso2.carbon.device.mgt.common.group.mgt.RoleDoesNotExistException;
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.internal.DeviceManagementDataHolder;
@@ -269,7 +270,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
new file mode 100644
index 0000000000..b0a452b2a2
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/DeviceTaskManagerServiceTest.java
@@ -0,0 +1,217 @@
+/*
+ * 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.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.core.TestTaskServiceImpl;
+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.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.internal.TasksDSComponent;
+import org.wso2.carbon.ntask.core.service.TaskService;
+import org.wso2.carbon.ntask.core.service.impl.TaskServiceImpl;
+
+import java.lang.reflect.Field;
+
+public class DeviceTaskManagerServiceTest {
+ private static final Log log = LogFactory.getLog(DeviceTaskManagerService.class);
+ private static final String TASK_TYPE = "DEVICE_MONITORING";
+ private DeviceTaskManagerService deviceTaskManagerService;
+ 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();
+ DeviceManagementDataHolder.getInstance().setTaskService(this.taskService);
+ this.deviceTaskManagerService = new DeviceTaskManagerServiceImpl();
+ DeviceManagementDataHolder.getInstance().setDeviceTaskManagerService(this.deviceTaskManagerService);
+ Field taskServiceField = TasksDSComponent.class.getDeclaredField("taskService");
+ taskServiceField.setAccessible(true);
+ taskServiceField.set(null, Mockito.mock(TaskServiceImpl.class, Mockito.RETURNS_MOCKS));
+ }
+
+ @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,
+ 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)));
+ log.debug("Task Successfully started");
+ } catch (DeviceMgtTaskException | TaskException e) {
+ Assert.fail("Exception occurred when starting the task", e);
+ }
+ }
+
+ @Test(groups = "Device Task Manager Service Test Group", dependsOnMethods = "testStartTask")
+ public void testUpdateTask() {
+ try {
+ log.debug("Attempting to update task from testStartTask");
+ 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) {
+ Assert.fail("Exception occurred when updating the task", e);
+ }
+ }
+
+ @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,
+ TestDataHolder.generateMonitoringTaskConfig(true, 30000, 1));
+ TaskManager taskManager = this.taskService.getTaskManager(TASK_TYPE);
+ Assert.assertEquals(taskManager.getAllTasks().size(), 0);
+ } catch (DeviceMgtTaskException | TaskException e) {
+ Assert.fail("Exception occurred when stopping the task", e);
+ }
+ }
+
+ @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));
+ }
+
+ @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));
+ }
+
+ @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));
+ }
+
+ @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));
+ }
+
+ @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 0000000000..ff020451cf
--- /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
new file mode 100644
index 0000000000..6eda125c3f
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/task/TestTaskManagerImpl.java
@@ -0,0 +1,99 @@
+/*
+ * 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;
+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 (task.getName().contains(taskName)) {
+ 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 (task.getName().contains(taskName)) {
+ 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/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml
new file mode 100644
index 0000000000..0a9289da70
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/carbon-home/repository/conf/etc/tasks-config.xml
@@ -0,0 +1,51 @@
+
+
+
+ STANDALONE
+
+
+ 2
+
+
+
+ org.wso2.carbon.ntask.core.impl.RoundRobinTaskLocationResolver
+
+
+
+
+
+
+ https://localhost:9448
+
+
+ https://localhost:9443
+
+
+ admin
+
+
+ admin
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/operation/cdm-config.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/operation/cdm-config.xml
new file mode 100644
index 0000000000..d4e1acb139
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/operation/cdm-config.xml
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+ jdbc/DM_DS
+
+
+
+
+ 2
+ 2000
+ 2000
+ true
+
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.FCMBasedPushNotificationProvider
+
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.MQTTBasedPushNotificationProvider
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.HTTPBasedPushNotificationProvider
+ org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.XMPPBasedPushNotificationProvider
+
+
+
+ false
+
+
+ https://localhost:9443
+ admin
+ admin
+
+
+ org.wso2.carbon.policy.mgt
+ true
+ 60000
+ 5
+ 8
+ 20
+
+
+
+ Simple
+
+
+
+ 20
+ 20
+ 20
+ 20
+ 20
+ 20
+
+
+
+ true
+
+
+
+ false
+ 600
+
+ 10000
+
+
+ false
+ 86400
+
+
+ false
+ false
+
+ BYOD,COPE
+
+
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 7ab82eaf07..7830b7fbe3 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,8 +42,14 @@
+
+
+
+
+
+
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 637c188e69..4a60638986 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
@@ -96,6 +96,12 @@
org.wso2.carbon.governance
org.wso2.carbon.governance.registry.extensions
test
+
+
+ jaxen
+ jaxen
+
+
org.wso2.carbon.registry
@@ -106,6 +112,14 @@
org.slf4j
jcl-over-slf4j
+
+ org.slf4j
+ slf4j-api
+
+
+ org.slf4j
+ log4j-over-slf4j
+
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 b0c4f8312e..1f1ee0d868 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
@@ -130,6 +130,17 @@ public class DeviceTypeManager implements DeviceManager {
//Check whether device dao definition exist.
String tableName = deviceTypeConfiguration.getDeviceDetails().getTableId();
if (tableName != null && !tableName.isEmpty()) {
+ DataSource dataSource = deviceTypeConfiguration.getDataSource();
+ if (dataSource == null) {
+ throw new DeviceTypeDeployerPayloadException("Could not find the datasource related with the "
+ + "table id " + tableName + " for the device type " + deviceType);
+ }
+ TableConfig tableConfig = dataSource.getTableConfig();
+
+ if (tableConfig == null) {
+ throw new DeviceTypeDeployerPayloadException("Could not find the table config with the "
+ + "table id " + tableName + " for the device type " + deviceType);
+ }
List
tables = deviceTypeConfiguration.getDataSource().getTableConfig().getTable();
Table deviceDefinitionTable = null;
for (Table table : tables) {
@@ -189,6 +200,9 @@ public class DeviceTypeManager implements DeviceManager {
@Override
public boolean saveConfiguration(PlatformConfiguration tenantConfiguration)
throws DeviceManagementException {
+ if (tenantConfiguration == null) {
+ throw new DeviceManagementException("Platform configuration is null. Cannot save the configuration");
+ }
try {
if (log.isDebugEnabled()) {
log.debug("Persisting " + deviceType + " configurations in Registry");
@@ -246,6 +260,9 @@ public class DeviceTypeManager implements DeviceManager {
@Override
public boolean enrollDevice(Device device) throws DeviceManagementException {
+ if (device == null) {
+ throw new DeviceManagementException("Device is null. Cannot enroll the device.");
+ }
if (propertiesExist) {
boolean status = false;
boolean isEnrolled = this.isEnrolled(
@@ -313,6 +330,9 @@ public class DeviceTypeManager implements DeviceManager {
@Override
public boolean isEnrolled(DeviceIdentifier deviceId) throws DeviceManagementException {
+ if (deviceId == null) {
+ throw new DeviceManagementException("Cannot check the enrollment status of a null device");
+ }
if (propertiesExist) {
boolean isEnrolled = false;
try {
@@ -347,6 +367,9 @@ public class DeviceTypeManager implements DeviceManager {
@Override
public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
+ if (deviceId == null) {
+ throw new DeviceManagementException("Cannot get the device. DeviceIdentifier is null");
+ }
if (propertiesExist) {
Device device;
try {
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 d044e7ebeb..14b0d7445c 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 3d39345327..0000000000
--- 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/DeviceDAODefinition.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceDAODefinition.java
index d8f77a64a6..ab11f39de0 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceDAODefinition.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceDAODefinition.java
@@ -41,17 +41,26 @@ public class DeviceDAODefinition {
public DeviceDAODefinition(Table table) {
+ if (table == null) {
+ throw new DeviceTypeDeployerPayloadException("Table is null. Cannot create DeviceDAODefinition");
+ }
deviceTableName = table.getName();
primarykey = table.getPrimaryKey();
- List attributes = table.getAttributes().getAttribute();
+
if (deviceTableName == null || deviceTableName.isEmpty()) {
throw new DeviceTypeDeployerPayloadException("Missing deviceTableName");
}
if (primarykey == null || primarykey.isEmpty()) {
- throw new DeviceTypeDeployerPayloadException("Missing primaryKey ");
+ throw new DeviceTypeDeployerPayloadException("Missing primaryKey for the table " + deviceTableName);
}
+ if (table.getAttributes() == null) {
+ throw new DeviceTypeDeployerPayloadException("Table " + deviceTableName + " attributes are not specified. "
+ + "Cannot created DeviceDAODefinition");
+ }
+
+ List attributes = table.getAttributes().getAttribute();
if (attributes == null || attributes.size() == 0) {
throw new DeviceTypeDeployerPayloadException("Missing Attributes ");
}
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/DeviceTypePluginDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceTypePluginDAOImpl.java
index e705661daa..755cb0397b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceTypePluginDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceTypePluginDAOImpl.java
@@ -44,7 +44,6 @@ public class DeviceTypePluginDAOImpl implements PluginDAO {
private String selectDBQueryForGetDevice;
private String createDBqueryForAddDevice;
private String updateDBQueryForUpdateDevice;
- private String deleteDBQueryToRemoveDevicd;
private String selectDBQueryToGetAllDevice;
public DeviceTypePluginDAOImpl(DeviceDAODefinition deviceDAODefinition,
@@ -158,33 +157,6 @@ public class DeviceTypePluginDAOImpl implements PluginDAO {
return status;
}
- public boolean deleteDevice(String deviceId) throws DeviceTypeMgtPluginException {
- boolean status = false;
- Connection conn = null;
- PreparedStatement stmt = null;
- try {
- conn = deviceTypeDAOHandler.getConnection();
- stmt = conn.prepareStatement(deleteDBQueryToRemoveDevicd);
- stmt.setString(1, deviceId);
- int rows = stmt.executeUpdate();
- if (rows > 0) {
- status = true;
- if (log.isDebugEnabled()) {
- log.debug("device " + deviceId + " data has deleted from the " +
- deviceDAODefinition.getDeviceTableName() + " table.");
- }
- }
- } catch (SQLException e) {
- String msg =
- "Error occurred while deleting " + deviceDAODefinition.getDeviceTableName() + " device " + deviceId;
- log.error(msg, e);
- throw new DeviceTypeMgtPluginException(msg, e);
- } finally {
- DeviceTypeUtils.cleanupResources(stmt, null);
- }
- return status;
- }
-
public List getAllDevices() throws DeviceTypeMgtPluginException {
Connection conn;
PreparedStatement stmt = null;
@@ -264,10 +236,6 @@ public class DeviceTypePluginDAOImpl implements PluginDAO {
updateDBQueryForUpdateDevice = "UPDATE " + deviceDAODefinition.getDeviceTableName() + " SET "
+ getDeviceTableColumnNamesForUpdateQuery() + " WHERE " + deviceDAODefinition.getPrimaryKey() + " = ?";
- deleteDBQueryToRemoveDevicd =
- "DELETE FROM " + deviceDAODefinition.getDeviceTableName() + " WHERE " + deviceDAODefinition
- .getPrimaryKey() + " = ?";
-
selectDBQueryToGetAllDevice =
"SELECT " + getDeviceTableColumnNames() + "," + deviceDAODefinition.getPrimaryKey() + " FROM "
+ deviceDAODefinition.getDeviceTableName();
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/PluginDAO.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PluginDAO.java
index 2ffd37f8f4..47606fe6a6 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PluginDAO.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/PluginDAO.java
@@ -30,7 +30,5 @@ public interface PluginDAO {
boolean updateDevice(Device device) throws DeviceTypeMgtPluginException;
- boolean deleteDevice(String deviceId) throws DeviceTypeMgtPluginException;
-
List getAllDevices() throws DeviceTypeMgtPluginException;
}
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 227c352a82..ceedeb7454 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
@@ -158,36 +158,6 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO {
}
}
- public boolean deleteDevice(String deviceId) throws DeviceTypeMgtPluginException {
- boolean status = false;
- Connection conn = null;
- PreparedStatement stmt = null;
- try {
- conn = deviceTypeDAOHandler.getConnection();
- stmt = conn.prepareStatement("DELETE FROM DM_DEVICE_PROPERTIES WHERE DEVICE_TYPE_NAME = ? " +
- "AND DEVICE_IDENTIFICATION = ? AND TENANT_ID = ?");
- stmt.setString(1, deviceType);
- stmt.setString(2, deviceId);
- stmt.setInt(3, PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId(true));
- int rows = stmt.executeUpdate();
- if (rows > 0) {
- status = true;
- if (log.isDebugEnabled()) {
- log.debug("device " + deviceId + " data has deleted from the " +
- deviceType + " table.");
- }
- }
- } catch (SQLException e) {
- String msg =
- "Error occurred while deleting " + deviceType + " device " + deviceId;
- log.error(msg, e);
- throw new DeviceTypeMgtPluginException(msg, e);
- } finally {
- DeviceTypeUtils.cleanupResources(stmt, null);
- }
- return status;
- }
-
public List getAllDevices() throws DeviceTypeMgtPluginException {
Connection conn;
PreparedStatement stmt = null;
@@ -220,7 +190,7 @@ public class PropertyBasedPluginDAOImpl implements PluginDAO {
log.debug(
"All device details have fetched from " + deviceType + " table.");
}
- return Arrays.asList((Device[])deviceMap.values().toArray());
+ return new ArrayList<>(deviceMap.values());
} catch (SQLException e) {
String msg =
"Error occurred while fetching all " + deviceType + " device data'";
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/DeviceTypeDeployerPayloadException.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeDeployerPayloadException.java
index b25547950e..87f862277c 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeDeployerPayloadException.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/main/java/org/wso2/carbon/device/mgt/extensions/device/type/template/exception/DeviceTypeDeployerPayloadException.java
@@ -26,20 +26,9 @@ public class DeviceTypeDeployerPayloadException extends RuntimeException {
super(msg, nestedEx);
}
- public DeviceTypeDeployerPayloadException(String message, Throwable cause) {
- super(message, cause);
- }
-
public DeviceTypeDeployerPayloadException(String msg) {
super(msg);
}
- public DeviceTypeDeployerPayloadException() {
- super();
- }
-
- public DeviceTypeDeployerPayloadException(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/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 b1548eb65f..1919e88f42 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
@@ -26,20 +26,4 @@ public class DeviceTypeMgtPluginException extends Exception{
super(msg, nestedEx);
}
- public DeviceTypeMgtPluginException(String message, Throwable cause) {
- super(message, cause);
- }
-
- public DeviceTypeMgtPluginException(String msg) {
- super(msg);
- }
-
- public DeviceTypeMgtPluginException() {
- super();
- }
-
- public DeviceTypeMgtPluginException(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/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 30878f924c..7d7da9891a 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/BaseExtensionsTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/BaseExtensionsTest.java
index 8d69cac776..3ec819a10b 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/BaseExtensionsTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/BaseExtensionsTest.java
@@ -51,7 +51,7 @@ public class BaseExtensionsTest {
@BeforeSuite
public void init() throws RegistryException, IOException {
ClassLoader classLoader = getClass().getClassLoader();
- URL resourceUrl = classLoader.getResource("license.rxt");
+ URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "license.rxt");
String rxt = null;
File carbonHome;
if (resourceUrl != null) {
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
new file mode 100644
index 0000000000..d2d9060d12
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
@@ -0,0 +1,124 @@
+/*
+ * 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.device.type.template;
+
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DataSource;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceTypeConfiguration;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.config.exception.DeviceTypeConfigurationException;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeDeployerPayloadException;
+import org.wso2.carbon.device.mgt.extensions.utils.Utils;
+import org.xml.sax.SAXException;
+
+import javax.xml.bind.JAXBException;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
+
+/**
+ * This class tests the negative scenarios in {@link DeviceTypeManager} initialization;
+ */
+public class DeviceTypeManagerNegativeTest {
+ private DeviceTypeConfiguration defectiveDeviceTypeConfiguration1;
+ private DeviceTypeConfiguration defectiveDeviceTypeConfiguration2;
+ private DeviceTypeConfiguration androidDeviceTypeConfiguration;
+ private DeviceTypeConfigIdentifier deviceTypeConfigIdentifier;
+ private final String DEFECTIVE_DEVICE_TYPE = "defectiveDeviceType";
+ private final String TABLE_NAME = "DEFECTIVE_DEVICE";
+
+ @BeforeTest
+ public void setup()
+ throws SAXException, JAXBException, ParserConfigurationException, DeviceTypeConfigurationException,
+ IOException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "defective-devicetype.xml");
+ File configurationFile = null;
+ if (resourceUrl != null) {
+ configurationFile = new File(resourceUrl.getFile());
+ }
+ if (configurationFile != null) {
+ defectiveDeviceTypeConfiguration1 = Utils.getDeviceTypeConfiguration(configurationFile.getAbsoluteFile());
+ }
+ deviceTypeConfigIdentifier = new DeviceTypeConfigIdentifier(DEFECTIVE_DEVICE_TYPE,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+
+ resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "defective-devicetype2.xml");
+ if (resourceUrl != null) {
+ configurationFile = new File(resourceUrl.getFile());
+ }
+ if (configurationFile != null) {
+ defectiveDeviceTypeConfiguration2 = Utils.getDeviceTypeConfiguration(configurationFile.getAbsoluteFile());
+ }
+
+ resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "android.xml");
+ if (resourceUrl != null) {
+ configurationFile = new File(resourceUrl.getFile());
+ }
+ if (configurationFile != null) {
+ androidDeviceTypeConfiguration = Utils.getDeviceTypeConfiguration(configurationFile.getAbsoluteFile());
+ }
+ }
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without defining the "
+ + "datasource but by specifying the table id", expectedExceptions = { DeviceTypeDeployerPayloadException
+ .class}, expectedExceptionsMessageRegExp = "Could not find the datasource related with the table id "
+ + TABLE_NAME + " for the device type " + DEFECTIVE_DEVICE_TYPE)
+ public void testWithoutDataSource() {
+ new DeviceTypeManager(deviceTypeConfigIdentifier, defectiveDeviceTypeConfiguration1);
+
+ }
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without defining the "
+ + "table config",expectedExceptions = { DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Could not find the table config with the table id " + TABLE_NAME
+ + " for the device type " + DEFECTIVE_DEVICE_TYPE,
+ dependsOnMethods = {"testWithoutDataSource"})
+ public void testWithoutTableConfig() {
+ DataSource dataSource = new DataSource();
+ defectiveDeviceTypeConfiguration1.setDataSource(dataSource);
+ new DeviceTypeManager(deviceTypeConfigIdentifier, defectiveDeviceTypeConfiguration1);
+ }
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without defining the "
+ + "correct table as per the device details",
+ expectedExceptions = { DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Could not find definition for table: " + TABLE_NAME)
+ public void testWithoutTable() {
+ new DeviceTypeManager(deviceTypeConfigIdentifier, defectiveDeviceTypeConfiguration2);
+ }
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without having the "
+ + "actual datasource", expectedExceptions = {DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Error while looking up the data source.*")
+ public void testWithoutProperDataSource() {
+ new DeviceTypeManager(deviceTypeConfigIdentifier, androidDeviceTypeConfiguration);
+ }
+
+ @Test(description = "This test case tests the behaviour of the DeviceTypeManager creation without having the "
+ + "actual datasource", expectedExceptions = {DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Error while looking up the data source.*")
+ public void testWithSetupParameters() {
+ System.setProperty("setup", "true");
+ new DeviceTypeManager(deviceTypeConfigIdentifier, androidDeviceTypeConfiguration);
+
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerServiceTest.java
index 2e1b1a52ac..f90d33bd34 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerServiceTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerServiceTest.java
@@ -124,7 +124,7 @@ public class DeviceTypeManagerServiceTest {
operationMonitoringConfigs.set(rasberrypiDeviceTypeManagerService, new OperationMonitoringTaskConfig());
initialOperationConfig.set(rasberrypiDeviceTypeManagerService, new InitialOperationConfig());
- URL resourceUrl = classLoader.getResource("android.xml");
+ URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "android.xml");
File androidConfiguration = null;
if (resourceUrl != null) {
@@ -132,7 +132,7 @@ public class DeviceTypeManagerServiceTest {
}
androidDeviceConfiguration = Utils.getDeviceTypeConfiguration(androidConfiguration);
- resourceUrl = classLoader.getResource("raspberrypi.xml");
+ resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "raspberrypi.xml");
File raspberrypiConfiguration = null;
if (resourceUrl != null) {
raspberrypiConfiguration = new File(resourceUrl.getFile());
@@ -304,13 +304,13 @@ public class DeviceTypeManagerServiceTest {
throws RegistryException, IOException, SAXException, ParserConfigurationException,
DeviceTypeConfigurationException, JAXBException {
ClassLoader classLoader = getClass().getClassLoader();
- URL resourceUrl = classLoader.getResource("arduino.xml");
- File raspberrypiConfiguration = null;
+ URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "arduino.xml");
+ File arduinoConfiguration = null;
if (resourceUrl != null) {
- raspberrypiConfiguration = new File(resourceUrl.getFile());
+ arduinoConfiguration = new File(resourceUrl.getFile());
}
- arduinoDeviceTypeConfiguration = Utils.getDeviceTypeConfiguration(raspberrypiConfiguration);
- arduinoDeviceTypeManagerService = new DeviceTypeManagerService(new
- DeviceTypeConfigIdentifier("arduino", "carbon.super"), arduinoDeviceTypeConfiguration);
+ arduinoDeviceTypeConfiguration = Utils.getDeviceTypeConfiguration(arduinoConfiguration);
+ arduinoDeviceTypeManagerService = new DeviceTypeManagerService(
+ new DeviceTypeConfigIdentifier("arduino", "carbon.super"), arduinoDeviceTypeConfiguration);
}
}
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 137640f5d8..27ebd3f827 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
@@ -26,12 +26,16 @@ 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.configuration.mgt.PlatformConfiguration;
+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.PluginDAO;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.dao.PropertyBasedPluginDAOImpl;
import org.wso2.carbon.device.mgt.extensions.utils.Utils;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.xml.sax.SAXException;
@@ -47,46 +51,63 @@ import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
/**
- * This class tests the {@link DeviceTypeManager}
+ * This class tests the {@link DeviceTypeManager}.
*/
public class DeviceTypeManagerTest {
private DeviceTypeManager androidDeviceTypeManager;
+ private DeviceTypeManager customDeviceTypeManager;
private DeviceIdentifier nonExistingDeviceIdentifier;
private Device sampleDevice1;
private Device sampleDevice2;
+ private Device customDevice;
private String androidDeviceType;
+ private String customDeviceType = "customDeviceType";
+ private Field datasourceField;
+ private Field currentConnection;
+ private Field deviceTypePluginDAOField;
+ private Field deviceTypeDAOHandlerField;
+ private String[] customDeviceTypeProperties = {"custom_property", "custom_property2"};
+ private final String SQL_FOLDER = "sql-files" + File.separator;
@BeforeTest(description = "Mocking the classes for testing")
public void setup() throws NoSuchFieldException, IllegalAccessException, IOException, SQLException, SAXException,
ParserConfigurationException, DeviceTypeConfigurationException, JAXBException {
ClassLoader classLoader = getClass().getClassLoader();
- URL resourceUrl = classLoader.getResource("android_h2.sql");
+ URL resourceUrl = classLoader.getResource(SQL_FOLDER + "android_h2.sql");
androidDeviceType = "android";
File androidDatabaseScript = null;
javax.sql.DataSource dataSource = null;
- File carbonHome = new File("src/test/resources/carbon-home");
+ File androidConfiguration = null;
if (resourceUrl != null) {
androidDatabaseScript = new File(resourceUrl.getFile());
}
- if (carbonHome.exists()) {
- System.setProperty("carbon.home", carbonHome.getAbsolutePath());
- }
- resourceUrl = classLoader.getResource("android.xml");
- File androidConfiguration = null;
+ resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "android.xml");
+
if (resourceUrl != null) {
androidConfiguration = new File(resourceUrl.getFile());
}
+ datasourceField = DeviceTypeDAOHandler.class.getDeclaredField("dataSource");
+ datasourceField.setAccessible(true);
+ currentConnection = DeviceTypeDAOHandler.class.getDeclaredField("currentConnection");
+ currentConnection.setAccessible(true);
+ deviceTypePluginDAOField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypePluginDAO");
+ deviceTypePluginDAOField.setAccessible(true);
+ deviceTypeDAOHandlerField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypeDAOHandler");
+ deviceTypeDAOHandlerField.setAccessible(true);
+
DeviceTypeConfiguration androidDeviceConfiguration = Utils.getDeviceTypeConfiguration(androidConfiguration);
androidDeviceTypeManager = Mockito.mock(DeviceTypeManager.class, Mockito.CALLS_REAL_METHODS);
+ customDeviceTypeManager = Mockito.mock(DeviceTypeManager.class, Mockito.CALLS_REAL_METHODS);
if (androidDatabaseScript != null) {
- dataSource = Utils.createDataTables("deviceType", androidDatabaseScript.getAbsolutePath());
+ dataSource = Utils.createDataTables("customDeviceType", androidDatabaseScript.getAbsolutePath());
}
- DeviceTypePluginDAOManager deviceTypePluginDAOManager = createMockDeviceTypePluginDAOManager(dataSource,
+ DeviceTypePluginDAOManager deviceTypePluginDAOManager = createandroidDeviceTypePluginDAOManager(dataSource,
androidDeviceConfiguration);
Field deviceTypePluginDAOManagerField = DeviceTypeManager.class.getDeclaredField("deviceTypePluginDAOManager");
deviceTypePluginDAOManagerField.setAccessible(true);
@@ -96,9 +117,16 @@ public class DeviceTypeManagerTest {
propertiesExist.setAccessible(true);
Field deviceType = DeviceTypeManager.class.getDeclaredField("deviceType");
deviceType.setAccessible(true);
+
deviceType.set(androidDeviceTypeManager, androidDeviceType);
propertiesExist.set(androidDeviceTypeManager, true);
- createDevice();
+ createAndroidDevice();
+
+ DeviceTypePluginDAOManager propertyBasedPluginDAOManager = createPluginBasedDeviceTypeManager();
+ deviceTypePluginDAOManagerField.set(customDeviceTypeManager, propertyBasedPluginDAOManager);
+ deviceType.set(customDeviceTypeManager, customDeviceType);
+ propertiesExist.set(customDeviceTypeManager, true);
+ createCustomDevice();
}
@Test(description = "This test case tests IsEnrolled method of the DeviceTypeManager",
@@ -106,10 +134,17 @@ public class DeviceTypeManagerTest {
public void testIsEnrolled() throws DeviceManagementException {
DeviceIdentifier deviceIdentifier = new DeviceIdentifier(sampleDevice2.getDeviceIdentifier(),
sampleDevice2.getType());
- Assert.assertTrue(!androidDeviceTypeManager.isEnrolled(nonExistingDeviceIdentifier),
- "Device with " + "NON-Existing ID is not enrolled, but this shows as enrolled");
+ DeviceIdentifier nonExistingCustomDeviceIdentifier = new DeviceIdentifier(sampleDevice2.getDeviceIdentifier(),
+ customDevice.getType());
+
+ Assert.assertFalse(androidDeviceTypeManager.isEnrolled(nonExistingDeviceIdentifier),
+ "Device with NON-Existing ID is not enrolled, but this shows as enrolled");
Assert.assertTrue(androidDeviceTypeManager.isEnrolled(deviceIdentifier),
"Enrolled device is shown as un-enrolled");
+ Assert.assertFalse(customDeviceTypeManager.isEnrolled(nonExistingCustomDeviceIdentifier),
+ "Custom device type manager returns an non-existing device as enrolled");
+ Assert.assertTrue(customDeviceTypeManager.isEnrolled(new DeviceIdentifier(customDeviceType, customDeviceType))
+ , "Enrolled device is shown as un-enrolled in custom device type manager");
}
@Test(description = "This test case tests the getDevcie method of the DeviceTypeManager", dependsOnMethods =
@@ -120,20 +155,37 @@ public class DeviceTypeManagerTest {
Assert.assertNull(androidDeviceTypeManager.getDevice(nonExistingDeviceIdentifier),
"Non existing sampleDevice was retrieved");
Assert.assertNotNull(androidDeviceTypeManager.getDevice(existingDeviceIdntifier),
- "Existing sampleDevice was retrieved");
+ "Existing sampleDevice was not retrieved");
+ Device customDevice1 = customDeviceTypeManager
+ .getDevice(new DeviceIdentifier(customDeviceType, customDeviceType));
+ Assert.assertEquals(customDevice1.getProperties().size(), 2,
+ "GetDevice call" + " failed in custom deviceTypeManager");
}
@Test(description = "This test case tests the enrollment of the device")
public void testEnrollDevice() throws DeviceManagementException {
- Assert.assertTrue(androidDeviceTypeManager.enrollDevice(sampleDevice1));
- Assert.assertTrue(!androidDeviceTypeManager.enrollDevice(sampleDevice2));
+ Assert.assertTrue(androidDeviceTypeManager.enrollDevice(sampleDevice1), "New android device enrollment failed");
+ Assert.assertFalse(androidDeviceTypeManager.enrollDevice(sampleDevice2),
+ "Modification to existing android " + "device enrollment failed");
+ 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");
+ properties.add(property);
+ customDevice.setProperties(properties);
+ Assert.assertFalse(customDeviceTypeManager.enrollDevice(customDevice),
+ "Custom device type re-enrollment " + "failed.");
+
}
@Test(description = "This test case tests the get all devices method of the DeviceTypeManager", dependsOnMethods
= {"testEnrollDevice"})
public void testGetAllDevices() throws DeviceManagementException {
Assert.assertEquals(androidDeviceTypeManager.getAllDevices().size(), 1,
- "All the added devices are not fetched " + "from the database");
+ "All the added devices are not fetched from the database");
+ Assert.assertEquals(customDeviceTypeManager.getAllDevices().size(), 1,
+ "All the added devices are not fetched from the database");
}
@Test(description = "This test case tests the addition of platform configuration and retrieval of the same")
@@ -147,6 +199,7 @@ public class DeviceTypeManagerTest {
"Platform Configuration saved and retrieved correctly in " + "DeviceType Manager");
Assert.assertEquals(actualPlatformConfiguration.getType(), androidDeviceType,
"Platform Configuration saved and " + "retrieved correctly in DeviceType Manager");
+ Assert.assertNull(customDeviceTypeManager.getConfiguration());
}
@Test (description = "This test case tests the getDefaultConfiguration method")
@@ -169,9 +222,9 @@ public class DeviceTypeManagerTest {
}
/**
- * To create a sample sampleDevice to add to DAO Layer.
+ * To create sample android devices to add to DAO Layer.
*/
- private void createDevice() {
+ private void createAndroidDevice() {
nonExistingDeviceIdentifier = new DeviceIdentifier("NON-EXISTING", androidDeviceType);
List list = new ArrayList<>();
@@ -190,6 +243,21 @@ public class DeviceTypeManagerTest {
sampleDevice2 = new Device("testdevice1", androidDeviceType, "test", "testdevice", null, null, list);
}
+ /**
+ * To create a sample custom device.
+ */
+ private void createCustomDevice () {
+ List list = new ArrayList<>();
+ for(String customProperty : customDeviceTypeProperties) {
+ Device.Property property = new Device.Property();
+ property.setName(customProperty);
+ property.setValue(customProperty);
+ list.add(property);
+ }
+ customDevice = new Device(customDeviceType, customDeviceType, customDeviceType, customDeviceType, null,
+ null, list);
+ }
+
/*
* To create a mock sampleDevice type plugin dao manager.
* @param dataSource DataSource for the DAO layer
@@ -198,13 +266,8 @@ public class DeviceTypeManagerTest {
* @throws NoSuchFieldException No Such Field Exception
* @throws IllegalAccessException Illegal Access Exception
*/
- private DeviceTypePluginDAOManager createMockDeviceTypePluginDAOManager(javax.sql.DataSource dataSource,
+ private DeviceTypePluginDAOManager createandroidDeviceTypePluginDAOManager(javax.sql.DataSource dataSource,
DeviceTypeConfiguration androidDeviceConfiguration) throws NoSuchFieldException, IllegalAccessException {
- Field datasourceField = DeviceTypeDAOHandler.class.getDeclaredField("dataSource");
- datasourceField.setAccessible(true);
- Field currentConnection = DeviceTypeDAOHandler.class.getDeclaredField("currentConnection");
- currentConnection.setAccessible(true);
-
DeviceTypeDAOHandler deviceTypeDAOHandler = Mockito
.mock(DeviceTypeDAOHandler.class, Mockito.CALLS_REAL_METHODS);
datasourceField.set(deviceTypeDAOHandler, dataSource);
@@ -213,13 +276,52 @@ public class DeviceTypeManagerTest {
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);
+
+ return deviceTypePluginDAOManager;
+ }
+
+ /**
+ * To create a plugin based device type manager.
+ *
+ * @return Plugin based device type manager.
+ * @throws IOException IO Exception.
+ * @throws SQLException SQL Exception
+ * @throws NoSuchFieldException No Such File Exception.
+ * @throws IllegalAccessException Illegal Access Exception.
+ */
+ private DeviceTypePluginDAOManager createPluginBasedDeviceTypeManager()
+ throws IOException, SQLException, NoSuchFieldException, IllegalAccessException {
+ ClassLoader classLoader = getClass().getClassLoader();
+ URL resourceUrl = classLoader.getResource(SQL_FOLDER + "h2.sql");
+ File cdmDataScript = null;
+ javax.sql.DataSource dataSource = null;
+ if (resourceUrl != null) {
+ cdmDataScript = new File(resourceUrl.getFile());
+ }
+ if (cdmDataScript != null) {
+ dataSource = Utils.createDataTables(customDeviceType, cdmDataScript.getAbsolutePath());
+ }
+
+ DeviceDetails deviceDetails = new DeviceDetails();
+ List propertyList = new ArrayList<>();
+ propertyList.addAll(Arrays.asList(customDeviceTypeProperties));
+ Properties properties = new Properties();
+ properties.addProperties(propertyList);
+ deviceDetails.setProperties(properties);
+
+ DeviceTypeDAOHandler deviceTypeDAOHandler = Mockito
+ .mock(DeviceTypeDAOHandler.class, Mockito.CALLS_REAL_METHODS);
+ datasourceField.set(deviceTypeDAOHandler, dataSource);
+ currentConnection.set(deviceTypeDAOHandler, new ThreadLocal());
+ PluginDAO deviceTypePluginDAO = new PropertyBasedPluginDAOImpl(deviceDetails, deviceTypeDAOHandler,
+ customDeviceType);
DeviceTypePluginDAOManager deviceTypePluginDAOManager = Mockito
.mock(DeviceTypePluginDAOManager.class, Mockito.CALLS_REAL_METHODS);
- Field deviceTypePluginDAOField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypePluginDAO");
- deviceTypePluginDAOField.setAccessible(true);
- Field deviceTypeDAOHandlerField = DeviceTypePluginDAOManager.class.getDeclaredField("deviceTypeDAOHandler");
- deviceTypeDAOHandlerField.setAccessible(true);
deviceTypePluginDAOField.set(deviceTypePluginDAOManager, deviceTypePluginDAO);
deviceTypeDAOHandlerField.set(deviceTypePluginDAOManager, deviceTypeDAOHandler);
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 461b9d9f72..7c4ff9ec2c 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
@@ -21,14 +21,10 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template;
import org.testng.Assert;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
-import org.wso2.carbon.CarbonConstants;
-import org.wso2.carbon.base.MultitenantConstants;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
-import org.wso2.carbon.context.RegistryType;
-import org.wso2.carbon.context.internal.OSGiDataHolder;
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.configuration.mgt.ConfigurationEntry;
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.push.notification.PushNotificationConfig;
@@ -36,19 +32,10 @@ import org.wso2.carbon.device.mgt.common.spi.DeviceManagementService;
import org.wso2.carbon.device.mgt.common.type.mgt.DeviceTypeMetaDefinition;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceTypeConfiguration;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Feature;
-import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Operation;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.PushNotificationProvider;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.exception.DeviceTypeConfigurationException;
-import org.wso2.carbon.device.mgt.extensions.internal.DeviceTypeExtensionDataHolder;
-import org.wso2.carbon.device.mgt.extensions.license.mgt.registry.RegistryBasedLicenseManager;
import org.wso2.carbon.device.mgt.extensions.utils.Utils;
-import org.wso2.carbon.governance.api.util.GovernanceArtifactConfiguration;
-import org.wso2.carbon.governance.api.util.GovernanceUtils;
-import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
-import org.wso2.carbon.registry.core.service.RegistryService;
-import org.wso2.carbon.registry.core.session.UserRegistry;
-import org.wso2.carbon.utils.FileUtil;
import org.xml.sax.SAXException;
import javax.xml.bind.JAXBException;
@@ -59,8 +46,6 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.List;
-import static org.wso2.carbon.governance.api.util.GovernanceUtils.getGovernanceArtifactConfiguration;
-
/**
* This test case contains the tests for {@link HTTPDeviceTypeManagerService} and {@link DeviceTypeGeneratorServiceImpl}
*/
@@ -69,7 +54,7 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
private HTTPDeviceTypeManagerService httpDeviceTypeManagerService;
private DeviceTypeGeneratorServiceImpl deviceTypeGeneratorService;
private String androidSenseDeviceType = "androidsense";
- private String sampleDeviceType = "sample";
+ private DeviceManagementService generatedDeviceManagementService;
@BeforeTest
public void setup() throws RegistryException, IOException, SAXException, ParserConfigurationException,
@@ -100,12 +85,63 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
@Test(description = "This test case tests the populate device management service method")
public void testPopulateDeviceManagementService() {
- DeviceManagementService deviceManagementService = deviceTypeGeneratorService
+ String sampleDeviceType = "sample";
+ generatedDeviceManagementService = deviceTypeGeneratorService
.populateDeviceManagementService(sampleDeviceType, deviceTypeMetaDefinition);
- Assert.assertEquals(deviceManagementService.getType(), sampleDeviceType,
+ Assert.assertEquals(generatedDeviceManagementService.getType(), sampleDeviceType,
"DeviceTypeGeneration for the " + "sample device type failed");
}
+ @Test(description = "This test case tests the get configuration of the populated device management service though"
+ + " DeviceTypeGeneratorService", dependsOnMethods = {"testPopulateDeviceManagementService"})
+ public void testGetConfiguration() throws DeviceManagementException, ClassNotFoundException, JAXBException {
+ PlatformConfiguration platformConfiguration = generatedDeviceManagementService.getDeviceManager()
+ .getConfiguration();
+ Assert.assertNotNull(platformConfiguration,
+ "Default platform configuration is not added to sample device " + "type from the file system");
+
+ List configurationEntries = platformConfiguration.getConfiguration();
+ Assert.assertNotNull(configurationEntries,
+ "Platform Configuration entries are not parsed and saved " + "correctly for device type sample");
+ Assert.assertEquals(configurationEntries.size(), 1,
+ "Platform configuration is not saved correctly for " + "device type sample");
+
+ ConfigurationEntry configurationEntry = configurationEntries.get(0);
+
+ Assert.assertEquals(configurationEntry.getName(), "test",
+ "Platform Configuration for device type " + "sample is not saved correctly");
+
+ String contentType = configurationEntry.getContentType();
+ Assert.assertEquals(contentType, "String",
+ "Content type added in default platform configuration is different from the retrieved value");
+
+ }
+
+
+ @Test(description = "This test case tests the negative scenarios when saving the platform configurations",
+ expectedExceptions = {DeviceManagementException.class})
+ public void testSaveConfiguration() throws DeviceManagementException {
+ httpDeviceTypeManagerService.getDeviceManager().saveConfiguration(null);
+ }
+
+ @Test(description = "This test case tests the negative scenarios when getting a device",
+ expectedExceptions = {DeviceManagementException.class})
+ public void testGetDevice() throws DeviceManagementException {
+ httpDeviceTypeManagerService.getDeviceManager().getDevice(null);
+ }
+
+ @Test(description = "This test case tests the negative scenario when checking whether a device has enrolled",
+ expectedExceptions = {DeviceManagementException.class})
+ public void testIsEnrolled() throws DeviceManagementException {
+ httpDeviceTypeManagerService.getDeviceManager().isEnrolled(null);
+ }
+
+ @Test(description = "This test case tests the negative scenario when enrolling a device",
+ expectedExceptions = {DeviceManagementException.class})
+ public void testEnroll() throws DeviceManagementException {
+ httpDeviceTypeManagerService.getDeviceManager().enrollDevice(null);
+ }
+
/**
* To create a sample device type meta defintion.
* @throws SAXException SAX Exception.
@@ -118,7 +154,7 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
throws SAXException, JAXBException, ParserConfigurationException, DeviceTypeConfigurationException,
IOException {
ClassLoader classLoader = getClass().getClassLoader();
- URL resourceUrl = classLoader.getResource("android_sense.xml");
+ URL resourceUrl = classLoader.getResource(Utils.DEVICE_TYPE_FOLDER + "android_sense.xml");
File androidSenseConfiguration = null;
if (resourceUrl != null) {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceDAODefinitionNegativeTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceDAODefinitionNegativeTest.java
new file mode 100644
index 0000000000..a96fb0d733
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/dao/DeviceDAODefinitionNegativeTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.device.type.template.dao;
+
+import org.testng.annotations.Test;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.config.Table;
+import org.wso2.carbon.device.mgt.extensions.device.type.template.exception.DeviceTypeDeployerPayloadException;
+
+/**
+ * This class tests the negative scenarios related with {@link DeviceDAODefinition}
+ */
+public class DeviceDAODefinitionNegativeTest {
+ private final String DEVICE_TABLE_NAME = "DEVICE_TABLE";
+
+ @Test(description = "This test case tests the behavior of the DeviceDAODefinition when the table is null",
+ expectedExceptions = { DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Table is null. Cannot create DeviceDAODefinition")
+ public void testWhenTableIsNull() {
+ new DeviceDAODefinition(null);
+ }
+
+ @Test(description = "This test case tests the behavior of the DeviceDAODefinition when the table name is null",
+ expectedExceptions = { DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Missing deviceTableName")
+ public void testWhenTableNameIsNull() {
+ new DeviceDAODefinition(new Table());
+ }
+
+ @Test(description = "This test case tests the behavior of the DeviceDAODefinition when the primary key is null",
+ expectedExceptions = { DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Missing primaryKey for the table " + DEVICE_TABLE_NAME)
+ public void testWhenPrimaryKeyIsEmpty() {
+ Table deviceTable = new Table();
+ deviceTable.setName(DEVICE_TABLE_NAME);
+ deviceTable.setPrimaryKey("");
+ new DeviceDAODefinition(deviceTable);
+ }
+
+ @Test(description = "This test case tests the behavior of the DeviceDAODefinition when the attributes is null",
+ expectedExceptions = { DeviceTypeDeployerPayloadException.class},
+ expectedExceptionsMessageRegExp = "Table " + DEVICE_TABLE_NAME + " attributes are not specified. "
+ + "Cannot created DeviceDAODefinition")
+ public void testWhenAttributesIsNull() {
+ Table deviceTable = new Table();
+ deviceTable.setName(DEVICE_TABLE_NAME);
+ deviceTable.setPrimaryKey("primaryKey");
+ new DeviceDAODefinition(deviceTable);
+ }
+}
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 0e6c37cd1b..d35b8eba93 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
@@ -21,7 +21,6 @@ package org.wso2.carbon.device.mgt.extensions.utils;
import org.h2.jdbcx.JdbcDataSource;
import org.w3c.dom.Document;
-import org.wso2.carbon.device.mgt.common.configuration.mgt.PlatformConfiguration;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceDetails;
import org.wso2.carbon.device.mgt.extensions.device.type.template.config.DeviceTypeConfiguration;
@@ -56,16 +55,18 @@ import java.util.List;
* This class handles the test utility tasks.
*/
public class Utils {
+ public static final String DEVICE_TYPE_FOLDER = "device-types" + File.separator;
/**
* To get the device type configuration based on the configuration file
+ *
* @param configurationFile Relevant configuration file of a device type
* @return the DeviceTypeConfiguration object of the relevant Device Type
* @throws DeviceTypeConfigurationException DeviceType Configuration Exception
- * @throws IOException IO Exception
- * @throws SAXException SAX Exception
- * @throws ParserConfigurationException Parser Configuration Exception
- * @throws JAXBException JAXB Exception
+ * @throws IOException IO Exception
+ * @throws SAXException SAX Exception
+ * @throws ParserConfigurationException Parser Configuration Exception
+ * @throws JAXBException JAXB Exception
*/
public static DeviceTypeConfiguration getDeviceTypeConfiguration(File configurationFile)
throws DeviceTypeConfigurationException, IOException, SAXException, ParserConfigurationException,
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 0000000000..01651d3b2c
--- /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,84 @@
+/*
+ * 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.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.util.DeviceSchemaInitializer;
+import org.wso2.carbon.device.mgt.extensions.license.mgt.file.FileSystemBasedLicenseManager;
+
+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("test","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("test", null);
+ }
+}
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/sample-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/sample-default-platform-configuration.xml
new file mode 100644
index 0000000000..5c529cdfa9
--- /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/sample-default-platform-configuration.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+ sample
+
+ test
+ String
+ test
+
+
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 0000000000..7bf018734d
--- /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/android.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml
similarity index 99%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/android.xml
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml
index 2cc394bde1..176469c329 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/android.xml
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android.xml
@@ -378,4 +378,4 @@
admin
-
\ No newline at end of file
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/android_sense.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android_sense.xml
similarity index 100%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/android_sense.xml
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/android_sense.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/arduino.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/arduino.xml
similarity index 100%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/arduino.xml
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/arduino.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/defective-devicetype.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/defective-devicetype.xml
new file mode 100644
index 0000000000..965b0cebe2
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/defective-devicetype.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+ Control Bulb
+ Control Bulb on Arduino Uno
+
+
+ state
+
+
+
+
+
+
+ true
+
+
+
+ en_US
+ 1.0.0
+ This is license text
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/defective-devicetype2.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/defective-devicetype2.xml
new file mode 100644
index 0000000000..0f1baff1c3
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/defective-devicetype2.xml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+ 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/license.rxt b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/license.rxt
similarity index 100%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/license.rxt
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/license.rxt
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/raspberrypi.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/raspberrypi.xml
similarity index 100%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/raspberrypi.xml
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/raspberrypi.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sample.xml b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/sample.xml
similarity index 100%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sample.xml
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/device-types/sample.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/android_h2.sql b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sql-files/android_h2.sql
similarity index 100%
rename from components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/android_h2.sql
rename to components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sql-files/android_h2.sql
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sql-files/h2.sql b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sql-files/h2.sql
new file mode 100644
index 0000000000..686d0a6b3b
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/resources/sql-files/h2.sql
@@ -0,0 +1,531 @@
+CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE (
+ ID INT AUTO_INCREMENT NOT NULL,
+ NAME VARCHAR(300) NULL DEFAULT NULL,
+ DEVICE_TYPE_META VARCHAR(20000) NULL DEFAULT NULL,
+ LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL,
+ PROVIDER_TENANT_ID INTEGER DEFAULT 0,
+ SHARED_WITH_ALL_TENANTS BOOLEAN NOT NULL DEFAULT FALSE,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_GROUP (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ GROUP_NAME VARCHAR(100) DEFAULT NULL,
+ DESCRIPTION TEXT DEFAULT NULL,
+ OWNER VARCHAR(45) DEFAULT NULL,
+ TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_ROLE_GROUP_MAP (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ GROUP_ID INTEGER DEFAULT NULL,
+ ROLE VARCHAR(45) DEFAULT NULL,
+ TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_DM_ROLE_GROUP_MAP_DM_GROUP2 FOREIGN KEY (GROUP_ID)
+ REFERENCES DM_GROUP (ID) ON DELETE CASCADE ON UPDATE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE (
+ ID INTEGER auto_increment NOT NULL,
+ DESCRIPTION TEXT DEFAULT NULL,
+ NAME VARCHAR(100) DEFAULT NULL,
+ DEVICE_TYPE_ID INT(11) DEFAULT NULL,
+ DEVICE_IDENTIFICATION VARCHAR(300) DEFAULT NULL,
+ LAST_UPDATED_TIMESTAMP TIMESTAMP NOT NULL,
+ TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_DM_DEVICE_DM_DEVICE_TYPE2 FOREIGN KEY (DEVICE_TYPE_ID)
+ REFERENCES DM_DEVICE_TYPE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT uk_DM_DEVICE UNIQUE (NAME, DEVICE_TYPE_ID, DEVICE_IDENTIFICATION, TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_PROPERTIES (
+ DEVICE_TYPE_NAME VARCHAR(300) NOT NULL,
+ DEVICE_IDENTIFICATION VARCHAR(300) NOT NULL,
+ PROPERTY_NAME VARCHAR(100) DEFAULT 0,
+ PROPERTY_VALUE VARCHAR(100) DEFAULT NULL,
+ TENANT_ID VARCHAR(100),
+ PRIMARY KEY (DEVICE_TYPE_NAME, DEVICE_IDENTIFICATION, PROPERTY_NAME, TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_MAP (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ DEVICE_ID INTEGER DEFAULT NULL,
+ GROUP_ID INTEGER DEFAULT NULL,
+ TENANT_ID INTEGER DEFAULT 0,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_DM_DEVICE_GROUP_MAP_DM_DEVICE2 FOREIGN KEY (DEVICE_ID)
+ REFERENCES DM_DEVICE (ID) ON DELETE CASCADE ON UPDATE CASCADE,
+ CONSTRAINT fk_DM_DEVICE_GROUP_MAP_DM_GROUP2 FOREIGN KEY (GROUP_ID)
+ REFERENCES DM_GROUP (ID) ON DELETE CASCADE ON UPDATE CASCADE
+);
+
+CREATE TABLE IF NOT EXISTS DM_OPERATION (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ TYPE VARCHAR(50) NOT NULL,
+ CREATED_TIMESTAMP TIMESTAMP NOT NULL,
+ RECEIVED_TIMESTAMP TIMESTAMP NULL,
+ OPERATION_CODE VARCHAR(1000) NOT NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_CONFIG_OPERATION (
+ OPERATION_ID INTEGER NOT NULL,
+ OPERATION_CONFIG BLOB DEFAULT NULL,
+ ENABLED BOOLEAN NOT NULL DEFAULT FALSE,
+ PRIMARY KEY (OPERATION_ID),
+ CONSTRAINT fk_dm_operation_config FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_COMMAND_OPERATION (
+ OPERATION_ID INTEGER NOT NULL,
+ ENABLED BOOLEAN NOT NULL DEFAULT FALSE,
+ PRIMARY KEY (OPERATION_ID),
+ CONSTRAINT fk_dm_operation_command FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY_OPERATION (
+ OPERATION_ID INTEGER NOT NULL,
+ ENABLED INTEGER NOT NULL DEFAULT 0,
+ OPERATION_DETAILS BLOB DEFAULT NULL,
+ PRIMARY KEY (OPERATION_ID),
+ CONSTRAINT fk_dm_operation_policy FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_PROFILE_OPERATION (
+ OPERATION_ID INTEGER NOT NULL,
+ ENABLED INTEGER NOT NULL DEFAULT 0,
+ OPERATION_DETAILS BLOB DEFAULT NULL,
+ PRIMARY KEY (OPERATION_ID),
+ CONSTRAINT fk_dm_operation_profile FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_ENROLMENT (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ DEVICE_ID INTEGER NOT NULL,
+ OWNER VARCHAR(50) NOT NULL,
+ OWNERSHIP VARCHAR(45) DEFAULT NULL,
+ STATUS VARCHAR(50) NULL,
+ DATE_OF_ENROLMENT TIMESTAMP DEFAULT NULL,
+ DATE_OF_LAST_UPDATE TIMESTAMP DEFAULT NULL,
+ TENANT_ID INT NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_dm_device_enrolment FOREIGN KEY (DEVICE_ID) REFERENCES
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT uk_dm_device_enrolment UNIQUE (DEVICE_ID, OWNER, OWNERSHIP, TENANT_ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_ENROLMENT_OP_MAPPING (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ ENROLMENT_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NOT NULL,
+ STATUS VARCHAR(50) NULL,
+ PUSH_NOTIFICATION_STATUS VARCHAR(50) NULL,
+ CREATED_TIMESTAMP INT NOT NULL,
+ UPDATED_TIMESTAMP INT NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_dm_device_operation_mapping_device FOREIGN KEY (ENROLMENT_ID) REFERENCES
+ DM_ENROLMENT (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT fk_dm_device_operation_mapping_operation FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_OPERATION_RESPONSE (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ ENROLMENT_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NOT NULL,
+ EN_OP_MAP_ID INTEGER NOT NULL,
+ OPERATION_RESPONSE LONGBLOB DEFAULT NULL,
+ RECEIVED_TIMESTAMP TIMESTAMP NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_dm_device_operation_response_enrollment FOREIGN KEY (ENROLMENT_ID) REFERENCES
+ DM_ENROLMENT (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT fk_dm_device_operation_response_operation FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT fk_dm_en_op_map_response FOREIGN KEY (EN_OP_MAP_ID) REFERENCES
+ DM_ENROLMENT_OP_MAPPING (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+-- POLICY RELATED TABLES --
+
+CREATE TABLE IF NOT EXISTS DM_PROFILE (
+ ID INT NOT NULL AUTO_INCREMENT ,
+ PROFILE_NAME VARCHAR(45) NOT NULL ,
+ TENANT_ID INT NOT NULL ,
+ DEVICE_TYPE VARCHAR(300) NOT NULL ,
+ CREATED_TIME DATETIME NOT NULL ,
+ UPDATED_TIME DATETIME NOT NULL ,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY (
+ ID INT(11) NOT NULL AUTO_INCREMENT ,
+ NAME VARCHAR(45) DEFAULT NULL ,
+ DESCRIPTION VARCHAR(1000) NULL,
+ TENANT_ID INT(11) NOT NULL ,
+ PROFILE_ID INT(11) NOT NULL ,
+ OWNERSHIP_TYPE VARCHAR(45) NULL,
+ COMPLIANCE VARCHAR(100) NULL,
+ PRIORITY INT NOT NULL,
+ ACTIVE INT(2) NOT NULL,
+ UPDATED INT(1) NULL,
+ PRIMARY KEY (ID) ,
+ CONSTRAINT FK_DM_PROFILE_DM_POLICY
+ FOREIGN KEY (PROFILE_ID )
+ REFERENCES DM_PROFILE (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY (
+ ID INT(11) NOT NULL AUTO_INCREMENT ,
+ DEVICE_ID INT(11) NOT NULL ,
+ ENROLMENT_ID INT(11) NOT NULL,
+ DEVICE BLOB NOT NULL,
+ POLICY_ID INT(11) NOT NULL ,
+ PRIMARY KEY (ID) ,
+ CONSTRAINT FK_POLICY_DEVICE_POLICY
+ FOREIGN KEY (POLICY_ID )
+ REFERENCES DM_POLICY (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT FK_DEVICE_DEVICE_POLICY
+ FOREIGN KEY (DEVICE_ID )
+ REFERENCES DM_DEVICE (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_TYPE_POLICY (
+ ID INT(11) NOT NULL ,
+ DEVICE_TYPE VARCHAR(300) NOT NULL ,
+ POLICY_ID INT(11) NOT NULL ,
+ PRIMARY KEY (ID) ,
+ CONSTRAINT FK_DEVICE_TYPE_POLICY
+ FOREIGN KEY (POLICY_ID )
+ REFERENCES DM_POLICY (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_PROFILE_FEATURES (
+ ID INT(11) NOT NULL AUTO_INCREMENT,
+ PROFILE_ID INT(11) NOT NULL,
+ FEATURE_CODE VARCHAR(100) NOT NULL,
+ DEVICE_TYPE VARCHAR(300) NOT NULL,
+ TENANT_ID INT(11) NOT NULL ,
+ CONTENT BLOB NULL DEFAULT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT FK_DM_PROFILE_DM_POLICY_FEATURES
+ FOREIGN KEY (PROFILE_ID)
+ REFERENCES DM_PROFILE (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_ROLE_POLICY (
+ ID INT(11) NOT NULL AUTO_INCREMENT ,
+ ROLE_NAME VARCHAR(45) NOT NULL ,
+ POLICY_ID INT(11) NOT NULL ,
+ PRIMARY KEY (ID) ,
+ CONSTRAINT FK_ROLE_POLICY_POLICY
+ FOREIGN KEY (POLICY_ID )
+ REFERENCES DM_POLICY (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_USER_POLICY (
+ ID INT NOT NULL AUTO_INCREMENT ,
+ POLICY_ID INT NOT NULL ,
+ USERNAME VARCHAR(45) NOT NULL ,
+ PRIMARY KEY (ID) ,
+ CONSTRAINT DM_POLICY_USER_POLICY
+ FOREIGN KEY (POLICY_ID )
+ REFERENCES DM_POLICY (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_POLICY_APPLIED (
+ ID INT NOT NULL AUTO_INCREMENT ,
+ DEVICE_ID INT NOT NULL ,
+ ENROLMENT_ID INT(11) NOT NULL,
+ POLICY_ID INT NOT NULL ,
+ POLICY_CONTENT BLOB NULL ,
+ TENANT_ID INT NOT NULL,
+ APPLIED TINYINT(1) NULL ,
+ CREATED_TIME TIMESTAMP NULL ,
+ UPDATED_TIME TIMESTAMP NULL ,
+ APPLIED_TIME TIMESTAMP NULL ,
+ PRIMARY KEY (ID) ,
+ CONSTRAINT FK_DM_POLICY_DEVCIE_APPLIED
+ FOREIGN KEY (DEVICE_ID )
+ REFERENCES DM_DEVICE (ID )
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_CRITERIA (
+ ID INT NOT NULL AUTO_INCREMENT,
+ TENANT_ID INT NOT NULL,
+ NAME VARCHAR(50) NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY_CRITERIA (
+ ID INT NOT NULL AUTO_INCREMENT,
+ CRITERIA_ID INT NOT NULL,
+ POLICY_ID INT NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT FK_CRITERIA_POLICY_CRITERIA
+ FOREIGN KEY (CRITERIA_ID)
+ REFERENCES DM_CRITERIA (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION,
+ CONSTRAINT FK_POLICY_POLICY_CRITERIA
+ FOREIGN KEY (POLICY_ID)
+ REFERENCES DM_POLICY (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY_CRITERIA_PROPERTIES (
+ ID INT NOT NULL AUTO_INCREMENT,
+ POLICY_CRITERION_ID INT NOT NULL,
+ PROP_KEY VARCHAR(45) NULL,
+ PROP_VALUE VARCHAR(100) NULL,
+ CONTENT BLOB NULL COMMENT 'This is used to ',
+ PRIMARY KEY (ID),
+ CONSTRAINT FK_POLICY_CRITERIA_PROPERTIES
+ FOREIGN KEY (POLICY_CRITERION_ID)
+ REFERENCES DM_POLICY_CRITERIA (ID)
+ ON DELETE CASCADE
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY_COMPLIANCE_STATUS (
+ ID INT NOT NULL AUTO_INCREMENT,
+ DEVICE_ID INT NOT NULL,
+ ENROLMENT_ID INT(11) NOT NULL,
+ POLICY_ID INT NOT NULL,
+ TENANT_ID INT NOT NULL,
+ STATUS INT NULL,
+ LAST_SUCCESS_TIME TIMESTAMP NULL,
+ LAST_REQUESTED_TIME TIMESTAMP NULL,
+ LAST_FAILED_TIME TIMESTAMP NULL,
+ ATTEMPTS INT NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY_CHANGE_MGT (
+ ID INT NOT NULL AUTO_INCREMENT,
+ POLICY_ID INT NOT NULL,
+ DEVICE_TYPE VARCHAR(300) NOT NULL ,
+ TENANT_ID INT(11) NOT NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_POLICY_COMPLIANCE_FEATURES (
+ ID INT NOT NULL AUTO_INCREMENT,
+ COMPLIANCE_STATUS_ID INT NOT NULL,
+ TENANT_ID INT NOT NULL,
+ FEATURE_CODE VARCHAR(100) NOT NULL,
+ STATUS INT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT FK_COMPLIANCE_FEATURES_STATUS
+ FOREIGN KEY (COMPLIANCE_STATUS_ID)
+ REFERENCES DM_POLICY_COMPLIANCE_STATUS (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_APPLICATION (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ NAME VARCHAR(150) NOT NULL,
+ APP_IDENTIFIER VARCHAR(150) NOT NULL,
+ PLATFORM VARCHAR(50) DEFAULT NULL,
+ CATEGORY VARCHAR(50) NULL,
+ VERSION VARCHAR(50) NULL,
+ TYPE VARCHAR(50) NULL,
+ LOCATION_URL VARCHAR(100) DEFAULT NULL,
+ IMAGE_URL VARCHAR(100) DEFAULT NULL,
+ APP_PROPERTIES BLOB NULL,
+ MEMORY_USAGE INTEGER(10) NULL,
+ IS_ACTIVE BOOLEAN NOT NULL DEFAULT FALSE,
+ TENANT_ID INTEGER NOT NULL,
+ PRIMARY KEY (ID)
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_APPLICATION_MAPPING (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ DEVICE_ID INTEGER NOT NULL,
+ APPLICATION_ID INTEGER NOT NULL,
+ TENANT_ID INTEGER NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT fk_dm_device FOREIGN KEY (DEVICE_ID) REFERENCES
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT fk_dm_application FOREIGN KEY (APPLICATION_ID) REFERENCES
+ DM_APPLICATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+
+-- POLICY RELATED TABLES FINISHED --
+
+-- NOTIFICATION TABLE --
+CREATE TABLE IF NOT EXISTS DM_NOTIFICATION (
+ NOTIFICATION_ID INTEGER AUTO_INCREMENT NOT NULL,
+ DEVICE_ID INTEGER NOT NULL,
+ OPERATION_ID INTEGER NOT NULL,
+ TENANT_ID INTEGER NOT NULL,
+ STATUS VARCHAR(10) NULL,
+ DESCRIPTION VARCHAR(1000) NULL,
+ PRIMARY KEY (NOTIFICATION_ID),
+ CONSTRAINT fk_dm_device_notification FOREIGN KEY (DEVICE_ID) REFERENCES
+ DM_DEVICE (ID) ON DELETE NO ACTION ON UPDATE NO ACTION,
+ CONSTRAINT fk_dm_operation_notification FOREIGN KEY (OPERATION_ID) REFERENCES
+ DM_OPERATION (ID) ON DELETE NO ACTION ON UPDATE NO ACTION
+);
+-- NOTIFICATION TABLE END --
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_INFO (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ DEVICE_ID INT NULL,
+ KEY_FIELD VARCHAR(45) NULL,
+ VALUE_FIELD VARCHAR(100) NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT DM_DEVICE_INFO_DEVICE
+ FOREIGN KEY (DEVICE_ID)
+ REFERENCES DM_DEVICE (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_LOCATION (
+ ID INTEGER AUTO_INCREMENT NOT NULL,
+ DEVICE_ID INT NULL,
+ LATITUDE DOUBLE NULL,
+ LONGITUDE DOUBLE NULL,
+ STREET1 VARCHAR(255) NULL,
+ STREET2 VARCHAR(45) NULL,
+ CITY VARCHAR(45) NULL,
+ ZIP VARCHAR(10) NULL,
+ STATE VARCHAR(45) NULL,
+ COUNTRY VARCHAR(45) NULL,
+ UPDATE_TIMESTAMP BIGINT(15) NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT DM_DEVICE_LOCATION_DEVICE
+ FOREIGN KEY (DEVICE_ID)
+ REFERENCES DM_DEVICE (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+CREATE TABLE IF NOT EXISTS DM_DEVICE_DETAIL (
+ ID INT NOT NULL AUTO_INCREMENT,
+ DEVICE_ID INT NOT NULL,
+ DEVICE_MODEL VARCHAR(45) NULL,
+ VENDOR VARCHAR(45) NULL,
+ OS_VERSION VARCHAR(45) NULL,
+ OS_BUILD_DATE VARCHAR(100) NULL,
+ BATTERY_LEVEL DECIMAL(4) NULL,
+ INTERNAL_TOTAL_MEMORY DECIMAL(30,3) NULL,
+ INTERNAL_AVAILABLE_MEMORY DECIMAL(30,3) NULL,
+ EXTERNAL_TOTAL_MEMORY DECIMAL(30,3) NULL,
+ EXTERNAL_AVAILABLE_MEMORY DECIMAL(30,3) NULL,
+ CONNECTION_TYPE VARCHAR(50) NULL,
+ SSID VARCHAR(45) NULL,
+ CPU_USAGE DECIMAL(5) NULL,
+ TOTAL_RAM_MEMORY DECIMAL(30,3) NULL,
+ AVAILABLE_RAM_MEMORY DECIMAL(30,3) NULL,
+ PLUGGED_IN INT(1) NULL,
+ UPDATE_TIMESTAMP BIGINT(15) NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT FK_DM_DEVICE_DETAILS_DEVICE
+ FOREIGN KEY (DEVICE_ID)
+ REFERENCES DM_DEVICE (ID)
+ ON DELETE NO ACTION
+ ON UPDATE NO ACTION
+);
+
+-- POLICY AND DEVICE GROUP MAPPING --
+CREATE TABLE IF NOT EXISTS DM_DEVICE_GROUP_POLICY (
+ ID INT NOT NULL AUTO_INCREMENT,
+ DEVICE_GROUP_ID INT NOT NULL,
+ POLICY_ID INT NOT NULL,
+ TENANT_ID INT NOT NULL,
+ PRIMARY KEY (ID),
+ CONSTRAINT FK_DM_DEVICE_GROUP_POLICY
+ FOREIGN KEY (DEVICE_GROUP_ID)
+ REFERENCES DM_GROUP (ID)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE ,
+ CONSTRAINT FK_DM_DEVICE_GROUP_DM_POLICY
+ FOREIGN KEY (POLICY_ID)
+ REFERENCES DM_POLICY (ID)
+ ON DELETE CASCADE
+ ON UPDATE CASCADE
+);
+-- END OF POLICY AND DEVICE GROUP MAPPING --
+
+-- DASHBOARD RELATED VIEWS --
+CREATE VIEW POLICY_COMPLIANCE_INFO AS
+SELECT
+DEVICE_INFO.DEVICE_ID,
+DEVICE_INFO.DEVICE_IDENTIFICATION,
+DEVICE_INFO.PLATFORM,
+DEVICE_INFO.OWNERSHIP,
+DEVICE_INFO.CONNECTIVITY_STATUS,
+IFNULL(DEVICE_WITH_POLICY_INFO.POLICY_ID, -1) AS POLICY_ID,
+IFNULL(DEVICE_WITH_POLICY_INFO.IS_COMPLIANT, -1) AS IS_COMPLIANT,
+DEVICE_INFO.TENANT_ID
+FROM
+(SELECT
+DM_DEVICE.ID AS DEVICE_ID,
+DM_DEVICE.DEVICE_IDENTIFICATION,
+DM_DEVICE_TYPE.NAME AS PLATFORM,
+DM_ENROLMENT.OWNERSHIP,
+DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS,
+DM_DEVICE.TENANT_ID
+FROM DM_DEVICE, DM_DEVICE_TYPE, DM_ENROLMENT
+WHERE DM_DEVICE.DEVICE_TYPE_ID = DM_DEVICE_TYPE.ID AND DM_DEVICE.ID = DM_ENROLMENT.DEVICE_ID) DEVICE_INFO
+LEFT JOIN
+(SELECT
+DEVICE_ID,
+POLICY_ID,
+STATUS AS IS_COMPLIANT
+FROM DM_POLICY_COMPLIANCE_STATUS) DEVICE_WITH_POLICY_INFO
+ON DEVICE_INFO.DEVICE_ID = DEVICE_WITH_POLICY_INFO.DEVICE_ID
+ORDER BY DEVICE_INFO.DEVICE_ID;
+
+CREATE VIEW FEATURE_NON_COMPLIANCE_INFO AS
+SELECT
+DM_DEVICE.ID AS DEVICE_ID,
+DM_DEVICE.DEVICE_IDENTIFICATION,
+DM_DEVICE_DETAIL.DEVICE_MODEL,
+DM_DEVICE_DETAIL.VENDOR,
+DM_DEVICE_DETAIL.OS_VERSION,
+DM_ENROLMENT.OWNERSHIP,
+DM_ENROLMENT.OWNER,
+DM_ENROLMENT.STATUS AS CONNECTIVITY_STATUS,
+DM_POLICY_COMPLIANCE_STATUS.POLICY_ID,
+DM_DEVICE_TYPE.NAME AS PLATFORM,
+DM_POLICY_COMPLIANCE_FEATURES.FEATURE_CODE,
+DM_POLICY_COMPLIANCE_FEATURES.STATUS AS IS_COMPLAINT,
+DM_DEVICE.TENANT_ID
+FROM
+DM_POLICY_COMPLIANCE_FEATURES, DM_POLICY_COMPLIANCE_STATUS, DM_ENROLMENT, DM_DEVICE, DM_DEVICE_TYPE, DM_DEVICE_DETAIL
+WHERE
+DM_POLICY_COMPLIANCE_FEATURES.COMPLIANCE_STATUS_ID = DM_POLICY_COMPLIANCE_STATUS.ID AND
+DM_POLICY_COMPLIANCE_STATUS.ENROLMENT_ID = DM_ENROLMENT.ID AND
+DM_POLICY_COMPLIANCE_STATUS.DEVICE_ID = DM_DEVICE.ID AND
+DM_DEVICE.DEVICE_TYPE_ID = DM_DEVICE_TYPE.ID AND
+DM_DEVICE.ID = DM_DEVICE_DETAIL.DEVICE_ID
+ORDER BY TENANT_ID, DEVICE_ID;
+
+-- END OF DASHBOARD RELATED VIEWS --
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 bad5807be5..661e7dd0dd 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
@@ -27,6 +27,9 @@
+
+
+
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 4dca7fa547..8756a1527b 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.119-SNAPSHOT
+ 3.0.136-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 5e7727890f..22680bc1b9 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/pom.xml b/components/device-mgt/pom.xml
index 25010346e3..472f7fb61e 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
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 60c9e73723..187c91fd9c 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
diff --git a/components/email-sender/pom.xml b/components/email-sender/pom.xml
index 5930e27c96..5dd4d7ec2a 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.119-SNAPSHOT
+ 3.0.136-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 90e79f7974..a6f7c45277 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.oauth.extensions
- 3.0.119-SNAPSHOT
+ 3.0.136-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 8aa13048ce..ab46b70b15 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.119-SNAPSHOT
+ 3.0.136-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 21c9fec034..d576cbe232 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
diff --git a/components/identity-extensions/pom.xml b/components/identity-extensions/pom.xml
index 3815fad829..d09dfcadc5 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.119-SNAPSHOT
+ 3.0.136-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 c6297075a0..7495351151 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.complex.policy.decision.point
- 3.0.119-SNAPSHOT
+ 3.0.136-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 14501e3d35..6e1e1e1360 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.decision.point
- 3.0.119-SNAPSHOT
+ 3.0.136-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 1818cc84ea..5ce011d6f9 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
@@ -11,7 +11,7 @@
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.information.point
- 3.0.119-SNAPSHOT
+ 3.0.136-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 9af76c17d6..f0009431ad 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.mgt.common
- 3.0.119-SNAPSHOT
+ 3.0.136-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 2f75fc0878..847c68ca64 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.mgt.core
- 3.0.119-SNAPSHOT
+ 3.0.136-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 88af6eb50a..79626eb485 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 482a205f65..9e86417fd0 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 0000000000..75e5bb69b8
--- /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 0000000000..56ff683f03
--- /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 0000000000..df070ab3c2
--- /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 0000000000..60f93fa485
--- /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 0000000000..8186a66f20
--- /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 0000000000..cf15c76b0a
--- /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 0000000000..5c3ba651e5
--- /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 0000000000..f6b31c78d9
--- /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 0cd1564505..df960ed64e 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 01ffe07c15..191df68000 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 862067eb49..cb3ab3541a 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
policy-mgt
- 3.0.119-SNAPSHOT
+ 3.0.136-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 87074d0205..622689e669 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
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 d7c453f582..8c4baf3a1f 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.webapp.authenticator.framework
- 3.0.119-SNAPSHOT
+ 3.0.136-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 42592808b4..00012ba9f9 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
webapp-authenticator-framework
- 3.0.119-SNAPSHOT
+ 3.0.136-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 51d330234c..2f76b79aff 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.application.extension.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 81f368e2b0..e2e9476a21 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.handler.server.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 0f7ee21107..fb4d5a67c8 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.client.feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 3af8f130d3..85e92dfdc3 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.webapp.publisher.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 6c35918d41..a86ebe65dd 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 9bbfedcc55..e057eda81d 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.119-SNAPSHOT
+ 3.0.136-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 236e5199f2..e0524c79b5 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.119-SNAPSHOT
+ 3.0.136-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 c7a611f487..ceff012a8f 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.certificate.mgt.server.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 f881b742a2..b0d9f5f717 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
certificate-mgt-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 fa8324ca9b..7d6fe2f02d 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 28b5687483..0b944fcbca 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 1acc981898..78ffaa3c6d 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 421b9a76df..537ba1c69e 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 265477eb26..2f6f302c96 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 e594fbc363..0b3a430cf4 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.119-SNAPSHOT
+ 3.0.136-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
index a548faad47..9c8c9fafad 100644
--- 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
@@ -3,13 +3,13 @@
org.wso2.carbon.devicemgt
device-mgt-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.analytics.dashboard.feature
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
pom
WSO2 Carbon - Device Management Dashboard Analytics Feature
WSO2 Carbon - Device Management Dashboard Analytics Feature
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 81411da7be..8e08c780da 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.analytics.data.publisher.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 de7b9ff7a1..46a908c84f 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.119-SNAPSHOT
+ 3.0.136-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 d65f9b738b..ee9be17229 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 cf64ba200e..29070be3c6 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.119-SNAPSHOT
+ 3.0.136-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 940d8e6683..00f8fbe0a9 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.server.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 9992d9bd94..5d70ba2820 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml
index fe682a6a8d..0d35874a8b 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
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 9dbcae48f6..efa8c7ff27 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.email.sender.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 d3c731185a..e6184ca0c4 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
email-sender-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 e1abd616d9..f6996e1110 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.identity.jwt.client.extension.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 848846aba1..2eb02489ae 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
jwt-client-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 03292cc3d5..f01de39280 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.oauth.extensions.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 c692bddc39..fc4ef74efe 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
oauth-extensions-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 8b68fd2afe..b3bea18c8f 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.policy.mgt.server.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 6fbee62b60..d0f3eee479 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
policy-mgt-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-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 64308a07f2..bc5b65952c 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.webapp.authenticator.framework.server.feature
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-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 3d0b2fe57e..2ee8ae0aac 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.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
webapp-authenticator-framework-feature
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
pom
WSO2 Carbon - Webapp Authenticator Framework Feature
http://wso2.org
diff --git a/pom.xml b/pom.xml
index f56121e0e7..949aaa1ea9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
pom
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
WSO2 Carbon - Device Management - Parent
http://wso2.org
WSO2 Connected Device Manager Components
@@ -1784,7 +1784,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 +1851,7 @@
1.2.11.wso2v10
- 3.0.119-SNAPSHOT
+ 3.0.136-SNAPSHOT
4.4.8
diff --git a/pull_request_template.md b/pull_request_template.md
new file mode 100644
index 0000000000..9b32185a46
--- /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