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 01a40d7f31..77b350f807 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.annotations
- 3.0.145-SNAPSHOT
+ 3.0.148-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 2b3c1af1a7..c1e8e0fb50 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
- 3.0.145-SNAPSHOT
+ 3.0.148-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 8144fe8c76..45835dd02a 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
- 3.0.145-SNAPSHOT
+ 3.0.148-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 430b92fc3b..526508155b 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.handlers
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
bundle
WSO2 Carbon - API Security Handler Component
WSO2 Carbon - API Management Security Handler Module
@@ -55,6 +55,11 @@
org.json.wso2
json
+
+ org.slf4j
+ slf4j-simple
+ test
+
@@ -97,6 +102,15 @@
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+
+ src/test/resources/testng.xml
+
+
+
org.jacoco
jacoco-maven-plugin
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandler.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandler.java
index 276380ce86..b851ee4f8c 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandler.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandler.java
@@ -52,7 +52,7 @@ public class AuthenticationHandler extends AbstractHandler {
private static final Log log = LogFactory.getLog(AuthenticationHandler.class);
private RESTInvoker restInvoker;
- private static final String X_JWT_ASSERTION = "X-JWT-Assertion";
+ private static final String X_JWT_ASSERTION = "X-JWT-Assertion";
private static final String JWTTOKEN = "JWTToken";
private static final String AUTHORIZATION = "Authorization";
private static final String BEARER = "Bearer ";
@@ -72,8 +72,8 @@ public class AuthenticationHandler extends AbstractHandler {
/**
* Handling the message and checking the security.
*
- * @param messageContext
- * @return
+ * @param messageContext Request message context.
+ * @return Boolean value of the result of the processing the request.
*/
@Override
public boolean handleRequest(org.apache.synapse.MessageContext messageContext) {
@@ -87,7 +87,7 @@ public class AuthenticationHandler extends AbstractHandler {
Map headers = (Map) axisMC.getProperty(MessageContext.TRANSPORT_HEADERS);
try {
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
- RESTResponse response;
+ RESTResponse response = null;
if (headers.containsKey(AuthConstants.MDM_SIGNATURE)) {
String mdmSignature = headers.get(AuthConstants.MDM_SIGNATURE);
@@ -95,7 +95,7 @@ public class AuthenticationHandler extends AbstractHandler {
log.debug("Verify Cert:\n" + mdmSignature);
}
String deviceType = this.getDeviceType(messageContext.getTo().getAddress().trim());
- if (deviceType == null){
+ if (deviceType == null) {
return false;
}
URI certVerifyUrl = new URI(iotServerConfiguration.getVerificationEndpoint() + deviceType);
@@ -108,8 +108,7 @@ public class AuthenticationHandler extends AbstractHandler {
Gson gson = new Gson();
String certVerifyContent = gson.toJson(certificate);
- response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, null,
- null, certVerifyContent);
+ response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, certVerifyContent);
String str = response.getContent();
if (log.isDebugEnabled()) {
@@ -140,8 +139,7 @@ public class AuthenticationHandler extends AbstractHandler {
Gson gson = new Gson();
String certVerifyContent = gson.toJson(certificate);
- response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, null,
- null, certVerifyContent);
+ response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, certVerifyContent);
if (log.isDebugEnabled()) {
log.debug("Verify response:" + response.getContent());
}
@@ -155,8 +153,6 @@ public class AuthenticationHandler extends AbstractHandler {
if (x509 != null) {
headers.put(AuthConstants.PROXY_MUTUAL_AUTH_HEADER, CertificateGenerator.getCommonName(x509));
return true;
- } else {
- response = null;
}
} else if (headers.containsKey(AuthConstants.ENCODED_PEM)) {
String encodedPem = headers.get(AuthConstants.ENCODED_PEM);
@@ -173,8 +169,7 @@ public class AuthenticationHandler extends AbstractHandler {
certificate.setSerial("");
Gson gson = new Gson();
String certVerifyContent = gson.toJson(certificate);
- response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, null,
- null, certVerifyContent);
+ response = restInvoker.invokePOST(certVerifyUrl, certVerifyHeaders, certVerifyContent);
if (log.isDebugEnabled()) {
log.debug("Verify response:" + response.getContent());
}
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTInvoker.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTInvoker.java
index da182e325b..bd59e03dc1 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTInvoker.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTInvoker.java
@@ -17,11 +17,9 @@
*/
package org.wso2.carbon.apimgt.handlers.invoker;
-import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.http.Header;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.*;
import org.apache.http.entity.StringEntity;
@@ -32,7 +30,6 @@ import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.net.URI;
-import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Set;
@@ -63,7 +60,7 @@ public class RESTInvoker {
.setConnectionManager(connectionManager)
.setDefaultRequestConfig(defaultRequestConfig)
.build();
- if(log.isDebugEnabled()){
+ if (log.isDebugEnabled()) {
log.debug("REST client initialized with " +
"maxTotalConnection = " + maxTotalConnections +
"maxConnectionsPerRoute = " + maxTotalConnectionsPerRoute +
@@ -72,14 +69,11 @@ public class RESTInvoker {
}
- public RESTResponse invokePOST(URI uri, Map requestHeaders, String username,
- String password, String payload) throws IOException {
+ public RESTResponse invokePOST(URI uri, Map requestHeaders, String payload) throws IOException {
HttpPost httpPost = null;
CloseableHttpResponse response = null;
- Header[] headers;
int httpStatus;
- String contentType;
String output;
try {
httpPost = new HttpPost(uri);
@@ -90,11 +84,9 @@ public class RESTInvoker {
httpPost.setHeader(header, requestHeaders.get(header));
}
}
- response = sendReceiveRequest(httpPost, username, password);
+ response = sendReceiveRequest(httpPost);
output = IOUtils.toString(response.getEntity().getContent());
- headers = response.getAllHeaders();
httpStatus = response.getStatusLine().getStatusCode();
- contentType = response.getEntity().getContentType().getValue();
if (log.isDebugEnabled()) {
log.debug("Invoked POST " + uri.toString() +
" - Input payload: " + payload + " - Response message: " + output);
@@ -108,21 +100,11 @@ public class RESTInvoker {
httpPost.releaseConnection();
}
}
- return new RESTResponse(contentType, output, headers, httpStatus);
+ return new RESTResponse(output, httpStatus);
}
- private CloseableHttpResponse sendReceiveRequest(HttpRequestBase requestBase, String username, String password)
+ private CloseableHttpResponse sendReceiveRequest(HttpRequestBase requestBase)
throws IOException {
- CloseableHttpResponse response;
- if (username != null && !username.equals("") && password != null) {
- String combinedCredentials = username + ":" + password;
- byte[] encodedCredentials = Base64.encodeBase64(combinedCredentials.getBytes(StandardCharsets.UTF_8));
- requestBase.addHeader("Authorization", "Basic " + new String(encodedCredentials));
-
- response = client.execute(requestBase);
- } else {
- response = client.execute(requestBase);
- }
- return response;
+ return client.execute(requestBase);
}
}
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTResponse.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTResponse.java
index 57b4d58f94..205130b30e 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTResponse.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/invoker/RESTResponse.java
@@ -17,40 +17,25 @@
*/
package org.wso2.carbon.apimgt.handlers.invoker;
-import org.apache.http.Header;
/**
* RESTResponse class holds the data retrieved from the HTTP invoke response.
*/
public class RESTResponse {
- private String contentType;
private String content;
- private Header[] headers;
private int httpStatus;
/**
* Constructor
*
- * @param contentType from the REST invoke response
* @param content from the REST invoke response
- * @param headers from the REST invoke response
* @param httpStatus from the REST invoke response
*/
- RESTResponse(String contentType, String content, Header[] headers, int httpStatus) {
- this.contentType = contentType;
+ RESTResponse(String content, int httpStatus) {
this.content = content;
- this.headers = headers;
this.httpStatus = httpStatus;
}
- /**
- * Get the content type of the EST invoke response
- *
- * @return String content type of the response
- */
- public String getContentType() {
- return contentType;
- }
/**
* Get contents of the REST invoke response
@@ -61,15 +46,6 @@ public class RESTResponse {
return content;
}
- /**
- * Get headers of the REST invoke response
- *
- * @return headers of the REST invoke response
- */
- public Header[] getHeaders() {
- return headers;
- }
-
/**
* Get the HTTP Status code from REST invoke response
*
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/utils/Utils.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/utils/Utils.java
index 1a2d7e5859..a36dc0f647 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/utils/Utils.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/main/java/org/wso2/carbon/apimgt/handlers/utils/Utils.java
@@ -59,6 +59,7 @@ public class Utils {
/**
* This method initializes the iot-api-config.xml file.
+ *
* @return IoTServerConfiguration Object based on the configuration file.
*/
public static IOTServerConfiguration initConfig() {
@@ -67,10 +68,11 @@ public class Utils {
/**
* This methods initialized the iot-api-config.xml from provided path.
+ *
* @param path The actual file path of iot-api-config.xml
* @return The instance of the IOTServerConfiguration based on the configuration.
*/
- public static IOTServerConfiguration initConfig(String path){
+ public static IOTServerConfiguration initConfig(String path) {
try {
File file = new File(path);
Document doc = Utils.convertToDocument(file);
@@ -145,15 +147,15 @@ public class Utils {
getClientSecretes(iotServerConfiguration, restInvoker);
}
URI tokenUrl = new URI(iotServerConfiguration.getOauthTokenEndpoint());
- String tokenContent = "grant_type=password&username=" + iotServerConfiguration.getUsername()+ "&password=" +
+ String tokenContent = "grant_type=password&username=" + iotServerConfiguration.getUsername() + "&password=" +
iotServerConfiguration.getPassword() + "&scope=activity-view";
String tokenBasicAuth = "Basic " + Base64.encode((clientId + ":" + clientSecret).getBytes());
Map tokenHeaders = new HashMap<>();
tokenHeaders.put("Authorization", tokenBasicAuth);
tokenHeaders.put("Content-Type", "application/x-www-form-urlencoded");
- RESTResponse response = restInvoker.invokePOST(tokenUrl, tokenHeaders, null, null, tokenContent);
- if(log.isDebugEnabled()) {
+ RESTResponse response = restInvoker.invokePOST(tokenUrl, tokenHeaders, tokenContent);
+ if (log.isDebugEnabled()) {
log.debug("Token response:" + response.getContent());
}
JSONObject jsonResponse = new JSONObject(response.getContent());
@@ -168,6 +170,7 @@ public class Utils {
/**
* This method register an application to get the client key and secret.
+ *
* @param iotServerConfiguration Instance of the IoTServerConfiguration.
* @throws APIMCertificateMGTException
*/
@@ -189,7 +192,7 @@ public class Utils {
dcrHeaders.put(AuthConstants.CONTENT_TYPE_HEADER, AuthConstants.CONTENT_TYPE);
dcrHeaders.put(AuthConstants.AUTHORIZATION_HEADER, AuthConstants.BASIC_AUTH_PREFIX + basicAuth);
URI dcrUrl = new URI(iotServerConfiguration.getDynamicClientRegistrationEndpoint());
- RESTResponse response = restInvoker.invokePOST(dcrUrl, dcrHeaders, null, null, dcrContent);
+ RESTResponse response = restInvoker.invokePOST(dcrUrl, dcrHeaders, dcrContent);
if (log.isDebugEnabled()) {
log.debug("DCR response :" + response.getContent());
}
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandlerTest.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandlerTest.java
index f68a9bd973..f42505409a 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandlerTest.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/AuthenticationHandlerTest.java
@@ -78,7 +78,7 @@ public class AuthenticationHandlerTest extends BaseAPIHandlerTest {
@Test(description = "Handle request with without device type",
dependsOnMethods = "testHandleRequestWithEmptyTransportHeader")
- public void testHandleRequestWithURISyntaxError() throws Exception {
+ public void testHandleRequestWithoutDeviceType() throws Exception {
HashMap transportHeaders = new HashMap<>();
transportHeaders.put(AuthConstants.MDM_SIGNATURE, "some cert");
boolean response = this.handler.handleRequest(createSynapseMessageContext("", this.synapseConfiguration,
@@ -87,7 +87,7 @@ public class AuthenticationHandlerTest extends BaseAPIHandlerTest {
}
@Test(description = "Handle request with device type URI with MDM ceritificate",
- dependsOnMethods = "testHandleRequestWithURISyntaxError")
+ dependsOnMethods = "testHandleRequestWithoutDeviceType")
public void testHandleSuccessfulRequestMDMCertificate() throws Exception {
HashMap transportHeaders = new HashMap<>();
transportHeaders.put(AuthConstants.MDM_SIGNATURE, "some cert");
@@ -150,6 +150,70 @@ public class AuthenticationHandlerTest extends BaseAPIHandlerTest {
this.mockClient.reset();
}
+ @Test(description = "Handle request with device type URI with Encoded Pem with invalid response",
+ dependsOnMethods = "testHandleSuccessRequestEncodedPem")
+ public void testHandleSuccessRequestEncodedPemInvalidResponse() throws Exception {
+ HashMap transportHeaders = new HashMap<>();
+ transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
+ setMockClient();
+ this.mockClient.setResponse(getAccessTokenReponse());
+ this.mockClient.setResponse(getInvalidResponse());
+ MessageContext messageContext = createSynapseMessageContext("", this.synapseConfiguration,
+ transportHeaders, "https://test.com/testservice/api/testdevice");
+ boolean response = this.handler.handleRequest(messageContext);
+ Assert.assertFalse(response);
+ this.mockClient.reset();
+ }
+
+ @Test(description = "Handle request with cert management exception ",
+ dependsOnMethods = "testHandleSuccessRequestEncodedPem")
+ public void testHandleRequestWithCertMgmtException() throws Exception {
+ HashMap transportHeaders = new HashMap<>();
+ transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
+ setMockClient();
+ this.mockClient.setResponse(null);
+ MessageContext messageContext = createSynapseMessageContext("", this.synapseConfiguration,
+ transportHeaders, "https://test.com/testservice/api/testdevice");
+ boolean response = this.handler.handleRequest(messageContext);
+ Assert.assertFalse(response);
+ this.mockClient.reset();
+ }
+
+ @Test(description = "Handle request with IO exception",
+ dependsOnMethods = "testHandleRequestWithCertMgmtException")
+ public void testHandleRequestWithIOException() throws Exception {
+ HashMap transportHeaders = new HashMap<>();
+ transportHeaders.put(AuthConstants.ENCODED_PEM, "encoded pem");
+ setMockClient();
+ this.mockClient.setResponse(getAccessTokenReponse());
+ this.mockClient.setResponse(null);
+ MessageContext messageContext = createSynapseMessageContext("", this.synapseConfiguration,
+ transportHeaders, "https://test.com/testservice/api/testdevice");
+ boolean response = this.handler.handleRequest(messageContext);
+ Assert.assertFalse(response);
+ this.mockClient.reset();
+ }
+
+ @Test(description = "Handle request with URI exception",
+ dependsOnMethods = "testHandleRequestWithIOException")
+ public void testHandleRequestWithURIException() throws Exception {
+ TestUtils.resetSystemProperties();
+ HashMap transportHeaders = new HashMap<>();
+ transportHeaders.put(AuthConstants.MDM_SIGNATURE, "some cert");
+ AuthenticationHandler handler = new AuthenticationHandler();
+ boolean response = handler.handleRequest(createSynapseMessageContext("", this.synapseConfiguration,
+ transportHeaders, "https://test.com/testservice/api/testdevice"));
+ Assert.assertFalse(response);
+ TestUtils.setSystemProperties();
+ }
+
+ @Test(description = "Handle response")
+ public void testHandleResponse() throws Exception {
+ boolean response = this.handler.handleResponse(null);
+ Assert.assertTrue(response);
+ }
+
+
private static MessageContext createSynapseMessageContext(
String payload, SynapseConfiguration config, HashMap transportHeaders,
String address) throws Exception {
@@ -228,6 +292,16 @@ public class AuthenticationHandlerTest extends BaseAPIHandlerTest {
return mockDCRResponse;
}
+ private CloseableHttpResponse getInvalidResponse() throws UnsupportedEncodingException {
+ CloseableHttpResponse mockDCRResponse = new MockHttpResponse();
+ BasicHttpEntity responseEntity = new BasicHttpEntity();
+ responseEntity.setContent(new ByteArrayInputStream("invalid response".getBytes(StandardCharsets.UTF_8.name())));
+ responseEntity.setContentType(TestUtils.CONTENT_TYPE);
+ mockDCRResponse.setEntity(responseEntity);
+ mockDCRResponse.setStatusLine(new BasicStatusLine(new ProtocolVersion("http", 1, 0), 400, "Bad Request"));
+ return mockDCRResponse;
+ }
+
private String getContent(String filePath) throws IOException {
FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/mock/MockClient.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/mock/MockClient.java
index 6c36969026..0c8ab4f6bd 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/mock/MockClient.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.handlers/src/test/java/org/wso2/carbon/apimgt/handlers/mock/MockClient.java
@@ -41,7 +41,11 @@ public class MockClient extends CloseableHttpClient {
throws IOException {
if (this.responseCount < this.responses.size()) {
this.responseCount++;
- return this.responses.get(this.responseCount - 1);
+ CloseableHttpResponse response = this.responses.get(this.responseCount - 1);
+ if (response == null) {
+ throw new IOException("test exception");
+ }
+ return response;
} else {
return new MockHttpResponse();
}
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 0ec3bb433b..00ad78ac2c 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.client
- 3.0.145-SNAPSHOT
+ 3.0.148-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 80a8057ce1..2788aa93cc 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.generated.client
- 3.0.145-SNAPSHOT
+ 3.0.148-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 72843c6886..f5e3dc3e69 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.webapp.publisher
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
bundle
WSO2 Carbon - API Management Webapp Publisher
WSO2 Carbon - API Management Webapp Publisher
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java
index f7914d3d52..bc02e33e5a 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/main/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceImpl.java
@@ -62,7 +62,7 @@ public class APIPublisherServiceImpl implements APIPublisherService {
for (APIInfo apiInfo : apiList.getList()) {
if (api.getName().equals(apiInfo.getName()) && api.getVersion().equals(apiInfo.getVersion())) {
api = publisherClient.getApi().apisApiIdPut(apiInfo.getId(), api, CONTENT_TYPE, null, null);
- if (CREATED_STATUS.equals(api.getStatus())) {
+ if (api != null && CREATED_STATUS.equals(api.getStatus())) {
publisherClient.getApi().apisChangeLifecyclePost(PUBLISH_ACTION, api.getId(), null, null,
null);
}
@@ -83,7 +83,9 @@ public class APIPublisherServiceImpl implements APIPublisherService {
return false;
}
for (APIInfo existingApi : apiList.getList()) {
- if (existingApi.getName().equals(api.getName()) && existingApi.getVersion().equals(api.getVersion())) {
+ if (existingApi.getName() != null && existingApi.getName().equals(api.
+ getName()) && existingApi.getVersion() != null &&
+ existingApi.getVersion().equals(api.getVersion())) {
return true;
}
}
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java
index cf313fca21..2a5b533eaf 100644
--- a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherServiceTest.java
@@ -19,17 +19,30 @@ package org.wso2.carbon.apimgt.webapp.publisher;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.mockito.Mockito;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
+import org.wso2.carbon.apimgt.integration.client.IntegrationClientServiceImpl;
import org.wso2.carbon.apimgt.integration.client.OAuthRequestInterceptor;
import org.wso2.carbon.apimgt.integration.client.model.OAuthApplication;
+import org.wso2.carbon.apimgt.integration.client.publisher.PublisherClient;
+import org.wso2.carbon.apimgt.integration.client.service.IntegrationClientService;
+import org.wso2.carbon.apimgt.integration.generated.client.publisher.api.APIsApi;
+import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.API;
+import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIInfo;
+import org.wso2.carbon.apimgt.integration.generated.client.publisher.model.APIList;
+import org.wso2.carbon.apimgt.webapp.publisher.config.WebappPublisherConfig;
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiScope;
import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiUriTemplate;
import org.wso2.carbon.apimgt.webapp.publisher.exception.APIManagerPublisherException;
+import org.wso2.carbon.apimgt.webapp.publisher.internal.APIPublisherDataHolder;
+import org.wso2.carbon.apimgt.webapp.publisher.utils.Api;
import java.lang.reflect.Field;
import java.util.*;
+import static org.mockito.Mockito.doReturn;
+
/**
* This is the test class for {@link APIPublisherServiceImpl}
*/
@@ -37,23 +50,119 @@ public class
APIPublisherServiceTest extends BaseAPIPublisherTest {
private static final Log log = LogFactory.getLog(APIPublisherServiceTest.class);
private APIPublisherServiceImpl apiPublisherService = new APIPublisherServiceImpl();
- private APIConfig apiConfig = new APIConfig();
@BeforeTest
public void initialConfigs() throws Exception {
- setApiConfigs(apiConfig);
initializeOAuthApplication();
+ WebappPublisherConfig.init();
}
@Test(description = "Publishes an API | will fail if there are any exceptions")
public void publishAPI() throws NoSuchFieldException, IllegalAccessException,
APIManagerPublisherException {
+ APIConfig apiConfig = new APIConfig();
+ setApiConfigs(apiConfig, "testAPI-0");
+ apiPublisherService.publishAPI(apiConfig);
+ }
+
+ @Test(description = "Testing for API status CREATED | will fail if there are any exceptions")
+ public void publishCreatedAPI() throws APIManagerPublisherException, NoSuchFieldException,
+ IllegalAccessException {
+ APIConfig apiConfig = new APIConfig();
+ setApiConfigs(apiConfig, "testAPI-1");
+ APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance().
+ getClass(), Mockito.CALLS_REAL_METHODS);
+ IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.
+ class, Mockito.CALLS_REAL_METHODS);
+ doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService();
+ PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService().
+ getPublisherClient();
+ doReturn(publisherClient).when(integrationClientService).getPublisherClient();
+ APIsApi apIsApi = Mockito.mock(Api.class, Mockito.CALLS_REAL_METHODS);
+ doReturn(apIsApi).when(publisherClient).getApi();
+ API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS);
+ api.setStatus("CREATED");
+ doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString());
apiPublisherService.publishAPI(apiConfig);
}
- private void setApiConfigs(APIConfig apiConfig) {
- apiConfig.setName("Windows Device Management Administrative Service");
- apiConfig.setContext("/api/device-mgt/windows/v1.0/admin/devices");
+ @Test(description = "createAPIListWithNoApi | will fail if there are any exceptions")
+ private void publishWithNoAPIListCreated() throws APIManagerPublisherException {
+ APIConfig apiConfig = new APIConfig();
+ setApiConfigs(apiConfig, "testAPI-2");
+ APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance().
+ getClass(), Mockito.CALLS_REAL_METHODS);
+ IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.
+ class, Mockito.CALLS_REAL_METHODS);
+ doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService();
+ PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService().
+ getPublisherClient();
+ doReturn(publisherClient).when(integrationClientService).getPublisherClient();
+ APIsApi apIsApi = Mockito.mock(Api.class, Mockito.CALLS_REAL_METHODS);
+ doReturn(apIsApi).when(publisherClient).getApi();
+ API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS);
+ api.setStatus("CREATED");
+ doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString());
+ APIList apiList = Mockito.mock(APIList.class, Mockito.CALLS_REAL_METHODS);
+ APIInfo apiInfo = new APIInfo();
+ List apiInfoList = new ArrayList<>();
+ apiInfoList.add(apiInfo);
+ apiList.list(apiInfoList);
+ doReturn(apiList).when(apIsApi).apisGet(Mockito.anyInt(), Mockito.anyInt(),
+ Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
+ doReturn(api).when(apIsApi).apisApiIdPut(Mockito.anyString(), Mockito.any(),
+ Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
+ apiPublisherService.publishAPI(apiConfig);
+ }
+
+ @Test(description = "createAPIList | will fail if there are any exceptions")
+ private void publishWithAPIListCreated() throws APIManagerPublisherException {
+ APIConfig apiConfig = new APIConfig();
+ setApiConfigs(apiConfig, "testAPI-3");
+ APIPublisherDataHolder apiPublisherDataHolder = Mockito.mock(APIPublisherDataHolder.getInstance().
+ getClass(), Mockito.CALLS_REAL_METHODS);
+ IntegrationClientService integrationClientService = Mockito.mock(IntegrationClientServiceImpl.
+ class, Mockito.CALLS_REAL_METHODS);
+ doReturn(integrationClientService).when(apiPublisherDataHolder).getIntegrationClientService();
+ PublisherClient publisherClient = APIPublisherDataHolder.getInstance().getIntegrationClientService().
+ getPublisherClient();
+ doReturn(publisherClient).when(integrationClientService).getPublisherClient();
+ APIsApi apIsApi = Mockito.mock(Api.class, Mockito.CALLS_REAL_METHODS);
+ doReturn(apIsApi).when(publisherClient).getApi();
+ API api = Mockito.mock(API.class, Mockito.CALLS_REAL_METHODS);
+ api.setStatus("CREATED");
+ doReturn(api).when(apIsApi).apisPost(Mockito.any(), Mockito.anyString());
+ APIList apiList = Mockito.mock(APIList.class, Mockito.CALLS_REAL_METHODS);
+ APIInfo apiInfo = new APIInfo();
+ apiInfo.setName("testAPI-3");
+ apiInfo.setVersion("1.0.0");
+ apiInfo.setId("test-one");
+ List apiInfoList = new ArrayList<>();
+ apiInfoList.add(apiInfo);
+ apiList.list(apiInfoList);
+ doReturn(apiList).when(apIsApi).apisGet(Mockito.anyInt(), Mockito.anyInt(),
+ Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
+ doReturn(api).when(apIsApi).apisApiIdPut(Mockito.anyString(), Mockito.any(),
+ Mockito.anyString(), Mockito.anyString(), Mockito.anyString());
+ apiConfig.setSharedWithAllTenants(false);
+ apiPublisherService.publishAPI(apiConfig);
+ }
+
+ @Test(description = "publish API with scope added | will fail if there are any exceptions")
+ private void publishWithAPIScope() throws APIManagerPublisherException {
+ APIConfig apiConfig = new APIConfig();
+ setApiConfigs(apiConfig, "testAPI-4");
+ Set scopes = new HashSet<>();
+ ApiScope apiScope = new ApiScope();
+ apiScope.setDescription("testing");
+ scopes.add(apiScope);
+ apiConfig.setScopes(scopes);
+ apiPublisherService.publishAPI(apiConfig);
+ }
+
+ private void setApiConfigs(APIConfig apiConfig, String name) {
+ apiConfig.setName(name);
+ apiConfig.setContext("api/device-mgt/windows/v1.g0/admin/devices");
apiConfig.setOwner("admin");
apiConfig.setEndpoint("https://localhost:9443/api/device-mgt/windows/v1.0/admin/devices");
apiConfig.setVersion("1.0.0");
@@ -98,3 +207,4 @@ APIPublisherServiceTest extends BaseAPIPublisherTest {
}
}
+
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtilTest.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtilTest.java
new file mode 100644
index 0000000000..ca1bc1fba4
--- /dev/null
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/APIPublisherUtilTest.java
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
+*
+* WSO2 Inc. licenses this file to you under the Apache License,
+* Version 2.0 (the "License"); you may not use this file except
+* in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing,
+* software distributed under the License is distributed on an
+* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+* KIND, either express or implied. See the License for the
+* specific language governing permissions and limitations
+* under the License.
+*/
+package org.wso2.carbon.apimgt.webapp.publisher;
+
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeTest;
+import org.testng.annotations.Test;
+import org.wso2.carbon.apimgt.webapp.publisher.config.APIResource;
+import org.wso2.carbon.apimgt.webapp.publisher.config.APIResourceConfiguration;
+import org.wso2.carbon.apimgt.webapp.publisher.config.WebappPublisherConfig;
+import org.wso2.carbon.apimgt.webapp.publisher.dto.ApiScope;
+import org.wso2.carbon.apimgt.webapp.publisher.exception.APIManagerPublisherException;
+import org.wso2.carbon.apimgt.webapp.publisher.utils.MockServletContext;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.registry.core.exceptions.RegistryException;
+import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService;
+import org.wso2.carbon.user.api.RealmConfiguration;
+import org.wso2.carbon.user.api.UserRealm;
+import org.wso2.carbon.user.api.UserStoreException;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import javax.servlet.ServletContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.wso2.carbon.apimgt.webapp.publisher.APIPublisherUtil.buildApiConfig;
+
+/**
+ * This is the test class for {@link APIPublisherUtil}
+ */
+public class APIPublisherUtilTest extends BaseAPIPublisherTest {
+
+ @BeforeTest
+ public void initialConfigs() throws WebappPublisherConfigurationFailedException,
+ org.wso2.carbon.user.core.UserStoreException, RegistryException {
+ WebappPublisherConfig.init();
+ setUserRealm();
+ }
+
+ @Test(description = "test buildAPIConfig method and ensures an APIConfig is created")
+ private void buildApiConfigTest() throws UserStoreException, RegistryException {
+ try {
+ startTenantFlowAsTestTenant();
+ ServletContext servletContext = new MockServletContext();
+ APIResourceConfiguration apiDef = new APIResourceConfiguration();
+ List resources = new ArrayList<>();
+ apiDef.setResources(resources);
+ APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
+ Assert.assertNotNull(apiConfig, "API configuration is null.");
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+ }
+
+ @Test(description = "test buildAPIConfig method as SuperTenant and ensures" +
+ " an APIConfig is created")
+ private void buildApiConfigAsSuperTenat() throws UserStoreException {
+ ServletContext servletContext = new MockServletContext();
+ APIResourceConfiguration apiDef = new APIResourceConfiguration();
+ List resources = new ArrayList<>();
+ apiDef.setResources(resources);
+ APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
+ Assert.assertNotNull(apiConfig, "API configuration is null.");
+ }
+
+ @Test(description = "test buildAPIConfig with API tags specified and ensures " +
+ "an APIConfig is created")
+ private void buildApiConfigTestWithTags() throws UserStoreException {
+ ServletContext servletContext = new MockServletContext();
+ APIResourceConfiguration apiDef = new APIResourceConfiguration();
+ List resources = new ArrayList<>();
+ APIResource apiResource = new APIResource();
+ resources.add(apiResource);
+ apiDef.setResources(resources);
+ apiDef.setTags(new String[]{"windows", "device_management"});
+ APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
+ Assert.assertNotNull(apiConfig, "API configuration is null.");
+ }
+
+ @Test(description = "test buildAPIConfig method with API scopes specified and " +
+ "ensures an APIConfig is created")
+ private void buildApiConfigTestWithScope() throws UserStoreException, APIManagerPublisherException {
+ ServletContext servletContext = new MockServletContext();
+ APIResourceConfiguration apiDef = new APIResourceConfiguration();
+ List resources = new ArrayList<>();
+ APIResource apiResource = new APIResource();
+ ApiScope apiScope = new ApiScope();
+ apiScope.setDescription("testing");
+ apiResource.setScope(apiScope);
+ resources.add(apiResource);
+ apiDef.setResources(resources);
+ apiDef.setTags(new String[]{"windows", "device_management"});
+ APIConfig apiConfig = buildApiConfig(servletContext, apiDef);
+ Assert.assertNotNull(apiConfig, "API configuration is null.");
+ }
+
+ private void setUserRealm() throws RegistryException, org.wso2.carbon.user.core.UserStoreException {
+ RealmConfiguration configuration = new RealmConfiguration();
+ UserRealm userRealm = new InMemoryRealmService().getUserRealm(configuration);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUserRealm(userRealm);
+ }
+
+ private void startTenantFlowAsTestTenant() throws org.wso2.carbon.user.core.UserStoreException, RegistryException {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(1212);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantDomain("test.com");
+ setUserRealm();
+ }
+}
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/utils/MockServletContext.java b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/utils/MockServletContext.java
new file mode 100644
index 0000000000..d88dac206a
--- /dev/null
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/java/org/wso2/carbon/apimgt/webapp/publisher/utils/MockServletContext.java
@@ -0,0 +1,285 @@
+/*
+* 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.apimgt.webapp.publisher.utils;
+
+import javax.servlet.*;
+import javax.servlet.descriptor.JspConfigDescriptor;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
+import java.util.Set;
+
+public class MockServletContext implements ServletContext {
+ @Override
+ public ServletContext getContext(String s) {
+ return null;
+ }
+
+ @Override
+ public String getContextPath() {
+ return null;
+ }
+
+ @Override
+ public int getMajorVersion() {
+ return 0;
+ }
+
+ @Override
+ public int getMinorVersion() {
+ return 0;
+ }
+
+ @Override
+ public int getEffectiveMajorVersion() {
+ return 0;
+ }
+
+ @Override
+ public int getEffectiveMinorVersion() {
+ return 0;
+ }
+
+ @Override
+ public String getMimeType(String s) {
+ return null;
+ }
+
+ @Override
+ public Set getResourcePaths(String s) {
+ return null;
+ }
+
+ @Override
+ public URL getResource(String s) throws MalformedURLException {
+ return null;
+ }
+
+ @Override
+ public InputStream getResourceAsStream(String s) {
+ return null;
+ }
+
+ @Override
+ public RequestDispatcher getRequestDispatcher(String s) {
+ return null;
+ }
+
+ @Override
+ public RequestDispatcher getNamedDispatcher(String s) {
+ return null;
+ }
+
+ @Override
+ public Servlet getServlet(String s) throws ServletException {
+ return null;
+ }
+
+ @Override
+ public Enumeration getServlets() {
+ return null;
+ }
+
+ @Override
+ public Enumeration getServletNames() {
+ return null;
+ }
+
+ @Override
+ public void log(String s) {
+
+ }
+
+ @Override
+ public void log(Exception e, String s) {
+
+ }
+
+ @Override
+ public void log(String s, Throwable throwable) {
+
+ }
+
+ @Override
+ public String getRealPath(String s) {
+ return null;
+ }
+
+ @Override
+ public String getServerInfo() {
+ return null;
+ }
+
+ @Override
+ public String getInitParameter(String s) {
+ return "true";
+ }
+
+ @Override
+ public Enumeration getInitParameterNames() {
+ return null;
+ }
+
+ @Override
+ public boolean setInitParameter(String s, String s1) {
+ return false;
+ }
+
+ @Override
+ public Object getAttribute(String s) {
+ return null;
+ }
+
+ @Override
+ public Enumeration getAttributeNames() {
+ return null;
+ }
+
+ @Override
+ public void setAttribute(String s, Object o) {
+
+ }
+
+ @Override
+ public void removeAttribute(String s) {
+
+ }
+
+ @Override
+ public String getServletContextName() {
+ return null;
+ }
+
+ @Override
+ public ServletRegistration.Dynamic addServlet(String s, String s1) {
+ return null;
+ }
+
+ @Override
+ public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) {
+ return null;
+ }
+
+ @Override
+ public ServletRegistration.Dynamic addServlet(String s, Class extends Servlet> aClass) {
+ return null;
+ }
+
+ @Override
+ public T createServlet(Class aClass) throws ServletException {
+ return null;
+ }
+
+ @Override
+ public ServletRegistration getServletRegistration(String s) {
+ return null;
+ }
+
+ @Override
+ public Map getServletRegistrations() {
+ return null;
+ }
+
+ @Override
+ public FilterRegistration.Dynamic addFilter(String s, String s1) {
+ return null;
+ }
+
+ @Override
+ public FilterRegistration.Dynamic addFilter(String s, Filter filter) {
+ return null;
+ }
+
+ @Override
+ public FilterRegistration.Dynamic addFilter(String s, Class extends Filter> aClass) {
+ return null;
+ }
+
+ @Override
+ public T createFilter(Class aClass) throws ServletException {
+ return null;
+ }
+
+ @Override
+ public FilterRegistration getFilterRegistration(String s) {
+ return null;
+ }
+
+ @Override
+ public Map getFilterRegistrations() {
+ return null;
+ }
+
+ @Override
+ public SessionCookieConfig getSessionCookieConfig() {
+ return null;
+ }
+
+ @Override
+ public void setSessionTrackingModes(Set set) throws IllegalStateException, IllegalArgumentException {
+
+ }
+
+ @Override
+ public Set getDefaultSessionTrackingModes() {
+ return null;
+ }
+
+ @Override
+ public Set getEffectiveSessionTrackingModes() {
+ return null;
+ }
+
+ @Override
+ public void addListener(String s) {
+
+ }
+
+ @Override
+ public void addListener(T t) {
+
+ }
+
+ @Override
+ public void addListener(Class extends EventListener> aClass) {
+
+ }
+
+ @Override
+ public T createListener(Class aClass) throws ServletException {
+ return null;
+ }
+
+ @Override
+ public void declareRoles(String... strings) {
+
+ }
+
+ @Override
+ public ClassLoader getClassLoader() {
+ return null;
+ }
+
+ @Override
+ public JspConfigDescriptor getJspConfigDescriptor() {
+ return null;
+ }
+}
diff --git a/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/resources/carbon-home/repository/conf/etc/webapp-publisher-config.xml b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/resources/carbon-home/repository/conf/etc/webapp-publisher-config.xml
new file mode 100644
index 0000000000..6e03eb73bd
--- /dev/null
+++ b/components/apimgt-extensions/org.wso2.carbon.apimgt.webapp.publisher/src/test/resources/carbon-home/repository/conf/etc/webapp-publisher-config.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+ https://${iot.core.host}:${iot.core.https.port}
+
+
+ true
+
+
+ true
+
+
+
+ default
+
+
diff --git a/components/apimgt-extensions/pom.xml b/components/apimgt-extensions/pom.xml
index eff6a49bcb..d7115ee25a 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
apimgt-extensions
- 3.0.145-SNAPSHOT
+ 3.0.148-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 a617b24c0a..caf08e5cdd 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.145-SNAPSHOT
+ 3.0.148-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 843ee002b4..1bbeb0ad64 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.145-SNAPSHOT
+ 3.0.148-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 b06d36ca42..4db036d18d 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.certificate.mgt.core
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
bundle
WSO2 Carbon - Certificate Management Core
WSO2 Carbon - Certificate Management Core
diff --git a/components/certificate-mgt/pom.xml b/components/certificate-mgt/pom.xml
index 6cb0e09b82..f0628cde9e 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
certificate-mgt
- 3.0.145-SNAPSHOT
+ 3.0.148-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 03e2c93817..e18fe0fd7d 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.145-SNAPSHOT
+ 3.0.148-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 8d2dd41c38..719c6c9d3c 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.145-SNAPSHOT
+ 3.0.148-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 d33d704db6..67c391291c 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.145-SNAPSHOT
+ 3.0.148-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 9f4cf3f719..04a0b54820 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.145-SNAPSHOT
+ 3.0.148-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 9bd6e9b3c4..17cd30e93c 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.145-SNAPSHOT
+ 3.0.148-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 4aa469074d..432eb436b3 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt-extensions/pom.xml b/components/device-mgt-extensions/pom.xml
index 69239a8995..57d43d97bc 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.145-SNAPSHOT
+ 3.0.148-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 e64544a6ac..645fe9d05c 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.145-SNAPSHOT
+ 3.0.148-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 767c5b008c..5661da9cf7 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.145-SNAPSHOT
+ 3.0.148-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 bc829ee28e..a8100ff934 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.145-SNAPSHOT
+ 3.0.148-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 39d08c73f3..4c352bde49 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java
index 33371e3c9d..b7a4086d0e 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/dao/impl/EnrollmentDAOImpl.java
@@ -23,9 +23,12 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.dao.EnrollmentDAO;
import org.wso2.carbon.device.mgt.core.dao.util.DeviceManagementDAOUtil;
-import org.wso2.carbon.device.mgt.core.operation.mgt.OperationMapping;
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -201,25 +204,53 @@ public class EnrollmentDAOImpl implements EnrollmentDAO {
return true;
}
- @Override
- public boolean setStatus(String currentOwner, EnrolmentInfo.Status status,
- int tenantId) throws DeviceManagementDAOException {
+ private int getCountOfDevicesOfOwner(String owner, int tenantID) throws DeviceManagementDAOException {
Connection conn;
PreparedStatement stmt = null;
+ ResultSet rs = null;
+ int count = 0;
try {
conn = this.getConnection();
- String sql = "UPDATE DM_ENROLMENT SET STATUS = ? WHERE OWNER = ? AND TENANT_ID = ?";
- stmt = conn.prepareStatement(sql);
- stmt.setString(1, status.toString());
- stmt.setString(2, currentOwner);
- stmt.setInt(3, tenantId);
- stmt.executeUpdate();
+ String checkQuery = "SELECT COUNT(ID) AS COUNT FROM DM_ENROLMENT WHERE OWNER = ? AND TENANT_ID = ?";
+ stmt = conn.prepareStatement(checkQuery);
+ stmt.setString(1, owner);
+ stmt.setInt(2, tenantID);
+ rs = stmt.executeQuery();
+ if(rs.next()){
+ count = rs.getInt("COUNT");
+ }
} catch (SQLException e) {
- throw new DeviceManagementDAOException("Error occurred while setting the status of device enrolment", e);
+ throw new DeviceManagementDAOException("Error occurred while trying to get device " +
+ "count of Owner : "+owner, e);
} finally {
- DeviceManagementDAOUtil.cleanupResources(stmt, null);
+ DeviceManagementDAOUtil.cleanupResources(stmt, rs);
+ }
+ return count;
+ }
+
+ @Override
+ public boolean setStatus(String currentOwner, EnrolmentInfo.Status status,
+ int tenantId) throws DeviceManagementDAOException {
+ Connection conn;
+ PreparedStatement stmt = null;
+ if(getCountOfDevicesOfOwner(currentOwner, tenantId) > 0){
+ try {
+ conn = this.getConnection();
+ String sql = "UPDATE DM_ENROLMENT SET STATUS = ? WHERE OWNER = ? AND TENANT_ID = ?";
+ stmt = conn.prepareStatement(sql);
+ stmt.setString(1, status.toString());
+ stmt.setString(2, currentOwner);
+ stmt.setInt(3, tenantId);
+ stmt.executeUpdate();
+ } catch (SQLException e) {
+ throw new DeviceManagementDAOException("Error occurred while setting the status of device enrolment", e);
+ } finally {
+ DeviceManagementDAOUtil.cleanupResources(stmt, null);
+ }
+ return true;
+ } else {
+ return false;
}
- return true;
}
@Override
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 a575d18cf3..500e48b0ee 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
@@ -394,28 +394,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
List activities = new ArrayList<>();
try {
Connection conn = OperationManagementDAOFactory.getConnection();
-
-/*
- String sql = "SELECT opm.ENROLMENT_ID, opm.CREATED_TIMESTAMP, opm.UPDATED_TIMESTAMP, opm.OPERATION_ID,\n" +
- "op.OPERATION_CODE, op.TYPE as OPERATION_TYPE, opm.STATUS, en.DEVICE_ID,\n" +
- "ops.RECEIVED_TIMESTAMP, ops.ID as OP_RES_ID, ops.OPERATION_RESPONSE,\n" +
- "de.DEVICE_IDENTIFICATION, dt.NAME as DEVICE_TYPE\n" +
- "FROM DM_ENROLMENT_OP_MAPPING AS opm\n" +
- "LEFT JOIN DM_OPERATION AS op ON opm.OPERATION_ID = op.ID \n" +
- "LEFT JOIN DM_ENROLMENT as en ON opm.ENROLMENT_ID = en.ID \n" +
- "LEFT JOIN DM_DEVICE as de ON en.DEVICE_ID = de.ID \n" +
- "LEFT JOIN DM_DEVICE_TYPE as dt ON dt.ID = de.DEVICE_TYPE_ID \n" +
- "LEFT JOIN DM_DEVICE_OPERATION_RESPONSE as ops ON \n" +
- "opm.ENROLMENT_ID = ops.ENROLMENT_ID AND opm.OPERATION_ID = ops.OPERATION_ID \n" +
- "WHERE opm.UPDATED_TIMESTAMP > ? \n" +
- "AND de.TENANT_ID = ? \n";
-
- if (timestamp == 0) {
- sql += "ORDER BY opm.OPERATION_ID LIMIT ? OFFSET ?;";
- } else {
- sql += "ORDER BY opm.UPDATED_TIMESTAMP asc LIMIT ? OFFSET ?";
- }
-*/
int tenantId = PrivilegedCarbonContext.getThreadLocalCarbonContext().getTenantId();
String sql = "SELECT " +
" opr.ENROLMENT_ID, " +
@@ -650,11 +628,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
operation.setStatus(Operation.Status.valueOf(rs.getString("STATUS")));
-// if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
-// operation.setReceivedTimeStamp("");
-// } else {
-// operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
-// }
if (rs.getLong("UPDATED_TIMESTAMP") == 0) {
operation.setReceivedTimeStamp("");
} else {
@@ -696,11 +669,6 @@ public class GenericOperationDAOImpl implements OperationDAO {
operation.setId(rs.getInt("ID"));
operation.setType(Operation.Type.valueOf(rs.getString("TYPE")));
operation.setCreatedTimeStamp(rs.getTimestamp("CREATED_TIMESTAMP").toString());
-// if (rs.getTimestamp("RECEIVED_TIMESTAMP") == null) {
-// operation.setReceivedTimeStamp("");
-// } else {
-// operation.setReceivedTimeStamp(rs.getTimestamp("RECEIVED_TIMESTAMP").toString());
-// }
if (rs.getLong("UPDATED_TIMESTAMP") == 0) {
operation.setReceivedTimeStamp("");
} else {
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java
index cf7a1eb069..f96e2e4048 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/ProcessorImpl.java
@@ -251,7 +251,7 @@ public class ProcessorImpl implements Processor {
if (log.isDebugEnabled()) {
log.debug("Query : " + queryHolder.getQuery());
}
- Connection conn;
+ Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
List devices = new ArrayList<>();
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java
index d5d0b1700a..65b6af46fa 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/QueryBuilderImpl.java
@@ -23,7 +23,11 @@ import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.device.mgt.common.search.Condition;
-import org.wso2.carbon.device.mgt.core.search.mgt.*;
+import org.wso2.carbon.device.mgt.core.search.mgt.Constants;
+import org.wso2.carbon.device.mgt.core.search.mgt.InvalidOperatorException;
+import org.wso2.carbon.device.mgt.core.search.mgt.QueryBuilder;
+import org.wso2.carbon.device.mgt.core.search.mgt.QueryHolder;
+import org.wso2.carbon.device.mgt.core.search.mgt.ValueType;
import java.util.ArrayList;
import java.util.HashMap;
@@ -93,8 +97,8 @@ public class QueryBuilderImpl implements QueryBuilder {
intArr[0] = 1;
//int x = 1;
String query = this.getGenericQueryPart(valueTypeArray) +
- this.processAND(andColumns, valueTypeArray, intArr) +
- this.processOR(orColumns, valueTypeArray, intArr);
+ this.processAND(andColumns, valueTypeArray, intArr) +
+ this.processOR(orColumns, valueTypeArray, intArr);
List queryHolders = new ArrayList<>();
QueryHolder queryHolder = new QueryHolder();
queryHolder.setQuery(query);
@@ -135,20 +139,13 @@ public class QueryBuilderImpl implements QueryBuilder {
+ " LIKE ? ";
ValueType type = new ValueType();
type.setColumnType(ValueType.columnType.STRING);
- type.setStringValue("%"+con.getValue()+"%");
+ type.setStringValue("%" + con.getValue() + "%");
valueType[x] = type;
x++;
} else {
querySuffix = querySuffix + " AND DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey()) + con
.getOperator() + " ? ";
- ValueType type = new ValueType();
- if (Utils.checkColumnType(con.getKey())) {
- type.setColumnType(ValueType.columnType.STRING);
- type.setStringValue(con.getValue());
- } else {
- type.setColumnType(ValueType.columnType.INTEGER);
- type.setIntValue(Integer.parseInt(con.getValue()));
- }
+ ValueType type = this.getValueType(con);
valueType[x] = type;
x++;
}
@@ -182,21 +179,15 @@ public class QueryBuilderImpl implements QueryBuilder {
+ " LIKE ? ";
ValueType type = new ValueType();
type.setColumnType(ValueType.columnType.STRING);
- type.setStringValue("%"+con.getValue()+"%");
+ type.setStringValue("%" + con.getValue() + "%");
valueType[x] = type;
x++;
} else {
querySuffix = querySuffix + " OR DD." + Utils.getDeviceDetailsColumnNames().get(con.getKey()) + con
.getOperator() + " ? ";
- ValueType type = new ValueType();
- if (Utils.checkColumnType(con.getKey())) {
- type.setColumnType(ValueType.columnType.STRING);
- type.setStringValue(con.getValue());
- } else {
- type.setColumnType(ValueType.columnType.INTEGER);
- type.setIntValue(Integer.parseInt(con.getValue()));
- }
+ ValueType type = this.getValueType(con);
+
valueType[x] = type;
x++;
}
@@ -386,4 +377,35 @@ public class QueryBuilderImpl implements QueryBuilder {
throw new InvalidOperatorException("Error occurred while building the sql", e);
}
}
+
+ /**
+ * Returns a Value type based on the Condition data.
+ *
+ * @param con : The condition that passed.
+ * @re
+ */
+ private ValueType getValueType(Condition con) {
+ ValueType type = new ValueType();
+ String colValue = Utils.checkColumnType(con.getKey());
+
+ switch (colValue) {
+ case "String":
+ type.setColumnType(ValueType.columnType.STRING);
+ type.setStringValue(con.getValue());
+ break;
+ case "Double":
+ type.setColumnType(ValueType.columnType.DOUBLE);
+ type.setDoubleValue(Double.parseDouble(con.getValue()));
+ break;
+ case "Integer":
+ type.setColumnType(ValueType.columnType.INTEGER);
+ type.setIntValue(Integer.parseInt(con.getValue()));
+ break;
+ case "Long":
+ type.setColumnType(ValueType.columnType.STRING);
+ type.setLongValue(Long.parseLong(con.getValue()));
+ }
+
+ return type;
+ }
}
\ No newline at end of file
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/Utils.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/Utils.java
index 9e0d044e1e..fb5251acf4 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/Utils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/main/java/org/wso2/carbon/device/mgt/core/search/mgt/impl/Utils.java
@@ -75,32 +75,56 @@ public class Utils {
}
- public static boolean checkColumnType(String column) {
+ public static String checkColumnType(String column) {
- boolean bool = false;
+ String type;
switch (column) {
case "deviceModel":
- bool = true;
+ type = "String";
break;
case "vendor":
- bool = true;
+ type = "String";
break;
case "osVersion":
- bool = true;
+ type = "String";
break;
case "connectionType":
- bool = true;
+ type = "String";
break;
case "ssid":
- bool = true;
+ type = "String";
+ break;
+ case "imei":
+ type = "String";
+ break;
+ case "imsi":
+ type = "String";
+ break;
+ case "batteryLevel":
+ type = "Double";
+ break;
+ case "internalTotalMemory":
+ type = "Double";
+ break;
+ case "internalAvailableMemory":
+ type = "Double";
+ break;
+ case "externalAvailableMemory":
+ type = "Double";
+ break;
+ case "externalTotalMemory":
+ type = "Double";
+ break;
+ case "cpuUsage":
+ type = "Double";
break;
default:
- bool = false;
+ type = "String";
break;
}
- return bool;
+ return type;
}
public static Map getDeviceDetailsColumnNames() {
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 552c10d12e..5244a74201 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
@@ -66,8 +66,11 @@ import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOException;
import org.wso2.carbon.device.mgt.core.dao.DeviceManagementDAOFactory;
import org.wso2.carbon.device.mgt.core.dao.DeviceTypeDAO;
import org.wso2.carbon.device.mgt.core.dao.EnrollmentDAO;
+import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceDetailsMgtException;
+import org.wso2.carbon.device.mgt.core.device.details.mgt.DeviceInformationManager;
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.device.details.mgt.impl.DeviceInformationManagerImpl;
import org.wso2.carbon.device.mgt.core.dto.DeviceType;
import org.wso2.carbon.device.mgt.core.dto.DeviceTypeServiceIdentifier;
import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
@@ -272,6 +275,18 @@ public class DeviceManagementProviderServiceImpl implements DeviceManagementProv
DeviceManagementDAOFactory.closeConnection();
}
+ if (device.getDeviceInfo() != null) {
+ DeviceInformationManager deviceInformationManager = new DeviceInformationManagerImpl();
+ try {
+ deviceInformationManager.addDeviceInfo(deviceIdentifier, device.getDeviceInfo());
+ } catch (DeviceDetailsMgtException e) {
+ String msg = "Error occurred while adding device info for the device " +
+ device.getDeviceIdentifier();
+ log.error(msg, e);
+ throw new DeviceManagementException(msg, e);
+ }
+ }
+
if (log.isDebugEnabled()) {
log.debug("An enrolment is successfully created with the id '" + enrolmentId + "' associated with " +
"the device identified by key '" + device.getDeviceIdentifier() + "', which belongs to " +
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 010b47b8d0..e30edc3f48 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
@@ -20,6 +20,7 @@ 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.ArrayList;
import java.util.List;
public class TestDeviceManager implements DeviceManager {
@@ -80,7 +81,15 @@ public class TestDeviceManager implements DeviceManager {
@Override
public Device getDevice(DeviceIdentifier deviceId) throws DeviceManagementException {
- return null;
+ List features = new ArrayList();
+ List properties = new ArrayList();
+ Device.Property prop1 = new Device.Property();
+ prop1.setName("Prop1");
+ prop1.setValue("Prop1-value");
+ properties.add(prop1);
+ Device device = new Device(deviceId.getType()+"-"+deviceId.getId(), deviceId.getType(),
+ "This is a test Device", deviceId.getId(), null, features, properties);
+ return device;
}
@Override
@@ -92,7 +101,7 @@ public class TestDeviceManager implements DeviceManager {
@Override
public boolean setOwnership(DeviceIdentifier deviceId, String ownershipType)
throws DeviceManagementException {
- 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/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 466d92becf..57ac66a1ea 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
@@ -21,10 +21,7 @@ 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.BeforeClass;
import org.testng.annotations.BeforeSuite;
import org.w3c.dom.Document;
@@ -59,14 +56,11 @@ 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;
import java.sql.Statement;
public abstract class BaseDeviceManagementTest {
private DataSource dataSource;
- private static final Log log = LogFactory.getLog(BaseDeviceManagementTest.class);
@BeforeSuite
public void setupDataSource() throws Exception {
@@ -77,7 +71,8 @@ public abstract class BaseDeviceManagementTest {
}
protected void initDataSource() throws Exception {
- this.dataSource = this.getDataSource(this.readDataSourceConfig());
+ this.dataSource = this.getDataSource(this.
+ readDataSourceConfig("src/test/resources/config/datasource/data-source-config.xml"));
DeviceManagementDAOFactory.init(dataSource);
GroupManagementDAOFactory.init(dataSource);
OperationManagementDAOFactory.init(dataSource);
@@ -116,7 +111,7 @@ public abstract class BaseDeviceManagementTest {
@BeforeClass
public abstract void init() throws Exception;
- private DataSource getDataSource(DataSourceConfig config) {
+ protected DataSource getDataSource(DataSourceConfig config) {
PoolProperties properties = new PoolProperties();
properties.setUrl(config.getUrl());
properties.setDriverClassName(config.getDriverClassName());
@@ -151,9 +146,9 @@ public abstract class BaseDeviceManagementTest {
PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID);
}
- private DataSourceConfig readDataSourceConfig() throws DeviceManagementException {
+ protected DataSourceConfig readDataSourceConfig(String configLocation) throws DeviceManagementException {
try {
- File file = new File("src/test/resources/config/datasource/data-source-config.xml");
+ File file = new File(configLocation);
Document doc = DeviceManagerUtil.convertToDocument(file);
JAXBContext testDBContext = JAXBContext.newInstance(DataSourceConfig.class);
Unmarshaller unmarshaller = testDBContext.createUnmarshaller();
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java
new file mode 100644
index 0000000000..f7a3e1bdf4
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockConnection.java
@@ -0,0 +1,316 @@
+/*
+* 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.mock;
+
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.NClob;
+import java.sql.PreparedStatement;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.Struct;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Executor;
+
+/**
+ * This is mock class which provides mock database connection.
+ */
+public class MockConnection implements Connection {
+ @Override
+ public Statement createStatement() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public String nativeSQL(String sql) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setAutoCommit(boolean autoCommit) throws SQLException {
+
+ }
+
+ @Override
+ public boolean getAutoCommit() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public void commit() throws SQLException {
+
+ }
+
+ @Override
+ public void rollback() throws SQLException {
+
+ }
+
+ @Override
+ public void close() throws SQLException {
+
+ }
+
+ @Override
+ public boolean isClosed() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public DatabaseMetaData getMetaData() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setReadOnly(boolean readOnly) throws SQLException {
+
+ }
+
+ @Override
+ public boolean isReadOnly() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public void setCatalog(String catalog) throws SQLException {
+
+ }
+
+ @Override
+ public String getCatalog() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setTransactionIsolation(int level) throws SQLException {
+
+ }
+
+ @Override
+ public int getTransactionIsolation() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public SQLWarning getWarnings() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void clearWarnings() throws SQLException {
+
+ }
+
+ @Override
+ public Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency)
+ throws SQLException {
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency)
+ throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Map> getTypeMap() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setTypeMap(Map> map) throws SQLException {
+
+ }
+
+ @Override
+ public void setHoldability(int holdability) throws SQLException {
+
+ }
+
+ @Override
+ public int getHoldability() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public Savepoint setSavepoint() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Savepoint setSavepoint(String name) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void rollback(Savepoint savepoint) throws SQLException {
+
+ }
+
+ @Override
+ public void releaseSavepoint(Savepoint savepoint) throws SQLException {
+
+ }
+
+ @Override
+ public Statement createStatement(int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency,
+ int resultSetHoldability) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency,
+ int resultSetHoldability) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Clob createClob() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Blob createBlob() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public NClob createNClob() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public SQLXML createSQLXML() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean isValid(int timeout) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public void setClientInfo(String name, String value) throws SQLClientInfoException {
+
+ }
+
+ @Override
+ public void setClientInfo(Properties properties) throws SQLClientInfoException {
+
+ }
+
+ @Override
+ public String getClientInfo(String name) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Properties getClientInfo() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setSchema(String schema) throws SQLException {
+
+ }
+
+ @Override
+ public String getSchema() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void abort(Executor executor) throws SQLException {
+
+ }
+
+ @Override
+ public void setNetworkTimeout(Executor executor, int milliseconds) throws SQLException {
+
+ }
+
+ @Override
+ public int getNetworkTimeout() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public T unwrap(Class iface) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ return false;
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.java
new file mode 100644
index 0000000000..e9231bbe42
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockDataSource.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.mock;
+
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.logging.Logger;
+import javax.sql.DataSource;
+
+/**
+ * This is the mock data source implementation that will be used in the test cases.
+ *
+ */
+public class MockDataSource implements DataSource {
+ private boolean throwException = false;
+ private Connection connection;
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ if (throwException) {
+ throw new SQLException("Cannot created test connection.");
+ } else {
+ if (connection != null) {
+ return connection;
+ }
+ return new MockConnection();
+ }
+ }
+
+ @Override
+ public Connection getConnection(String username, String password) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public T unwrap(Class iface) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public PrintWriter getLogWriter() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void setLogWriter(PrintWriter out) throws SQLException {
+
+ }
+
+ @Override
+ public void setLoginTimeout(int seconds) throws SQLException {
+
+ }
+
+ @Override
+ public int getLoginTimeout() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+ return null;
+ }
+
+ public void setThrowException(boolean throwException) {
+ this.throwException = throwException;
+ }
+
+ public void reset() {
+ this.throwException = false;
+ this.connection = null;
+ }
+
+ private void setConnection(Connection connection) {
+ this.connection = connection;
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockJDBCDriver.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockJDBCDriver.java
new file mode 100644
index 0000000000..1ce52f5544
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockJDBCDriver.java
@@ -0,0 +1,69 @@
+/*
+* 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.mock;
+
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverPropertyInfo;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.Properties;
+import java.util.logging.Logger;
+
+/**
+ * This is the mock JDBC driver which is used in the testcases to mock other database operations.
+ */
+public class MockJDBCDriver implements Driver {
+
+ @Override
+ public Connection connect(String url, Properties info) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean acceptsURL(String url) throws SQLException {
+ return true;
+ }
+
+ @Override
+ public DriverPropertyInfo[] getPropertyInfo(String url, Properties info) throws SQLException {
+ return new DriverPropertyInfo[0];
+ }
+
+ @Override
+ public int getMajorVersion() {
+ return 0;
+ }
+
+ @Override
+ public int getMinorVersion() {
+ return 0;
+ }
+
+ @Override
+ public boolean jdbcCompliant() {
+ return true;
+ }
+
+ @Override
+ public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+ return null;
+ }
+
+
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java
new file mode 100644
index 0000000000..f717f67660
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/mock/MockStatement.java
@@ -0,0 +1,250 @@
+/*
+* 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.mock;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+
+/**
+ * This is the mock statement for the testcases.
+ */
+public class MockStatement implements Statement {
+
+ @Override
+ public ResultSet executeQuery(String sql) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public int executeUpdate(String sql) throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public void close() throws SQLException {
+
+ }
+
+ @Override
+ public int getMaxFieldSize() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public void setMaxFieldSize(int max) throws SQLException {
+
+ }
+
+ @Override
+ public int getMaxRows() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public void setMaxRows(int max) throws SQLException {
+
+ }
+
+ @Override
+ public void setEscapeProcessing(boolean enable) throws SQLException {
+
+ }
+
+ @Override
+ public int getQueryTimeout() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public void setQueryTimeout(int seconds) throws SQLException {
+
+ }
+
+ @Override
+ public void cancel() throws SQLException {
+
+ }
+
+ @Override
+ public SQLWarning getWarnings() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public void clearWarnings() throws SQLException {
+
+ }
+
+ @Override
+ public void setCursorName(String name) throws SQLException {
+
+ }
+
+ @Override
+ public boolean execute(String sql) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public ResultSet getResultSet() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public int getUpdateCount() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public boolean getMoreResults() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public void setFetchDirection(int direction) throws SQLException {
+
+ }
+
+ @Override
+ public int getFetchDirection() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public void setFetchSize(int rows) throws SQLException {
+
+ }
+
+ @Override
+ public int getFetchSize() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public int getResultSetConcurrency() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public int getResultSetType() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public void addBatch(String sql) throws SQLException {
+
+ }
+
+ @Override
+ public void clearBatch() throws SQLException {
+
+ }
+
+ @Override
+ public int[] executeBatch() throws SQLException {
+ return new int[0];
+ }
+
+ @Override
+ public Connection getConnection() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean getMoreResults(int current) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public ResultSet getGeneratedKeys() throws SQLException {
+ return null;
+ }
+
+ @Override
+ public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public int executeUpdate(String sql, String[] columnNames) throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public boolean execute(String sql, int[] columnIndexes) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public boolean execute(String sql, String[] columnNames) throws SQLException {
+ return false;
+ }
+
+ @Override
+ public int getResultSetHoldability() throws SQLException {
+ return 0;
+ }
+
+ @Override
+ public boolean isClosed() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public void setPoolable(boolean poolable) throws SQLException {
+
+ }
+
+ @Override
+ public boolean isPoolable() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public void closeOnCompletion() throws SQLException {
+
+ }
+
+ @Override
+ public boolean isCloseOnCompletion() throws SQLException {
+ return false;
+ }
+
+ @Override
+ public T unwrap(Class iface) throws SQLException {
+ return null;
+ }
+
+ @Override
+ public boolean isWrapperFor(Class> iface) throws SQLException {
+ return false;
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java
new file mode 100644
index 0000000000..981fbd5c3b
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNegativeDBOperationTest.java
@@ -0,0 +1,228 @@
+/*
+* 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.testng.annotations.AfterClass;
+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.PaginationRequest;
+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.common.BaseDeviceManagementTest;
+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.mock.MockDataSource;
+import org.wso2.carbon.device.mgt.core.operation.mgt.OperationManagerImpl;
+import org.wso2.carbon.device.mgt.core.operation.mgt.dao.OperationManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+import javax.sql.DataSource;
+
+/**
+ * Negative testcases for {@link OperationManagerImpl}
+ * regarding the database connectivity.
+ */
+public class OperationManagementNegativeDBOperationTest extends BaseDeviceManagementTest {
+
+ private static final String DEVICE_TYPE = "NEGDB_OP_TEST_TYPE";
+ private static final String DEVICE_ID_PREFIX = "NEGDB_OP-TEST-DEVICE-ID-";
+ private static final int NO_OF_DEVICES = 5;
+ private static final String ADMIN_USER = "admin";
+
+ private List deviceIds = new ArrayList<>();
+ private OperationManager operationMgtService;
+ private MockDataSource dataSource;
+
+
+ @BeforeClass
+ @Override
+ public void init() throws Exception {
+ DataSource datasource = this.getDataSource(this.
+ readDataSourceConfig("src/test/resources/config/datasource/mock-data-source-config.xml"));
+ OperationManagementDAOFactory.init(datasource);
+ 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();
+ 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!");
+ }
+ }
+ NotificationStrategy notificationStrategy = new TestNotificationStrategy();
+ this.operationMgtService = new OperationManagerImpl(DEVICE_TYPE, notificationStrategy);
+ this.setMockDataSource();
+ }
+
+ @Test(description = "Get operation by device id", expectedExceptions = OperationManagementException.class)
+ public void getOperations() throws OperationManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperations(this.deviceIds.get(0));
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get operations with paginated request",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationsPaginatedRequest() throws OperationManagementException {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID, true);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ PaginationRequest request = new PaginationRequest(1, 2);
+ request.setDeviceType(DEVICE_TYPE);
+ request.setOwner(ADMIN_USER);
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperations(this.deviceIds.get(0), request);
+ } finally {
+ PrivilegedCarbonContext.endTenantFlow();
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get pending operations", expectedExceptions = OperationManagementException.class)
+ public void getPendingOperations() throws OperationManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getPendingOperations(this.deviceIds.get(0));
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get next pending operations", expectedExceptions = OperationManagementException.class)
+ public void getNextPendingOperations() throws OperationManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getNextPendingOperation(this.deviceIds.get(0));
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get operation by device and operation id",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByDeviceAndOperationId() throws OperationManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperationByDeviceAndOperationId(this.deviceIds.get(0), 1);
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get operation by device and status",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByDeviceAndStatus() throws OperationManagementException, DeviceManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperationsByDeviceAndStatus(this.deviceIds.get(0), Operation.Status.PENDING);
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get operation by operation id",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByOperationId() throws OperationManagementException, DeviceManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperation(1);
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get operation by activity id",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByActivityId() throws OperationManagementException, DeviceManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperationByActivityId("ACTIVITY_1");
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get operation by activity id and device id",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByActivityAndDeviceID() throws OperationManagementException, DeviceManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getOperationByActivityIdAndDevice("ACTIVITY_1", deviceIds.get(0));
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get activities updated after some timestamp",
+ expectedExceptions = OperationManagementException.class)
+ public void getActivitiesUpdatedAfter() throws OperationManagementException, DeviceManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getActivitiesUpdatedAfter(System.currentTimeMillis() / 1000, 10, 0);
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ @Test(description = "Get activities count updated after some timestamp",
+ expectedExceptions = OperationManagementException.class)
+ public void getActivityCountUpdatedAfter() throws OperationManagementException, DeviceManagementException {
+ this.dataSource.setThrowException(true);
+ try {
+ this.operationMgtService.getActivityCountUpdatedAfter(System.currentTimeMillis() / 1000);
+ } finally {
+ this.dataSource.reset();
+ }
+ }
+
+ private void setMockDataSource() throws NoSuchFieldException, IllegalAccessException {
+ Field datasource = OperationManagementDAOFactory.class.getDeclaredField("dataSource");
+ datasource.setAccessible(true);
+ this.dataSource = new MockDataSource();
+ datasource.set(datasource, this.dataSource);
+ }
+
+ @AfterClass
+ public void resetDatabase() throws DeviceManagementException {
+ OperationManagementDAOFactory.init(this.getDataSource(this.
+ readDataSourceConfig("src/test/resources/config/datasource/data-source-config.xml")));
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNoDBSchemaTests.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNoDBSchemaTests.java
new file mode 100644
index 0000000000..3292b4960e
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/operation/OperationManagementNoDBSchemaTests.java
@@ -0,0 +1,196 @@
+/*
+* 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.testng.annotations.AfterClass;
+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.InvalidDeviceException;
+import org.wso2.carbon.device.mgt.common.PaginationRequest;
+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.DeviceManagementConstants;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+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.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.operation.mgt.dao.OperationManagementDAOFactory;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.sql.DataSource;
+
+/**
+ * This is the testcase which covers the methods from {@link OperationManager}
+ */
+public class OperationManagementNoDBSchemaTests extends BaseDeviceManagementTest {
+
+ private static final String DEVICE_TYPE = "NEG_OP_TEST_TYPE";
+ private static final String DEVICE_ID_PREFIX = "NEG_OP-TEST-DEVICE-ID-";
+ private static final String COMMAND_OPERATON_CODE = "COMMAND-TEST";
+ private static final int NO_OF_DEVICES = 5;
+ private static final String ADMIN_USER = "admin";
+
+ private List deviceIds = new ArrayList<>();
+ private OperationManager operationMgtService;
+
+ @BeforeClass
+ public void init() throws Exception {
+ DataSource datasource = this.getDataSource(this.
+ readDataSourceConfig("src/test/resources/config/datasource/no-table-data-source-config.xml"));
+ OperationManagementDAOFactory.init(datasource);
+ 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();
+ 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!");
+ }
+ }
+ NotificationStrategy notificationStrategy = new TestNotificationStrategy();
+ this.operationMgtService = new OperationManagerImpl(DEVICE_TYPE, notificationStrategy);
+ }
+
+ @Test(description = "add operation", expectedExceptions = OperationManagementException.class)
+ public void addCommandOperation() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ this.operationMgtService.addOperation(
+ OperationManagementTests.getOperation(new CommandOperation(),
+ Operation.Type.COMMAND, COMMAND_OPERATON_CODE),
+ this.deviceIds);
+ }
+
+ @Test(description = "Get operations", expectedExceptions = OperationManagementException.class)
+ public void getOperations() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ for (DeviceIdentifier deviceIdentifier : deviceIds) {
+ this.operationMgtService.getOperations(deviceIdentifier);
+ }
+ }
+
+
+ @Test(description = "Get Pending operations", expectedExceptions = OperationManagementException.class)
+ public void getPendingOperations() throws DeviceManagementException, OperationManagementException,
+ InvalidDeviceException {
+ for (DeviceIdentifier deviceIdentifier : deviceIds) {
+ this.operationMgtService.getPendingOperations(deviceIdentifier);
+ }
+ }
+
+ @Test(description = "Get paginated request", expectedExceptions = OperationManagementException.class)
+ public void getPaginatedRequestAsAdmin() throws OperationManagementException {
+ PrivilegedCarbonContext.startTenantFlow();
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setTenantId(MultitenantConstants.SUPER_TENANT_ID, true);
+ PrivilegedCarbonContext.getThreadLocalCarbonContext().setUsername(ADMIN_USER);
+ PaginationRequest request = new PaginationRequest(1, 2);
+ request.setDeviceType(DEVICE_TYPE);
+ request.setOwner(ADMIN_USER);
+ for (DeviceIdentifier deviceIdentifier : deviceIds) {
+ this.operationMgtService.getOperations(deviceIdentifier, request);
+ }
+ PrivilegedCarbonContext.endTenantFlow();
+ }
+
+ @Test(description = "Update operation", expectedExceptions = OperationManagementException.class)
+ public void updateOperation() throws OperationManagementException {
+ DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
+ Operation operation = OperationManagementTests.getOperation(new CommandOperation(), Operation.Type.COMMAND,
+ COMMAND_OPERATON_CODE);
+ operation.setStatus(Operation.Status.COMPLETED);
+ operation.setOperationResponse("The operation is successfully completed");
+ this.operationMgtService.updateOperation(deviceIdentifier, operation);
+ }
+
+ @Test(description = "Get next pending operation", expectedExceptions = OperationManagementException.class)
+ public void getNextPendingOperation() throws OperationManagementException {
+ DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
+ this.operationMgtService.getNextPendingOperation(deviceIdentifier);
+ }
+
+
+ @Test(description = "get operation by device and operation id",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByDeviceAndOperationId() throws OperationManagementException {
+ DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
+ this.operationMgtService.getOperationByDeviceAndOperationId(deviceIdentifier, 1);
+ }
+
+ @Test(description = "Get operation by device and status",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationsByDeviceAndStatus() throws OperationManagementException, DeviceManagementException {
+ DeviceIdentifier deviceIdentifier = this.deviceIds.get(0);
+ this.operationMgtService.getOperationsByDeviceAndStatus(deviceIdentifier,
+ Operation.Status.PENDING);
+ }
+
+ @Test(description = "Get operation by operation id", expectedExceptions = OperationManagementException.class)
+ public void getOperation() throws OperationManagementException, DeviceManagementException {
+ this.operationMgtService.getOperation(1);
+ }
+
+ @Test(description = "Get operation activity", expectedExceptions = OperationManagementException.class)
+ public void getOperationActivity() throws OperationManagementException {
+ this.operationMgtService.getOperationByActivityId
+ (DeviceManagementConstants.OperationAttributes.ACTIVITY + "1");
+ }
+
+ @Test(description = "Get operation by activity id and device",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationByActivityIdAndDevice() throws OperationManagementException {
+ this.operationMgtService.getOperationByActivityIdAndDevice(
+ DeviceManagementConstants.OperationAttributes.ACTIVITY + "1", this.deviceIds.get(0));
+ }
+
+ @Test(description = "Get activities updated after some time",
+ expectedExceptions = OperationManagementException.class)
+ public void getOperationUpdatedAfterWithLimitAndOffset() throws OperationManagementException {
+ this.operationMgtService.getActivitiesUpdatedAfter(System.currentTimeMillis() / 1000, 10, 0);
+ }
+
+ @Test(description = "Get activity count updated after",
+ expectedExceptions = OperationManagementException.class)
+ public void getActivityCountUpdatedAfter() throws OperationManagementException {
+ this.operationMgtService.getActivityCountUpdatedAfter(System.currentTimeMillis() / 1000);
+ }
+
+ @AfterClass
+ public void resetDatabase() throws DeviceManagementException {
+ OperationManagementDAOFactory.init(this.getDataSource(this.
+ readDataSourceConfig("src/test/resources/config/datasource/data-source-config.xml")));
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/ProcessorImplTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/ProcessorImplTest.java
new file mode 100644
index 0000000000..4e5f26a548
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/ProcessorImplTest.java
@@ -0,0 +1,174 @@
+/*
+ * 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.search;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.powermock.api.mockito.PowerMockito;
+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.authorization.DeviceAccessAuthorizationService;
+import org.wso2.carbon.device.mgt.common.search.Condition;
+import org.wso2.carbon.device.mgt.common.search.SearchContext;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+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.dao.DeviceManagementDAOFactory;
+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.search.mgt.InvalidOperatorException;
+import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException;
+import org.wso2.carbon.device.mgt.core.search.mgt.impl.ProcessorImpl;
+import org.wso2.carbon.device.mgt.core.search.util.ChangeEnumValues;
+import org.wso2.carbon.device.mgt.core.search.util.Utils;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import javax.sql.DataSource;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * This class holds unit test cases for org.wso2.carbon.device.mgt.core.search.mgt.impl.ProcessorImpl
+ * */
+public class ProcessorImplTest extends BaseDeviceManagementTest{
+
+ private DeviceAccessAuthorizationService deviceAccessAuthorizationService;
+ private static final Log log = LogFactory.getLog(SearchManagementServiceTest.class);
+ private static List deviceIdentifiers = new ArrayList<>();
+ private static final String DEVICE_ID_PREFIX = "SEARCH-DEVICE-ID-";
+ private static final String DEVICE_TYPE = "SEARCH_TYPE";
+
+ @BeforeClass
+ public void init() throws Exception {
+ deviceAccessAuthorizationService = DeviceManagementDataHolder.getInstance()
+ .getDeviceAccessAuthorizationService();
+
+ for (int i = 0; i < 5; i++) {
+ deviceIdentifiers.add(new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE));
+ }
+ DeviceManagementProviderService deviceMgtService = new DeviceManagementProviderServiceImpl();
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceMgtService);
+ deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
+
+ List devices = TestDataHolder.generateDummyDeviceData(deviceIdentifiers);
+ for (Device device : devices) {
+ device.setDeviceInfo(Utils.getDeviceInfo());
+ deviceMgtService.enrollDevice(device);
+ }
+ List returnedDevices = deviceMgtService.getAllDevices(DEVICE_TYPE, true);
+ for (Device device : returnedDevices) {
+ if (!device.getDeviceIdentifier().startsWith(DEVICE_ID_PREFIX)) {
+ throw new Exception("Incorrect device with ID - " + device.getDeviceIdentifier() + " returned!");
+ }
+ }
+ }
+
+ @Test(description = "Test the Search Processor")
+ public void testWithNoDeviceAccessAuthorization() throws Exception {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("batteryLevel");
+ cond.setOperator("=");
+ cond.setValue("40");
+ cond.setState(Condition.State.AND);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ ProcessorImpl processor = new ProcessorImpl();
+ Field deviceAccessAuthorizationServiceField = ProcessorImpl.class.getDeclaredField
+ ("deviceAccessAuthorizationService");
+ deviceAccessAuthorizationServiceField.setAccessible(true);
+ deviceAccessAuthorizationServiceField.set(processor, null);
+
+ List searchedDevices = processor.execute(context);
+
+ Assert.assertEquals(0, searchedDevices.size());
+ }
+
+
+ @Test(description = "Test for invalid state")
+ public void testInvalidState() throws SearchMgtException {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ ChangeEnumValues.addEnum(Condition.State.class, "BLA");
+
+ Condition.State state = Condition.State.valueOf("BLA");
+
+ Condition cond = new Condition();
+ cond.setKey("batteryLevel");
+ cond.setOperator("=");
+ cond.setValue("40");
+ cond.setState(Condition.State.AND);
+ conditions.add(cond);
+
+ Condition cond2 = new Condition();
+ cond2.setKey("LOCATION");
+ cond2.setOperator("=");
+ cond2.setValue("Karandeniya");
+ cond2.setState(Condition.State.AND);
+ conditions.add(cond2);
+
+ Condition cond3 = new Condition();
+ cond3.setKey("batteryLevel");
+ cond3.setOperator("=");
+ cond3.setValue("23.0");
+ cond3.setState(state);
+ conditions.add(cond3);
+
+ context.setConditions(conditions);
+
+ ProcessorImpl processor = new ProcessorImpl();
+ try {
+ processor.execute(context);
+ } catch (SearchMgtException e) {
+ if (!(e.getCause() instanceof InvalidOperatorException)) {
+ throw e;
+ }
+ }
+ }
+
+ @Test(description = "Test when Device Access Authorization is null", expectedExceptions = {IllegalStateException
+ .class}, dependsOnMethods = {"testWithNoDeviceAccessAuthorization", "testInvalidState"})
+ public void testProcessorInitializationError() throws ClassNotFoundException, NoSuchMethodException,
+ NoSuchFieldException,
+ IllegalAccessException, SearchMgtException {
+ DeviceManagementDataHolder deviceManagementDataHolder = DeviceManagementDataHolder.getInstance();
+ Field field = DeviceManagementDataHolder.class.getDeclaredField("deviceAccessAuthorizationService");
+ field.setAccessible(true);
+ field.set(deviceManagementDataHolder, null);
+
+ ProcessorImpl processor = new ProcessorImpl();
+ processor.execute(null);
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchDevice.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchDevice.java
deleted file mode 100644
index d624bfa4e6..0000000000
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchDevice.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. licenses this file to you under the Apache License,
- * Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-
-package org.wso2.carbon.device.mgt.core.search;
-
-import com.google.gson.Gson;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-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.search.Condition;
-import org.wso2.carbon.device.mgt.common.search.SearchContext;
-import org.wso2.carbon.device.mgt.core.common.BaseDeviceManagementTest;
-import org.wso2.carbon.device.mgt.core.internal.DeviceManagementDataHolder;
-import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService;
-import org.wso2.carbon.device.mgt.core.search.mgt.impl.SearchManagerServiceImpl;
-import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
-import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class SearchDevice extends BaseDeviceManagementTest {
-
- private static final Log log = LogFactory.getLog(SearchDevice.class);
-
- @BeforeClass
- @Override
- public void init() throws Exception {
- DeviceManagementProviderService deviceManagementProviderService = new DeviceManagementProviderServiceImpl();
- DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceManagementProviderService);
- }
-
- @Test
- public void searchDeviceDetails() throws Exception {
-
- SearchContext context = new SearchContext();
- List conditions = new ArrayList<>();
-
-
- Condition cond = new Condition();
- cond.setKey("BATTERY_VOLTAGE");
- cond.setOperator("=");
- cond.setValue("40");
- cond.setState(Condition.State.AND);
- conditions.add(cond);
-
-// Condition cond2 = new Condition();
-// cond2.setKey("CPU_USAGE");
-// cond2.setOperator(">");
-// cond2.setValue("40");
-// cond2.setState(Condition.State.OR);
-// conditions.add(cond2);
-//
-// Condition cond3 = new Condition();
-// cond3.setKey("LOCATION");
-// cond3.setOperator("=");
-// cond3.setValue("Colombo");
-// cond3.setState(Condition.State.AND);
-// conditions.add(cond3);
-
- context.setConditions(conditions);
-
- SearchManagerService service = new SearchManagerServiceImpl();
- List devices = service.search(context);
-
- Gson gson = new Gson();
- String bbbb = gson.toJson(devices);
- log.info(bbbb);
-
-
- for (Device device : devices) {
- log.debug(device.getDescription());
- log.debug(device.getDeviceIdentifier());
- }
-
- }
-
- @Test
- public void doValidLocationSearch() throws Exception {
-
- SearchContext context = new SearchContext();
- List conditions = new ArrayList<>();
-
- Condition cond = new Condition();
- cond.setKey("LOCATION");
- cond.setOperator("=");
- cond.setValue("Karan");
- cond.setState(Condition.State.AND);
- conditions.add(cond);
-
- context.setConditions(conditions);
-
- SearchManagerService service = new SearchManagerServiceImpl();
- List devices = service.search(context);
-
- Gson gson = new Gson();
- String bbbb = gson.toJson(devices);
- log.info("Valid Search " + bbbb);
-
-
- for (Device device : devices) {
- log.debug(device.getDescription());
- log.debug(device.getDeviceIdentifier());
- }
- }
-
- @Test
- public void doInvalidLocationSearch() throws Exception {
-
- SearchContext context = new SearchContext();
- List conditions = new ArrayList<>();
-
- Condition cond = new Condition();
- cond.setKey("LOCATION");
- cond.setOperator("=");
- cond.setValue("Colombo");
- cond.setState(Condition.State.AND);
- conditions.add(cond);
-
- context.setConditions(conditions);
-
- SearchManagerService service = new SearchManagerServiceImpl();
- List devices = service.search(context);
-
- Gson gson = new Gson();
- String bbbb = gson.toJson(devices);
- log.info("Invalid Search " + bbbb);
-
-
- for (Device device : devices) {
- log.debug(device.getDescription());
- log.debug(device.getDeviceIdentifier());
- }
- }
-
- @Test
- public void doStringSearch() throws Exception {
-
- SearchContext context = new SearchContext();
- List conditions = new ArrayList<>();
-
- Condition cond = new Condition();
- cond.setKey("deviceModel");
- cond.setOperator("=");
- cond.setValue("SM-T520");
- cond.setState(Condition.State.AND);
- conditions.add(cond);
-
- context.setConditions(conditions);
-
- SearchManagerService service = new SearchManagerServiceImpl();
- List devices = service.search(context);
-
- Gson gson = new Gson();
- String bbbb = gson.toJson(devices);
- log.info("Invalid Search " + bbbb);
-
-
- for (Device device : devices) {
- log.debug(device.getDescription());
- log.debug(device.getDeviceIdentifier());
- }
- }
-}
-
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchManagementServiceTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchManagementServiceTest.java
new file mode 100644
index 0000000000..9e13782945
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchManagementServiceTest.java
@@ -0,0 +1,324 @@
+/*
+ * 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.search;
+
+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.device.mgt.common.Device;
+import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
+import org.wso2.carbon.device.mgt.common.search.Condition;
+import org.wso2.carbon.device.mgt.common.search.SearchContext;
+import org.wso2.carbon.device.mgt.core.TestDeviceManagementService;
+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.internal.DeviceManagementDataHolder;
+import org.wso2.carbon.device.mgt.core.internal.DeviceManagementServiceComponent;
+import org.wso2.carbon.device.mgt.core.search.mgt.InvalidOperatorException;
+import org.wso2.carbon.device.mgt.core.search.mgt.SearchManagerService;
+import org.wso2.carbon.device.mgt.core.search.mgt.SearchMgtException;
+import org.wso2.carbon.device.mgt.core.search.mgt.impl.SearchManagerServiceImpl;
+import org.wso2.carbon.device.mgt.core.search.util.Utils;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderService;
+import org.wso2.carbon.device.mgt.core.service.DeviceManagementProviderServiceImpl;
+import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+/**
+ * This class contains unit tests for the class SearchManagerService
+ * */
+public class SearchManagementServiceTest extends BaseDeviceManagementTest {
+
+ private static final Log log = LogFactory.getLog(SearchManagementServiceTest.class);
+ private static List deviceIdentifiers = new ArrayList<>();
+ private static final String DEVICE_ID_PREFIX = "SEARCH-DEVICE-ID-";
+ private static final String DEVICE_TYPE = "SEARCH_TYPE";
+
+ @BeforeClass
+ public void init() throws Exception {
+ DeviceManagementDataHolder.getInstance().getDeviceAccessAuthorizationService();
+
+ for (int i = 0; i < 5; i++) {
+ deviceIdentifiers.add(new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE));
+ }
+ DeviceManagementProviderService deviceMgtService = new DeviceManagementProviderServiceImpl();
+ DeviceManagementServiceComponent.notifyStartupListeners();
+ DeviceManagementDataHolder.getInstance().setDeviceManagementProvider(deviceMgtService);
+ deviceMgtService.registerDeviceType(new TestDeviceManagementService(DEVICE_TYPE,
+ MultitenantConstants.SUPER_TENANT_DOMAIN_NAME));
+
+ List devices = TestDataHolder.generateDummyDeviceData(deviceIdentifiers);
+ for (Device device : devices) {
+ device.setDeviceInfo(Utils.getDeviceInfo());
+ deviceMgtService.enrollDevice(device);
+ }
+ List returnedDevices = deviceMgtService.getAllDevices(DEVICE_TYPE, true);
+ for (Device device : returnedDevices) {
+ if (!device.getDeviceIdentifier().startsWith(DEVICE_ID_PREFIX)) {
+ throw new Exception("Incorrect device with ID - " + device.getDeviceIdentifier() + " returned!");
+ }
+ }
+ }
+
+ @Test(description = "Search for device details.")
+ public void searchDeviceDetails() throws Exception {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("batteryVoltage");
+ cond.setOperator("=");
+ cond.setValue("40");
+ cond.setState(Condition.State.OR);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+ Assert.assertTrue(devices != null);
+ }
+
+ @Test(description = "Search devices by location")
+ public void doValidLocationSearch() throws Exception {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("LOCATION");
+ cond.setOperator("=");
+ cond.setValue("Karandeniya");
+ cond.setState(Condition.State.AND);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+ Assert.assertTrue(devices != null);
+ }
+
+ @Test(description = "Search devices by location.")
+ public void doInvalidLocationSearch() throws Exception {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("LOCATION");
+ cond.setOperator("=");
+ cond.setValue("Colombo");
+ cond.setState(Condition.State.AND);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+ Assert.assertTrue(devices.size() == 0);
+ }
+
+ @Test(description = "Search devices by string parameter.")
+ public void testStringSearch() throws Exception {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("deviceModel");
+ cond.setOperator("=");
+ cond.setValue("SM-T520");
+ cond.setState(Condition.State.AND);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+
+ Assert.assertTrue(devices != null);
+ }
+
+ @Test(description = "Search devices by Double parameter.")
+ public void testDoubleSearch() throws Exception {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("internalAvailableMemory");
+ cond.setOperator("=");
+ cond.setValue("3.56");
+ cond.setState(Condition.State.AND);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+
+ Assert.assertTrue(devices != null);
+ }
+
+ @Test(expectedExceptions = {SearchMgtException.class})
+ public void testInvalidOperator() throws SearchMgtException {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("deviceModel");
+ cond.setOperator("=/");
+ cond.setValue("SM-T520");
+ cond.setState(Condition.State.OR);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+
+ Assert.assertTrue(devices != null);
+ }
+
+ @Test(description = "Test for search updated devices in given time.")
+ public void testGetUpdatedDevices() throws SearchMgtException {
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List updatedDevices = service.getUpdated(Calendar.getInstance().getTimeInMillis());
+ Assert.assertEquals(updatedDevices.size(), 0);
+ }
+
+ @Test(description = "Test for invalid number")
+ public void testInvalidNumber() throws SearchMgtException {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("batteryLevel");
+ cond.setOperator("=");
+ cond.setValue("bbb");
+ cond.setState(Condition.State.OR);
+ conditions.add(cond);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ try {
+ service.search(context);
+ } catch (SearchMgtException e) {
+ if (!(e.getCause() instanceof InvalidOperatorException)) {
+ throw e;
+ }
+ }
+ }
+
+ @Test(description = "Test multiple search conditions")
+ public void testMultipleConditions() throws SearchMgtException {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition cond = new Condition();
+ cond.setKey("batteryLevel");
+ cond.setOperator("%");
+ cond.setValue("40");
+ cond.setState(Condition.State.OR);
+ conditions.add(cond);
+
+ Condition cond2 = new Condition();
+ cond2.setKey("availableTotalMemory");
+ cond2.setOperator("=");
+ cond2.setValue("40.0");
+ cond2.setState(Condition.State.OR);
+ conditions.add(cond2);
+
+ Condition cond3 = new Condition();
+ cond3.setKey("LOCATION");
+ cond3.setOperator("=");
+ cond3.setValue("Karandeniya");
+ cond3.setState(Condition.State.OR);
+ conditions.add(cond3);
+
+ Condition cond4 = new Condition();
+ cond4.setKey("deviceModel");
+ cond4.setOperator("=");
+ cond4.setValue("SM-T520");
+ cond4.setState(Condition.State.AND);
+ conditions.add(cond4);
+
+ Condition cond5 = new Condition();
+ cond5.setKey("vendor");
+ cond5.setOperator("=");
+ cond5.setValue("Samsung");
+ cond5.setState(Condition.State.AND);
+ conditions.add(cond5);
+
+ Condition cond6 = new Condition();
+ cond6.setKey("osVersion");
+ cond6.setOperator("=");
+ cond6.setValue("Marshmellow");
+ cond6.setState(Condition.State.OR);
+ conditions.add(cond6);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+ Assert.assertTrue(devices != null);
+ }
+
+ @Test(description = "Test with wildcard operator")
+ public void testWithWildcardOperator() throws SearchMgtException {
+ SearchContext context = new SearchContext();
+ List conditions = new ArrayList<>();
+
+ Condition condition = new Condition();
+ condition.setKey("batteryLevel");
+ condition.setOperator("=");
+ condition.setValue("40");
+ condition.setState(Condition.State.AND);
+ conditions.add(condition);
+
+ Condition condition2 = new Condition();
+ condition2.setKey("LOCATION");
+ condition2.setOperator("%");
+ condition2.setValue("Karandeniya");
+ condition2.setState(Condition.State.OR);
+ conditions.add(condition2);
+
+ Condition condition3 = new Condition();
+ condition3.setKey("internalTotalMemory");
+ condition3.setOperator("%");
+ condition3.setValue("23.2");
+ condition3.setState(Condition.State.OR);
+ conditions.add(condition3);
+
+ Condition condition4 = new Condition();
+ condition4.setKey("connectionType");
+ condition4.setOperator("%");
+ condition4.setValue("DIALOG");
+ condition4.setState(Condition.State.AND);
+ conditions.add(condition4);
+
+ context.setConditions(conditions);
+
+ SearchManagerService service = new SearchManagerServiceImpl();
+ List devices = service.search(context);
+ Assert.assertTrue(devices != null);
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchMgtUtilTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchMgtUtilTest.java
new file mode 100644
index 0000000000..df99f82bff
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/SearchMgtUtilTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.search;
+
+import org.junit.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.core.common.TestDataHolder;
+import org.wso2.carbon.device.mgt.core.search.mgt.impl.Utils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * This class holds the Unit test cases to test org.wso2.carbon.device.mgt.core.search.mgt.impl.Util
+ * */
+public class SearchMgtUtilTest {
+
+ private static List deviceIdentifiers = new ArrayList<>();
+ private static final String DEVICE_ID_PREFIX = "SEARCH-DEVICE-ID-";
+ private static final String DEVICE_TYPE = "SEARCH_TYPE";
+ private static final String DEVICE_IDS = "0,0,0,0,0";
+ private static final Integer[] DEVICE_IDS_INT = {0,0,0,0,0};
+ private List devices;
+
+ @BeforeClass
+ public void init() throws Exception {
+ for (int i = 0; i < 5; i++) {
+ deviceIdentifiers.add(new DeviceIdentifier(DEVICE_ID_PREFIX + i, DEVICE_TYPE));
+ }
+ devices = TestDataHolder.generateDummyDeviceData(deviceIdentifiers);
+ }
+
+ @Test(description = "Test for converting given devices list to string")
+ public void testConvertDeviceListToString() {
+ String ids = Utils.getDeviceIdsAsString(devices);
+ Assert.assertEquals(ids, DEVICE_IDS);
+ }
+
+ @Test(description = "Test for get all the device ids as an array")
+ public void testGetArrayOfDeviceIds() {
+ Integer[] deviceIds = Utils.getArrayOfDeviceIds(devices);
+ Assert.assertArrayEquals(deviceIds, DEVICE_IDS_INT);
+ }
+
+ @Test(description = "Test to convert given String to a List")
+ public void testConvertStringToList() {
+ List stringList = Utils.convertStringToList("some string");
+ List expected = this.getStringList();
+
+ Assert.assertEquals(stringList, expected);
+ }
+
+ @Test(description = "Test to check what type of data the specified column can hold")
+ public void testColumnTypes() {
+ Map colTypes = this.buildColumnMap();
+
+ for (String key : colTypes.keySet()) {
+ String result = Utils.checkColumnType(key);
+ Assert.assertEquals(result, colTypes.get(key));
+ }
+ }
+
+ /**
+ * Generates a map of columns and particular data type.
+ * @return HashMap of column name and data type.
+ * */
+ private Map buildColumnMap() {
+ Map columnTypes = new HashMap<>();
+
+ columnTypes.put("deviceModel", "String");
+ columnTypes.put("vendor", "String");
+ columnTypes.put("osVersion", "String");
+ columnTypes.put("connectionType", "String");
+ columnTypes.put("ssid", "String");
+ columnTypes.put("imei", "String");
+ columnTypes.put("imsi", "String");
+ columnTypes.put("batteryLevel", "Double");
+ columnTypes.put("externalAvailableMemory", "Double");
+ columnTypes.put("externalTotalMemory", "Double");
+ columnTypes.put("internalAvailableMemory", "Double");
+ columnTypes.put("cpuUsage", "Double");
+ columnTypes.put("someProperty", "String");
+ return columnTypes;
+ }
+
+ /**
+ * Generates a list of Strings.
+ * @return List
+ * */
+ private List getStringList() {
+ List strings = new ArrayList<>();
+ strings.add("some string");
+ return strings;
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/ChangeEnumValues.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/ChangeEnumValues.java
new file mode 100644
index 0000000000..2d0163e7c3
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/ChangeEnumValues.java
@@ -0,0 +1,131 @@
+/*
+ * 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.search.util;
+
+import org.wso2.carbon.device.mgt.common.search.Condition;
+import sun.reflect.ConstructorAccessor;
+import sun.reflect.FieldAccessor;
+import sun.reflect.ReflectionFactory;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Array;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Changes the Enum values of a given class.
+ */
+public class ChangeEnumValues {
+
+ private static ReflectionFactory reflectionFactory = ReflectionFactory.getReflectionFactory();
+
+ public ChangeEnumValues() {}
+
+ private static void setFailSafeFieldValue(Field field, Object target, Object value) throws NoSuchFieldException,
+ IllegalAccessException {
+
+ field.setAccessible(true);
+
+ Field modifiersField = Field.class.getDeclaredField("modifiers");
+ modifiersField.setAccessible(true);
+ int modifiers = modifiersField.getInt(field);
+
+ modifiers &= ~Modifier.FINAL;
+ modifiersField.setInt(field, modifiers);
+
+ FieldAccessor fa = reflectionFactory.newFieldAccessor(field, false);
+ fa.set(target, value);
+ }
+
+ private static void blankField(Class> enumClass, String fieldName) throws NoSuchFieldException,
+ IllegalAccessException {
+ for (Field field : Class.class.getDeclaredFields()) {
+ if (field.getName().contains(fieldName)) {
+ AccessibleObject.setAccessible(new Field[]{field}, true);
+ setFailSafeFieldValue(field, enumClass, null);
+ break;
+ }
+ }
+ }
+
+ private static void cleanEnumCache(Class> enumClass) throws NoSuchFieldException, IllegalAccessException {
+ blankField(enumClass, "enumConstantDirectory");
+ blankField(enumClass, "enumConstants");
+ }
+
+ private static ConstructorAccessor getConstructorAccessor(Class> enumClass, Class>[] additionalParameterTypes)
+ throws NoSuchMethodException {
+ Class>[] parameterTypes = new Class[additionalParameterTypes.length + 2];
+ parameterTypes[0] = String.class;
+ parameterTypes[1] = int.class;
+ System.arraycopy(additionalParameterTypes, 0, parameterTypes, 2, additionalParameterTypes.length);
+ return reflectionFactory.newConstructorAccessor(enumClass.getDeclaredConstructor(parameterTypes));
+ }
+
+ private static Object makeEnum(Class> enumClass, String value, int ordinal, Class>[] additionalTypes,
+ Object[] additionalValues) throws Exception {
+ Object[] parms = new Object[additionalValues.length + 2];
+ parms[0] = value;
+ parms[1] = ordinal;
+ System.arraycopy(additionalValues, 0, parms, 2, additionalValues.length);
+ return enumClass.cast(getConstructorAccessor(enumClass, additionalTypes).newInstance(parms));
+ }
+
+ /**
+ * Add an enum instance to the enum class given as argument
+ *
+ * @param the type of the enum
+ * @param enumType the class of the enum to be modified
+ * @param enumName the name of the new enum instance to be added to the class.
+ */
+ public static > void addEnum(Class enumType, String enumName) {
+
+ if (!Enum.class.isAssignableFrom(enumType)) {
+ throw new RuntimeException("class " + enumType + " is not an instance of Enum");
+ }
+
+ Field valuesField = null;
+ Field[] fields = Condition.State.class.getDeclaredFields();
+ for (Field field : fields) {
+ if (field.getName().contains("$VALUES")) {
+ valuesField = field;
+ break;
+ }
+ }
+ AccessibleObject.setAccessible(new Field[]{valuesField}, true);
+
+ try {
+ T[] previousValues = (T[]) valuesField.get(enumType);
+ List values = new ArrayList(Arrays.asList(previousValues));
+
+ T newValue = (T) makeEnum(enumType, enumName, values.size(), new Class>[]{}, new Object[]{});
+
+ values.add(newValue);
+
+ setFailSafeFieldValue(valuesField, null, values.toArray((T[]) Array.newInstance(enumType, 0)));
+
+ cleanEnumCache(enumType);
+
+ } catch (Exception e) {
+ throw new RuntimeException(e.getMessage(), e);
+ }
+ }
+}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/Utils.java b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/Utils.java
index 58c6f621ac..c46844dee4 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/Utils.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/java/org/wso2/carbon/device/mgt/core/search/util/Utils.java
@@ -15,30 +15,33 @@
* specific language governing permissions and limitations
* under the License.
*/
-
-
package org.wso2.carbon.device.mgt.core.search.util;
import org.wso2.carbon.device.mgt.common.DeviceIdentifier;
import org.wso2.carbon.device.mgt.common.device.details.DeviceInfo;
import org.wso2.carbon.device.mgt.common.device.details.DeviceLocation;
+import org.wso2.carbon.device.mgt.common.search.Condition;
+import org.wso2.carbon.device.mgt.common.search.SearchContext;
import org.wso2.carbon.device.mgt.core.common.TestDataHolder;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import static org.wso2.carbon.device.mgt.common.search.Condition.State.AND;
+import static org.wso2.carbon.device.mgt.common.search.Condition.State.OR;
+
public class Utils {
public static DeviceInfo getDeviceInfo() {
-
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.setIMSI("e6f236ac82537a8e");
deviceInfo.setSsid("FAFDA");
-
deviceInfo.setAvailableRAMMemory(1.24);
- deviceInfo.setBatteryLevel(27.3);
+ deviceInfo.setBatteryLevel(40.0);
deviceInfo.setConnectionType("GSM");
deviceInfo.setCpuUsage(82.34);
deviceInfo.setDeviceModel("SM-T520");
@@ -56,7 +59,7 @@ public class Utils {
deviceInfo.setSsid("SSSSSS");
deviceInfo.setTotalRAMMemory(4.00);
deviceInfo.setVendor("SAMSUNG");
-
+ deviceInfo.setLocation(getSampleDeviceLocation());
Map propertyMap = new HashMap<>();
@@ -75,8 +78,6 @@ public class Utils {
public static DeviceLocation getSampleDeviceLocation(){
-
-
DeviceLocation deviceLocation = new DeviceLocation();
deviceLocation.setDeviceIdentifier(Utils.getDeviceIdentifier());
deviceLocation.setLatitude(76.2422);
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 3b57176b63..64efeb76a4 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
@@ -17,6 +17,7 @@ package org.wso2.carbon.device.mgt.core.service;
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;
@@ -45,10 +46,12 @@ 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.core.service.RealmService;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
import java.io.InputStream;
+import java.lang.reflect.Field;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
@@ -98,6 +101,20 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(deviceTypes.size() > 0);
}
+ @Test
+ public void testGetAvailableDeviceType() throws DeviceManagementException {
+ DeviceType deviceType = deviceMgtService.getDeviceType(DEVICE_TYPE);
+ Assert.assertTrue(deviceType.getName().equalsIgnoreCase(DEVICE_TYPE));
+ }
+
+ @Test
+ public void addLicense() throws DeviceManagementException {
+ License license = new License();
+ license.setLanguage("ENG");
+ license.setName("RANDON_DEVICE_LICENSE");
+ deviceMgtService.addLicense(DEVICE_TYPE, license);
+ }
+
@Test(expectedExceptions = DeviceManagementException.class)
public void testNullDeviceEnrollment() throws DeviceManagementException {
deviceMgtService.enrollDevice(null);
@@ -176,14 +193,45 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
public void testDisenrollment() throws DeviceManagementException {
Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE));
boolean disenrollmentStatus = deviceMgtService.disenrollDevice(new DeviceIdentifier
- (device
- .getDeviceIdentifier(),
- device.getType()));
+ (device.getDeviceIdentifier(), device.getType()));
log.info(disenrollmentStatus);
Assert.assertTrue(disenrollmentStatus);
}
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testDisenrollmentWithNullDeviceID() throws DeviceManagementException {
+ deviceMgtService.disenrollDevice(null);
+ }
+
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"})
+ public void testDisenrollmentWithNonExistentDT() throws DeviceManagementException {
+ Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID,
+ "NON_EXISTENT_DT"));
+ boolean result = deviceMgtService.disenrollDevice(new DeviceIdentifier(
+ device.getDeviceIdentifier(), device.getType()));
+ Assert.assertTrue(!result);
+ }
+
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceWithOtherUser"})
+ public void testDisenrollmentWithNonExistentDevice() throws DeviceManagementException {
+ Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(ALTERNATE_DEVICE_ID,
+ DEVICE_TYPE));
+ boolean result = deviceMgtService.disenrollDevice(new DeviceIdentifier(
+ device.getDeviceIdentifier(), device.getType()));
+ Assert.assertTrue(!result);
+ }
+
+ @Test(dependsOnMethods = {"testDisenrollment"})
+ public void testDisenrollAlreadyDisEnrolledDevice() throws DeviceManagementException {
+ Device device = TestDataHolder.generateDummyDeviceData(new DeviceIdentifier(DEVICE_ID,
+ DEVICE_TYPE));
+ boolean result = deviceMgtService.disenrollDevice(new DeviceIdentifier(
+ device.getDeviceIdentifier(), device.getType()));
+ Assert.assertTrue(result);
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetDeviceCount() throws DeviceManagementException {
int count = deviceMgtService.getDeviceCount();
@@ -259,6 +307,12 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(device.getDeviceInfo() != null);
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviceTypeWithProps() throws DeviceManagementException {
+ Device device = deviceMgtService.getDeviceWithTypeProperties(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE));
+ Assert.assertTrue(!device.getProperties().isEmpty());
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetDeviceWithOutInfo() throws DeviceManagementException {
Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE)
@@ -272,6 +326,35 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(devices.size() > 0);
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testGetAllDevicesOfRoleFailureFlow() throws DeviceManagementException, UserStoreException, NoSuchFieldException, IllegalAccessException {
+ int tenantID = -1234;
+ RealmService mockRealmService = Mockito.mock(RealmService.class, Mockito.CALLS_REAL_METHODS);
+
+ Mockito.doThrow(new UserStoreException("Mocked Exception when obtaining Tenant Realm"))
+ .when(mockRealmService).getTenantUserRealm(tenantID);
+ RealmService currentRealm = DeviceManagementDataHolder.getInstance().getRealmService();
+ DeviceManagementDataHolder.getInstance().setRealmService(mockRealmService);
+ try {
+ deviceMgtService.getAllDevicesOfRole("admin");
+ } finally {
+ DeviceManagementDataHolder.getInstance().setRealmService(currentRealm);
+ }
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetAllDevicesOfRoleWithNonExistentRole() throws DeviceManagementException {
+ List devices = deviceMgtService.getAllDevicesOfRole("non-existent-role");
+ Assert.assertTrue(devices.size() == 0);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testGetAllDevicesOfRoleWithNullArgs() throws DeviceManagementException {
+ deviceMgtService.getAllDevicesOfRole(null);
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testDeviceByOwner() throws DeviceManagementException {
Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
@@ -279,11 +362,47 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(device != null);
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testDeviceByOwnerAndNonExistentDeviceID() throws DeviceManagementException {
+ String nonExistentDeviceID = "4455";
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier(nonExistentDeviceID,
+ DEVICE_TYPE), "admin", true);
+ Assert.assertTrue(device == null);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testDeviceByOwnerWithNullDeviceID() throws DeviceManagementException {
+ deviceMgtService.getDevice(null, "admin", true);
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testDeviceByDate() throws DeviceManagementException, TransactionManagementException, DeviceDetailsMgtDAOException {
Device initialDevice = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
DEVICE_TYPE));
+ addDeviceInformation(initialDevice);
+
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
+ DEVICE_TYPE), yesterday());
+ Assert.assertTrue(device != null);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testDeviceByDateWithNonExistentDevice() throws DeviceManagementException,
+ TransactionManagementException, DeviceDetailsMgtDAOException {
+ Device device = deviceMgtService.getDevice(new DeviceIdentifier(ALTERNATE_DEVICE_ID,
+ DEVICE_TYPE), yesterday());
+ Assert.assertTrue(device == null);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testDeviceByDateWithNullDeviceID() throws DeviceManagementException {
+ deviceMgtService.getDevice(null, yesterday());
+ }
+
+ private void addDeviceInformation(Device initialDevice) throws TransactionManagementException, DeviceDetailsMgtDAOException {
DeviceManagementDAOFactory.beginTransaction();
//Device details table will be reffered when looking for last updated time
@@ -292,10 +411,6 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
.generateDummyDeviceInfo());
DeviceManagementDAOFactory.closeConnection();
-
- Device device = deviceMgtService.getDevice(new DeviceIdentifier(DEVICE_ID,
- DEVICE_TYPE), yesterday());
- Assert.assertTrue(device != null);
}
@Test(dependsOnMethods = {"testDeviceByDate"})
@@ -320,10 +435,18 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetAllDevicesPaginated() throws DeviceManagementException {
PaginationRequest request = new PaginationRequest(0, 100);
+ request.setOwnerRole("admin");
PaginationResult result = deviceMgtService.getAllDevices(request);
Assert.assertTrue(result.getRecordsTotal() > 0);
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testGetAllDevicesWithNullRequest() throws DeviceManagementException {
+ PaginationRequest request = null;
+ deviceMgtService.getAllDevices(request);
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetAllDevicesByName() throws DeviceManagementException {
PaginationRequest request = new PaginationRequest(0, 100);
@@ -392,8 +515,15 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(false);
}
- @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
public void testGetDeviesOfUser() throws DeviceManagementException {
+ String username = null;
+ deviceMgtService.getDevicesOfUser(username);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testGetDeviesOfUserWhileUserNull() throws DeviceManagementException {
List devices = deviceMgtService.getDevicesOfUser("admin");
Assert.assertTrue(!devices.isEmpty());
}
@@ -419,6 +549,13 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(result.getRecordsTotal() > 0);
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testGetDeviesOfUserWhileNullOwnerPaginated() throws DeviceManagementException {
+ PaginationRequest request = null;
+ deviceMgtService.getDevicesOfUser(request, true);
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetDeviesByOwnership() throws DeviceManagementException {
PaginationRequest request = new PaginationRequest(0, 100);
@@ -427,6 +564,26 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(result.getRecordsTotal() > 0);
}
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testSetOwnership() throws DeviceManagementException {
+ boolean status = deviceMgtService.setOwnership(new DeviceIdentifier(DEVICE_ID,
+ DEVICE_TYPE), EnrolmentInfo.OwnerShip.COPE.toString());
+ Assert.assertTrue(status);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
+ public void testSetOwnershipNonExistentDT() throws DeviceManagementException {
+ boolean status = deviceMgtService.setOwnership(new DeviceIdentifier(DEVICE_ID,
+ "non-existent-dt"), EnrolmentInfo.OwnerShip.COPE.toString());
+ Assert.assertFalse(status);
+ }
+
+ @Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"}, expectedExceptions =
+ DeviceManagementException.class)
+ public void testSetOwnershipOfNullDevice() throws DeviceManagementException {
+ deviceMgtService.setOwnership(null, EnrolmentInfo.OwnerShip.COPE.toString());
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetDeviesByStatus() throws DeviceManagementException {
PaginationRequest request = new PaginationRequest(0, 100);
@@ -435,6 +592,25 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
Assert.assertTrue(result.getRecordsTotal() > 0);
}
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
+ public void testUpdateDevicesStatus() throws DeviceManagementException {
+ boolean status = deviceMgtService.setStatus("user1", EnrolmentInfo.Status.REMOVED);
+ Assert.assertTrue(status);
+ }
+
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
+ public void testUpdateDevicesStatusWithDeviceID() throws DeviceManagementException {
+ boolean status = deviceMgtService.setStatus(new DeviceIdentifier(DEVICE_ID, DEVICE_TYPE),"user1",
+ EnrolmentInfo.Status.ACTIVE);
+ Assert.assertTrue(status);
+ }
+
+ @Test(dependsOnMethods = {"testReEnrollmentofSameDeviceUnderSameUser"})
+ public void testUpdateDevicesStatusOfNonExistingUser() throws DeviceManagementException {
+ boolean status = deviceMgtService.setStatus("random-user", EnrolmentInfo.Status.REMOVED);
+ Assert.assertFalse(status);
+ }
+
@Test(dependsOnMethods = {"testSuccessfulDeviceEnrollment"})
public void testGetDeviesOfUserAndDeviceType() throws DeviceManagementException {
List devices = deviceMgtService.getDevicesOfUser("admin", DEVICE_TYPE, true);
@@ -451,7 +627,6 @@ public class DeviceManagementProviderServiceTest extends BaseDeviceManagementTes
props.setProperty("password", "!@#$$$%");
EmailMetaInfo metaInfo = new EmailMetaInfo(recipient, props);
-
deviceMgtService.sendRegistrationEmail(metaInfo);
Assert.assertTrue(true);
}
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/datasource/mock-data-source-config.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/datasource/mock-data-source-config.xml
new file mode 100644
index 0000000000..91d25ac9ad
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/datasource/mock-data-source-config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ jdbc:h2:mem:cdm-test-db;DB_CLOSE_ON_EXIT=FALSE;MVCC=true
+ org.wso2.carbon.device.mgt.core.mock.MockJDBCDriver
+ wso2carbon
+ wso2carbon
+
+
+
+
+
+
+
+
+
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/datasource/no-table-data-source-config.xml b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/datasource/no-table-data-source-config.xml
new file mode 100644
index 0000000000..7781e61ea2
--- /dev/null
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.core/src/test/resources/config/datasource/no-table-data-source-config.xml
@@ -0,0 +1,33 @@
+
+
+
+
+ jdbc:h2:mem:nodb-test-db;DB_CLOSE_ON_EXIT=FALSE;MVCC=true
+ org.h2.Driver
+ wso2carbon
+ wso2carbon
+
+
+
+
+
+
+
+
+
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 7830b7fbe3..8093861d4c 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
@@ -1,4 +1,3 @@
-
-
+
@@ -42,14 +40,19 @@
+
+
-
+
+
+
+
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 38ac1a6e3c..677bc14153 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
index 06c0a3a0fb..0d177c6c26 100644
--- a/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
+++ b/components/device-mgt/org.wso2.carbon.device.mgt.extensions/src/test/java/org/wso2/carbon/device/mgt/extensions/device/type/template/DeviceTypeManagerNegativeTest.java
@@ -20,7 +20,7 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template;
import org.h2.jdbcx.JdbcDataSource;
import org.mockito.Mockito;
-import org.testng.annotations.BeforeTest;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.device.mgt.common.Device;
@@ -69,7 +69,7 @@ public class DeviceTypeManagerNegativeTest {
private PropertyBasedPluginDAOImpl propertyBasedPluginDAO;
private Device sampleDevice;
- @BeforeTest
+ @BeforeClass
public void setup()
throws SAXException, JAXBException, ParserConfigurationException, DeviceTypeConfigurationException,
IOException, NoSuchFieldException, IllegalAccessException {
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 f90d33bd34..b512a2965d 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
@@ -21,14 +21,16 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template;
import org.mockito.Mockito;
import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.device.mgt.common.DeviceManagementException;
import org.wso2.carbon.device.mgt.common.DeviceStatusTaskPluginConfig;
import org.wso2.carbon.device.mgt.common.InitialOperationConfig;
+import org.wso2.carbon.device.mgt.common.InitialOperationConfig;
import org.wso2.carbon.device.mgt.common.OperationMonitoringTaskConfig;
import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
+import org.wso2.carbon.device.mgt.common.ProvisioningConfig;
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;
@@ -75,7 +77,7 @@ public class DeviceTypeManagerServiceTest {
private Method setPolicyMonitoringManager;
private Method setPullNotificationSubscriber;
- @BeforeTest
+ @BeforeClass
public void setup() throws NoSuchMethodException, SAXException, JAXBException, ParserConfigurationException,
DeviceTypeConfigurationException, IOException, NoSuchFieldException, IllegalAccessException,
DeviceManagementException, RegistryException {
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 d6f732cf13..49a6a7c9ff 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
@@ -20,7 +20,7 @@ package org.wso2.carbon.device.mgt.extensions.device.type.template;
import org.mockito.Mockito;
import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
+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;
@@ -73,7 +73,7 @@ public class DeviceTypeManagerTest {
private String[] customDeviceTypeProperties = {"custom_property", "custom_property2"};
private final String SQL_FOLDER = "sql-files" + File.separator;
- @BeforeTest(description = "Mocking the classes for testing")
+ @BeforeClass(description = "Mocking the classes for testing")
public void setup() throws NoSuchFieldException, IllegalAccessException, IOException, SQLException, SAXException,
ParserConfigurationException, DeviceTypeConfigurationException, JAXBException {
ClassLoader classLoader = getClass().getClassLoader();
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 b6beda3c2c..09435166dc 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
@@ -19,7 +19,7 @@
package org.wso2.carbon.device.mgt.extensions.device.type.template;
import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
+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;
@@ -60,7 +60,7 @@ public class HttpDeviceTypeManagerServiceAndDeviceTypeGeneratorServceTest {
private String androidSenseDeviceType = "androidsense";
private DeviceManagementService generatedDeviceManagementService;
- @BeforeTest
+ @BeforeClass
public void setup() throws RegistryException, IOException, SAXException, ParserConfigurationException,
DeviceTypeConfigurationException, JAXBException {
createSampleDeviceTypeMetaDefinition();
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
index 96f4c28694..feb549a22f 100644
--- 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
@@ -20,7 +20,7 @@
package org.wso2.carbon.device.mgt.extensions.utils;
import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.wso2.carbon.base.MultitenantConstants;
import org.wso2.carbon.context.PrivilegedCarbonContext;
@@ -51,7 +51,7 @@ import java.util.List;
public class UtilsTest {
private FileSystemBasedLicenseManager fileSystemBasedLicenseManager;
- @BeforeTest
+ @BeforeClass
public void setup() {
fileSystemBasedLicenseManager = new FileSystemBasedLicenseManager();
}
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 9df80bc2b3..560e9a724b 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.145-SNAPSHOT
+ 3.0.148-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 53e2ea9c9f..ff5f175e42 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/components/device-mgt/pom.xml b/components/device-mgt/pom.xml
index 2e279f32cd..d9a947580d 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.145-SNAPSHOT
+ 3.0.148-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 0b6d67ddeb..cf3cdd156a 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/components/email-sender/pom.xml b/components/email-sender/pom.xml
index 4851cb18ee..394e889e8b 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.145-SNAPSHOT
+ 3.0.148-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 94e2986e62..5ff9a37937 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.oauth.extensions
- 3.0.145-SNAPSHOT
+ 3.0.148-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 7d93021323..92fcdd602d 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.145-SNAPSHOT
+ 3.0.148-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 b93a8d6705..065f757aa4 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/components/identity-extensions/pom.xml b/components/identity-extensions/pom.xml
index 1a37b1111b..5cd4de1336 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.145-SNAPSHOT
+ 3.0.148-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 b3821a1a77..ddc111c6dd 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.complex.policy.decision.point
- 3.0.145-SNAPSHOT
+ 3.0.148-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 3d818e3ddf..31e23434ee 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.decision.point
- 3.0.145-SNAPSHOT
+ 3.0.148-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 23ce16a1f3..9593e9caf9 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
@@ -11,7 +11,7 @@
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.information.point
- 3.0.145-SNAPSHOT
+ 3.0.148-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 71f4042212..b87008bf7b 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.mgt.common
- 3.0.145-SNAPSHOT
+ 3.0.148-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 4853254787..f91853b45c 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.policy.mgt.core
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
bundle
WSO2 Carbon - Policy Management Core
WSO2 Carbon - Policy Management Core
diff --git a/components/policy-mgt/pom.xml b/components/policy-mgt/pom.xml
index b84a5ae6a2..b3f6bfd697 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
policy-mgt
- 3.0.145-SNAPSHOT
+ 3.0.148-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 74f1da130a..a89b44a4ab 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.145-SNAPSHOT
+ 3.0.148-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 91e841e87b..4190b35bf7 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.devicemgt
org.wso2.carbon.webapp.authenticator.framework
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
bundle
WSO2 Carbon - Web Application Authenticator Framework Bundle
WSO2 Carbon - Web Application Authenticator Framework Bundle
@@ -248,6 +248,11 @@
h2-database-engine
test
+
+ org.powermock
+ powermock-api-mockito
+ test
+
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/OAuthTokenValidationStubFactory.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/OAuthTokenValidationStubFactory.java
index 95fbc86a44..5d22e52056 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/OAuthTokenValidationStubFactory.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/OAuthTokenValidationStubFactory.java
@@ -97,44 +97,6 @@ public class OAuthTokenValidationStubFactory implements PoolableObjectFactory {
return connectionManager;
}
- /**
- * Creates an instance of PoolingHttpClientConnectionManager using HttpClient 4.x APIs
- *
- * @param properties Properties to configure PoolingHttpClientConnectionManager
- * @return An instance of properly configured PoolingHttpClientConnectionManager
- */
- private HttpClientConnectionManager createClientConnectionManager(Properties properties) {
- PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
- if (properties != null) {
- String maxConnectionsPerHostParam = properties.getProperty("MaxConnectionsPerHost");
- if (maxConnectionsPerHostParam == null || maxConnectionsPerHostParam.isEmpty()) {
- if (log.isDebugEnabled()) {
- log.debug("MaxConnectionsPerHost parameter is not explicitly defined. Therefore, the default, " +
- "which is 2, will be used");
- }
- } else {
- connectionManager.setDefaultMaxPerRoute(Integer.parseInt(maxConnectionsPerHostParam));
- }
-
- String maxTotalConnectionsParam = properties.getProperty("MaxTotalConnections");
- if (maxTotalConnectionsParam == null || maxTotalConnectionsParam.isEmpty()) {
- if (log.isDebugEnabled()) {
- log.debug("MaxTotalConnections parameter is not explicitly defined. Therefore, the default, " +
- "which is 10, will be used");
- }
- } else {
- connectionManager.setMaxTotal(Integer.parseInt(maxTotalConnectionsParam));
- }
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Properties, i.e. MaxTotalConnections/MaxConnectionsPerHost, required to tune the " +
- "HttpClient used in OAuth token validation service stub instances are not provided. " +
- "Therefore, the defaults, 2/10 respectively, will be used");
- }
- }
- return connectionManager;
- }
-
@Override
public Object makeObject() throws Exception {
return this.createStub();
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/Utils.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/Utils.java
index db3b71ba7c..52510d5b67 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/Utils.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/Utils/Utils.java
@@ -134,10 +134,10 @@ public class Utils {
authenticationInfo.setUsername(username);
authenticationInfo.setTenantDomain(tenantDomain);
authenticationInfo.setTenantId(getTenantIdOFUser(username + "@" + tenantDomain));
- if (oAuthValidationResponse.isValid())
- authenticationInfo.setStatus(WebappAuthenticator.Status.CONTINUE);
+ authenticationInfo.setStatus(WebappAuthenticator.Status.CONTINUE);
} else {
authenticationInfo.setMessage(oAuthValidationResponse.getErrorMsg());
+ authenticationInfo.setStatus(WebappAuthenticator.Status.FAILURE);
}
return authenticationInfo;
}
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/JWTAuthenticator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/JWTAuthenticator.java
index 3339ad8ceb..99fd36d534 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/JWTAuthenticator.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/JWTAuthenticator.java
@@ -18,7 +18,6 @@
package org.wso2.carbon.webapp.authenticator.framework.authenticator;
-import com.nimbusds.jose.JOSEException;
import com.nimbusds.jose.JWSVerifier;
import com.nimbusds.jose.crypto.RSASSAVerifier;
import com.nimbusds.jwt.SignedJWT;
@@ -46,6 +45,7 @@ import java.security.interfaces.RSAPublicKey;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import java.util.Properties;
import java.util.StringTokenizer;
@@ -164,8 +164,6 @@ public class JWTAuthenticator implements WebappAuthenticator {
log.error("Error occurred while obtaining the user.", e);
} catch (ParseException e) {
log.error("Error occurred while parsing the JWT header.", e);
- } catch (JOSEException e) {
- log.error("Error occurred while verifying the JWT header.", e);
} catch (Exception e) {
log.error("Error occurred while verifying the JWT header.", e);
} finally {
@@ -203,12 +201,12 @@ public class JWTAuthenticator implements WebappAuthenticator {
private String tenantDomain;
private final String DEFAULT_ISSUER = "default";
- public IssuerAlias(String tenantDomain) {
+ IssuerAlias(String tenantDomain) {
this.issuer = DEFAULT_ISSUER;
this.tenantDomain = tenantDomain;
}
- public IssuerAlias(String issuer, String tenantDomain) {
+ IssuerAlias(String issuer, String tenantDomain) {
this.issuer = issuer;
this.tenantDomain = tenantDomain;
}
@@ -223,7 +221,7 @@ public class JWTAuthenticator implements WebappAuthenticator {
@Override
public boolean equals(Object obj) {
return (obj instanceof IssuerAlias) && issuer.equals(
- ((IssuerAlias) obj).issuer) && tenantDomain == ((IssuerAlias) obj).tenantDomain;
+ ((IssuerAlias) obj).issuer) && Objects.equals(tenantDomain, ((IssuerAlias) obj).tenantDomain);
}
}
}
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java
index 6a0422903b..cbd53b1b83 100755
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/LocalOAuthValidator.java
@@ -68,11 +68,11 @@ public class LocalOAuthValidator implements OAuth2TokenValidator {
if (MultitenantConstants.SUPER_TENANT_DOMAIN_NAME.equals(tenantDomain)) {
tenantDomain = MultitenantUtils.getTenantDomain(userName);
}
+ return new OAuthValidationResponse(userName, tenantDomain, true);
} else {
OAuthValidationResponse oAuthValidationResponse = new OAuthValidationResponse();
oAuthValidationResponse.setErrorMsg(tokenValidationResponse.getErrorMsg());
return oAuthValidationResponse;
}
- return new OAuthValidationResponse(userName,tenantDomain,isValid);
}
}
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/RemoteOAuthValidator.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/RemoteOAuthValidator.java
index 7700941382..44488fd3f8 100755
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/RemoteOAuthValidator.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/main/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/oauth/impl/RemoteOAuthValidator.java
@@ -55,42 +55,41 @@ public class RemoteOAuthValidator implements OAuth2TokenValidator {
try {
OAuth2TokenValidationRequestDTO validationRequest = createValidationRequest(accessToken, resource);
stub = (OAuth2TokenValidationServiceStub) this.stubs.borrowObject();
- validationResponse =
- stub.findOAuthConsumerIfTokenIsValid(validationRequest).getAccessTokenValidationResponse();
+ validationResponse = stub.findOAuthConsumerIfTokenIsValid(validationRequest)
+ .getAccessTokenValidationResponse();
} catch (RemoteException e) {
- throw new OAuthTokenValidationException("Remote Exception occurred while invoking the Remote " +
- "IS server for OAuth2 token validation.", e);
+ throw new OAuthTokenValidationException(
+ "Remote Exception occurred while invoking the Remote " + "IS server for OAuth2 token validation.",
+ e);
} catch (Exception e) {
- throw new OAuthTokenValidationException("Error occurred while borrowing an oauth token validation " +
- "service stub from the pool", e);
+ throw new OAuthTokenValidationException(
+ "Error occurred while borrowing an oauth token validation " + "service stub from the pool", e);
} finally {
try {
this.stubs.returnObject(stub);
} catch (Exception e) {
- log.warn("Error occurred while returning the object back to the oauth token validation service " +
- "stub pool", e);
+ log.warn("Error occurred while returning the object back to the oauth token validation service "
+ + "stub pool", e);
}
}
-
if (validationResponse == null) {
if (log.isDebugEnabled()) {
log.debug("Response returned by the OAuth token validation service is null");
}
return null;
}
-
boolean isValid = validationResponse.getValid();
String tenantDomain;
String username;
if (isValid) {
username = MultitenantUtils.getTenantAwareUsername(validationResponse.getAuthorizedUser());
tenantDomain = MultitenantUtils.getTenantDomain(validationResponse.getAuthorizedUser());
+ return new OAuthValidationResponse(username, tenantDomain, true);
} else {
OAuthValidationResponse oAuthValidationResponse = new OAuthValidationResponse();
oAuthValidationResponse.setErrorMsg(validationResponse.getErrorMsg());
return oAuthValidationResponse;
}
- return new OAuthValidationResponse(username, tenantDomain, isValid);
}
private OAuth2TokenValidationRequestDTO createValidationRequest(String accessToken, String resource) {
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BSTAuthenticatorTest.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BSTAuthenticatorTest.java
index 9eeaca651f..66ab2e2871 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BSTAuthenticatorTest.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BSTAuthenticatorTest.java
@@ -19,12 +19,29 @@
package org.wso2.carbon.webapp.authenticator.framework.authenticator;
+import org.apache.catalina.Context;
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.core.StandardContext;
+import org.apache.commons.io.FileUtils;
+import org.apache.tomcat.util.buf.MessageBytes;
+import org.apache.tomcat.util.http.MimeHeaders;
+import org.mockito.Mockito;
import org.testng.Assert;
-import org.testng.annotations.BeforeTest;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import org.wso2.carbon.base.MultitenantConstants;
+import org.wso2.carbon.identity.oauth2.OAuth2TokenValidationService;
+import org.wso2.carbon.identity.oauth2.dto.OAuth2ClientApplicationDTO;
+import org.wso2.carbon.identity.oauth2.dto.OAuth2TokenValidationResponseDTO;
+import org.wso2.carbon.webapp.authenticator.framework.AuthenticationInfo;
import org.wso2.carbon.webapp.authenticator.framework.authenticator.oauth.OAuth2TokenValidator;
+import org.wso2.carbon.webapp.authenticator.framework.internal.AuthenticatorFrameworkDataHolder;
+import org.wso2.carbon.webapp.authenticator.framework.util.TestInputBuffer;
+import java.io.File;
+import java.io.IOException;
import java.lang.reflect.Field;
+import java.net.URL;
import java.util.Properties;
/**
@@ -33,11 +50,29 @@ import java.util.Properties;
public class BSTAuthenticatorTest {
private BSTAuthenticator bstAuthenticator;
private Properties properties;
+ private Field headersField;
+ private OAuth2TokenValidationService oAuth2TokenValidationService;
+ private OAuth2ClientApplicationDTO oAuth2ClientApplicationDTO;
- @BeforeTest
- public void init() {
+ @BeforeClass
+ public void init() throws NoSuchFieldException {
bstAuthenticator = new BSTAuthenticator();
properties = new Properties();
+ headersField = org.apache.coyote.Request.class.getDeclaredField("headers");
+ headersField.setAccessible(true);
+ oAuth2TokenValidationService = Mockito
+ .mock(OAuth2TokenValidationService.class, Mockito.CALLS_REAL_METHODS);
+ oAuth2ClientApplicationDTO = Mockito
+ .mock(OAuth2ClientApplicationDTO.class, Mockito.CALLS_REAL_METHODS);
+
+ OAuth2TokenValidationResponseDTO authorizedValidationResponse = new OAuth2TokenValidationResponseDTO();
+ authorizedValidationResponse.setValid(true);
+ authorizedValidationResponse.setAuthorizedUser("admin@" + MultitenantConstants.SUPER_TENANT_DOMAIN_NAME);
+
+ Mockito.doReturn(oAuth2ClientApplicationDTO).when(oAuth2TokenValidationService)
+ .findOAuthConsumerIfTokenIsValid(Mockito.any());
+ oAuth2ClientApplicationDTO.setAccessTokenValidationResponse(authorizedValidationResponse);
+ AuthenticatorFrameworkDataHolder.getInstance().setOAuth2TokenValidationService(oAuth2TokenValidationService);
}
@Test(description = "This test case is used to test the behaviour of BST Authenticator when the properties are "
@@ -89,4 +124,125 @@ public class BSTAuthenticatorTest {
Assert.assertNotNull(oAuth2TokenValidator, "Token validation creation failed even with the required "
+ "parameters.");
}
+
+ @Test(description = "This method tests the get methods of the BST Authenticator",
+ dependsOnMethods = {"testInitWithRemote"})
+ public void testGetterMethods() {
+ Assert.assertNotNull(bstAuthenticator.getProperties(), "Retrieval of properties from BSTAuthenticator failed");
+ Assert.assertNotNull(bstAuthenticator.getProperty("Password"),
+ "Retrieval of added property failed in " + "BSTAuthenticator");
+ Assert.assertNull(bstAuthenticator.getProperty("test"),
+ "Retrieval of property test is successful, which is " + "never added");
+ Assert.assertEquals(bstAuthenticator.getName(), "BSTAuthenticator",
+ "Name returned by BSTAuthenticator does" + " not match.");
+ }
+
+ @Test(description = "This test case tests the canHandle method of the BSTAuthenticator under faulty conditions")
+ public void testCanHandleWithFalseConditions() throws IllegalAccessException {
+ Request request = new Request();
+ org.apache.coyote.Request coyoteRequest = new org.apache.coyote.Request();
+ request.setCoyoteRequest(coyoteRequest);
+ Assert.assertFalse(bstAuthenticator.canHandle(request),
+ "BST Authenticator can handle a request without content type");
+
+ MimeHeaders mimeHeaders = new MimeHeaders();
+ MessageBytes bytes = mimeHeaders.addValue("content-type");
+ bytes.setString("test");
+ headersField.set(coyoteRequest, mimeHeaders);
+ request.setCoyoteRequest(coyoteRequest);
+ Assert.assertFalse(bstAuthenticator.canHandle(request),
+ "BST Authenticator can handle a request with content type test");
+ }
+
+
+ @Test(description = "This test case tests the canHandle method of the BSTAuthenticator under valid conditions")
+ public void testCanHandleWithValidRequest() throws IOException, IllegalAccessException {
+ Request request = createSoapRequest("CorrectBST.xml");
+ Assert.assertTrue(bstAuthenticator.canHandle(request), "BST Authenticator cannot handle a valid "
+ + "authentication request");
+ }
+
+ @Test(description = "This test case tests the canHandle method of the BSTAuthenticator under missing soap headers")
+ public void testCanHandleWithMissingHeaders() throws IOException, IllegalAccessException {
+ Request request = createSoapRequest("WrongBST1.xml");
+ Assert.assertFalse(bstAuthenticator.canHandle(request),
+ "BST Authenticator can handle a request with missing headers ");
+ request = createSoapRequest("WrongBST2.xml");
+ Assert.assertFalse(bstAuthenticator.canHandle(request),
+ "BST Authenticator can handle a request with missing headers ");
+ }
+
+ @Test(description = "This method tests the authenticate method of BST Authenticator when only minimal information"
+ + " is provided")
+ public void testAuthenticateWithMinimalConditions() throws NoSuchFieldException, IllegalAccessException {
+ Request request = new Request();
+ org.apache.coyote.Request coyoteRequest = new org.apache.coyote.Request();
+ request.setCoyoteRequest(coyoteRequest);
+ AuthenticationInfo authenticationInfo = bstAuthenticator.authenticate(request, null);
+ Assert.assertEquals(authenticationInfo.getStatus(), WebappAuthenticator.Status.CONTINUE,
+ "Authentication status of authentication info is wrong");
+ }
+
+ @Test(description = "This method tests the authenticate method of BST Authenticator when all the relevant "
+ + "details", dependsOnMethods = "testInitWithRemote")
+ public void testAuthenticate() throws NoSuchFieldException, IllegalAccessException, IOException {
+ Request request = createSoapRequest("CorrectBST.xml");
+ org.apache.coyote.Request coyoteRequest = request.getCoyoteRequest();
+ Field uriMB = org.apache.coyote.Request.class.getDeclaredField("uriMB");
+ uriMB.setAccessible(true);
+ MessageBytes bytes = MessageBytes.newInstance();
+ bytes.setString("test");
+ uriMB.set(coyoteRequest, bytes);
+ request.setCoyoteRequest(coyoteRequest);
+ bstAuthenticator.canHandle(request);
+ AuthenticationInfo authenticationInfo = bstAuthenticator.authenticate(request, null);
+ Assert.assertEquals(authenticationInfo.getStatus(), WebappAuthenticator.Status.CONTINUE,
+ "Authentication status of authentication info is wrong");
+ Assert.assertEquals(authenticationInfo.getUsername(), "admin",
+ "User name in the authentication info is different than original user");
+ OAuth2TokenValidationResponseDTO unAuthorizedValidationRespose = new OAuth2TokenValidationResponseDTO();
+ unAuthorizedValidationRespose.setValid(false);
+ unAuthorizedValidationRespose.setErrorMsg("User is not authorized");
+ Mockito.doReturn(oAuth2ClientApplicationDTO).when(oAuth2TokenValidationService)
+ .findOAuthConsumerIfTokenIsValid(Mockito.any());
+ oAuth2ClientApplicationDTO.setAccessTokenValidationResponse(unAuthorizedValidationRespose);
+ AuthenticatorFrameworkDataHolder.getInstance().setOAuth2TokenValidationService(oAuth2TokenValidationService);
+ authenticationInfo = bstAuthenticator.authenticate(request, null);
+ Assert.assertEquals(authenticationInfo.getStatus(), WebappAuthenticator.Status.FAILURE,
+ "Un-authorized user got authenticated with BST");
+ }
+
+ /**
+ * To create a soap request by reading the request from given file.
+ *
+ * @param fileName Name of the file that has the soap request content.
+ * @return Request created with soap content.
+ * @throws IllegalAccessException Illegal Access Exception.
+ * @throws IOException IO Exception.
+ */
+ private Request createSoapRequest(String fileName) throws IllegalAccessException, IOException {
+ Request request = new Request();
+ ClassLoader classLoader = getClass().getClassLoader();
+ URL resourceUrl = classLoader
+ .getResource("requests" + File.separator + "BST" + File.separator + fileName);
+ String bstRequestContent = null;
+ if (resourceUrl != null) {
+ File bst = new File(resourceUrl.getFile());
+ bstRequestContent = FileUtils.readFileToString(bst);
+ }
+ org.apache.coyote.Request coyoteRequest = new org.apache.coyote.Request();
+ MimeHeaders mimeHeaders = new MimeHeaders();
+ MessageBytes bytes = mimeHeaders.addValue("content-type");
+ bytes.setString("application/xml");
+ bytes = mimeHeaders.addValue("custom");
+ bytes.setString(bstRequestContent);
+ headersField.set(coyoteRequest, mimeHeaders);
+ TestInputBuffer inputBuffer = new TestInputBuffer();
+ coyoteRequest.setInputBuffer(inputBuffer);
+ Context context = new StandardContext();
+ request.setContext(context);
+ request.setCoyoteRequest(coyoteRequest);
+ return request;
+ }
+
}
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BasicAuthAuthenticatorTest.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BasicAuthAuthenticatorTest.java
index 2553f04423..91ac4abab9 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BasicAuthAuthenticatorTest.java
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/BasicAuthAuthenticatorTest.java
@@ -26,6 +26,7 @@ import org.apache.commons.codec.EncoderException;
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.MimeHeaders;
import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
@@ -51,7 +52,7 @@ public class BasicAuthAuthenticatorTest {
private MessageBytes bytes;
private final String BASIC_HEADER = "basic ";
- @BeforeTest
+ @BeforeClass
public void init() throws NoSuchFieldException {
basicAuthAuthenticator = new BasicAuthAuthenticator();
headersField = org.apache.coyote.Request.class.getDeclaredField("headers");
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OauthAuthenticatorTest.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OauthAuthenticatorTest.java
new file mode 100644
index 0000000000..24deab4123
--- /dev/null
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/authenticator/OauthAuthenticatorTest.java
@@ -0,0 +1,156 @@
+/*
+ * 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.webapp.authenticator.framework.authenticator;
+
+import org.apache.catalina.connector.Request;
+import org.apache.commons.pool.impl.GenericObjectPool;
+import org.apache.tomcat.util.buf.MessageBytes;
+import org.apache.tomcat.util.http.MimeHeaders;
+import org.mockito.Mockito;
+import org.testng.Assert;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+import org.wso2.carbon.core.security.AuthenticatorsConfiguration;
+import org.wso2.carbon.identity.oauth2.stub.OAuth2TokenValidationServiceStub;
+import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2ClientApplicationDTO;
+import org.wso2.carbon.identity.oauth2.stub.dto.OAuth2TokenValidationResponseDTO;
+import org.wso2.carbon.webapp.authenticator.framework.AuthenticationInfo;
+import org.wso2.carbon.webapp.authenticator.framework.BaseWebAppAuthenticatorFrameworkTest;
+import org.wso2.carbon.webapp.authenticator.framework.authenticator.oauth.impl.RemoteOAuthValidator;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Properties;
+
+/**
+ * This is a test case for {@link OAuthAuthenticator}
+ */
+public class OauthAuthenticatorTest {
+ private OAuthAuthenticator oAuthAuthenticator;
+ private final String BEARER_HEADER = "bearer ";
+ private Field headersField;
+ private Properties properties;
+
+ @BeforeClass
+ public void setup()
+ throws NoSuchFieldException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
+ oAuthAuthenticator = new OAuthAuthenticator();
+ headersField = org.apache.coyote.Request.class.getDeclaredField("headers");
+ headersField.setAccessible(true);
+ }
+
+ @Test(description = "This method tests the successful execution of init method")
+ public void testInit() throws NoSuchFieldException, IllegalAccessException {
+ properties = new Properties();
+ properties.setProperty("TokenValidationEndpointUrl", "test");
+ properties.setProperty("Username", "admin");
+ properties.setProperty("Password", "admin");
+ properties.setProperty("IsRemote", "true");
+ properties.setProperty("MaxConnectionsPerHost", "100");
+ properties.setProperty("MaxTotalConnections", "1000");
+ Assert.assertNull(oAuthAuthenticator.getProperty("test"),
+ "OAuth authenticator is returning the properties that were never set");
+ oAuthAuthenticator.setProperties(properties);
+ oAuthAuthenticator.init();
+ Field tokenValidator = OAuthAuthenticator.class.getDeclaredField("tokenValidator");
+ tokenValidator.setAccessible(true);
+ Assert.assertNotNull(tokenValidator.get(oAuthAuthenticator), "OauthAuthenticator initialization failed");
+ Assert.assertEquals(oAuthAuthenticator.getName(), "OAuth", "Name of the OauthAuthenticator does not match");
+ }
+
+ @Test(description = "This method tests the canHandle method of OAuthAuthenticator")
+ public void testCanHandle() throws IllegalAccessException {
+ Request request = createOauthRequest(BEARER_HEADER);
+ Assert.assertTrue(oAuthAuthenticator.canHandle(request),
+ "The request with the bearer authorization header cannot be handled by OauthAuthenticator");
+
+ request = createOauthRequest("test");
+ Assert.assertFalse(oAuthAuthenticator.canHandle(request),
+ "The request without bearer authorization header can be handled by OauthAuthenticator");
+ }
+
+ @Test(description = "This method tests the authenticate under different parameters",
+ dependsOnMethods = {"testInit"})
+ public void testAuthenticate() throws Exception {
+ Request request = createOauthRequest(BEARER_HEADER);
+ Assert.assertEquals(oAuthAuthenticator.authenticate(request, null).getStatus(),
+ WebappAuthenticator.Status.CONTINUE, "Authentication status mismatched");
+ request = createOauthRequest(BEARER_HEADER + "abc");
+ org.apache.coyote.Request coyoteRequest = request.getCoyoteRequest();
+ Field uriMB = org.apache.coyote.Request.class.getDeclaredField("uriMB");
+ uriMB.setAccessible(true);
+ MessageBytes bytes = MessageBytes.newInstance();
+ bytes.setString("test");
+ uriMB.set(coyoteRequest, bytes);
+ request.setCoyoteRequest(coyoteRequest);
+ Field tokenValidator = OAuthAuthenticator.class.getDeclaredField("tokenValidator");
+ tokenValidator.setAccessible(true);
+
+ GenericObjectPool genericObjectPool = Mockito.mock(GenericObjectPool.class, Mockito.CALLS_REAL_METHODS);
+ RemoteOAuthValidator remoteOAuthValidator = Mockito
+ .mock(RemoteOAuthValidator.class, Mockito.CALLS_REAL_METHODS);
+ tokenValidator.set(oAuthAuthenticator, remoteOAuthValidator);
+ Field stubs = RemoteOAuthValidator.class.getDeclaredField("stubs");
+ stubs.setAccessible(true);
+ stubs.set(remoteOAuthValidator, genericObjectPool);
+ OAuth2TokenValidationResponseDTO oAuth2TokenValidationResponseDTO = new OAuth2TokenValidationResponseDTO();
+ oAuth2TokenValidationResponseDTO.setValid(true);
+ oAuth2TokenValidationResponseDTO.setAuthorizedUser("admin@carbon.super");
+ OAuth2ClientApplicationDTO oAuth2ClientApplicationDTO = Mockito
+ .mock(OAuth2ClientApplicationDTO.class, Mockito.CALLS_REAL_METHODS);
+ Mockito.doReturn(oAuth2TokenValidationResponseDTO).when(oAuth2ClientApplicationDTO)
+ .getAccessTokenValidationResponse();
+ OAuth2TokenValidationServiceStub oAuth2TokenValidationServiceStub = Mockito
+ .mock(OAuth2TokenValidationServiceStub.class, Mockito.CALLS_REAL_METHODS);
+ Mockito.doReturn(oAuth2ClientApplicationDTO).when(oAuth2TokenValidationServiceStub)
+ .findOAuthConsumerIfTokenIsValid(Mockito.any());
+ Mockito.doReturn(oAuth2TokenValidationServiceStub).when(genericObjectPool).borrowObject();
+ oAuthAuthenticator.canHandle(request);
+ AuthenticationInfo authenticationInfo = oAuthAuthenticator.authenticate(request, null);
+ Assert.assertEquals(authenticationInfo.getUsername(), "admin");
+
+ }
+
+ @Test(description = "This method is used to test getProperty method of the OAuthAuthenticator",
+ dependsOnMethods = {"testInit"})
+ public void testGetProperty() {
+ Assert.assertEquals(oAuthAuthenticator.getProperty("Username"), "admin",
+ "Username property of " + "OauthAuthenticator is not matching with the assigned one.");
+ Assert.assertEquals(oAuthAuthenticator.getProperties().size(), properties.size(),
+ "Property list assigned " + "does not match with retrieved list");
+ }
+
+ /**
+ * This will create an OAuth request.
+ *
+ * @param authorizationHeader Authorization Header
+ */
+ private Request createOauthRequest(String authorizationHeader) throws IllegalAccessException {
+ Request request = new Request();
+ org.apache.coyote.Request coyoteRequest = new org.apache.coyote.Request();
+ MimeHeaders mimeHeaders = new MimeHeaders();
+ MessageBytes bytes = mimeHeaders.addValue(BaseWebAppAuthenticatorFrameworkTest.AUTHORIZATION_HEADER);
+ bytes.setString(authorizationHeader);
+ headersField.set(coyoteRequest, mimeHeaders);
+ request.setCoyoteRequest(coyoteRequest);
+ return request;
+ }
+}
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/util/TestInputBuffer.java b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/util/TestInputBuffer.java
new file mode 100644
index 0000000000..7ded99b18a
--- /dev/null
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/java/org/wso2/carbon/webapp/authenticator/framework/util/TestInputBuffer.java
@@ -0,0 +1,62 @@
+/*
+ * 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.webapp.authenticator.framework.util;
+
+import org.apache.catalina.connector.InputBuffer;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.coyote.Request;
+import org.apache.tomcat.util.buf.ByteChunk;
+import org.apache.tomcat.util.buf.MessageBytes;
+import org.apache.tomcat.util.http.MimeHeaders;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+
+/**
+ * This is a dummy implementation of {@link InputBuffer} for the test cases.
+ */
+public class TestInputBuffer implements org.apache.coyote.InputBuffer {
+ private Log log = LogFactory.getLog(TestInputBuffer.class);
+
+ @Override
+ public int doRead(ByteChunk byteChunk, Request request) throws IOException {
+ String string = request.getHeader("custom");
+ MimeHeaders mimeHeaders = new MimeHeaders();
+ Field byteC = null;
+ try {
+ byteC = MessageBytes.class.getDeclaredField("byteC");
+ byteC.setAccessible(true);
+ } catch (NoSuchFieldException e) {
+ log.error("Cannot get the byteC field", e);
+ }
+ MessageBytes bytes = mimeHeaders.addValue("content-type");
+ try {
+ if (byteC != null) {
+ byteC.set(bytes, byteChunk);
+ }
+ } catch (IllegalAccessException e) {
+ log.error("Cannot set byteC field", e);
+ }
+ bytes.setString(string);
+ bytes.toBytes();
+ return byteChunk.getLength();
+ }
+}
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/CorrectBST.xml b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/CorrectBST.xml
new file mode 100644
index 0000000000..9be7210ec6
--- /dev/null
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/CorrectBST.xml
@@ -0,0 +1,25 @@
+
+
+
+
+ test
+
+
+
+
+
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/WrongBST1.xml b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/WrongBST1.xml
new file mode 100644
index 0000000000..b83635c6d1
--- /dev/null
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/WrongBST1.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/WrongBST2.xml b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/WrongBST2.xml
new file mode 100644
index 0000000000..671d1e770e
--- /dev/null
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/requests/BST/WrongBST2.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/testng.xml b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/testng.xml
index 4ce2c1153a..d166d4b15e 100644
--- a/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/testng.xml
+++ b/components/webapp-authenticator-framework/org.wso2.carbon.webapp.authenticator.framework/src/test/resources/testng.xml
@@ -30,6 +30,7 @@
+
diff --git a/components/webapp-authenticator-framework/pom.xml b/components/webapp-authenticator-framework/pom.xml
index 61f153ff18..8a039c09cd 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
webapp-authenticator-framework
- 3.0.145-SNAPSHOT
+ 3.0.148-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 515cb622c5..aee0053b20 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.application.extension.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 9bb9c65107..21cd8e3d74 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.handler.server.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 45af0e550c..8bc00561d1 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.integration.client.feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 a28967e835..d6aaea623a 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.apimgt.webapp.publisher.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 52683ed0e4..6553a3d1a1 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
apimgt-extensions-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 cabf1bedfe..fcbce9d773 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.145-SNAPSHOT
+ 3.0.148-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 1ea2000f07..4ecaf97f03 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.145-SNAPSHOT
+ 3.0.148-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 0162aa7b2c..6bbe7752d5 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.certificate.mgt.server.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 e8bef3c938..a785c751f4 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
certificate-mgt-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 6f69cb3e7e..5802e02903 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.device.type.deployer.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 9bf90c182e..51fbc838cb 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.fcm.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 15fed87eeb..929fc52057 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.http.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 afbb218f47..e390d6c8f7 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.mqtt.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 44bcee1aac..11e4e7bc36 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.push.notification.provider.xmpp.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 02fdec375a..d607c28460 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
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 29aeb87ce4..2e15777494 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.analytics.data.publisher.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 4d89a26501..1186d6d60a 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.145-SNAPSHOT
+ 3.0.148-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 bb58fe4ea7..4fec0a99b9 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.extensions.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 0dd438d200..ae3efcbd6b 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.145-SNAPSHOT
+ 3.0.148-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 7b2780b2b7..9a0fd82651 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.server.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 661fd66a96..3395a77803 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
diff --git a/features/device-mgt/pom.xml b/features/device-mgt/pom.xml
index 52e196bea5..3b195c6400 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.145-SNAPSHOT
+ 3.0.148-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 c2b6e47d57..95d3011678 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.email.sender.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 ca6357a730..574a06bb20 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
email-sender-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 e19c3f09d9..c7d209ebbe 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.identity.jwt.client.extension.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 a8e4065dcc..4b4bccf0c1 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
jwt-client-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 55c92cbdd2..477fef5cc7 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.device.mgt.oauth.extensions.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 2f28bc923c..8b25b81a53 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
oauth-extensions-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 b56adb1dc7..b535ac8f55 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.policy.mgt.server.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 149795038a..92d4820562 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
policy-mgt-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-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 1f5420dbf1..46f2ed3adc 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../pom.xml
4.0.0
org.wso2.carbon.webapp.authenticator.framework.server.feature
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-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 314a194c44..e9557fcc6e 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.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
../../pom.xml
4.0.0
org.wso2.carbon.devicemgt
webapp-authenticator-framework-feature
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
pom
WSO2 Carbon - Webapp Authenticator Framework Feature
http://wso2.org
diff --git a/pom.xml b/pom.xml
index 240fb9a0a6..5e2e6c6686 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
org.wso2.carbon.devicemgt
carbon-devicemgt
pom
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
WSO2 Carbon - Device Management - Parent
http://wso2.org
WSO2 Connected Device Manager Components
@@ -1863,7 +1863,7 @@
1.2.11.wso2v10
- 3.0.145-SNAPSHOT
+ 3.0.148-SNAPSHOT
4.4.8