mirror of
https://repository.entgra.net/community/product-iots.git
synced 2025-09-16 23:32:19 +00:00
Merging the changes from wso2/master.
This commit is contained in:
parent
0e6ff6b266
commit
2ce5b0dd74
@ -3,8 +3,11 @@
|
|||||||
srcset="http://b.content.wso2.com/sites/all/common/images/product-logos/IoT-server.svg@2x.png 2x"
|
srcset="http://b.content.wso2.com/sites/all/common/images/product-logos/IoT-server.svg@2x.png 2x"
|
||||||
alt="WSO2 IoT Server" />
|
alt="WSO2 IoT Server" />
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
# Welcome to WSO2 IoT Server
|
# Welcome to WSO2 IoT Server
|
||||||
[](https://wso2.org/jenkins/view/Dashboard/job/product-iots/)
|
|
||||||
|
<a href='https://wso2.org/jenkins/job/products/job/product-iots/'><img src='https://wso2.org/jenkins/job/products/job/product-iots/badge/icon'></a>
|
||||||
|
<a href='https://opensource.org/licenses/Apache-2.0'><img src='https://img.shields.io/badge/License-Apache%202.0-blue.svg'></a>
|
||||||
|
|
||||||
WSO2 IoT Server is a complete solution that enables device manufacturers and enterprises to connect and manage their devices, build apps, manage events, secure devices and data, and visualize sensor data in a scalable manner.
|
WSO2 IoT Server is a complete solution that enables device manufacturers and enterprises to connect and manage their devices, build apps, manage events, secure devices and data, and visualize sensor data in a scalable manner.
|
||||||
|
|
||||||
|
|||||||
@ -18,15 +18,22 @@
|
|||||||
<%
|
<%
|
||||||
var query = request.getQueryString();
|
var query = request.getQueryString();
|
||||||
var dest = encodeURIComponent(originalURI + (query ? '?' + query : ''));
|
var dest = encodeURIComponent(originalURI + (query ? '?' + query : ''));
|
||||||
|
var configs = require('/configs/portal.js').config();
|
||||||
|
var isCloud = configs.isCloud;
|
||||||
%>
|
%>
|
||||||
<header class="header header-default">
|
<header class="header header-default">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
<div class="pull-left brand float-remove-xs text-center-xs">
|
<div class="pull-left brand float-remove-xs text-center-xs">
|
||||||
<a href="<%=tenantedUrlPrefix%>./dashboards">
|
<a href="<%=tenantedUrlPrefix%>./dashboards">
|
||||||
<img src="<%=urlPrefix%>libs/theme-wso2_1.0/images/logo-inverse.svg" alt="WSO2" title="WSO2" class="logo">
|
<img src="<%=urlPrefix%>libs/theme-wso2_1.0/images/logo-inverse.svg" alt="WSO2" title="WSO2" class="logo">
|
||||||
|
<% if (isCloud) { %>
|
||||||
<h1>Cloud</h1>
|
<h1>Cloud</h1>
|
||||||
|
<% } else { %>
|
||||||
|
<h1><%=i18n.localize("dashboard.server.label")%></h1>
|
||||||
|
<% } %>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
<% if (isCloud) { %>
|
||||||
<div class="pull-right auth float-remove-xs text-center-xs">
|
<div class="pull-right auth float-remove-xs text-center-xs">
|
||||||
<% if (user) { %>
|
<% if (user) { %>
|
||||||
|
|
||||||
@ -283,7 +290,40 @@ var dest = encodeURIComponent(originalURI + (query ? '?' + query : ''));
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<% } else { %>
|
||||||
|
<div class="pull-right auth float-remove-xs text-center-xs">
|
||||||
|
<% if (user) { %>
|
||||||
|
<span class="hidden-xs">
|
||||||
|
<a href="#" class="dropdown" data-toggle="dropdown">
|
||||||
|
<span class="add-margin-left-2x add-margin-right-1x"><%=user.username%></span>
|
||||||
|
<span class="fw fw-user add-margin-right-1x"></span>
|
||||||
|
<span class="caret add-margin-right-2x"></span>
|
||||||
|
</a>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-right" role="menu">
|
||||||
|
<li class="dropdown-header visible-xs"><%=user.username%> <span class="caret"></span></li>
|
||||||
|
<li><a href="<%=urlPrefix%>logout?destination=<%=dest%>"><%= i18n.localize("logout.label")%></a></li>
|
||||||
|
</ul>
|
||||||
|
</span>
|
||||||
|
<div class="visible-xs auth-xs">
|
||||||
|
<a href="#" class="collapsed" data-toggle="collapse" data-target="#auth-menu-items" aria-expanded="false">
|
||||||
|
<span class="icon fw-stack fw">
|
||||||
|
<i class="fw fw-user fw-stack-1x"></i>
|
||||||
|
</span>
|
||||||
|
<span class="caret"></span>
|
||||||
|
</a>
|
||||||
|
<div id="auth-menu-items" class="collapse">
|
||||||
|
<ul >
|
||||||
|
<li><%=user.username%></li>
|
||||||
|
<li><a href="<%=urlPrefix%>logout?destination=<%=dest%>"><%= i18n.localize("logout.label")%></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<% } else { %>
|
||||||
|
<a href="<%=urlPrefix%>login?destination=<%=dest%>" class="dropdown" data-toggle="dropdown">
|
||||||
|
<%= i18n.localize("login.label")%>
|
||||||
|
</a>
|
||||||
|
<% } %>
|
||||||
|
</div>
|
||||||
|
<% } %>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@ -185,8 +185,8 @@ $(function () {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
if($('#cloud-menu-popover').length) {
|
||||||
$('#cloud-menu-popover i.fw-tiles').popover({
|
$('#cloud-menu-popover i.fw-tiles').popover({
|
||||||
html: true,
|
html: true,
|
||||||
trigger:'click',
|
trigger:'click',
|
||||||
@ -197,8 +197,8 @@ $(function () {
|
|||||||
return $("#popover-content").html();
|
return $("#popover-content").html();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
initUI();
|
initUI();
|
||||||
loadDashboards();
|
loadDashboards();
|
||||||
});
|
});
|
||||||
@ -59,6 +59,8 @@ log4j.logger.de.hunsicker.jalopy.io=FATAL
|
|||||||
#log4j.logger.org.apache.synapse.transport.http.headers=DEBUG
|
#log4j.logger.org.apache.synapse.transport.http.headers=DEBUG
|
||||||
#log4j.logger.org.apache.synapse.transport.http.wire=DEBUG
|
#log4j.logger.org.apache.synapse.transport.http.wire=DEBUG
|
||||||
|
|
||||||
|
# uncomment the following logs to see http calls headers and messages
|
||||||
|
#log4j.logger.feign=DEBUG
|
||||||
#only WARN allowed for access loggers in http transport by default
|
#only WARN allowed for access loggers in http transport by default
|
||||||
log4j.logger.org.apache.synapse.transport.http.access=WARN
|
log4j.logger.org.apache.synapse.transport.http.access=WARN
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
{
|
{
|
||||||
|
"isCloud" : false,
|
||||||
"store": {
|
"store": {
|
||||||
"types": ["fs"]
|
"types": ["fs"]
|
||||||
},
|
},
|
||||||
|
|||||||
41
modules/integration/pom.xml
Normal file
41
modules/integration/pom.xml
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>wso2iot-parent</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>wso2iot-integration</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 IoT Server - Integration Module</name>
|
||||||
|
<url>http://wso2.org</url>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<module>tests-artifacts</module>
|
||||||
|
<module>tests-common</module>
|
||||||
|
<!--<module>tests-integration</module>-->
|
||||||
|
<module>tests-iot-web-ui</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
||||||
33
modules/integration/tests-artifacts/pom.xml
Normal file
33
modules/integration/tests-artifacts/pom.xml
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>wso2iot-integration</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>tests-artifacts</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 IoT - Integration Test Artifacts</name>
|
||||||
|
|
||||||
|
</project>
|
||||||
34
modules/integration/tests-common/admin-clients/pom.xml
Normal file
34
modules/integration/tests-common/admin-clients/pom.xml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>tests-common</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.iot.integration.common.clients</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<name>WSO2 IoT - Integration Test Common Admin Clients</name>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>tests-common</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.iot.integration.common.utils</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<name>WSO2 IoT Server - Integration Test Common Utils</name>
|
||||||
|
|
||||||
|
<licenses>
|
||||||
|
<license>
|
||||||
|
<name>Apache License Version 2.0</name>
|
||||||
|
<url>http://www.apache.org/licenses/LICENSE-2.0</url>
|
||||||
|
</license>
|
||||||
|
</licenses>
|
||||||
|
|
||||||
|
</project>
|
||||||
39
modules/integration/tests-common/pom.xml
Normal file
39
modules/integration/tests-common/pom.xml
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>wso2iot-integration</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>tests-common</artifactId>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
<name>WSO2 IoT Server - Integration Test Common</name>
|
||||||
|
|
||||||
|
<modules>
|
||||||
|
<!--<module>admin-clients</module>-->
|
||||||
|
<!--<module>integration-test-utils</module>-->
|
||||||
|
<module>web-ui-pages</module>
|
||||||
|
</modules>
|
||||||
|
|
||||||
|
</project>
|
||||||
125
modules/integration/tests-common/web-ui-pages/pom.xml
Normal file
125
modules/integration/tests-common/web-ui-pages/pom.xml
Normal file
@ -0,0 +1,125 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>tests-common</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.iot.core.integration.ui.pages</artifactId>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
<name>WSO2 IoT - Integration Test Common Web UI Pages</name>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automationutils</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.integration.common.admin.client</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.user.mgt.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.logging.view.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.ndatasource.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.server.admin.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.throttle.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.tenant.mgt.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.application.mgt.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.security.mgt.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.identity.user.profile.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.wso2.carbon</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.identity.user.profile.stub</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automation</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.automation.extensions</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.slf4j</groupId>
|
||||||
|
<artifactId>slf4j-api</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.seleniumhq.selenium</groupId>
|
||||||
|
<artifactId>selenium-java</artifactId>
|
||||||
|
<exclusions>
|
||||||
|
<exclusion>
|
||||||
|
<groupId>org.seleniumhq.selenium</groupId>
|
||||||
|
<artifactId>selenium-android-driver</artifactId>
|
||||||
|
</exclusion>
|
||||||
|
</exclusions>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testng</groupId>
|
||||||
|
<artifactId>testng</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automation</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.automation.test.utils</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automation</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.automation.engine</artifactId>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Read the mapper file and load the UI elements into Properties object.
|
||||||
|
*/
|
||||||
|
public class UIElementMapper {
|
||||||
|
|
||||||
|
public static final Properties uiProperties = new Properties();
|
||||||
|
private static UIElementMapper instance;
|
||||||
|
|
||||||
|
private UIElementMapper(){
|
||||||
|
}
|
||||||
|
|
||||||
|
public static synchronized UIElementMapper getInstance() throws IOException {
|
||||||
|
if (instance == null) {
|
||||||
|
setStream();
|
||||||
|
instance = new UIElementMapper();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Properties setStream() throws IOException {
|
||||||
|
|
||||||
|
InputStream inputStream = UIElementMapper.class.getResourceAsStream("/mapper.properties");
|
||||||
|
|
||||||
|
if (inputStream.available() > 0) {
|
||||||
|
uiProperties.load(inputStream);
|
||||||
|
inputStream.close();
|
||||||
|
return uiProperties;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getElement (String key) {
|
||||||
|
if (!uiProperties.isEmpty()) {
|
||||||
|
return uiProperties.getProperty(key);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.NoSuchElementException;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains the constants and common methods used in pages.
|
||||||
|
*/
|
||||||
|
public class UIUtils {
|
||||||
|
|
||||||
|
public static long webDriverTimeOut = 10;
|
||||||
|
public static long webDriverTime = 60;
|
||||||
|
public static int threadTimeout = 1000;
|
||||||
|
|
||||||
|
public static boolean isElementPresent(Log log, WebDriver driver, By by) {
|
||||||
|
try {
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, webDriverTime);
|
||||||
|
wait.until(ExpectedConditions.presenceOfElementLocated(by));
|
||||||
|
driver.findElement(by);
|
||||||
|
return true;
|
||||||
|
} catch (NoSuchElementException e) {
|
||||||
|
log.error(by.toString() + " is not present");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.devices;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceViewPage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to represent the IOT devices page. In this page, all the enrolled devices are listed.
|
||||||
|
* User can perform following functions on the enrolled devices.
|
||||||
|
* 1. View the device.
|
||||||
|
* 2. View device analytics.
|
||||||
|
* 3. Edit the device.
|
||||||
|
* 4. Delete the device.
|
||||||
|
*/
|
||||||
|
public class DevicesPage {
|
||||||
|
|
||||||
|
Log log = LogFactory.getLog(DevicesPage.class);
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public DevicesPage(WebDriver driver) throws IOException {
|
||||||
|
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains("Device Management | IoT Server"))) {
|
||||||
|
throw new IllegalStateException("This is not the Device Management page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method checks whether the given device is enrolled and visible in the UI of the IOT server.
|
||||||
|
* @param name : The name of the device to be checked.
|
||||||
|
* @return : True if the device is enrolled and visible. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isDeviceEnrolled(String name) {
|
||||||
|
List<WebElement> deviceNames = driver.findElements(By.tagName("h4"));
|
||||||
|
if (!deviceNames.isEmpty()) {
|
||||||
|
for (WebElement deviceName : deviceNames) {
|
||||||
|
if (deviceName.getText().contains(name)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method performs the navigation to the Device view of the given device.
|
||||||
|
* Here the navigation happens to the Connected cup device.
|
||||||
|
* @param deviceName : Name of the device.
|
||||||
|
* @return : The corresponding device view page. Null if not visible.
|
||||||
|
*/
|
||||||
|
public ConnectedCupDeviceViewPage viewDevice(String deviceName) throws IOException {
|
||||||
|
WebElement deviceTable = driver.findElement(By.xpath(uiElementMapper.getElement("iot.devices.table.xpath")));
|
||||||
|
List<WebElement> data = deviceTable.findElements(By.cssSelector("a"));
|
||||||
|
for (WebElement e : data) {
|
||||||
|
String s = getLink(e, "/device/connectedcup?id=");
|
||||||
|
if (s != null) {
|
||||||
|
driver.get(s);
|
||||||
|
return new ConnectedCupDeviceViewPage(driver, deviceName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to extract the URL, which matches with the given parameters from an HTML element.
|
||||||
|
* @param element : WebElement, from which the URL should be extracted.
|
||||||
|
* @param lookupText : The parameters to be contained in the URL.
|
||||||
|
* @return : The URL String found. NULL if the URL is not found.
|
||||||
|
*/
|
||||||
|
private String getLink(WebElement element, String... lookupText) {
|
||||||
|
String link = element.getAttribute("href");
|
||||||
|
boolean check = true;
|
||||||
|
for (String s : lookupText) {
|
||||||
|
if (!link.contains(s)) {
|
||||||
|
check = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return check ? link : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.devices;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.samples.ConnectedCupDeviceTypeViewPage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device Enrollment page.
|
||||||
|
* This page lists the all device types which are currently installed in the IOT server.
|
||||||
|
*/
|
||||||
|
public class EnrollDevicePage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
private Log log = LogFactory.getLog(EnrollDevicePage.class);
|
||||||
|
|
||||||
|
public EnrollDevicePage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains("Device Types | IoT Server"))) {
|
||||||
|
throw new IllegalStateException("This is not the Device Enrollment page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method checks whether the Connected cup device is installed. If the device is installed correctly, it is
|
||||||
|
* displayed in this page.
|
||||||
|
* @return : True if the device is visible in the page. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isInstalled() {
|
||||||
|
boolean check = UIUtils.isElementPresent(log, driver, By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||||
|
if (check) {
|
||||||
|
WebElement deviceDiv = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||||
|
WebElement tryBtn = deviceDiv.findElement(By.tagName("button"));
|
||||||
|
return tryBtn.isDisplayed();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to perform the navigation to Device type view page of the Connected cup.
|
||||||
|
* @return : The corresponding Device type view page. Null, if the element is not visible.
|
||||||
|
*/
|
||||||
|
public ConnectedCupDeviceTypeViewPage gotoConnectedCupDeviceTypeViewPage() throws IOException {
|
||||||
|
boolean check = UIUtils.isElementPresent(log, driver, By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||||
|
if (check){
|
||||||
|
WebElement deviceDiv = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.xpath")));
|
||||||
|
WebElement tryBtn = deviceDiv.findElement(By.tagName("button"));
|
||||||
|
tryBtn.click();
|
||||||
|
return new ConnectedCupDeviceTypeViewPage(driver);
|
||||||
|
} else {
|
||||||
|
log.error("Element not found...........................");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,31 @@
|
|||||||
|
package org.wso2.iot.integration.ui.pages.error;
|
||||||
|
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class IOTErrorPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
private boolean isErrorPage = true;
|
||||||
|
|
||||||
|
public IOTErrorPage (WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.error.page")))) {
|
||||||
|
isErrorPage = false;
|
||||||
|
throw new IllegalStateException("This is not the Error page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isErrorPresent() {
|
||||||
|
return this.isErrorPage;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.graphs;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to store graph data
|
||||||
|
*/
|
||||||
|
public class Graph {
|
||||||
|
|
||||||
|
private String graphId;
|
||||||
|
private String yAxis;
|
||||||
|
private String xAxis;
|
||||||
|
private String legend;
|
||||||
|
|
||||||
|
public void setGraphId(String graphId) {
|
||||||
|
this.graphId = graphId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getyAxis() {
|
||||||
|
return yAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setyAxis(String yAxis) {
|
||||||
|
this.yAxis = yAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getxAxis() {
|
||||||
|
return xAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setxAxis(String xAxis) {
|
||||||
|
this.xAxis = xAxis;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getLegend() {
|
||||||
|
return legend;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLegend(String legend) {
|
||||||
|
this.legend = legend;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return String.format("The graph for graph id : %s, X - axis : %s, Y - axis : %s, legend : %s ", graphId,
|
||||||
|
xAxis, yAxis, legend);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,170 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.graphs;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.NoSuchElementException;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Graphs should also be tested in UI tests. So, this class contains methods to extract various properties of graphs..
|
||||||
|
* Such as,
|
||||||
|
* - Legend
|
||||||
|
* - Tool Tips
|
||||||
|
* - X, Y axis properties
|
||||||
|
* - get the graph path values etc.
|
||||||
|
* Works with IOT server device view graphs and analytics graphs.
|
||||||
|
*/
|
||||||
|
public class GraphHandler {
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
private Log log = LogFactory.getLog(GraphHandler.class);
|
||||||
|
private WebElement graphDiv;
|
||||||
|
private WebDriver driver;
|
||||||
|
private List<WebElement> graphs;
|
||||||
|
|
||||||
|
public GraphHandler(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
graphDiv = driver.findElement(By.xpath(uiElementMapper.getElement("iot.stats.graph.container.xpath")));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is to get all the elements of graphs and store in a Hash map.
|
||||||
|
* This simplifies iterating through the DOM every time finding for an element when having multiple graphs.
|
||||||
|
*/
|
||||||
|
public Map<String, Graph> getGraphMap() {
|
||||||
|
HashMap<String, Graph> graphMap = new HashMap<>();
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.stat.graph.wrapper.xpath")))));
|
||||||
|
List<WebElement> graphs = driver.findElements(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.stat.graph.wrapper.xpath")));
|
||||||
|
for (WebElement e : graphs) {
|
||||||
|
Graph g = new Graph();
|
||||||
|
String key = e.getAttribute("id").split("-")[1];
|
||||||
|
g.setGraphId(key.toLowerCase().replace(" ", ""));
|
||||||
|
String xAxis = e.findElement(By.xpath(uiElementMapper.getElement("iot.stat.graph.xAxis.xpath"))).getText();
|
||||||
|
g.setxAxis(xAxis);
|
||||||
|
String yAxis = e.findElement(By.xpath("//*[contains(@id, \"y_axis-" + key + "\")]")).getText();
|
||||||
|
g.setyAxis(yAxis);
|
||||||
|
String legend = e.findElement(By.xpath("//*[contains(@id, \"legend-" + key + "\")]")).findElement(
|
||||||
|
By.tagName("span")).getText();
|
||||||
|
g.setLegend(legend);
|
||||||
|
graphMap.put(key, g);
|
||||||
|
}
|
||||||
|
return graphMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the number of graphs in the UI
|
||||||
|
*/
|
||||||
|
public int getGraphCount() {
|
||||||
|
try {
|
||||||
|
graphs = this.graphDiv.findElements(By.xpath("//*[contains(@class, \"chartWrapper\")]"));
|
||||||
|
} catch (NoSuchElementException e) {
|
||||||
|
log.error(String.format("Graph element is not found. \n %s", e.getMessage()));
|
||||||
|
}
|
||||||
|
return graphs.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the Web Element corresponds to the given graph id
|
||||||
|
*
|
||||||
|
* @param graphId : the id of the graph.
|
||||||
|
* @return Web Element of the graph
|
||||||
|
*/
|
||||||
|
public WebElement getGraphById(String graphId) {
|
||||||
|
graphs = this.graphDiv.findElements(By.xpath(uiElementMapper.getElement("iot.stat.graph.wrapper.xpath")));
|
||||||
|
for (int i = 0; i < graphs.size() && graphs.size() > 0; i++) {
|
||||||
|
WebElement element = graphs.get(i);
|
||||||
|
if (element.getAttribute("id").toLowerCase().replace(" ", "").contains(graphId.toLowerCase())) {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the graph path is visible or not.
|
||||||
|
*
|
||||||
|
* @param graph : web element of the graph
|
||||||
|
* @return : True if the path is visible. False otherwise
|
||||||
|
*/
|
||||||
|
public boolean isPathAvailable(WebElement graph) {
|
||||||
|
try {
|
||||||
|
WebElement graphContainer = getGraph(graph, uiElementMapper.getElement("iot.stat.graph.class.name"));
|
||||||
|
return graphContainer != null && graphContainer.findElement(By.tagName("path")).isDisplayed();
|
||||||
|
} catch (NoSuchElementException e) {
|
||||||
|
log.error(String.format("No element found. \n %s", e.getMessage()));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the path of the graph draws the values pushed by the device. As it takes some time, explicit wait of 10
|
||||||
|
* seconds is added.
|
||||||
|
*
|
||||||
|
* @param graph : Web element of the graph
|
||||||
|
* @param val : Value which pushed by the device
|
||||||
|
* @return : True if the path is drawn to the values. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isPathGetValues(WebElement graph, String val) {
|
||||||
|
WebElement graphContainer = getGraph(graph, uiElementMapper.getElement("iot.stat.graph.class.name"));
|
||||||
|
driver.manage().timeouts().implicitlyWait(UIUtils.webDriverTimeOut, TimeUnit.SECONDS);
|
||||||
|
String[] values;
|
||||||
|
if (graphContainer != null) {
|
||||||
|
values = graphContainer.findElement(By.tagName("path")).getAttribute("d").split(",");
|
||||||
|
for (String value : values) {
|
||||||
|
if (value.contains(val)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns the WebElement for graph with the given class name.
|
||||||
|
*
|
||||||
|
* @param graph : Outer container of the graphs
|
||||||
|
* @param className : Class name of the graph needed.
|
||||||
|
* @return the WebElement which defined by the given class name. Null if no element is found.
|
||||||
|
*/
|
||||||
|
private WebElement getGraph(WebElement graph, String className) {
|
||||||
|
List<WebElement> elements = graph.findElements(By.tagName("div"));
|
||||||
|
for (WebElement e : elements) {
|
||||||
|
if (e.getAttribute("class").contains(className)) {
|
||||||
|
return e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.groups;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add group page of iot server. This class contains methods to,
|
||||||
|
* 1. Create a new group
|
||||||
|
* 2. Submit an empty form
|
||||||
|
*/
|
||||||
|
public class DeviceAddGroupPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public DeviceAddGroupPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.groups.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the Add Group page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method performs creation of a new device group.
|
||||||
|
* @param name : The group name that is need to be created.
|
||||||
|
* @param description : the description for the group
|
||||||
|
* @return The resultant page.
|
||||||
|
*/
|
||||||
|
public DeviceGroupsPage addNewGroup(String name, String description) throws IOException {
|
||||||
|
|
||||||
|
WebElement nameField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.device.group.addGroupForm.name.id")));
|
||||||
|
WebElement descriptionField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.device.group.addGroupForm.description.id")));
|
||||||
|
WebElement addGroupButton = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.device.group.addGroupForm.addButton.id")));
|
||||||
|
|
||||||
|
nameField.sendKeys(name);
|
||||||
|
descriptionField.sendKeys(description);
|
||||||
|
|
||||||
|
addGroupButton.click();
|
||||||
|
|
||||||
|
return new DeviceGroupsPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method submits an empty form and returns the error message.
|
||||||
|
* @return The error string when trying to submit an empty form.
|
||||||
|
*/
|
||||||
|
public String submitEmptyForm() {
|
||||||
|
WebElement nameField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.device.group.addGroupForm.name.id")));
|
||||||
|
WebElement descriptionField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.device.group.addGroupForm.description.id")));
|
||||||
|
WebElement addGroupButton = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.device.group.addGroupForm.addButton.id")));
|
||||||
|
|
||||||
|
nameField.sendKeys("");
|
||||||
|
descriptionField.sendKeys("");
|
||||||
|
|
||||||
|
addGroupButton.click();
|
||||||
|
|
||||||
|
return driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.device.groups.add.emptyfrom.error"))).getText();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.groups;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Groups page.
|
||||||
|
*/
|
||||||
|
public class DeviceGroupsPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public DeviceGroupsPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.groups.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the Groups page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to go to the Add device group page, by clicking the Add group button.
|
||||||
|
* @return : Add device groups page.
|
||||||
|
*/
|
||||||
|
public DeviceAddGroupPage addNewGroup() throws IOException {
|
||||||
|
WebElement addNewGroupBtn = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.device.viewGroup.empty.addGroup.xpath")));
|
||||||
|
addNewGroupBtn.click();
|
||||||
|
return new DeviceAddGroupPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method checks whether the created group is visible in the UI.
|
||||||
|
* @param groupName : Name of the group created.
|
||||||
|
* @return : True if the group is visible. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isGroupCreated(String groupName) {
|
||||||
|
WebElement table = driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.table.id")));
|
||||||
|
List<WebElement> allGroupNames = table.findElements(By.tagName("td"));
|
||||||
|
|
||||||
|
for (WebElement name : allGroupNames) {
|
||||||
|
if (name.getText().contains(groupName)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,137 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.home;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.devices.DevicesPage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.devices.EnrollDevicePage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.groups.DeviceGroupsPage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.login.LoginPage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.uesr.AddUserPage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.uesr.UserListingPage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Admin Dashboard of the IOT server.
|
||||||
|
* Server dashboard has following sections and functions.
|
||||||
|
* 1. User Management
|
||||||
|
* - View users.
|
||||||
|
* - Add a new user
|
||||||
|
* 2. Group Management.
|
||||||
|
* - View Groups.
|
||||||
|
* - Add a new group.
|
||||||
|
* 3. Device Management.
|
||||||
|
* - View enrolled devices.
|
||||||
|
* - Enroll a device.
|
||||||
|
* 3. Policy Management.
|
||||||
|
* - View Policies.
|
||||||
|
* - Create a policy.
|
||||||
|
*/
|
||||||
|
public class IOTAdminDashboard {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(IOTAdminDashboard.class);
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public IOTAdminDashboard(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
|
||||||
|
if (!wait.until(ExpectedConditions.titleIs(uiElementMapper.getElement("cdmf.home.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the home page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the logout action.
|
||||||
|
* @return : The IOT login page
|
||||||
|
*/
|
||||||
|
public LoginPage logout() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).click();
|
||||||
|
WebElement logout = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.logout.link.xpath")));
|
||||||
|
logout.click();
|
||||||
|
return new LoginPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the navigation to Add device group page.
|
||||||
|
* @return : Add Device Group page.
|
||||||
|
*/
|
||||||
|
public DeviceAddGroupPage addGroup() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.group.addButton.xpath"))).click();
|
||||||
|
return new DeviceAddGroupPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the navigation to Group listing page.
|
||||||
|
* @return : Groups page.
|
||||||
|
*/
|
||||||
|
public DeviceGroupsPage viewGroups() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.device.group.viewButton.xpath"))).click();
|
||||||
|
return new DeviceGroupsPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigates to the Add User page.
|
||||||
|
* @return : Add user page.
|
||||||
|
*/
|
||||||
|
public AddUserPage addUser() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.addButton.xpath"))).click();
|
||||||
|
return new AddUserPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigates to the User Listing page.
|
||||||
|
* @return : User Listing page.
|
||||||
|
*/
|
||||||
|
public UserListingPage viewUser() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.user.viewButton.xpath"))).click();
|
||||||
|
return new UserListingPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigates to the New device enrollment page.
|
||||||
|
* @return : Enroll Device page.
|
||||||
|
*/
|
||||||
|
public EnrollDevicePage enrollNewDevice() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.device.addBtn.xpath"))).click();
|
||||||
|
return new EnrollDevicePage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigates to the Devices listing page.
|
||||||
|
* @return : devices listing page.
|
||||||
|
*/
|
||||||
|
public DevicesPage viewDevices() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.device.viewBtn.xpath"))).click();
|
||||||
|
return new DevicesPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ToDo : Need to add policy methods
|
||||||
|
}
|
||||||
@ -0,0 +1,96 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.home;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.devices.EnrollDevicePage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.groups.DeviceAddGroupPage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.login.LoginPage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the IOT server home page.
|
||||||
|
*/
|
||||||
|
public class IOTHomePage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public IOTHomePage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
// Check that we're on the right page.
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!wait.until(ExpectedConditions.titleIs(uiElementMapper.getElement("cdmf.user.home.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the home page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check the current User name
|
||||||
|
* @return : True if the user name matches the logged in user. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean checkUserName() {
|
||||||
|
String name = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).getText();
|
||||||
|
return name.contains(uiElementMapper.getElement("iot.user.login.username"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the logout function.
|
||||||
|
* @return : IOT login page.
|
||||||
|
*/
|
||||||
|
public LoginPage logout() throws IOException {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.registered.name"))).click();
|
||||||
|
WebElement logout = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.logout.link.xpath")));
|
||||||
|
logout.click();
|
||||||
|
return new LoginPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Navigates to the New device enrollment page.
|
||||||
|
* @return : Enroll Device page.
|
||||||
|
*/
|
||||||
|
public EnrollDevicePage enrollNewDevice() throws IOException {
|
||||||
|
driver.findElement(By.xpath("iot.home.page.uuf-menu.xpath")).click();
|
||||||
|
driver.findElement(By.xpath("iot.home.page.uuf-menu.devicemgt.xpath")).click();
|
||||||
|
driver.findElement(By.xpath("iot.home.enrollDevice.xpath")).click();
|
||||||
|
return new EnrollDevicePage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the navigation to Add device group page.
|
||||||
|
* @return : Add Device Group page.
|
||||||
|
*/
|
||||||
|
public DeviceAddGroupPage addNewGroup() throws IOException {
|
||||||
|
driver.findElement(By.xpath("iot.home.page.uuf-menu.xpath")).click();
|
||||||
|
driver.findElement(By.xpath("iot.home.page.uuf-menu.groupmgt.xpath")).click();
|
||||||
|
driver.findElement(By.xpath("iot.device.viewGroup.empty.addGroup.xpath")).click();
|
||||||
|
return new DeviceAddGroupPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
//ToDo : To add policies
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.login;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.home.IOTAdminDashboard;
|
||||||
|
import org.wso2.iot.integration.ui.pages.home.IOTHomePage;
|
||||||
|
import org.wso2.iot.integration.ui.pages.uesr.NewUserRegisterPage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the Login page of the iot server.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LoginPage {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(LoginPage.class);
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
private WebElement userNameField;
|
||||||
|
private WebElement passwordField;
|
||||||
|
private WebElement loginButton;
|
||||||
|
|
||||||
|
public LoginPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.login.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the Login page");
|
||||||
|
}
|
||||||
|
userNameField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.login.input.username.xpath")));
|
||||||
|
passwordField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.login.input.password.xpath")));
|
||||||
|
loginButton = driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.login.button.xpath")));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to login as a registered user.
|
||||||
|
* @param username Username of the user.
|
||||||
|
* @param password Password of the user.
|
||||||
|
* @return After a user is logged in, it will redirect to the IOT Server Home page.
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public IOTHomePage loginAsUser(String username, String password) throws IOException {
|
||||||
|
log.info("Login as " + username);
|
||||||
|
userNameField.sendKeys(username);
|
||||||
|
passwordField.sendKeys(password);
|
||||||
|
loginButton.click();
|
||||||
|
return new IOTHomePage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to login as the server admin.
|
||||||
|
* @param username The admin user name (admin).
|
||||||
|
* @param password The admin password (admin).
|
||||||
|
* @return After admin logged in, it will redirect to the IOT Server dashboard.
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public IOTAdminDashboard loginAsAdmin(String username, String password) throws IOException {
|
||||||
|
log.info("Login as " + username);
|
||||||
|
userNameField.sendKeys(username);
|
||||||
|
passwordField.sendKeys(password);
|
||||||
|
loginButton.click();
|
||||||
|
return new IOTAdminDashboard(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method for new user registration.
|
||||||
|
* @return After clicking the Register link, it will navigate to the User Registration page.
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public NewUserRegisterPage registerNewUser() throws IOException {
|
||||||
|
WebElement registerLink = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.register.link.xpath")));
|
||||||
|
registerLink.click();
|
||||||
|
return new NewUserRegisterPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,114 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.samples;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.interactions.Action;
|
||||||
|
import org.openqa.selenium.interactions.Actions;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to represent the Connected cup device interface.
|
||||||
|
* This device is a virtual device, which allows users to change Temperature and Level values and put an order.
|
||||||
|
*/
|
||||||
|
public class ConnectedCupDeviceInterface {
|
||||||
|
|
||||||
|
private Log log = LogFactory.getLog(ConnectedCupDeviceInterface.class);
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public ConnectedCupDeviceInterface(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains("Connected Coffee Cup"))) {
|
||||||
|
throw new IllegalStateException("This is not the Connected cup device page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to perform the order coffee functionality.
|
||||||
|
* @return : True if the element is present and action is performed. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean orderCoffee() {
|
||||||
|
if (UIUtils.isElementPresent(log, driver, By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.orderCoffee.xpath")))) {
|
||||||
|
WebElement orderBtn = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.orderCoffee.xpath")));
|
||||||
|
orderBtn.click();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to change the temperature level.
|
||||||
|
* @param temp : The value to be set.
|
||||||
|
* @return : True if the element is present and value is set. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean changeTemperature(String temp) {
|
||||||
|
if (UIUtils.isElementPresent(log, driver, By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.temperature.xpath")))) {
|
||||||
|
WebElement tempSlider = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.temperature.xpath")));
|
||||||
|
moveSlider(tempSlider, Integer.parseInt(temp));
|
||||||
|
driver.manage().timeouts().implicitlyWait(UIUtils.webDriverTime, TimeUnit.SECONDS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to change the Coffee level.
|
||||||
|
* @param level : The value to be set.
|
||||||
|
* @return : True if the element is present and value is set. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean changeCoffeeLevel(String level) {
|
||||||
|
if (UIUtils.isElementPresent(log, driver, By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.coffee.level.xpath")))) {
|
||||||
|
WebElement lvlSlider = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.coffee.level.xpath")));
|
||||||
|
moveSlider(lvlSlider, Integer.parseInt(level));
|
||||||
|
driver.manage().timeouts().implicitlyWait(UIUtils.webDriverTime, TimeUnit.SECONDS);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method performs the slider change action of the web interface.
|
||||||
|
* @param slider : The element of the slider to be changed.
|
||||||
|
* @param val : Value to be set.
|
||||||
|
*/
|
||||||
|
private void moveSlider(WebElement slider, int val) {
|
||||||
|
Actions move = new Actions(driver);
|
||||||
|
Action action = move.dragAndDropBy(slider, 0, val).build();
|
||||||
|
action.perform();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.samples;
|
||||||
|
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Device Type View page of the Connected cup device, which has the functionality for
|
||||||
|
* download the device agent.
|
||||||
|
*/
|
||||||
|
public class ConnectedCupDeviceTypeViewPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public ConnectedCupDeviceTypeViewPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
if (!driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.page.title"))).getText().
|
||||||
|
contains("Connected Cup")) {
|
||||||
|
throw new IllegalStateException("This is not the Connected cup device type view page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method verifies that the pop up modal for inserting a name for device is present.
|
||||||
|
* @return : True if the Modal pop up is displayed. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isPopUpPresent() throws InterruptedException {
|
||||||
|
WebElement createInstanceBtn = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.createInstanceBtn.xpath")));
|
||||||
|
createInstanceBtn.click();
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
wait.until(ExpectedConditions.visibilityOf(driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.modal.popup.xpath")))));
|
||||||
|
|
||||||
|
return driver.findElement(By.xpath(uiElementMapper.getElement("iot.sample.modal.popup.xpath"))).isDisplayed();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method performs the enrolment process of the connected cup device. After clicking the Download button in
|
||||||
|
* the popup, user should be navigated to the device type view page again.
|
||||||
|
* This method checks the navigation and return true if navigation is correct.
|
||||||
|
* @param name : Name for the device.
|
||||||
|
* @return : True if navigates to the Device type view page without errors. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean enrollDevice(String name) {
|
||||||
|
WebElement nameField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.createInstance.nameField.xpath")));
|
||||||
|
WebElement createButton = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.createInstance.downloadBtn.xpath")));
|
||||||
|
nameField.sendKeys(name);
|
||||||
|
createButton.click();
|
||||||
|
return driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.page.title"))).getText().contains("Connected Cup");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,174 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.samples;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.graphs.Graph;
|
||||||
|
import org.wso2.iot.integration.ui.pages.graphs.GraphHandler;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Connected cup device view page.
|
||||||
|
* In this page, there are following elements.
|
||||||
|
* 1. Device overview. (Whether the device is active or not)
|
||||||
|
* 2. Device operations. (Operations which are performed on the device)
|
||||||
|
* 3. Device Stats
|
||||||
|
*
|
||||||
|
* In this class, device operations and device stats are validated.
|
||||||
|
*/
|
||||||
|
public class ConnectedCupDeviceViewPage {
|
||||||
|
|
||||||
|
private Map<String, Graph> graphMap = new HashMap<>();
|
||||||
|
private Log log = LogFactory.getLog(ConnectedCupDeviceViewPage.class);
|
||||||
|
private WebDriver driverServer;
|
||||||
|
private WebDriver driverDevice;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
private GraphHandler handler;
|
||||||
|
|
||||||
|
public ConnectedCupDeviceViewPage(WebDriver driver, String name) throws IOException {
|
||||||
|
this.driverServer = driver;
|
||||||
|
this.driverDevice = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
this.handler = new GraphHandler(driverServer);
|
||||||
|
|
||||||
|
if (!driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.view.page.title"))).getText().
|
||||||
|
contains(name)) {
|
||||||
|
throw new IllegalStateException("This is not the Connected cup device type view page");
|
||||||
|
}
|
||||||
|
handler = new GraphHandler(driverServer);
|
||||||
|
graphMap = handler.getGraphMap();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method executes Connected cup sample web app.
|
||||||
|
* @return : The Connected cup web page.
|
||||||
|
*/
|
||||||
|
public ConnectedCupDeviceInterface gotoDevice() throws IOException {
|
||||||
|
WebDriverWait wait = new WebDriverWait(driverServer, UIUtils.webDriverTime);
|
||||||
|
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))));
|
||||||
|
String link = driverServer.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))).getAttribute("href");
|
||||||
|
driverDevice.get(link);
|
||||||
|
return new ConnectedCupDeviceInterface(driverDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the connected cup device web app URL.
|
||||||
|
* @return : Link of the connected cup device web app.
|
||||||
|
*/
|
||||||
|
public String getDeviceLink() {
|
||||||
|
WebDriverWait wait = new WebDriverWait(driverServer, UIUtils.webDriverTime);
|
||||||
|
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))));
|
||||||
|
return driverServer.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.sample.connectedcup.gotodevice.xpath"))).getAttribute("href");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method checks whether there are expected number of graphs are available in the UI.
|
||||||
|
* @param count : Number of graphs expected.
|
||||||
|
* @return : True if there are count number of graphs. False otherwise.
|
||||||
|
*/
|
||||||
|
public boolean isGraphsAvailable(int count) {
|
||||||
|
return handler.getGraphCount() == count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the selected graph axes represent the given values.
|
||||||
|
* @param axis : Graph axis. X or Y
|
||||||
|
* @param graphId : Id of the graph
|
||||||
|
* @param axisName : Name which is expected to be displayed.
|
||||||
|
* @return : True if given axis contains the expected title. False otherwise or, there are no graphs present.
|
||||||
|
*/
|
||||||
|
public boolean graphAxisName(String axis, String graphId, String axisName) {
|
||||||
|
if (graphMap.size() != 0) {
|
||||||
|
if (axis.toLowerCase().contains("x")) {
|
||||||
|
return graphMap.get(graphId).getxAxis().contains(axisName);
|
||||||
|
} else {
|
||||||
|
return graphMap.get(graphId).getyAxis().contains(axisName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
log.error("There are no graphs found.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check the legend of the selected graph have the expected title.
|
||||||
|
* @param graphId : Id of the graph.
|
||||||
|
* @param legend : Expected value to be displayed in the legend.
|
||||||
|
* @return : True if legend contains the expected value. False otherwise or there are no graphs present.
|
||||||
|
*/
|
||||||
|
public boolean graphLegendName(String graphId, String legend) {
|
||||||
|
if (graphMap.size() != 0) {
|
||||||
|
if (graphMap.get(graphId) != null){
|
||||||
|
return graphMap.get(graphId).getLegend().contains(legend);
|
||||||
|
}
|
||||||
|
log.error(String.format("Graph for %s is not found.", graphId));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
log.error("There are no graphs found.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to check the graph path is displayed in the UI for given graph.
|
||||||
|
* @param graphId : Id of the graph.
|
||||||
|
* @return : True of path is displayed. False otherwise or no graphs are present.
|
||||||
|
*/
|
||||||
|
public boolean checkGraphPath(String graphId) {
|
||||||
|
WebElement graph = handler.getGraphById(graphId);
|
||||||
|
if (graph != null) {
|
||||||
|
return handler.isPathAvailable(graph);
|
||||||
|
} else {
|
||||||
|
log.error(String.format("Graph for Id %s is not present.", graphId));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to verify that the graphs get readings from the device.
|
||||||
|
* @param graphId : Id of the graph.
|
||||||
|
* @param value : Value which is expected to be displayed in the graph.
|
||||||
|
* @return : True if the value is displayed in the graph. False otherwise or graph is null.
|
||||||
|
*/
|
||||||
|
public boolean checkGraphValues(String graphId, String value) {
|
||||||
|
WebElement graph = handler.getGraphById(graphId);
|
||||||
|
driverServer.manage().timeouts().implicitlyWait(UIUtils.webDriverTime, TimeUnit.SECONDS);
|
||||||
|
if (graph != null) {
|
||||||
|
return handler.isPathGetValues(graph, value);
|
||||||
|
} else {
|
||||||
|
log.error(String.format("Graph for Id %s is not present.", graphId));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.uesr;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the add user page of the IOT server.
|
||||||
|
*/
|
||||||
|
public class AddUserPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public AddUserPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.user.add.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the Add User page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to create a new user.
|
||||||
|
*
|
||||||
|
* @param userName The username for the user.
|
||||||
|
* @param firstName The user's first name.
|
||||||
|
* @param lastName The user's last name.
|
||||||
|
* @param email Email address of the user.
|
||||||
|
* @return The user added confirmation page.
|
||||||
|
*/
|
||||||
|
public UserAddedConfirmationPage createNewUser(String userName, String firstName, String lastName, String email)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
WebElement userNameField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.admin.addUser.username.id")));
|
||||||
|
WebElement firstNameField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.admin.addUser.firstName.id")));
|
||||||
|
WebElement lastNameField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.admin.addUser.lastName.id")));
|
||||||
|
WebElement emailField = driver.findElement(By.id(
|
||||||
|
uiElementMapper.getElement("iot.admin.addUser.email.id")));
|
||||||
|
|
||||||
|
userNameField.sendKeys(userName);
|
||||||
|
firstNameField.sendKeys(firstName);
|
||||||
|
lastNameField.sendKeys(lastName);
|
||||||
|
emailField.sendKeys(email);
|
||||||
|
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.add.btn.xpath"))).click();
|
||||||
|
|
||||||
|
return new UserAddedConfirmationPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,52 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.uesr;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the Edit user page of the IOT server
|
||||||
|
*/
|
||||||
|
public class EditUserPage {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(EditUserPage.class);
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public EditUserPage(WebDriver driver) throws Exception {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){
|
||||||
|
throw new IllegalStateException("This is not the Edit User page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void editUser(String password, String firstName, String lastName) {
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.user.add.input.password.xpath")));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,131 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.uesr;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
import org.wso2.iot.integration.ui.pages.login.LoginPage;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the new user registration page.
|
||||||
|
* User registration page has the registration form for new users to enter the required data and the submit button.
|
||||||
|
*/
|
||||||
|
public class NewUserRegisterPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private WebElement firstNameField;
|
||||||
|
private WebElement lastNameField;
|
||||||
|
private WebElement emailField;
|
||||||
|
private WebElement userNameField;
|
||||||
|
private WebElement passwordField;
|
||||||
|
private WebElement passwordConfirmationField;
|
||||||
|
private WebElement registerButton;
|
||||||
|
|
||||||
|
public NewUserRegisterPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
UIElementMapper uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
|
||||||
|
// Check that we're on the right page.
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains(uiElementMapper.getElement("cdmf.register.page")))) {
|
||||||
|
throw new IllegalStateException("This is not the Register page");
|
||||||
|
}
|
||||||
|
|
||||||
|
firstNameField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.input.firstname.xpath")));
|
||||||
|
lastNameField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.input.lastname.xpath")));
|
||||||
|
emailField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.input.email.xpath")));
|
||||||
|
userNameField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.input.username.xpath")));
|
||||||
|
passwordField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.input.password.xpath")));
|
||||||
|
passwordConfirmationField = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.input.confirmpassword.xpath")));
|
||||||
|
registerButton = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.user.add.register.button.xpath")));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The method to register a new user.
|
||||||
|
*
|
||||||
|
* @param firstName First name of the user.
|
||||||
|
* @param lastName Last name of the user.
|
||||||
|
* @param email Email address of the user.
|
||||||
|
* @param userName User name for the user. This will be used to login to the server.
|
||||||
|
* @param password The password for the user.
|
||||||
|
* @param confirmPassword Password confirmation.
|
||||||
|
* @return After the user is created it navigates back to the login page.
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public LoginPage registerUser(String firstName, String lastName, String email, String userName, String password,
|
||||||
|
String confirmPassword) throws IOException {
|
||||||
|
handleAction(firstName, lastName, email, userName, password, confirmPassword);
|
||||||
|
return new LoginPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Following method is to validate the user registration form.
|
||||||
|
* */
|
||||||
|
public void validateForm(String firstName, String lastName, String email, String userName,
|
||||||
|
String password, String confirmPassword) {
|
||||||
|
handleAction(firstName, lastName, email, userName, password, confirmPassword);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Support method to populate the User registration form.
|
||||||
|
* @param firstName : First name of the user.
|
||||||
|
* @param lastName : Last name of the user.
|
||||||
|
* @param email : E mail of the user.
|
||||||
|
* @param userName : User name of the user.
|
||||||
|
* @param password : Password for the user.
|
||||||
|
* @param confirmPassword : Confirmation password.
|
||||||
|
*/
|
||||||
|
private void handleAction(String firstName, String lastName, String email, String userName, String password,
|
||||||
|
String confirmPassword) {
|
||||||
|
clearForm();
|
||||||
|
firstNameField.sendKeys(firstName);
|
||||||
|
lastNameField.sendKeys(lastName);
|
||||||
|
emailField.sendKeys(email);
|
||||||
|
userNameField.sendKeys(userName);
|
||||||
|
passwordField.sendKeys(password);
|
||||||
|
passwordConfirmationField.sendKeys(confirmPassword);
|
||||||
|
registerButton.click();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Support method to clear the Registration form.
|
||||||
|
*/
|
||||||
|
private void clearForm() {
|
||||||
|
firstNameField.clear();
|
||||||
|
lastNameField.clear();
|
||||||
|
emailField.clear();
|
||||||
|
userNameField.clear();
|
||||||
|
passwordField.clear();
|
||||||
|
passwordConfirmationField.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.uesr;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class represents the confirmation page for adding a new user.
|
||||||
|
*/
|
||||||
|
public class UserAddedConfirmationPage {
|
||||||
|
|
||||||
|
public UserAddedConfirmationPage(WebDriver driver) throws IOException {
|
||||||
|
UIElementMapper uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
|
||||||
|
driver.findElement(By.xpath(uiElementMapper.getElement("iot.admin.addUser.view.btn.xpath"))).click();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.uesr;
|
||||||
|
|
||||||
|
import org.openqa.selenium.By;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.WebElement;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to represent the user listing page.
|
||||||
|
*/
|
||||||
|
public class UserListingPage {
|
||||||
|
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public UserListingPage(WebDriver driver) throws IOException {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the delete user action.
|
||||||
|
* @return After deleting a user, returns back to the user listing page.
|
||||||
|
*/
|
||||||
|
public UserListingPage deleteUser() throws IOException, InterruptedException {
|
||||||
|
WebElement deleteBtn = driver.findElement(By.xpath(
|
||||||
|
uiElementMapper.getElement("iot.admin.deleteUser.btn.xpath")));
|
||||||
|
|
||||||
|
WebDriverWait wait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
wait.until(ExpectedConditions.visibilityOf(deleteBtn));
|
||||||
|
deleteBtn.click();
|
||||||
|
|
||||||
|
WebElement deleteConfirmationBtn = driver.findElement(
|
||||||
|
By.xpath(uiElementMapper.getElement("iot.admin.deleteUser.yes.link.xpath")));
|
||||||
|
wait.until(ExpectedConditions.visibilityOf(deleteConfirmationBtn));
|
||||||
|
deleteConfirmationBtn.click();
|
||||||
|
|
||||||
|
Thread.sleep(UIUtils.threadTimeout);
|
||||||
|
WebElement deleteSuccessBtn = driver.findElement(
|
||||||
|
By.xpath(uiElementMapper.getElement("iot.admin.deleteUser.success.link.xpath")));
|
||||||
|
deleteSuccessBtn.click();
|
||||||
|
|
||||||
|
return new UserListingPage(driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* 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.iot.integration.ui.pages.uesr;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.openqa.selenium.support.ui.ExpectedConditions;
|
||||||
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIUtils;
|
||||||
|
import org.wso2.iot.integration.ui.pages.UIElementMapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class to represent the user view.
|
||||||
|
*/
|
||||||
|
public class ViewUserPage {
|
||||||
|
|
||||||
|
private static final Log log = LogFactory.getLog(ViewUserPage.class);
|
||||||
|
private WebDriver driver;
|
||||||
|
private UIElementMapper uiElementMapper;
|
||||||
|
|
||||||
|
public ViewUserPage (WebDriver driver) throws Exception {
|
||||||
|
this.driver = driver;
|
||||||
|
this.uiElementMapper = UIElementMapper.getInstance();
|
||||||
|
|
||||||
|
WebDriverWait webDriverWait = new WebDriverWait(driver, UIUtils.webDriverTimeOut);
|
||||||
|
if (!webDriverWait.until(ExpectedConditions.titleContains("User Management | IoT Server"))){
|
||||||
|
throw new IllegalStateException("This is not the User view page");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,658 @@
|
|||||||
|
#
|
||||||
|
# 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.
|
||||||
|
#
|
||||||
|
|
||||||
|
# CDMF Page titles -----------------------------------------------------------------------------------------------------
|
||||||
|
cdmf.home.page=Home | CDMF
|
||||||
|
cdmf.login.page=Login | CDMF
|
||||||
|
cdmf.register.page=Register | CDMF
|
||||||
|
cdmf.error.page=Error | CDMF
|
||||||
|
cdmf.user.home.page=Device Management | CDMF
|
||||||
|
cdmf.groups.page=Group Management | CDMF
|
||||||
|
cdmf.user.add.page=User Management | Add User | CDMF
|
||||||
|
|
||||||
|
# User registration and login details-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
iot.user.add.firstname=firstname
|
||||||
|
iot.user.add.lastname=lastname
|
||||||
|
iot.user.add.username=testUser
|
||||||
|
iot.user.add.password=testPassword
|
||||||
|
iot.user.add.email=username@wso2.com
|
||||||
|
|
||||||
|
iot.user.login.username=testUser
|
||||||
|
iot.user.login.password=testPassword
|
||||||
|
|
||||||
|
|
||||||
|
# User registration and login ui----------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
iot.user.registered.name=/html/body/header/div/div[2]/ul/li/a/span[2]
|
||||||
|
|
||||||
|
iot.user.add.input.firstname.xpath=//*[@id="first_name"]
|
||||||
|
iot.user.add.input.lastname.xpath=//*[@id="last_name"]
|
||||||
|
iot.user.add.input.username.xpath=//*[@id="user_name"]
|
||||||
|
iot.user.add.input.password.xpath=//*[@id="password"]
|
||||||
|
iot.user.add.input.confirmpassword.xpath=//*[@id="password_confirmation"]
|
||||||
|
iot.user.add.input.email.xpath=//*[@id="email"]
|
||||||
|
iot.user.add.register.button.xpath=//*[@id="add-user-btn"]
|
||||||
|
|
||||||
|
|
||||||
|
iot.user.login.input.username.xpath=//*[@id="signInForm"]/div[1]/input
|
||||||
|
iot.user.login.input.password.xpath=//*[@id="signInForm"]/div[2]/input
|
||||||
|
iot.user.login.button.xpath=//*[@id="signInForm"]/div[3]/button
|
||||||
|
|
||||||
|
iot.user.register.link.xpath=//*[@id="register-link-wrapper"]/a
|
||||||
|
|
||||||
|
# Devices page elements ------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
iot.home.page.uuf-menu.xpath=//*[@id="_uuf-navmenu-button"]
|
||||||
|
|
||||||
|
iot.home.page.uuf-menu.devicemgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[1]/a
|
||||||
|
iot.home.page.uuf-menu.groupmgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[2]/a
|
||||||
|
iot.home.page.uuf-menu.policymgt.xpath=//*[@id="_uuf-navmenu-items"]/ul/li[3]/a
|
||||||
|
|
||||||
|
iot.home.page.title.xpath=/html/body/div[3]/div[1]/div/span
|
||||||
|
iot.admin.dashboard.title.xpath=/html/body/div[3]/div[1]/div/span
|
||||||
|
|
||||||
|
iot.home.enrollDevice.xpath=//*[@id="ast-container"]/div/p/a
|
||||||
|
iot.user.logout.link.xpath=/html/body/header/div/div[2]/ul/li/ul/li[2]/a
|
||||||
|
|
||||||
|
iot.devices.table.xpath=//*[@id="device-grid"]
|
||||||
|
|
||||||
|
# Register page error elements -----------------------------------------------------------------------------------------
|
||||||
|
#//*[@id="user-create-error-msg"]
|
||||||
|
iot.user.register.form.error=user-create-error-msg
|
||||||
|
|
||||||
|
# Admin dashboard Device -----------------------------------------------------------------------------------------------
|
||||||
|
iot.admin.device.viewBtn.xpath=//a[@href='/devicemgt/devices']
|
||||||
|
iot.admin.device.addBtn.xpath=//a[@href='/devicemgt/device/enroll']
|
||||||
|
|
||||||
|
# Incorrect login Credentials ------------------------------------------------------------------------------------------
|
||||||
|
iot.user.login.username.error=username-error
|
||||||
|
iot.user.login.password.error=password-error
|
||||||
|
iot.user.login.incorrect.xpath=/html/body/div/div/div/div[1]
|
||||||
|
iot.user.login.shortPassword=password-error
|
||||||
|
|
||||||
|
iot.dashboard.device.div.xpath=/html/body/div[3]/div[7]/div[1]/div/div/div[1]
|
||||||
|
|
||||||
|
#Grouping --------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
iot.device.group.addButton.xpath=/html/body/div[3]/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/span[2]/a[2]/span/i[2]
|
||||||
|
iot.device.group.viewButton.xpath=/html/body/div[3]/div[2]/div/div[3]/div[2]/div/div[2]/div[2]/span[2]/a[1]/span/i[2]
|
||||||
|
|
||||||
|
iot.device.group.addNewGroup.xpath=/html/body/div[3]/div/div[1]/div/p[1]
|
||||||
|
|
||||||
|
iot.device.viewGroup.empty.addGroup.xpath=//*[@id="ast-container"]/div/p/a
|
||||||
|
|
||||||
|
iot.device.group.addGroupForm.name.id=name
|
||||||
|
iot.device.group.addGroupForm.description.id=description
|
||||||
|
iot.device.group.addGroupForm.addButton.id=add-group-btn
|
||||||
|
|
||||||
|
iot.device.groups.view.header.xpath=/html/body/div[3]/div[2]/div/h1[1]
|
||||||
|
|
||||||
|
#/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label
|
||||||
|
iot.device.groups.add.emptyfrom.error=/html/body/div[3]/div[2]/div/div[3]/div/div/div[1]/label
|
||||||
|
|
||||||
|
iot.device.table.id=//*[@id="ast-container"]
|
||||||
|
|
||||||
|
#Add user --------------------------------------------------------------------------------------------------------------
|
||||||
|
iot.admin.user.addButton.xpath=/html/body/div[3]/div[2]/div/div[3]/div[3]/div/div[2]/div[2]/span[2]/a[2]
|
||||||
|
iot.admin.user.viewButton.xpath=/html/body/div[3]/div[2]/div/div[3]/div[3]/div/div[2]/div[2]/span[2]/a[1]
|
||||||
|
|
||||||
|
iot.admin.user.added.page.subtitle.xpath="//p[@class='page-sub-title']"
|
||||||
|
iot.admin.user.listing.page.subtitle.xpath="//span[@class='page-sub-title']"
|
||||||
|
|
||||||
|
iot.admin.addUser.username.id=username
|
||||||
|
iot.admin.addUser.firstName.id=firstname
|
||||||
|
iot.admin.addUser.lastName.id=lastname
|
||||||
|
iot.admin.addUser.email.id=emailAddress
|
||||||
|
iot.admin.addUser.roles.id=roles
|
||||||
|
|
||||||
|
iot.admin.addUser.add.btn.xpath=//*[@id="add-user-btn"]
|
||||||
|
iot.admin.addUser.view.btn.xpath=//*[@id="user-created-msg"]/div/button
|
||||||
|
|
||||||
|
iot.admin.deleteUser.btn.xpath=//*[@id="user-user1"]/td[5]/a[3]/span[1]/i[2]
|
||||||
|
iot.admin.deleteUser.yes.link.xpath=//*[@id="remove-user-yes-link"]
|
||||||
|
iot.admin.deleteUser.success.link.xpath=//*[@id="modal-footer-content"]/div/a
|
||||||
|
iot.admin.addUser.formError.xpath=//*[@id="user-create-error-msg"]
|
||||||
|
|
||||||
|
#----- User view page heading ------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
iot.user.view.page.heading.xpath=/html/body/div[3]/div[1]/div/label
|
||||||
|
|
||||||
|
#----- Editing a user---------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
iot.admin.viewUser.btn.xpath=//*[@id="user1"]/td[5]/a[1]/span[1]/i[2]
|
||||||
|
iot.admin.editUser.btn.xpath=//*[@id="userEditBtn"]
|
||||||
|
iot.admin.editUser.edit.btn.xpath=//*[@id="add-user-btn"]
|
||||||
|
|
||||||
|
#---------------------------Testing the samples ------------------------------------------------------------------------
|
||||||
|
iot.sample.connectedcup.xpath=//*[@id="connectedcup"]
|
||||||
|
iot.sample.connectedcup.try.btn.xpath=//button[contains(@id,'connectedcup_btn')]
|
||||||
|
iot.sample.connectedcup.try.btn.id=connectedcup_btn
|
||||||
|
iot.sample.connectedcup.page.title=//h1[@class='grey ']
|
||||||
|
iot.sample.connectedcup.view.page.title=//label[@class='device-id device-select']
|
||||||
|
iot.sample.connectedcup.createInstanceBtn.xpath=//a[@class='download-link btn-operations']
|
||||||
|
iot.sample.connectedcup.createInstance.nameField.xpath=//input[@class='connectedCupName']
|
||||||
|
iot.sample.connectedcup.createInstance.downloadBtn.xpath=//a[contains(@class,'btn-operations')]
|
||||||
|
iot.sample.modal.popup.xpath=//div[@class='modalpopup-content']
|
||||||
|
|
||||||
|
iot.sample.connectedcup.gotodevice.xpath=//a[@class='btn-operations']
|
||||||
|
iot.sample.connectedcup.device.title.xpath=/html/body/div[4]/h1
|
||||||
|
|
||||||
|
iot.sample.orderCoffee.xpath=//*[@id="order-cup"]
|
||||||
|
iot.sample.coffee.level.xpath=//*[@id="amount_coffee"]
|
||||||
|
iot.sample.temperature.xpath=//*[@id="amount_temp"]
|
||||||
|
|
||||||
|
iot.sample.analytics.link.xpath=//*[@id="device_statistics"]/a
|
||||||
|
|
||||||
|
iot.sample.coffeelevel.graph.path=//*[@id="chart-Coffee Level"]/svg/path[1]
|
||||||
|
iot.sample.temperature.graph.path=//*[@id="chart-Temperature"]/svg/path[1]
|
||||||
|
|
||||||
|
|
||||||
|
iot.try.devices.div.classname=//div[@class='try-device-container']
|
||||||
|
iot.try.device.text.xpath=//p[contains(@class,'try-device-text')]
|
||||||
|
|
||||||
|
|
||||||
|
#------------------ Graphs (Device View) -------------------------------------------------------------------------------
|
||||||
|
iot.stats.graph.container.xpath=//*[@id="div-chart"]
|
||||||
|
iot.stat.graph.wrapper.xpath=//*[contains(@class, "chartWrapper")]
|
||||||
|
iot.stat.graph.xAxis.xpath=//*[contains(@class, "custom_x_axis")]
|
||||||
|
iot.stat.graph.class.name=custom_rickshaw_graph rickshaw_graph
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------------------------------------------------
|
||||||
|
#iot.user.delete.button=//*[@id="inosh"]/td[5]/a[3]
|
||||||
|
#iot.user.delete.button.confirm=remove-user-yes-link
|
||||||
|
#iot.user.delete.button.success=remove-user-success-link
|
||||||
|
#iot.roles.add.button=appbar-btn-
|
||||||
|
#iot.roles.add.rolename.input=rolename
|
||||||
|
#iot.roles.add.role.button=add-role-btn
|
||||||
|
#iot.roles.add.role.created.msg.div=role-created-msg
|
||||||
|
#iot.roles.update.rolename.input=rolename
|
||||||
|
#iot.roles.update.role.button=add-role-btn
|
||||||
|
#iot.roles.update.role.created.msg.div=role-created-msg
|
||||||
|
#iot.roles.update.role.created.success.msg=ROLE WAS UPDATED SUCCESSFULLY
|
||||||
|
#iot.configuration.android.tab.identifier=id('androidConfigLink')
|
||||||
|
#iot.configuration.widows.tab.identifier=id('windowsConfigLink')
|
||||||
|
#iot.configuration.ios.tab.identifier=id('iosConfigLink')
|
||||||
|
#iot.configuration.general.tab.identifier=id('generalConfigLink')
|
||||||
|
#iot.configuration.general.input.monitoringFr.identifier=id('monitoring-config-frequency')
|
||||||
|
#iot.configuration.general.button.save.identifier=id('monitoring-config-frequency')
|
||||||
|
#iot.configuration.saved.lable.identifier=id('record-created-msg')
|
||||||
|
#iot.configuration.saved.lable.val=Please click "Go back to configurations", if you wish to save another configuration or click "Exit" to complete the process and go back to the dashboard.
|
||||||
|
#iot.configuration.saved.button.back.identifier=id('btnBack')
|
||||||
|
#iot.configuration.saved.button.back.val=Go back to configurations
|
||||||
|
#iot.configuration.saved.button.exit.identifier=id('btnExit')
|
||||||
|
#iot.configuration.saved.button.exit.val=Exit
|
||||||
|
#iot.configuration.android.select.identifier=id('android-config-notifier')
|
||||||
|
#iot.configuration.android.input.identifier=id('android-config-notifier-frequency')
|
||||||
|
#iot.configuration.android.button.save.identifier=id('save-android-btn')
|
||||||
|
#iot.configuration.windows.input.identifier=id('windows-config-notifier-frequency')
|
||||||
|
#iot.configuration.windows.button.save.identifier=id('save-windows-btn')
|
||||||
|
#iot.notification.bubble.identifier=notification-bubble
|
||||||
|
#iot.notification.unread.identifier=unReadNotifications
|
||||||
|
#iot.notification.all.identifier=allNotifications
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#app.sign.in.button=button.btn
|
||||||
|
#app.redMine.login.button.name=login
|
||||||
|
#app.redMine.issue.button=New issue
|
||||||
|
#app.redMine.issue.subject=issue_subject
|
||||||
|
#app.redMine.issue.description=issue_description
|
||||||
|
#app.redMine.issue.submit=commit
|
||||||
|
#app.AddNew.App.link=Add New Application
|
||||||
|
#new.app.add.app.name=applicationName
|
||||||
|
#new.app.add.app.key=applicationKey
|
||||||
|
#new.app.add.app.icon=icon
|
||||||
|
#new.app.add.app.Description=applicationDescription
|
||||||
|
#new.app.add.app.edit.Description=appDescriptionEdit_textarea
|
||||||
|
#new.app.add.app.type=applicationType
|
||||||
|
#app.issue.version.id=issue_fixed_version_id
|
||||||
|
#app.database.db.environment.id=rssInstances
|
||||||
|
#app.database.db.environment.user=js_db_user
|
||||||
|
#app.database.db.environment.template=js_db_template
|
||||||
|
#new.app.add.repository.type=repositoryType
|
||||||
|
#create.new.app.button=appcreation
|
||||||
|
#app.homepage.search.textBox=search
|
||||||
|
#app.first.element.of.home.page=/html/body/div/div/article/section/ul/li[2]/div/h2/a/b
|
||||||
|
#app.overview.page.app.type.id=apptype
|
||||||
|
#app.overview.page.app.description.id=description
|
||||||
|
#app.overview.page.repository.type.id=repotype
|
||||||
|
#app.overview.page.app.owner.id=appOwner
|
||||||
|
#app.overview.page.app.key.xpath=/html/body/div/div/article/section[2]/div/div/div/p
|
||||||
|
#app.add.member.link=Add Members
|
||||||
|
#app.add.member.name=allUsersList
|
||||||
|
#app.invite.users= btn_nvite_users
|
||||||
|
#app.add.add.to.list.button=addToListBtn
|
||||||
|
#app.add.branch.link=Create Branch
|
||||||
|
#app.add.second.branch.xpath=(//a[contains(text(),'Branch')])[2]
|
||||||
|
#app.add.branch.version=create_branchtrunk
|
||||||
|
#app.add.branch.button.xpath=//input[@value='Create Branch']
|
||||||
|
#app.add.branch.two.button.xpath=(//input[@value='Create Branch'])[2]
|
||||||
|
#app.navigate.Link=Repos & Builds
|
||||||
|
#app.navigate.Governance.page.link=menu_governance
|
||||||
|
#app.navigate.isue.page.link.id=menu_trackIssues
|
||||||
|
#app.trunk.overview.xpath=/html/body/div/div/article/section[3]/div/ul/li/p/strong
|
||||||
|
#app.trunk.build.status.xpath=/html/body/div/div/article/section[3]/div/ul/li[2]/p/span/strong
|
||||||
|
#governance.page.firstElement.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li/div/strong
|
||||||
|
#governance.page.firstElement.date.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[2]/div[2]/form/div/input
|
||||||
|
#governance.page.date.save.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[2]/div[2]/form/div/button
|
||||||
|
#governance.page.promote.key.xpath=/html/body/div/div[2]/article/section/div[2]/ul/li/ul/li[3]/div/ul/li[2]/a/span
|
||||||
|
#code.completed.status=(//input[@id='registry.custom_lifecycle.checklist.option.0.item'])[last()]
|
||||||
|
#code.review.status=(//input[@id='registry.custom_lifecycle.checklist.option.1.item'])[last()]
|
||||||
|
#design.review.status=(//input[@id='registry.custom_lifecycle.checklist.option.2.item'])[last()]
|
||||||
|
#app.application.overview.page=Overview
|
||||||
|
#app.overview.page.team.details.id=userCountList
|
||||||
|
#app.team.page.id=menu_userAdmin
|
||||||
|
#app.add.member.page.id=btnAddMembers
|
||||||
|
#app.issue.redMine.tab.link=Track Issues
|
||||||
|
#app.testing.first.element.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li/div/strong
|
||||||
|
#app.testing.date.save.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li[2]/div/form/div/button
|
||||||
|
#app.testing.first.element.arrow.xpath=/html/body/div/div[2]/article/section/div[2]/ul[2]/li/ul/li[3]/div/ul/li[2]/a
|
||||||
|
#app.factory.issue.total.count.xpath=/html/body/div/div[2]/article/section/section/div/ul/li[2]
|
||||||
|
#app.factory.issue.item.header.id=item_list
|
||||||
|
#app.factory.database.configure.page.link=Database Configurations
|
||||||
|
#app.factory.new.database.link=Database
|
||||||
|
#app.factory.database.name.id=databaseName
|
||||||
|
#app.factory.database.password=databaseUserPassword
|
||||||
|
#app.factory.database.confirm.password=confirmDatabaseUserPassword
|
||||||
|
#app.factory.database.submit.button=div.buttonrow > input[name="Submit"]
|
||||||
|
#app.factory.database.advance.Checkbox=advancecheckbox
|
||||||
|
#app.factory.database.user.CheckBox=Username
|
||||||
|
#app.factory.database.user.password=Password
|
||||||
|
#app.factory.database.user.Repeat.password=repeatPassword
|
||||||
|
#app.factory.database.environment.id=rssInstances
|
||||||
|
#app.factory.database.user.submit.name=Submit
|
||||||
|
#app.factory.database.template.name=templateName
|
||||||
|
#app.factory.database.template.submit.name=Submit
|
||||||
|
#app.factory.db.admin.id=menu_dbAdmin
|
||||||
|
#app.factory.db.dbUser.link=DB User
|
||||||
|
#app.factory.db.template.link=DB Template
|
||||||
|
#app.factory.db.resources.id=dbSection
|
||||||
|
#app.db.link=Db
|
||||||
|
#app.db.user=wso2usr
|
||||||
|
#app.db.template=wso2Temp@Development
|
||||||
|
#app.factory.delete.user=Delete User
|
||||||
|
#app.factory.del.template=Delete Template
|
||||||
|
#app.factory.delete.Ok=Ok
|
||||||
|
#app.factory.delete.db=Delete DB
|
||||||
|
#app.data.source.name=datasource_name
|
||||||
|
#app.data.source.description=datasource_description
|
||||||
|
#app.data.source.password=datasource_password_dev
|
||||||
|
#app.data.source.username=datasource_username_text_dev
|
||||||
|
#app.data.source.add.button=Submit
|
||||||
|
#app.property.name=property_name
|
||||||
|
#app.property.type=property_type
|
||||||
|
#app.property.description=property_description
|
||||||
|
#app.property.value=property_value
|
||||||
|
#app.factory.registry.page.link=Endpoints & Registry
|
||||||
|
#app.factory.data.source.page.link=Datasources
|
||||||
|
#app.db.details.id=dbSection
|
||||||
|
#app.db.user.id=dbUsrSection
|
||||||
|
#app.db.template.id=dbTempSection
|
||||||
|
#app.factory.new.data.source.page.button=//button[@type='button']
|
||||||
|
#app.factory.api.panel.text=/html/body/div/div/article/section[3]
|
||||||
|
#app.factory.sign.out.email=span.icon-chevron-down
|
||||||
|
#app.factory.sing.out.text=Sign Out
|
||||||
|
#app.factory.subscribe=Subscribe to APIs
|
||||||
|
#app.factory.subscribe.api.element=li > div.thumbnail > a > img
|
||||||
|
#app.api.select.app.name=application-list
|
||||||
|
#app.api.subscribe.button=subscribe-button
|
||||||
|
#app.api.api.manager.button=gotoApiManagerbtn
|
||||||
|
#app.go.to.subscriptions.text=Go to My Subscriptions
|
||||||
|
#app.api.manager.class.name.text=title-section
|
||||||
|
#app.api.key.generate.text=Show Keys
|
||||||
|
#app.api.sandbox.details.id=sandTable0
|
||||||
|
#app.api.production.details.id=prodTable0
|
||||||
|
#app.api.page.link.text=APIs
|
||||||
|
#app.api.page.resource.list.id=keySection
|
||||||
|
#app.factory.subscription.page=My Subscriptions
|
||||||
|
#app.factory.list.view=a.icon-th-list.table_view
|
||||||
|
#app.overview.link.css=/html/body/div/div[2]/article/nav/ul/li/a
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#login.username=username
|
||||||
|
#login.password=password
|
||||||
|
#login.sign.in.button=button
|
||||||
|
#login.header.div=header-div
|
||||||
|
#
|
||||||
|
#home.dashboard.middle.text.xpath=/html/body/div[3]/div[1]/div/span
|
||||||
|
#home.greg.sign.out.xpath=//*[@id="header-div"]/div[4]/div/ul/li[3]/a
|
||||||
|
#home.logged.user.dev=logged-user
|
||||||
|
#
|
||||||
|
#jaggery.Main.tab=menu-panel-button1
|
||||||
|
#jaggery.Region1.tab=region1_manage_menu
|
||||||
|
#jaggery.dashboard.middle.text=middle
|
||||||
|
#add.jaggery.href=Jaggery
|
||||||
|
#jaggery.war.file.upload.name=warFileName
|
||||||
|
#jaggery.upload.button.name=upload
|
||||||
|
#jaggery.upload.successful.message=messagebox-info
|
||||||
|
#jaggery.upload.successful.button=ui-dialog-titlebar-close
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#carbon.Main.tab=menu-panel-button1
|
||||||
|
#carbon.Region1.tab=region1_manage_menu
|
||||||
|
#carbon.add.href=Add
|
||||||
|
#carbon.dashboard.middle.text=middle
|
||||||
|
#carbon.file.upload.field=filename
|
||||||
|
#carbon.upload.button=upload
|
||||||
|
#carbon.upload.successful.message=messagebox-info
|
||||||
|
#carbon.upload.successful.button=ui-dialog-titlebar-close
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#resource.Main.tab=menu-panel-button1
|
||||||
|
#resource.Region3.tab=region3_registry_menu
|
||||||
|
#resource.browse.link=Browse
|
||||||
|
#resource.dashboard.middle.text=middle
|
||||||
|
#resource.detailed.view=stdView
|
||||||
|
#resource.add.resource.link=Add Resource
|
||||||
|
#resource.add.collection.link=Add Collection
|
||||||
|
#resource.add.resource.input.field=uResourceFile
|
||||||
|
#resource.add.Collection.input.field=collectionName
|
||||||
|
#resource.add.Url.input.id=irFetchURL
|
||||||
|
#resource.add.collection.description=colDesc
|
||||||
|
#resource.add.resource.name=uResourceName
|
||||||
|
#Resource.add.resource.description=description
|
||||||
|
#resource.add.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[5]/table/tbody/tr[2]/td/form/table/tbody/tr[6]/td/input
|
||||||
|
#resource.add.Url.button.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[5]/table/tbody/tr[3]/td/form/table/tbody/tr[6]/td/input
|
||||||
|
#resource.collection.add.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td/div[2]/div[3]/div[3]/div[7]/form/table/tbody/tr[5]/td/input
|
||||||
|
#resource.upload.successful.message=messagebox-info
|
||||||
|
#resource.upload.successful.collection.message=messagebox-info
|
||||||
|
#resource.upload.successful.button=ui-dialog-titlebar-close
|
||||||
|
#resource.upload.collection.successful.close.button=/html/body/div[5]/div/div/a
|
||||||
|
#resource.add.Url.Successful.close=/html/body/div[4]/div/div/a
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#service.add.link=Service
|
||||||
|
#service.dashboard.middle.text=middle
|
||||||
|
#service.list.dashboard.middle.text=middle
|
||||||
|
#service.add.name.id=id_Overview_Name
|
||||||
|
#service.add.namespace.id=id_Overview_Namespace
|
||||||
|
#service.check.save.service=Services
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#wsdl.dashboard.middle.text=middle
|
||||||
|
#wsdl.list.dashboard.middle.text=middle
|
||||||
|
#wsdl.add.link=WSDL
|
||||||
|
#wsdl.add.url=irFetchURL
|
||||||
|
#wsdl.add.name=irResourceName
|
||||||
|
#wsdl.add.file.id=uResourceFile
|
||||||
|
#wsdl.add.file.name.id=uResourceName
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#schema.add.link=Schema
|
||||||
|
#schema.dashboard.middle.text=middle
|
||||||
|
#schema.list.dashboard.middle.text=middle
|
||||||
|
#schema.add.url=irFetchURL
|
||||||
|
#schema.add.name=irResourceName
|
||||||
|
#schema.add.schema.name.id=uResourceName
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#wsPolicy.add.link=Policy
|
||||||
|
#wsPolicy.dashboard.middle.text=middle
|
||||||
|
#ws.policy.list.dashboard.middle.text=middle
|
||||||
|
#wsPolicy.add.url=irFetchURL
|
||||||
|
#wsPolicy.add.name=irResourceName
|
||||||
|
#wsPolicy.add.file.id=uResourceFile
|
||||||
|
#wsPolicy.add.schema.name.id=uResourceName
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#api.add.link=API
|
||||||
|
#api.dashboard.middle.text=middle
|
||||||
|
#api.provider.id=id_Overview_Provider
|
||||||
|
#api.name.id=id_Overview_Name
|
||||||
|
#api.context.id=id_Overview_Context
|
||||||
|
#api.version.id=id_Overview_Version
|
||||||
|
#api.list.link=APIs
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#uri.add.link=URI
|
||||||
|
#uri.add.list.id=URIs
|
||||||
|
#uri.dashboard.middle.text=middle
|
||||||
|
#uri.add.uri=id_Overview_URI
|
||||||
|
#uri.add.uri.name=id_Overview_Name
|
||||||
|
#uri.list.link=URIs
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#my.profile.region.tab.id=region5_my_identity_menu
|
||||||
|
#my.profile.add.page.link=My Profiles
|
||||||
|
#my.profile.dashboard.middle.text=middle
|
||||||
|
#my.profile.new.profile.add.link=Add New Profile
|
||||||
|
#my.profile.name.id=profile
|
||||||
|
#my.profile.first.name.id=http://wso2.org/claims/givenname
|
||||||
|
#my.profile.last.name.id=http://wso2.org/claims/lastname
|
||||||
|
#my.profile.email.id=http://wso2.org/claims/emailaddress
|
||||||
|
#my.profile.successful.save.pane=/html/body/div[3]/div/div/a
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#search.activity.link=Activities
|
||||||
|
#search.activity.id=user
|
||||||
|
#search.activity.name.id=path
|
||||||
|
#search.activity.exists.id=activityList
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#search.page.link=Search
|
||||||
|
#search.resource.name=resourcePath
|
||||||
|
#search.results.id=1
|
||||||
|
#filter.search.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form[3]/table/tbody/tr/td[8]/table/tbody/tr/td/a
|
||||||
|
#
|
||||||
|
#users.add.new.user.link.id=Add New User
|
||||||
|
#users.and.roles.link.text=Users and Roles
|
||||||
|
#users.adn.roles.add.page.middle.text=middle
|
||||||
|
#users.add.link.id=Users
|
||||||
|
#users.add.new.user.name.id=username
|
||||||
|
#users.add.new.user.password.name=password
|
||||||
|
#users.add.new.user.password.retype.name=retype
|
||||||
|
#users.admin.tick.name=userRoles
|
||||||
|
#users.save=//input[contains(@value,'Finish')]
|
||||||
|
#users.page.next.id=2
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#roles.add.link.id=Roles
|
||||||
|
#role.add.new.user.link.id=Add New Role
|
||||||
|
#role.add.new.user.name.id=roleName
|
||||||
|
#role.permission.id=ygtvspacer
|
||||||
|
#role.add.user.to.role.name=org.wso2.carbon.role.assign.filter
|
||||||
|
#role.search.button=td.buttonRow > input.button
|
||||||
|
#role.add.ok.button.css=button[type="button"]
|
||||||
|
#role.add.user.to.role.name.tick=selectedUsers
|
||||||
|
#role.add.user.finish.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form[2]/table/tbody/tr[2]/td/input[2]
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#pass.word.change.link=Change My Password
|
||||||
|
#pass.word.current.name=currentPassword
|
||||||
|
#pass.word.new.name=newPassword
|
||||||
|
#pass.word.check.name=checkPassword
|
||||||
|
#pass.word.change.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||||
|
#password.change.dialog.xpath=/html/body/div[3]/div/div/a
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#features.add.link=Features
|
||||||
|
#repository.add.tab.text=Repository Management
|
||||||
|
#repositories.table.id=_table_manage_repositories
|
||||||
|
#repository.add.link.text=Add Repository
|
||||||
|
#repository.url.name=_txt_repository_location_url
|
||||||
|
#repository.save.id=_btn_add_repository
|
||||||
|
#repository.name.id=_txt_repository_name
|
||||||
|
#installed.features.tab.linkText=Installed Features
|
||||||
|
#repositories.dashboard.text=middle
|
||||||
|
#features.filter.id=_txt_IF_filterString
|
||||||
|
#feature.checkbox.click.name=chkSelectFeaturesToUninstall
|
||||||
|
#feature.uninstall.next.button.id=_btn_next_review_uninstall_features
|
||||||
|
#feature.uninstall.finish.button.id=_btn_uc_finish
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#server.shutdown.link.text=Shutdown/Restart
|
||||||
|
#feature.revert.tab=Installation History
|
||||||
|
#feature.find.feature.text=Available Features
|
||||||
|
#feature.install.name.id=_txt_AF_filterString
|
||||||
|
#feature.find.id=_btn_next_filter_repositories
|
||||||
|
#feature.install.click=chkSelectFeaturesToInstall
|
||||||
|
#feature.install.accept.button=_radio_af_accept_licenses
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#key.store.add.link=KeyStores
|
||||||
|
#key.store.dashboard.middle.text=middle
|
||||||
|
#key.store.add.new.link.text=Add New KeyStore
|
||||||
|
#key.store.file.path.id=keystoreFile
|
||||||
|
#key.store.password.name=ksPassword
|
||||||
|
#key.store.provider.name=provider
|
||||||
|
#key.store.next.button=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||||
|
#key.store.pass.key=keyPass
|
||||||
|
#key.store.successful.xpath=/html/body/div[3]/div/div/a
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#logging.add.link=Logging
|
||||||
|
#logging.dashboard.middle.text=middle
|
||||||
|
#logging.update.button.id=globalLog4jUpdate
|
||||||
|
#log4j.appender.update.id=appenderUpdate
|
||||||
|
#log4j.global.success.xpath=/html/body/div[3]/div[2]/button
|
||||||
|
#log4j.appender.sucess.xpath=/html/body/div[4]/div[2]/button
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#log4j.logger.search.id=filterText
|
||||||
|
#log4j.logger.successful.button.xpath=/html/body/div[3]/div/div/a
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#notification.adding.link=Notifications
|
||||||
|
#notification.dashboard.middle.text=middle
|
||||||
|
#notification.add.edit.link.text=Add Subscription to Resource/Collection
|
||||||
|
#notification.add.email.id=subscriptionInput
|
||||||
|
#
|
||||||
|
#registry.subscription.middle.text=middle
|
||||||
|
#registry.subscription.path.id=subscriptionPath
|
||||||
|
#registry.subscription.event.id=eventList
|
||||||
|
#registry.subscription.notification.id=notificationMethodList
|
||||||
|
#registry.subscription.email.id=subscriptionInput
|
||||||
|
#registry.subscription.digest.id=subscriptionDigestTypeInput
|
||||||
|
#registry.subscription.hsmethod.id=hierarchicalSubscriptionList
|
||||||
|
#registry.subscription.subscribe.button.id=subscribeButton
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#uri.configure.add.link=URIs
|
||||||
|
#uri.configure.dashboard.middle.text=middle
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#api.configure.add.link=APIs
|
||||||
|
#api.configure.dashboard.middle.text=middle
|
||||||
|
#
|
||||||
|
#service.configure.add.link=Services
|
||||||
|
#service.configure.dashboard.middle.text=middle
|
||||||
|
#
|
||||||
|
#server.role.add.link=Server Roles
|
||||||
|
#server.role.dashboard.middle.text=middle
|
||||||
|
#server.role.add.link.text=Add New Server Role
|
||||||
|
#server.role.name.id=_serverRoleName
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#add.new.tenant.link.text=Add New Tenant
|
||||||
|
#tenant.role.dashboard.middle.text=middle
|
||||||
|
#tenant.domain=domain
|
||||||
|
#tenant.first.name=admin-firstname
|
||||||
|
#tenant.last.name=admin-lastname
|
||||||
|
#tenant.admin.user.name=admin
|
||||||
|
#tenant.admin.password=admin-password
|
||||||
|
#tenant.admin.password.repeat=admin-password-repeat
|
||||||
|
#tenant.admin.email.id=admin-email
|
||||||
|
#add.new.tenant.success.button=/html/body/div[3]/div/div/a
|
||||||
|
#view.tenant.link=View Tenants
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#add.new.extension.dashboard.middle.text=middle
|
||||||
|
#extension.tab.id=menu-panel-button5
|
||||||
|
#extension.list.page.dashboard.middle.text=middle
|
||||||
|
#extensions.add.link=Add
|
||||||
|
#extension.add.text.box=uResourceFile
|
||||||
|
#
|
||||||
|
#life.cycle.tab.id=menu-panel-button5
|
||||||
|
#life.cycle.add.link=Lifecycles
|
||||||
|
#add.new.lifecycle.dashboard.middle.text=middle
|
||||||
|
#add.new.lifecycle.link.text=Add New Lifecycle
|
||||||
|
#add.new.lifecycle.text.area=//*[@id="textarea"]
|
||||||
|
#add.new.lifecycle.save.css=input.button.registryWriteOperation
|
||||||
|
#resource.lifecycle.minimized=//*[@id="lifecycleIconMinimized"]
|
||||||
|
#resource.lifecycle.add=//*[@id="lifecycleExpanded"]/div[2]/a
|
||||||
|
#resource.lifecycle.add.select=//*[@id="aspect"]
|
||||||
|
#resource.lifecycle.add.select.id=aspect
|
||||||
|
#resource.lifecycle.add.button.add=//*[@id="add-lifecycle-div"]/form/table/tbody/tr[2]/td/input[1]
|
||||||
|
#resource.lifecycle.add.button.cancel=//*[@id="add-lifecycle-div"]/form/table/tbody/tr[2]/td/input[2]
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#artifact.add.tab.id=menu-panel-button5
|
||||||
|
#artifacts.add.link=Artifact Types
|
||||||
|
#add.new.artifact.dashboard.middle.text=middle
|
||||||
|
#add.new.artifact.type.link=Add new Artifact
|
||||||
|
#add.new.artifact.text.area=textarea
|
||||||
|
#add.new.artifact.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||||
|
#
|
||||||
|
#add.new.artifact.dialog.box=button[type="button"]
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#handler.add.tab.id=menu-panel-button5
|
||||||
|
#handler.add.link=Handlers
|
||||||
|
#add.new.handler.dashboard.middle.text=middle
|
||||||
|
#add.new.handler.link.text=Add New Handler
|
||||||
|
#add.new.handler.text.area=textarea
|
||||||
|
#add.new.handler.save.xpath=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/form/table/tbody/tr[2]/td/input
|
||||||
|
#add.new.handler.dialog.box=button[type="button"]
|
||||||
|
#configure.tab.id=menu-panel-button3
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#manage.report.page.link=Reports
|
||||||
|
#manage.report.list.dashboard.middle.text=middle
|
||||||
|
#add.report.list.dashboard.middle.text=middle
|
||||||
|
#add.report.name=reportName
|
||||||
|
#add.report.template=reportTemplate
|
||||||
|
#add.report.type=reportType
|
||||||
|
#add.report.class=reportClass
|
||||||
|
#report.add.link=Add Report
|
||||||
|
#
|
||||||
|
#life.cycle.expand.id=lifecycleIconMinimized
|
||||||
|
#life.cycle.add=Add Lifecycle
|
||||||
|
#life.cycle.add.option=option0
|
||||||
|
#life.cycle.add.option1=option1
|
||||||
|
#life.cycle.add.option2=option2
|
||||||
|
#life.cycle.promote=Promote
|
||||||
|
#life.cycle.publish=Publish
|
||||||
|
#life.cycle.stage=/html/body/table/tbody/tr[2]/td[3]/table/tbody/tr[2]/td/div/div/table/tbody/tr/td[4]/div[14]/div[3]/div[2]/table/tbody/tr/td/div[2]/table/tbody/tr[2]/td
|
||||||
|
#life.cycle.promote.ok.button=button[type="\button\"]
|
||||||
|
#
|
||||||
|
#webapp.list.xpath=.//*[@id='menu']/ul/li[7]/ul/li[2]/ul/li[1]/a
|
||||||
|
#
|
||||||
|
#webapp.list.page.middle=middle
|
||||||
|
#webapp.add.xpath=//*[@id="menu"]/ul/li[5]/ul/li[2]/ul/li[3]/ul/li[1]/a
|
||||||
|
#webapp.add.page.middle=middle
|
||||||
|
#
|
||||||
|
#endpoints.tab.id=//*[@id="menu"]/ul/li[5]/ul/li[4]/ul/li[4]/a
|
||||||
|
#endpoints.page.middle=middle
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#bam.dashboard.tab.id=//*[@id="menu"]/ul/li[3]/ul/li/a
|
||||||
|
#bam.dashboard.signin.xpath=//*[@id="wrap"]/div[2]/div/div/h1
|
||||||
270
modules/integration/tests-integration/pom.xml
Normal file
270
modules/integration/tests-integration/pom.xml
Normal file
@ -0,0 +1,270 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>wso2iot-integration</artifactId>
|
||||||
|
<version>3.1.0-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.iot.test.integration</artifactId>
|
||||||
|
<name>WSO2 IOT - Integration Test Module</name>
|
||||||
|
<description>Backend Integration Tests for WSO2 IOT Server.</description>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<inherited>false</inherited>
|
||||||
|
<configuration>
|
||||||
|
<argLine>-Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m</argLine>
|
||||||
|
|
||||||
|
<suiteXmlFiles>
|
||||||
|
<suiteXmlFile>src/test/resources/testng-server-mgt.xml</suiteXmlFile>
|
||||||
|
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
|
||||||
|
</suiteXmlFiles>
|
||||||
|
|
||||||
|
<skipTests>${skipTests}</skipTests>
|
||||||
|
|
||||||
|
<systemProperties>
|
||||||
|
<property>
|
||||||
|
<name>maven.test.haltafterfailure</name>
|
||||||
|
<value>false</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>java.io.tmpdir</name>
|
||||||
|
<value>${basedir}/target/</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>carbon.zip</name>
|
||||||
|
<value>
|
||||||
|
${basedir}/../../distribution/target/wso2iot-${project.version}.zip
|
||||||
|
</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>framework.resource.location</name>
|
||||||
|
<value>
|
||||||
|
${basedir}/src/test/resources/
|
||||||
|
</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>server.list</name>
|
||||||
|
<value>
|
||||||
|
IOT
|
||||||
|
</value>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>usedefaultlisteners</name>
|
||||||
|
<value>false</value>
|
||||||
|
</property>
|
||||||
|
<sec.verifier.dir>${basedir}/target/security-verifier/</sec.verifier.dir>
|
||||||
|
<eiot.home>${basedir}/target/iot</eiot.home>
|
||||||
|
<instr.file>${basedir}/src/test/resources/instrumentation.txt</instr.file>
|
||||||
|
<filters.file>${basedir}/src/test/resources/filters.txt</filters.file>
|
||||||
|
<iot.output>${basedir}/target/iot</iot.output>
|
||||||
|
</systemProperties>
|
||||||
|
<workingDirectory>${basedir}/target</workingDirectory>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-dependency-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
|
||||||
|
<execution>
|
||||||
|
<id>copy-emma-dependencies</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-dependencies</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${project.build.directory}/emma</outputDirectory>
|
||||||
|
<includeTypes>jar</includeTypes>
|
||||||
|
<includeArtifactIds>emma</includeArtifactIds>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
|
||||||
|
<execution>
|
||||||
|
<id>copy-secVerifier</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-dependencies</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${basedir}/target/security-verifier</outputDirectory>
|
||||||
|
<includeTypes>aar</includeTypes>
|
||||||
|
<includeArtifactIds>SecVerifier</includeArtifactIds>
|
||||||
|
<stripVersion>true</stripVersion>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
|
||||||
|
<execution>
|
||||||
|
<id>unpack-mar-jks</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>unpack</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<artifactItems>
|
||||||
|
<artifactItem>
|
||||||
|
<groupId>org.wso2.iot</groupId>
|
||||||
|
<artifactId>wso2iot</artifactId>
|
||||||
|
<version>${project.version}</version>
|
||||||
|
<type>zip</type>
|
||||||
|
<overWrite>true</overWrite>
|
||||||
|
<outputDirectory>${basedir}/target/tobeCopied/</outputDirectory>
|
||||||
|
<includes>**/*.jks,**/*.mar,**/axis2_client.xml</includes>
|
||||||
|
</artifactItem>
|
||||||
|
</artifactItems>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-jar-plugin</artifactId>
|
||||||
|
<version>2.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<goals>
|
||||||
|
<goal>test-jar</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-resources-plugin</artifactId>
|
||||||
|
<version>2.6</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>copy-resources-jks</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${basedir}/src/test/resources/keystores/products
|
||||||
|
</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>
|
||||||
|
${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/resources/security/
|
||||||
|
</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.jks</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>copy-stratos-jks</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${basedir}/src/test/resources/keystores/stratos
|
||||||
|
</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>
|
||||||
|
${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/resources/security/
|
||||||
|
</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.jks</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>copy-axis2files</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${basedir}/src/test/resources/axis2config
|
||||||
|
</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>
|
||||||
|
${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/conf/axis2/
|
||||||
|
</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.xml</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
<execution>
|
||||||
|
<id>copy-resources-mar</id>
|
||||||
|
<phase>compile</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>copy-resources</goal>
|
||||||
|
</goals>
|
||||||
|
<configuration>
|
||||||
|
<outputDirectory>${basedir}/src/test/resources/client/modules
|
||||||
|
</outputDirectory>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>
|
||||||
|
${basedir}/target/tobeCopied/wso2iot-${project.version}/repository/deployment/client/modules
|
||||||
|
</directory>
|
||||||
|
<includes>
|
||||||
|
<include>**/*.mar</include>
|
||||||
|
</includes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</configuration>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automation</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.automation.engine</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automation</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.automation.test.utils</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.wso2.carbon.automationutils</groupId>
|
||||||
|
<artifactId>org.wso2.carbon.integration.common.extensions</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.google.code.gson</groupId>
|
||||||
|
<artifactId>gson</artifactId>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<skipTests>true</skipTests>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import org.testng.Assert;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains methods to make assertions easier and which are not available out of the box, from testng.
|
||||||
|
*/
|
||||||
|
public class AssertUtil {
|
||||||
|
/**
|
||||||
|
* This can be used to compare if to json strings are matched or not.
|
||||||
|
*
|
||||||
|
* @param expectedJsonPayload the expected json string.
|
||||||
|
* @param realPayload real json string.
|
||||||
|
* @param mustMatch If the real and expected must match, in order to become the test successful or not.
|
||||||
|
*/
|
||||||
|
public static void jsonPayloadCompare(String expectedJsonPayload, String realPayload, boolean mustMatch) {
|
||||||
|
JsonElement jsonElement = new JsonParser().parse(expectedJsonPayload);
|
||||||
|
JsonObject expectedPayloadObject = jsonElement.getAsJsonObject();
|
||||||
|
jsonElement = new JsonParser().parse(realPayload);
|
||||||
|
JsonObject realPayloadObject = jsonElement.getAsJsonObject();
|
||||||
|
if (mustMatch) {
|
||||||
|
Assert.assertTrue(realPayloadObject.equals(expectedPayloadObject));
|
||||||
|
} else {
|
||||||
|
Assert.assertFalse(realPayloadObject.equals(expectedPayloadObject));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,399 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constants used through out the test suite are defined here.
|
||||||
|
*/
|
||||||
|
public final class Constants {
|
||||||
|
|
||||||
|
public static final String DEVICE_ID = "d24f870f390352a41234";
|
||||||
|
public static final String NUMBER_NOT_EQUAL_TO_DEVICE_ID = "1111";
|
||||||
|
public static final String DEVICE_IMEI = "123123123";
|
||||||
|
public static final String AUTOMATION_CONTEXT = "IOT";
|
||||||
|
public static final String APPLICATION_JSON = "application/json";
|
||||||
|
public static final String APPLICATION_URL_ENCODED = "application/x-www-form-urlencoded";
|
||||||
|
public static final String OAUTH_CLIENT_ID = "client_id";
|
||||||
|
public static final String OAUTH_CLIENT_SECRET = "client_secret";
|
||||||
|
public static final String OAUTH_ACCESS_TOKEN = "access_token";
|
||||||
|
public static final String SCOPE = "scope";
|
||||||
|
public static final String ANDROID_DEVICE_TYPE = "android";
|
||||||
|
public static final String HTTP_METHOD_POST = "POST";
|
||||||
|
public static final String HTTP_METHOD_PUT = "PUT";
|
||||||
|
public static final String HTTP_METHOD_GET = "GET";
|
||||||
|
public static final String HTTP_METHOD_DELETE = "DELETE";
|
||||||
|
public static final String DEVICE_IDENTIFIER_KEY = "deviceIdentifier";
|
||||||
|
public static final String DEVICE_IDENTIFIERS_KEY = "deviceIDs";
|
||||||
|
public static final String CONTENT_TYPE = "Content-Type";
|
||||||
|
public static final String APPLICATION_SOAP_XML = "application/soap+xml; charset=utf-8";
|
||||||
|
public static final String UTF8 = "UTF-8";
|
||||||
|
public static final String ZERO = "0";
|
||||||
|
public static final String NULL = "[]";
|
||||||
|
public static final String INACTIVE = "INACTIVE";
|
||||||
|
|
||||||
|
public static final String HTTPS = "https";
|
||||||
|
public static final String HTTP = "http";
|
||||||
|
|
||||||
|
public static final int HTTPS_GATEWAY_PORT = 8243;
|
||||||
|
public static final int HTTP_GATEWAY_PORT = 8280;
|
||||||
|
|
||||||
|
public static final class APIApplicationRegistration {
|
||||||
|
public static final String API_APP_REGISTRATION_ENDPOINT = "/api-application-registration/register";
|
||||||
|
public static final String TOKEN_ENDPOINT = "/token";
|
||||||
|
public static final String OAUTH_TOKEN_PAYLOAD = "username=admin&password=admin&grant_type=password&scope=perm:android:enroll perm:android:wipe perm:android:ring perm:android:lock-devices perm:android:configure-vpn perm:android:configure-wifi perm:android:enroll perm:android:uninstall-application perm:android:manage-configuration perm:android:location perm:android:install-application perm:android:mute perm:android:change-lock-code perm:android:blacklist-applications perm:android:set-password-policy perm:android:encrypt-storage perm:android:clear-password perm:android:enterprise-wipe perm:android:info perm:android:view-configuration perm:android:upgrade-firmware perm:android:set-webclip perm:android:send-notification perm:android:disenroll perm:android:update-application perm:android:unlock-devices perm:android:control-camera perm:android:reboot perm:android:logcat appm:subscribe perm:sign-csr perm:admin:devices:view perm:roles:add perm:roles:add-users perm:roles:update perm:roles:permissions perm:roles:details perm:roles:view perm:roles:create-combined-role perm:roles:delete perm:dashboard:vulnerabilities perm:dashboard:non-compliant-count perm:dashboard:non-compliant perm:dashboard:by-groups perm:dashboard:device-counts perm:dashboard:feature-non-compliant perm:dashboard:count-overview perm:dashboard:filtered-count perm:dashboard:details perm:get-activity perm:devices:delete perm:devices:applications perm:devices:effective-policy perm:devices:compliance-data perm:devices:features perm:devices:operations perm:devices:search perm:devices:details perm:devices:update perm:devices:view perm:view-configuration perm:manage-configuration perm:policies:remove perm:policies:priorities perm:policies:deactivate perm:policies:get-policy-details perm:policies:manage perm:policies:activate perm:policies:update perm:policies:changes perm:policies:get-details perm:users:add perm:users:details perm:users:count perm:users:delete perm:users:roles perm:users:user-details perm:users:credentials perm:users:search perm:users:is-exist perm:users:update perm:users:send-invitation perm:admin-users:view perm:groups:devices perm:groups:update perm:groups:add perm:groups:device perm:groups:devices-count perm:groups:remove perm:groups:groups perm:groups:groups-view perm:groups:share perm:groups:count perm:groups:roles perm:groups:devices-remove perm:groups:devices-add perm:groups:assign perm:device-types:features perm:device-types:types perm:applications:install perm:applications:uninstall perm:admin-groups:count perm:admin-groups:view perm:notifications:mark-checked perm:notifications:view perm:admin:certificates:delete perm:admin:certificates:details perm:admin:certificates:view perm:admin:certificates:add perm:admin:certificates:verify perm:ios:enroll perm:ios:view-device perm:ios:apn perm:ios:ldap perm:ios:enterprise-app perm:ios:store-application perm:ios:remove-application perm:ios:app-list perm:ios:profile-list perm:ios:lock perm:ios:enterprise-wipe perm:ios:device-info perm:ios:restriction perm:ios:email perm:ios:cellular perm:ios:applications perm:ios:wifi perm:ios:ring perm:ios:location perm:ios:notification perm:ios:airplay perm:ios:caldav perm:ios:cal-subscription perm:ios:passcode-policy perm:ios:webclip perm:ios:vpn perm:ios:per-app-vpn perm:ios:app-to-per-app-vpn perm:ios:app-lock perm:ios:clear-passcode perm:ios:remove-profile perm:ios:get-restrictions perm:ios:wipe-data perm:admin";
|
||||||
|
private static StringBuffer dynamicClientPayloadBuffer = new StringBuffer();
|
||||||
|
public static final String API_APP_REGISTRATION_PAYLOAD = dynamicClientPayloadBuffer.append("{ \n"
|
||||||
|
+ " \"applicationName\":\"app_12345\",\n" + " \"isAllowedToAllDomains\":false,\n"
|
||||||
|
+ " \"tags\":[\"android\", \"device_management\"],\n" + " \"isMappingAnExistingOAuthApp\":false\n"
|
||||||
|
+ "}").toString();
|
||||||
|
public static final String PERMISSION_LIST = "default perm:admin-groups:count perm:admin-groups:view "
|
||||||
|
+ "perm:admin-users:view perm:admin:certificates:add perm:admin:certificates:delete "
|
||||||
|
+ "perm:admin:certificates:details perm:admin:certificates:verify perm:admin:certificates:view "
|
||||||
|
+ "perm:admin:devices:view perm:android:blacklist-applications perm:android:change-lock-code "
|
||||||
|
+ "perm:android:clear-password perm:android:configure-vpn perm:android:configure-wifi "
|
||||||
|
+ "perm:android:control-camera perm:android:disenroll perm:android:encrypt-storage "
|
||||||
|
+ "perm:android:enroll perm:android:enterprise-wipe perm:android:info "
|
||||||
|
+ "perm:android:install-application perm:android:location perm:android:lock-devices "
|
||||||
|
+ "perm:android:logcat perm:android:manage-configuration perm:android:mute perm:android:reboot "
|
||||||
|
+ "perm:android:ring perm:android:send-notification perm:android:set-password-policy "
|
||||||
|
+ "perm:android:set-webclip perm:android:uninstall-application perm:android:unlock-devices "
|
||||||
|
+ "perm:android:update-application perm:android:upgrade-firmware perm:android:view-configuration "
|
||||||
|
+ "perm:android:wipe perm:applications:install perm:applications:uninstall perm:dashboard:by-groups "
|
||||||
|
+ "perm:dashboard:count-overview perm:dashboard:details perm:dashboard:device-counts "
|
||||||
|
+ "perm:dashboard:feature-non-compliant perm:dashboard:filtered-count perm:dashboard:non-compliant "
|
||||||
|
+ "perm:dashboard:non-compliant-count perm:dashboard:vulnerabilities perm:device-types:features "
|
||||||
|
+ "perm:device-types:types perm:devices:applications perm:devices:compliance-data perm:devices:delete"
|
||||||
|
+ " perm:devices:details perm:devices:effective-policy perm:devices:features perm:devices:operations "
|
||||||
|
+ "perm:devices:search perm:devices:update perm:devices:view perm:get-activity perm:groups:add "
|
||||||
|
+ "perm:groups:assign perm:groups:count perm:groups:device perm:groups:devices "
|
||||||
|
+ "perm:groups:devices-add perm:groups:devices-count perm:groups:devices-remove perm:groups:groups "
|
||||||
|
+ "perm:groups:groups-view perm:groups:remove perm:groups:roles perm:groups:share perm:groups:update "
|
||||||
|
+ "perm:manage-configuration perm:notifications:mark-checked perm:notifications:view "
|
||||||
|
+ "perm:policies:activate perm:policies:changes perm:policies:deactivate perm:policies:get-details "
|
||||||
|
+ "perm:policies:get-policy-details perm:policies:manage perm:policies:priorities "
|
||||||
|
+ "perm:policies:remove perm:policies:update perm:roles:add perm:roles:add-users "
|
||||||
|
+ "perm:roles:create-combined-role perm:roles:delete perm:roles:details perm:roles:permissions "
|
||||||
|
+ "perm:roles:update perm:roles:view perm:users:add perm:users:count perm:users:credentials "
|
||||||
|
+ "perm:users:delete perm:users:details perm:users:is-exist perm:users:roles perm:users:search "
|
||||||
|
+ "perm:users:send-invitation perm:users:update perm:users:user-details perm:view-configuration "
|
||||||
|
+ "perm:devices:change-status";
|
||||||
|
|
||||||
|
private APIApplicationRegistration() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class AndroidEnrollment {
|
||||||
|
public static final String ENROLLMENT_PAYLOAD_FILE_NAME = "android-enrollment-payloads.json";
|
||||||
|
public static final String ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME = "android-enrollment-response-payloads.json";
|
||||||
|
public static final String ENROLLMENT_ENDPOINT = "/api/device-mgt/android/v1.0/devices";
|
||||||
|
public static final String ENROLLMENT_GROUP = "android-enrollment";
|
||||||
|
|
||||||
|
private AndroidEnrollment() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class AndroidPolicy {
|
||||||
|
public static final String POLICY_RESPONSE_PAYLOAD_FILE_NAME = "android-policy-response-payloads.json";
|
||||||
|
public static final String POLICY_ENDPOINT = "/mdm-android-agent/policy/";
|
||||||
|
public static final String POLICY_GROUP = "android-policy";
|
||||||
|
public static final String GET_EFFECTIVE_POLICY = "getEffectivePolicy";
|
||||||
|
|
||||||
|
private AndroidPolicy() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class WindowsEnrollment {
|
||||||
|
public static final String DISCOVERY_GET_URL = "/mdm-windows-agent/services/discovery/get";
|
||||||
|
public static final String DISCOVERY_POST_URL = "/mdm-windows-agent/services/discovery/post";
|
||||||
|
public static final String BSD_URL = "/mdm-windows-agent/services/federated/bst/authentication";
|
||||||
|
public static final String MS_EXCEP = "/mdm-windows-agent/services/certificatepolicy/xcep";
|
||||||
|
public static final String WINDOWS_ENROLLMENT_GROUP = "windows-enrollment";
|
||||||
|
public static final String WSTEP_URL = "/mdm-windows-agent/services/deviceenrolment/wstep";
|
||||||
|
public static final String SYNC_ML_URL = "/mdm-windows-agent/services/syncml/devicemanagement/request";
|
||||||
|
public static final String DISCOVERY_POST_FILE = "windows" + File.separator + "enrollment" + File
|
||||||
|
.separator + "discovery-post.xml";
|
||||||
|
public static final String MS_XCEP_FILE =
|
||||||
|
"windows" + File.separator + "enrollment" + File.separator + "ms_xcep.xml";
|
||||||
|
public static final String WS_STEP_FILE =
|
||||||
|
"windows" + File.separator + "enrollment" + File.separator + "wstep.xml";
|
||||||
|
public static final String BSD_PAYLOAD = "{\"credentials\" : {\"username\" : \"admin\", \"email\" : \"admin@wso2.com\", " +
|
||||||
|
"\"password\" : \"admin\", \"ownership\" : \"BYOD\", " +
|
||||||
|
"\"token\" : \"cbe53efd46ec612c456540f8dfef5428\"}}";
|
||||||
|
|
||||||
|
private WindowsEnrollment() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class AndroidOperations {
|
||||||
|
private static final String PAYLOAD_COMMON = "["+DEVICE_ID+"]";
|
||||||
|
|
||||||
|
public static final String OPERATION_PAYLOAD_FILE_NAME = "android-operation-payloads.json";
|
||||||
|
public static final String OPERATIONS_GROUP = "operations";
|
||||||
|
|
||||||
|
public static final String CAMERA_OPERATION = "control-camera";
|
||||||
|
public static final String CAMERA_OPERATION_PAYLOAD = "{\n" + " \"operation\": {\n"
|
||||||
|
+ " \"enabled\": false\n" + " },\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\" \n"
|
||||||
|
+ " ]\n" + "}";
|
||||||
|
|
||||||
|
public static final String WIPE_DATA_OPERATION = "wipe_data";
|
||||||
|
public static final String WIPE_DATA_OPERATION_PAYLOAD = "wipe_data";
|
||||||
|
|
||||||
|
public static final String INSTALL_APPS_OPERATION = "install_apps";
|
||||||
|
public static final String NOTIFICATION_OPERATION = "notification";
|
||||||
|
public static final String WIFI_OPERATION = "wifi";
|
||||||
|
public static final String ENCRYPT_OPERATION = "encrypt";
|
||||||
|
public static final String CHANGE_LOCK_OPERATION = "unlock-devices";
|
||||||
|
public static final String PASSWORD_POLICY_OPERATION = "password_policy";
|
||||||
|
public static final String WEB_CLIP_OPERATION = "web_clip";
|
||||||
|
public static final String OPERATION_ENDPOINT = "/api/device-mgt/android/v1.0/admin/devices/";
|
||||||
|
public static final String UNLOCK_ENDPOINT = "unlock-devices";
|
||||||
|
public static final String UNLOCK_OPERATION_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String LOCK_ENDPOINT = "lock-devices";
|
||||||
|
public static final String LOCK_OPERATION_PAYLOAD = "{ \"deviceIDs\": [\""+DEVICE_ID+"\"],"
|
||||||
|
+ "\"operation\": { \"message\": \"string\", \"hardLockEnabled\": false }}";
|
||||||
|
|
||||||
|
public static final String LOCATION_ENDPOINT = "location";
|
||||||
|
public static final String LOCATION_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String CLEAR_PASSWORD_ENDPOINT = "clear-password";
|
||||||
|
public static final String CLEAR_PASSWORD_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String DEVICE_INFO_ENDPOINT = "/info";
|
||||||
|
public static final String DEVICE_INFO_PAYLOAD = "[\""+DEVICE_ID+"\"]";
|
||||||
|
|
||||||
|
public static final String ENTERPRISE_WIPE_ENDPOINT = "enterprise-wipe";
|
||||||
|
public static final String ENTERPRISE_WIPE_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String WIPE_DATA_ENDPOINT = "wipe";
|
||||||
|
public static final String WIPE_DATA_PAYLOAD = "{\n" + " \"operation\": {\n" + " \"pin\": \"string\"\n"
|
||||||
|
+ " },\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n" + " ]\n" + "}";
|
||||||
|
|
||||||
|
public static final String APPLICATION_LIST_ENDPOINT = "applications";
|
||||||
|
public static final String APPLICATION_LIST_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String RING_ENDPOINT = "ring";
|
||||||
|
public static final String RING_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String MUTE_ENDPOINT = "mute";
|
||||||
|
public static final String MUTE_PAYLOAD = PAYLOAD_COMMON;
|
||||||
|
|
||||||
|
public static final String INSTALL_APPS_ENDPOINT = "install-application";
|
||||||
|
public static final String INSTALL_APPS_PAYLOAD = "{\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n"
|
||||||
|
+ " ],\n" + " \"operation\": {\n" + " \"appIdentifier\": \"string\",\n"
|
||||||
|
+ " \"type\": \"string\",\n" + " \"url\": \"string\"\n" + " }\n" + "}";
|
||||||
|
|
||||||
|
public static final String UNINSTALL_APPS_ENDPOINT = "uninstall-application";
|
||||||
|
public static final String UNINSTALL_APPS_PAYLOAD = "{\n" + " \"deviceIDs\": [\n"
|
||||||
|
+ " \""+DEVICE_ID+"\"\n" + " ],\n" + " \"operation\": {\n"
|
||||||
|
+ " \"appIdentifier\": \"string\",\n" + " \"type\": \"string\",\n" + " \"url\": \"string\",\n"
|
||||||
|
+ " \"name\": \"string\"\n" + " }\n" + "}";
|
||||||
|
|
||||||
|
public static final String BLACKLIST_APPS_ENDPOINT = "blacklist-applications";
|
||||||
|
|
||||||
|
public static final String NOTIFICATION_ENDPOINT = "send-notification";
|
||||||
|
public static final String NOTIFICATION_PAYLOAD = "{\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n"
|
||||||
|
+ " ],\n" + " \"operation\": {\n" + " \"messageText\": \"string\",\n"
|
||||||
|
+ " \"messageTitle\": \"string\"\n" + " }\n" + "}";
|
||||||
|
|
||||||
|
public static final String WIFI_ENDPOINT = "configure-wifi";
|
||||||
|
public static final String WIFI_PAYLOAD = "{\n" + " \"operation\": {\n" + " \"ssid\": \"string\",\n"
|
||||||
|
+ " \"password\": \"string\"\n" + " },\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n"
|
||||||
|
+ " ]\n" + "}";
|
||||||
|
|
||||||
|
public static final String ENCRYPT_ENDPOINT = "encrypt-storage";
|
||||||
|
public static final String ENCRYPT_PAYLOAD = "{\n" + " \"operation\": {\n" + " \"encrypted\": false\n"
|
||||||
|
+ " },\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n" + " ]\n" + "}";
|
||||||
|
|
||||||
|
public static final String REBOOT_ENDPOINT = "reboot";
|
||||||
|
public static final String REBOOT_PAYLOAD = PAYLOAD_COMMON;;
|
||||||
|
|
||||||
|
public static final String CHANGE_LOCK_ENDPOINT = "change-lock-code";
|
||||||
|
public static final String CHANGE_LOCK_PAYLOAD = "{\n" + " \"operation\": {\n" + " \"lockCode\": \"0000\"\n"
|
||||||
|
+ " },\n" + " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n" + " ]\n" + "}\n";
|
||||||
|
|
||||||
|
public static final String PASSWORD_POLICY_ENDPOINT = "set-password-policy";
|
||||||
|
public static final String PASSWORD_POLICY_PAYLOAD = "{\n" + " \"operation\": {\n"
|
||||||
|
+ " \"maxFailedAttempts\": 0,\n" + " \"minLength\": 0,\n" + " \"pinHistory\": 0,\n"
|
||||||
|
+ " \"minComplexChars\": 0,\n" + " \"maxPINAgeInDays\": 0,\n"
|
||||||
|
+ " \"requireAlphanumeric\": false,\n" + " \"allowSimple\": false\n" + " },\n"
|
||||||
|
+ " \"deviceIDs\": [\n" + " \""+DEVICE_ID+"\"\n" + " ]\n" + "}";
|
||||||
|
|
||||||
|
public static final String WEB_CLIP_ENDPOINT = "set-webclip";
|
||||||
|
public static final String WEB_CLIP_PAYLOAD = "{\n" + " \"operation\": {\n" + " \"identity\": \"string\",\n"
|
||||||
|
+ " \"title\": \"string\",\n" + " \"type\": \"string\"\n" + " },\n" + " \"deviceIDs\": [\n"
|
||||||
|
+ " \""+DEVICE_ID+"\"\n" + " ]\n" + "}";
|
||||||
|
|
||||||
|
private AndroidOperations() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class AndroidDeviceManagement {
|
||||||
|
public static final String DEVICE_MANAGEMENT_GROUP = "device-mgt";
|
||||||
|
public static final String KEY_DEVICE_ID = "deviceIdentifier";
|
||||||
|
public static final String KEY_DEVICE_NAME = "name";
|
||||||
|
public static final String DEVICE_MGT_ENDPOINT = "/mdm-android-agent/device/";
|
||||||
|
public static final String LICENSE_SECTION = "This";
|
||||||
|
public static final String LICENSE_ENDPOINT = DEVICE_MGT_ENDPOINT + "license";
|
||||||
|
public static final String APP_LIST_ENDPOINT = DEVICE_MGT_ENDPOINT + "appList/" +
|
||||||
|
Constants.DEVICE_ID;
|
||||||
|
public static final String REQUEST_MODIFY_DEVICE_EXPECTED = "{\"responseMessage\":\"Device information " +
|
||||||
|
"has modified successfully.\"}";
|
||||||
|
public static final String APPLIST_PAYLOAD = "{\"id\":\"1\"," +
|
||||||
|
"\"applicationIdentifier\": \"appid\",\"\"platform\": \"android\"," +
|
||||||
|
"\"name\": \"testapp\"}";
|
||||||
|
public static final String RESPONSE_PAYLOAD_FILE_NAME = "android-device-mgt-response-payloads.json";
|
||||||
|
|
||||||
|
private AndroidDeviceManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class AndroidConfigurationManagement {
|
||||||
|
public static final String DEVICE_CONFIGURATION_GROUP = "android-config-mgt";
|
||||||
|
public static final String CONFIG_MGT_ENDPOINT = "/mdm-android-agent/configuration/";
|
||||||
|
public static final String PAYLOAD_FILE_NAME = "android-configuration-payloads.json";
|
||||||
|
public static final String RESPONSE_PAYLOAD_FILE_NAME = "android-config-response-payloads.json";
|
||||||
|
|
||||||
|
private AndroidConfigurationManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class OperationManagement {
|
||||||
|
public static final String PATH_APPS = "/apps";
|
||||||
|
public static final String OPERATION_MANAGEMENT_GROUP = "api-policy-mgt";
|
||||||
|
public static final String GET_DEVICE_APPS_ENDPOINT = "/mdm-admin/operations/android/";
|
||||||
|
public static final String GET_DEVICE_OPERATIONS_ENDPOINT = "/mdm-admin/operations/android/";
|
||||||
|
|
||||||
|
private OperationManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class MobileDeviceManagement {
|
||||||
|
public static final String MOBILE_DEVICE_MANAGEMENT_GROUP = "mobile-device-mgt";
|
||||||
|
public static final String GET_DEVICE_COUNT_ENDPOINT = "/api/device-mgt/v1.0/devices";
|
||||||
|
public static final String CHANGE_DEVICE_STATUS_ENDPOINT = "/api/device-mgt/v1.0/devices/";
|
||||||
|
public static final String NO_OF_DEVICES = "1";
|
||||||
|
public static final String GET_ALL_DEVICES_ENDPOINT = "/mdm-admin/devices";
|
||||||
|
public static final String VIEW_DEVICE_TYPES_ENDPOINT = "/mdm-admin/devices/types";
|
||||||
|
public static final String VIEW_DEVICE_RESPONSE_PAYLOAD_FILE_NAME =
|
||||||
|
"mobile-device-mgt-view-device-types-response-payloads.json";
|
||||||
|
public static final String NO_DEVICE = "{\"devices\":[],\"count\":0}";
|
||||||
|
|
||||||
|
private MobileDeviceManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static final class UserManagement {
|
||||||
|
public static final String USER_MANAGEMENT_GROUP = "user-mgt";
|
||||||
|
public static final String USER_NAME = "username123";
|
||||||
|
public static final String USER_ENDPOINT = "/mdm-admin/users";
|
||||||
|
public static final String USER_PAYLOAD_FILE_NAME = "user-payloads.json";
|
||||||
|
public static final String USER_RESPONSE_PAYLOAD_FILE_NAME = "user-response-payloads.json";
|
||||||
|
public static final String VIEW_USER_ENDPOINT = "/mdm-admin/users/view";
|
||||||
|
|
||||||
|
private UserManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class RoleManagement {
|
||||||
|
public static final String ROLE_MANAGEMENT_GROUP = "role-mgt";
|
||||||
|
public static final String ADD_ROLE_ENDPOINT = "/mdm-admin/roles";
|
||||||
|
public static final String ROLE_PAYLOAD_FILE_NAME = "role-payloads.json";
|
||||||
|
public static final String UPDATE_ROLE_PERMISSION_ENDPOINT = "/mdm-admin/roles?rolename=administration";
|
||||||
|
public static final String UPDATE_ROLE_PERMISSION_PAYLOAD_FILE_NAME = "role-payloads.json";
|
||||||
|
public static final String REMOVE_ROLE_ENDPOINT = "/mdm-admin/roles?rolename=administration";
|
||||||
|
|
||||||
|
private RoleManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class PolicyManagement {
|
||||||
|
public static final String POLICY_MANAGEMENT_GROUP = "policy-mgt";
|
||||||
|
public static final String ADD_POLICY_ENDPOINT = "/mdm-admin/policies/active-policy";
|
||||||
|
public static final String POLICY_PAYLOAD_FILE_NAME = "policy-payloads.json";
|
||||||
|
public static final String POLICY_RESPONSE_PAYLOAD_FILE_NAME = "policy-response-payloads.json";
|
||||||
|
public static final String UPDATE_POLICY_ENDPOINT = "/mdm-admin/policies/1";
|
||||||
|
public static final String REMOVE_POLICY_ENDPOINT = "/mdm-admin/policies/bulk-remove";
|
||||||
|
public static final String REMOVE_POLICY_PAYLOAD_FILE_NAME = "[1]";
|
||||||
|
public static final String VIEW_POLICY_LIST_ENDPOINT = "/mdm-admin/policies";
|
||||||
|
|
||||||
|
private PolicyManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class FeatureManagement {
|
||||||
|
public static final String FEATURE_MANAGEMENT_GROUP = "feature-mgt";
|
||||||
|
public static final String VIEW_FEATURES_ENDPOINT = "/mdm-admin/features/android";
|
||||||
|
|
||||||
|
private FeatureManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class LicenseManagement {
|
||||||
|
public static final String LICENSE_MANAGEMENT_GROUP = "license-mgt";
|
||||||
|
public static final String GET_LICENSE_ENDPOINT = "/mdm-admin/license/android/en_US";
|
||||||
|
public static final String LICENSE_RESPONSE_PAYLOAD_FILE_NAME = "license-response-payloads.json";
|
||||||
|
|
||||||
|
private LicenseManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class ConfigurationManagement {
|
||||||
|
public static final String CONFIGURATION_MANAGEMENT_GROUP = "configuration-mgt";
|
||||||
|
public static final String CONFIGURATION_ENDPOINT = "/mdm-admin/configuration";
|
||||||
|
public static final String CONFIGURATION_PAYLOAD_FILE_NAME = "configuration-payloads.json";
|
||||||
|
public static final String CONFIGURATION_RESPONSE_PAYLOAD_FILE_NAME = "configuration-response-payloads.json";
|
||||||
|
|
||||||
|
private ConfigurationManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class NotificationManagement {
|
||||||
|
public static final String NOTIFICATION_MANAGEMENT_GROUP = "notification-mgt";
|
||||||
|
public static final String NOTIFICATION_ENDPOINT = "/mdm-admin/notifications";
|
||||||
|
public static final String NOTIFICATION_PAYLOAD_FILE_NAME = "notification-payloads.json";
|
||||||
|
public static final String NOTIFICATION_RESPONSE_PAYLOAD_FILE_NAME = "notification-response-payloads.json";
|
||||||
|
public static final String NOTIFICATION_UPDATE_ENDPOINT = "/mdm-admin/notifications/1234/NEW";
|
||||||
|
|
||||||
|
private NotificationManagement() {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,182 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
|
||||||
|
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
|
||||||
|
import org.apache.commons.httpclient.HttpClient;
|
||||||
|
import org.apache.commons.httpclient.contrib.ssl.EasySSLProtocolSocketFactory;
|
||||||
|
import org.apache.commons.httpclient.methods.*;
|
||||||
|
import org.apache.commons.httpclient.params.HttpMethodParams;
|
||||||
|
import org.apache.commons.httpclient.protocol.Protocol;
|
||||||
|
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.security.GeneralSecurityException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class creates a customised Http Client Class
|
||||||
|
*/
|
||||||
|
public class IOTHttpClient {
|
||||||
|
|
||||||
|
private static final String AUTHORIZATION = "Authorization";
|
||||||
|
private static Log log = LogFactory.getLog(IOTHttpClient.class);
|
||||||
|
private String backEndUrl;
|
||||||
|
private String authorizationString;
|
||||||
|
private Map<String, String> requestHeaders = new HashMap<String, String>();
|
||||||
|
|
||||||
|
public IOTHttpClient(String backEndUrl, String contentType, String authorization) {
|
||||||
|
|
||||||
|
this.backEndUrl = backEndUrl;
|
||||||
|
this.requestHeaders.put(Constants.CONTENT_TYPE, contentType);
|
||||||
|
if (authorization != null || !authorization.isEmpty()) {
|
||||||
|
this.authorizationString = authorization;
|
||||||
|
this.requestHeaders.put(AUTHORIZATION, authorization);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthorizationString() {
|
||||||
|
return authorizationString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthorizationString(String authorizationString) {
|
||||||
|
this.authorizationString = authorizationString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHttpHeader(String headerName, String value) {
|
||||||
|
this.requestHeaders.put(headerName, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHttpHeader(String headerName) {
|
||||||
|
return this.requestHeaders.get(headerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeHttpHeader(String headerName) {
|
||||||
|
this.requestHeaders.remove(headerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public IOTResponse post(String endpoint, String body) {
|
||||||
|
HttpClient client = new HttpClient();
|
||||||
|
try {
|
||||||
|
ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory();
|
||||||
|
Protocol https = new Protocol(Constants.HTTPS, socketFactory, Constants.HTTPS_GATEWAY_PORT);
|
||||||
|
Protocol.registerProtocol(Constants.HTTPS, https);
|
||||||
|
String url = backEndUrl + endpoint;
|
||||||
|
PostMethod method = new PostMethod(url);
|
||||||
|
method.setRequestHeader(AUTHORIZATION, authorizationString);
|
||||||
|
StringRequestEntity requestEntity = new StringRequestEntity(body,
|
||||||
|
requestHeaders.get(Constants.CONTENT_TYPE), Constants.UTF8);
|
||||||
|
method.setRequestEntity(requestEntity);
|
||||||
|
IOTResponse iotResponse = new IOTResponse();
|
||||||
|
iotResponse.setStatus(client.executeMethod(method));
|
||||||
|
iotResponse.setBody(method.getResponseBodyAsString());
|
||||||
|
return iotResponse;
|
||||||
|
|
||||||
|
} catch (GeneralSecurityException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse post for GeneralSecurityException", e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse post for IOException", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IOTResponse put(String endpoint, String body) {
|
||||||
|
HttpClient client = new HttpClient();
|
||||||
|
try {
|
||||||
|
ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory();
|
||||||
|
Protocol https = new Protocol(Constants.HTTPS, socketFactory, Constants.HTTPS_GATEWAY_PORT);
|
||||||
|
Protocol.registerProtocol(Constants.HTTPS, https);
|
||||||
|
String url = backEndUrl + endpoint;
|
||||||
|
PutMethod method = new PutMethod(url);
|
||||||
|
method.setRequestHeader(AUTHORIZATION, authorizationString);
|
||||||
|
StringRequestEntity requestEntity = new StringRequestEntity(
|
||||||
|
body, requestHeaders.get(Constants.CONTENT_TYPE), Constants.UTF8);
|
||||||
|
method.setRequestEntity(requestEntity);
|
||||||
|
IOTResponse iotResponse = new IOTResponse();
|
||||||
|
iotResponse.setStatus(client.executeMethod(method));
|
||||||
|
iotResponse.setBody(method.getResponseBodyAsString());
|
||||||
|
return iotResponse;
|
||||||
|
|
||||||
|
} catch (GeneralSecurityException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse put for GeneralSecurityException", e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse put for IO Exception", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IOTResponse get(String endpoint) {
|
||||||
|
HttpClient client = new HttpClient();
|
||||||
|
try {
|
||||||
|
ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory();
|
||||||
|
|
||||||
|
Protocol https = new Protocol(Constants.HTTPS, socketFactory, Constants.HTTPS_GATEWAY_PORT);
|
||||||
|
Protocol.registerProtocol(Constants.HTTPS, https);
|
||||||
|
String url = backEndUrl + endpoint;
|
||||||
|
GetMethod method = new GetMethod(url);
|
||||||
|
method.setRequestHeader(AUTHORIZATION, authorizationString);
|
||||||
|
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
|
||||||
|
new DefaultHttpMethodRetryHandler(3, false));
|
||||||
|
IOTResponse iotResponse = new IOTResponse();
|
||||||
|
iotResponse.setStatus(client.executeMethod(method));
|
||||||
|
iotResponse.setBody(new String(method.getResponseBody()));
|
||||||
|
return iotResponse;
|
||||||
|
|
||||||
|
} catch (GeneralSecurityException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse get for GeneralSecurityException", e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse get for IOException", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IOTResponse delete(String endpoint) {
|
||||||
|
|
||||||
|
HttpClient client = new HttpClient();
|
||||||
|
|
||||||
|
try {
|
||||||
|
ProtocolSocketFactory socketFactory = new EasySSLProtocolSocketFactory();
|
||||||
|
|
||||||
|
Protocol https = new Protocol(Constants.HTTPS, socketFactory, Constants.HTTPS_GATEWAY_PORT);
|
||||||
|
Protocol.registerProtocol(Constants.HTTPS, https);
|
||||||
|
|
||||||
|
String url = backEndUrl + endpoint;
|
||||||
|
|
||||||
|
DeleteMethod method = new DeleteMethod(url);
|
||||||
|
method.setRequestHeader(AUTHORIZATION, authorizationString);
|
||||||
|
method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
|
||||||
|
new DefaultHttpMethodRetryHandler(3, false));
|
||||||
|
|
||||||
|
IOTResponse iotResponse = new IOTResponse();
|
||||||
|
iotResponse.setStatus(client.executeMethod(method));
|
||||||
|
iotResponse.setBody(method.getResponseBodyAsString());
|
||||||
|
return iotResponse;
|
||||||
|
|
||||||
|
} catch (GeneralSecurityException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse delete for GeneralSecurityException", e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error("Failure occurred at IOTResponse delete for IOException", e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains the functions to handle a HTTP Response
|
||||||
|
*/
|
||||||
|
public class IOTResponse {
|
||||||
|
|
||||||
|
private int status;
|
||||||
|
private String body;
|
||||||
|
|
||||||
|
public int getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStatus(int status) {
|
||||||
|
this.status = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBody() {
|
||||||
|
return body;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBody(String body) {
|
||||||
|
this.body = body;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
import org.apache.commons.net.util.Base64;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Util class holds method necessary to get an OAuth token.
|
||||||
|
*/
|
||||||
|
public class OAuthUtil {
|
||||||
|
|
||||||
|
|
||||||
|
public static String getScopes(String backendHTTPURL, String backendHTTPSURL) throws Exception {
|
||||||
|
return getOAuthTokenPair(backendHTTPURL, backendHTTPSURL).get(Constants.SCOPE).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getOAuthToken(String backendHTTPURL, String backendHTTPSURL) throws Exception {
|
||||||
|
return getOAuthTokenPair(backendHTTPURL, backendHTTPSURL).get(Constants.OAUTH_ACCESS_TOKEN).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static JSONObject getOAuthTokenPair(String backendHTTPURL, String backendHTTPSURL) throws Exception {
|
||||||
|
String AuthString = "Basic YWRtaW46YWRtaW4=";
|
||||||
|
RestClient client = new RestClient(backendHTTPURL, Constants.APPLICATION_JSON, AuthString);
|
||||||
|
HttpResponse oAuthData = client.post(Constants.APIApplicationRegistration.API_APP_REGISTRATION_ENDPOINT,
|
||||||
|
Constants.APIApplicationRegistration.API_APP_REGISTRATION_PAYLOAD);
|
||||||
|
JSONObject jsonObj = new JSONObject(oAuthData.getData());
|
||||||
|
String clientId = jsonObj.get(Constants.OAUTH_CLIENT_ID).toString();
|
||||||
|
String clientSecret = jsonObj.get(Constants.OAUTH_CLIENT_SECRET).toString();
|
||||||
|
byte[] bytesEncoded = Base64.encodeBase64((clientId + ":" + clientSecret).getBytes());
|
||||||
|
String basicAuthString = "Basic " + new String(bytesEncoded);
|
||||||
|
//Initiate a RestClient to get OAuth token
|
||||||
|
client = new RestClient(backendHTTPSURL, Constants.APPLICATION_URL_ENCODED, basicAuthString);
|
||||||
|
oAuthData = client.post(Constants.APIApplicationRegistration.TOKEN_ENDPOINT,
|
||||||
|
Constants.APIApplicationRegistration.OAUTH_TOKEN_PAYLOAD);
|
||||||
|
jsonObj = new JSONObject(oAuthData.getData());
|
||||||
|
return jsonObj;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class is used to load the necessary payloads from payload files for integration tests.
|
||||||
|
*/
|
||||||
|
public class PayloadGenerator {
|
||||||
|
|
||||||
|
private static final String PAYLOAD_LOCATION = "payloads/";
|
||||||
|
private static JsonParser parser = new JsonParser();
|
||||||
|
|
||||||
|
public static JsonObject getJsonPayload(String fileName, String method)
|
||||||
|
throws FileNotFoundException {
|
||||||
|
URL url = PayloadGenerator.class.getClassLoader().getResource(PAYLOAD_LOCATION + fileName);
|
||||||
|
JsonObject jsonObject = parser.parse(new FileReader(url.getPath())).getAsJsonObject();
|
||||||
|
return jsonObject.get(method).getAsJsonObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getJsonPayloadToString(String fileName) throws IOException {
|
||||||
|
URL url = Thread.currentThread().getContextClassLoader().getResource(PAYLOAD_LOCATION + fileName);
|
||||||
|
FileInputStream fisTargetFile = new FileInputStream(new File(url.getPath()));
|
||||||
|
String returnString = IOUtils.toString(fisTargetFile, Constants.UTF8);
|
||||||
|
return returnString;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,214 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpRequestUtil;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.ProtocolException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the rest client that is used to calls to APIs.
|
||||||
|
*/
|
||||||
|
public class RestClient {
|
||||||
|
|
||||||
|
private static final String AUTHORIZATION = "Authorization";
|
||||||
|
private String backEndUrl;
|
||||||
|
private String authrizationString;
|
||||||
|
private Map<String, String> requestHeaders = new HashMap<String, String>();
|
||||||
|
|
||||||
|
public RestClient(String backEndUrl, String contentType) {
|
||||||
|
this.backEndUrl = backEndUrl;
|
||||||
|
this.requestHeaders.put(Constants.CONTENT_TYPE, contentType);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RestClient(String backEndUrl, String contentType, String authorization) {
|
||||||
|
this.backEndUrl = backEndUrl;
|
||||||
|
this.requestHeaders.put(Constants.CONTENT_TYPE, contentType);
|
||||||
|
if (authorization != null || !authorization.isEmpty()) {
|
||||||
|
this.authrizationString = authorization;
|
||||||
|
this.requestHeaders.put(AUTHORIZATION, authorization);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthrizationString() {
|
||||||
|
return authrizationString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthrizationString(String authrizationString) {
|
||||||
|
this.authrizationString = authrizationString;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHttpHeader(String headerName, String value) {
|
||||||
|
this.requestHeaders.put(headerName, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHttpHeader(String headerName) {
|
||||||
|
return this.requestHeaders.get(headerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeHttpHeader(String headerName) {
|
||||||
|
this.requestHeaders.remove(headerName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpResponse post(String endpoint, String body) throws MalformedURLException, AutomationFrameworkException {
|
||||||
|
return HttpRequestUtil.doPost(new URL(backEndUrl + endpoint), body, requestHeaders);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpResponse put(String endpoint, String body) throws Exception {
|
||||||
|
HttpURLConnection urlConnection = null;
|
||||||
|
try {
|
||||||
|
urlConnection = (HttpURLConnection) new URL(backEndUrl + endpoint).openConnection();
|
||||||
|
try {
|
||||||
|
urlConnection.setRequestMethod("PUT");
|
||||||
|
} catch (ProtocolException e) {
|
||||||
|
throw new Exception("Shouldn\'t happen: HttpURLConnection doesn\'t support POST?? " + e.getMessage(),
|
||||||
|
e);
|
||||||
|
}
|
||||||
|
|
||||||
|
urlConnection.setDoOutput(true);
|
||||||
|
urlConnection.setDoInput(true);
|
||||||
|
urlConnection.setUseCaches(false);
|
||||||
|
urlConnection.setAllowUserInteraction(false);
|
||||||
|
Iterator entryIterator = this.requestHeaders.entrySet().iterator();
|
||||||
|
while (entryIterator.hasNext()) {
|
||||||
|
Map.Entry sb = (Map.Entry) entryIterator.next();
|
||||||
|
urlConnection.setRequestProperty((String) sb.getKey(), (String) sb.getValue());
|
||||||
|
}
|
||||||
|
OutputStream outputStream = urlConnection.getOutputStream();
|
||||||
|
try {
|
||||||
|
OutputStreamWriter sb1 = new OutputStreamWriter(outputStream, "UTF-8");
|
||||||
|
sb1.write(body);
|
||||||
|
sb1.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new Exception("IOException while sending data " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
if (outputStream != null) {
|
||||||
|
outputStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StringBuilder sb2 = new StringBuilder();
|
||||||
|
BufferedReader rd = null;
|
||||||
|
try {
|
||||||
|
rd = new BufferedReader(
|
||||||
|
new InputStreamReader(urlConnection.getInputStream(), Charset.defaultCharset()));
|
||||||
|
String itr;
|
||||||
|
while ((itr = rd.readLine()) != null) {
|
||||||
|
sb2.append(itr);
|
||||||
|
}
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
throw new Exception("IOException while reading put request data " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
if (rd != null) {
|
||||||
|
rd.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Iterator iterator = urlConnection.getHeaderFields().keySet().iterator();
|
||||||
|
HashMap responseHeaders = new HashMap();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
String key = (String) iterator.next();
|
||||||
|
if (key != null) {
|
||||||
|
responseHeaders.put(key, urlConnection.getHeaderField(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
HttpResponse httpResponse =
|
||||||
|
new HttpResponse(sb2.toString(), urlConnection.getResponseCode(), responseHeaders);
|
||||||
|
return httpResponse;
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new Exception("Connection error (Is server running at " + endpoint + " ?): " + e.getMessage(), e);
|
||||||
|
} finally {
|
||||||
|
if (urlConnection != null) {
|
||||||
|
urlConnection.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpResponse get(String endpoint) throws Exception {
|
||||||
|
return HttpRequestUtil.doGet(backEndUrl + endpoint, requestHeaders);
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpResponse delete(String endpoint) throws Exception {
|
||||||
|
HttpURLConnection conn = null;
|
||||||
|
|
||||||
|
HttpResponse httpResponse1;
|
||||||
|
try {
|
||||||
|
URL url = new URL(backEndUrl + endpoint);
|
||||||
|
conn = (HttpURLConnection) url.openConnection();
|
||||||
|
conn.setRequestMethod("DELETE");
|
||||||
|
conn.setDoOutput(true);
|
||||||
|
conn.setReadTimeout(30000);
|
||||||
|
Iterator entryIterator = this.requestHeaders.entrySet().iterator();
|
||||||
|
|
||||||
|
while (entryIterator.hasNext()) {
|
||||||
|
Map.Entry rd = (Map.Entry) entryIterator.next();
|
||||||
|
conn.setRequestProperty((String) rd.getKey(), (String) rd.getValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
conn.connect();
|
||||||
|
StringBuilder sb1 = new StringBuilder();
|
||||||
|
BufferedReader rd1 = null;
|
||||||
|
|
||||||
|
HttpResponse httpResponse;
|
||||||
|
try {
|
||||||
|
rd1 = new BufferedReader(new InputStreamReader(conn.getInputStream(), Charset.defaultCharset()));
|
||||||
|
|
||||||
|
String ignored;
|
||||||
|
while ((ignored = rd1.readLine()) != null) {
|
||||||
|
sb1.append(ignored);
|
||||||
|
}
|
||||||
|
|
||||||
|
httpResponse = new HttpResponse(sb1.toString(), conn.getResponseCode());
|
||||||
|
httpResponse.setResponseMessage(conn.getResponseMessage());
|
||||||
|
} catch (IOException e) {
|
||||||
|
rd1 = new BufferedReader(new InputStreamReader(conn.getErrorStream(), Charset.defaultCharset()));
|
||||||
|
|
||||||
|
String line;
|
||||||
|
while ((line = rd1.readLine()) != null) {
|
||||||
|
sb1.append(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
httpResponse = new HttpResponse(sb1.toString(), conn.getResponseCode());
|
||||||
|
httpResponse.setResponseMessage(conn.getResponseMessage());
|
||||||
|
} finally {
|
||||||
|
if (rd1 != null) {
|
||||||
|
rd1.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
httpResponse1 = httpResponse;
|
||||||
|
} finally {
|
||||||
|
if (conn != null) {
|
||||||
|
conn.disconnect();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return httpResponse1;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.common;
|
||||||
|
|
||||||
|
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.engine.frameworkutils.FrameworkPathUtil;
|
||||||
|
import org.wso2.carbon.integration.common.utils.LoginLogoutClient;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the base test class that provides common details necessary for other test cases.
|
||||||
|
*/
|
||||||
|
public class TestBase {
|
||||||
|
protected AutomationContext automationContext;
|
||||||
|
protected String backendHTTPSURL;
|
||||||
|
protected String backendHTTPURL;
|
||||||
|
|
||||||
|
protected void init(TestUserMode userMode) throws Exception {
|
||||||
|
automationContext = new AutomationContext(Constants.AUTOMATION_CONTEXT, userMode);
|
||||||
|
backendHTTPSURL = automationContext.getContextUrls().getWebAppURLHttps().replace("9443", String.valueOf(Constants
|
||||||
|
.HTTPS_GATEWAY_PORT));
|
||||||
|
backendHTTPURL = automationContext.getContextUrls().getWebAppURL().replace("9763", String.valueOf(Constants
|
||||||
|
.HTTP_GATEWAY_PORT));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void initPublisher(String productGroupName, String instanceName,
|
||||||
|
TestUserMode userMode)
|
||||||
|
throws XPathExpressionException {
|
||||||
|
automationContext = new AutomationContext(productGroupName, instanceName, userMode);
|
||||||
|
backendHTTPSURL = automationContext.getContextUrls().getBackEndUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getBackendHTTPURL() {
|
||||||
|
return backendHTTPURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackendHTTPURL(String backendHTTPURL) {
|
||||||
|
this.backendHTTPURL = backendHTTPURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getBackendHTTPSURL() throws XPathExpressionException {
|
||||||
|
return backendHTTPSURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getSessionCookie() throws Exception {
|
||||||
|
LoginLogoutClient loginLogoutClient = new LoginLogoutClient(automationContext);
|
||||||
|
return loginLogoutClient.login();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getServiceURL() throws XPathExpressionException {
|
||||||
|
return automationContext.getContextUrls().getServiceUrl();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getTestArtifactLocation() {
|
||||||
|
return FrameworkPathUtil.getSystemResourceLocation();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.configuration;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for configuration management backend services.
|
||||||
|
*/
|
||||||
|
public class ConfigurationManagement extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.ConfigurationManagement.CONFIGURATION_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test save configuration.")
|
||||||
|
public void testSaveConfiguration() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.ConfigurationManagement.CONFIGURATION_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.ConfigurationManagement.CONFIGURATION_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.ConfigurationManagement.CONFIGURATION_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(), response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test get configuration.", dependsOnMethods = {"testSaveConfiguration"})
|
||||||
|
public void testGetConfiguration() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.ConfigurationManagement.CONFIGURATION_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.ConfigurationManagement.CONFIGURATION_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_GET).toString(), response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.device.configuration;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for Android configuration management backend services.
|
||||||
|
*/
|
||||||
|
public class AndroidConfigurationManagement extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.AndroidConfigurationManagement.DEVICE_CONFIGURATION_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test add android platform configuration.")
|
||||||
|
public void testAddConfiguration() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidConfigurationManagement.CONFIG_MGT_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidConfigurationManagement.PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString()
|
||||||
|
);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidConfigurationManagement.RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(),
|
||||||
|
response.getData().toString(), true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test update android configuration.", dependsOnMethods = {"testAddConfiguration"})
|
||||||
|
public void testModifyConfiguration() throws Exception {
|
||||||
|
HttpResponse response = client.put(Constants.AndroidConfigurationManagement.CONFIG_MGT_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidConfigurationManagement.PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString()
|
||||||
|
);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidConfigurationManagement.RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString(),
|
||||||
|
response.getData().toString(), true
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// @Test(description = "Test get android configuration.",
|
||||||
|
// dependsOnMethods = { "testAddConfiguration", "testModifyConfiguration" })
|
||||||
|
// public void testGetConfiguration() throws Exception {
|
||||||
|
// HttpResponse response = client.get(Constants.AndroidConfigurationManagement.CONFIG_MGT_ENDPOINT);
|
||||||
|
// Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
// AssertUtil.jsonPayloadCompare(
|
||||||
|
// PayloadGenerator.getJsonPayload(Constants.AndroidConfigurationManagement.PAYLOAD_FILE_NAME,
|
||||||
|
// Constants.HTTP_METHOD_PUT).toString(),
|
||||||
|
// response.getData().toString(), true
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -0,0 +1,92 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.device.enrollment;
|
||||||
|
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This contains testing of Android device enrollment which is necessary to run prior to all other Android related
|
||||||
|
* tests.
|
||||||
|
*/
|
||||||
|
public class AndroidEnrollment extends TestBase {
|
||||||
|
private RestClient client;
|
||||||
|
private String deviceId;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.AndroidEnrollment.ENROLLMENT_GROUP}, dependsOnGroups =
|
||||||
|
Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP)
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test an Android device enrollment.")
|
||||||
|
public void testEnrollment() throws Exception {
|
||||||
|
String enrollmentData = PayloadGenerator.getJsonPayload(Constants.AndroidEnrollment
|
||||||
|
.ENROLLMENT_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST).toString();
|
||||||
|
HttpResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData);
|
||||||
|
JsonParser jsonParser = new JsonParser();
|
||||||
|
JsonElement element = jsonParser.parse(response.getData());
|
||||||
|
JsonObject jsonObject = element.getAsJsonObject();
|
||||||
|
JsonElement msg = jsonObject.get("responseMessage");
|
||||||
|
deviceId = msg.getAsString().split("\'")[1].split("\'")[0];
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(), response.getData(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test an Android device is enrolled.", dependsOnMethods = {"testEnrollment"})
|
||||||
|
public void testIsEnrolled() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT + "/" + deviceId + "/status");
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_GET).toString(), response.getData(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test modify enrollment.", dependsOnMethods = {"testIsEnrolled"})
|
||||||
|
public void testModifyEnrollment() throws Exception {
|
||||||
|
JsonObject enrollmentData = PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT);
|
||||||
|
HttpResponse response = client.put(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT + "/" + deviceId,
|
||||||
|
enrollmentData.toString());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString(), response.getData(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test disEnrollment.", dependsOnMethods = {"testModifyEnrollment"})
|
||||||
|
public void testDisEnrollDevice() throws Exception {
|
||||||
|
HttpResponse response = client.delete(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT + "/" + deviceId);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_DELETE).toString(), response.getData(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,128 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.device.enrollment;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.json.JSONObject;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.Constants;
|
||||||
|
import org.wso2.iot.integration.common.OAuthUtil;
|
||||||
|
import org.wso2.iot.integration.common.RestClient;
|
||||||
|
import org.wso2.iot.integration.common.TestBase;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This contains testing of Windows device enrollment which is necessary to run prior to all other Windows related
|
||||||
|
* tests.
|
||||||
|
*/
|
||||||
|
public class WindowsEnrollment extends TestBase {
|
||||||
|
private static final String BSD_PLACEHOLDER = "{BinarySecurityToken}";
|
||||||
|
private static String bsd;
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL);
|
||||||
|
client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test the Windows Discovery Get endpoint to see if the server is available.
|
||||||
|
*
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@Test(groups = Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP, description = "Test Windows Discovery get.")
|
||||||
|
public void testServerAvailability() throws Exception {
|
||||||
|
client.setHttpHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_SOAP_XML);
|
||||||
|
HttpResponse response = client.get(Constants.WindowsEnrollment.DISCOVERY_GET_URL);
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP, description = "Test Windows Discovery post.")
|
||||||
|
public void testDiscoveryPost() throws Exception {
|
||||||
|
String xml = readXML(Constants.WindowsEnrollment.DISCOVERY_POST_FILE, Constants.UTF8);
|
||||||
|
client.setHttpHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_SOAP_XML);
|
||||||
|
HttpResponse response = client.post(Constants.WindowsEnrollment.DISCOVERY_POST_URL, xml);
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP, description = "Test Windows BST.")
|
||||||
|
public void testBST() throws Exception {
|
||||||
|
JSONObject bsdObject = new JSONObject(Constants.WindowsEnrollment.BSD_PAYLOAD);
|
||||||
|
JSONObject childObject = bsdObject.getJSONObject("credentials");
|
||||||
|
|
||||||
|
JSONObject modifiedObject = new JSONObject();
|
||||||
|
modifiedObject.put("token", OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL));
|
||||||
|
|
||||||
|
childObject.put("token", modifiedObject);
|
||||||
|
|
||||||
|
HttpResponse response = client.post(Constants.WindowsEnrollment.BSD_URL, Constants.WindowsEnrollment.BSD_PAYLOAD);
|
||||||
|
bsd = response.getData();
|
||||||
|
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP, description = "Test Windows MS XCEP post.",
|
||||||
|
dependsOnMethods = "testBST")
|
||||||
|
public void testMSXCEP() throws Exception {
|
||||||
|
String xml = readXML(Constants.WindowsEnrollment.MS_XCEP_FILE, Constants.UTF8);
|
||||||
|
String payload = xml.replace(BSD_PLACEHOLDER, bsd);
|
||||||
|
client.setHttpHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_SOAP_XML);
|
||||||
|
HttpResponse response = client.post(Constants.WindowsEnrollment.MS_EXCEP, payload);
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_ACCEPTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP, description = "Test Windows WSETP post.",
|
||||||
|
dependsOnMethods = "testMSXCEP")
|
||||||
|
public void testWSETP() throws Exception {
|
||||||
|
String xml = readXML(Constants.WindowsEnrollment.WS_STEP_FILE, Constants.UTF8);
|
||||||
|
String payload = xml.replace(BSD_PLACEHOLDER, bsd);
|
||||||
|
client.setHttpHeader(Constants.CONTENT_TYPE, Constants.APPLICATION_SOAP_XML);
|
||||||
|
HttpResponse response = client.post(Constants.WindowsEnrollment.WSTEP_URL, payload);
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_ACCEPTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private String readXML(String fileName, String characterEncoding) throws Exception {
|
||||||
|
URL url = ClassLoader.getSystemResource(fileName);
|
||||||
|
File folder = new File(url.toURI());
|
||||||
|
return FileUtils.readFileToString(folder, characterEncoding);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
@Test(groups = Constants.WindowsEnrollment.WINDOWS_ENROLLMENT_GROUP, description = "Test Windows WSETP post.",
|
||||||
|
dependsOnMethods = "testWSETP")
|
||||||
|
public void testInitialDeviceInfo() throws Exception {
|
||||||
|
URL url = ClassLoader.getSystemResource("windows/enrollment/inital_device_info.xml");
|
||||||
|
File folder = new File(url.toURI());
|
||||||
|
String xml = FileUtils.readFileToString(folder, "UTF-16");
|
||||||
|
client.setHttpHeader("Content-Type", "application/vnd.syncml.dm+xml;charset=utf-8");
|
||||||
|
HttpResponse response = client.post(Constants.WindowsEnrollment.SYNC_ML_URL, xml);
|
||||||
|
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_OK);
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.device.mgt;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonParser;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for Android device management backend services.
|
||||||
|
*/
|
||||||
|
public class AndroidDeviceManagement extends TestBase {
|
||||||
|
private RestClient client;
|
||||||
|
private JsonObject device;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = {Constants.AndroidDeviceManagement.DEVICE_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test get all android devices.", groups = Constants.AndroidDeviceManagement.DEVICE_MANAGEMENT_GROUP)
|
||||||
|
public void testGetAllDevices() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.AndroidDeviceManagement.DEVICE_MGT_ENDPOINT);
|
||||||
|
JsonArray jsonArray = new JsonParser().parse(response.getData()).getAsJsonArray();
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
Assert.assertEquals(jsonArray.size(), 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test get android device.", groups = Constants.AndroidDeviceManagement.DEVICE_MANAGEMENT_GROUP)
|
||||||
|
public void testGetDevice() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.AndroidDeviceManagement.DEVICE_MGT_ENDPOINT + Constants.DEVICE_ID);
|
||||||
|
device = new JsonParser().parse(response.getData()).getAsJsonObject();
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
Assert.assertEquals(device.get(Constants.AndroidDeviceManagement.KEY_DEVICE_ID).getAsString(), Constants.DEVICE_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test update android device.", groups = Constants.AndroidDeviceManagement.DEVICE_MANAGEMENT_GROUP,
|
||||||
|
dependsOnMethods = {"testGetDevice"})
|
||||||
|
public void testUpdateDevice() throws Exception {
|
||||||
|
device.addProperty(Constants.AndroidDeviceManagement.KEY_DEVICE_NAME, "UpdatedName");
|
||||||
|
HttpResponse response = client.put(Constants.AndroidDeviceManagement.DEVICE_MGT_ENDPOINT + Constants.DEVICE_ID,
|
||||||
|
device.toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidDeviceManagement.RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString(),
|
||||||
|
response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test(description = "Test get android license.", groups = Constants.AndroidDeviceManagement.DEVICE_MANAGEMENT_GROUP)
|
||||||
|
public void testGetLicense() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.AndroidDeviceManagement.LICENSE_ENDPOINT);
|
||||||
|
CharSequence sequence = Constants.AndroidDeviceManagement.LICENSE_SECTION;
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
Assert.assertTrue(response.getData().contains(sequence));
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Test(description = "Test update android device applist.", groups = Constants.DeviceManagement.DEVICE_MANAGEMENT_GROUP,
|
||||||
|
dependsOnMethods = {"testGetDevice"} )
|
||||||
|
public void testUpdateAppList() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.DeviceManagement.APP_LIST_ENDPOINT,
|
||||||
|
Constants.DeviceManagement.APPLIST_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(Constants.DeviceManagement.REQUEST_MODIFY_DEVICE_EXPECTED,
|
||||||
|
response.getData().toString(), true);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,210 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.device.operation;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeTest;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This contain tests to check operations supported by Android. Test are executed against a previously enrolled device
|
||||||
|
*/
|
||||||
|
public class AndroidOperation extends TestBase {
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeTest(alwaysRun = true, groups = { Constants.AndroidOperations.OPERATIONS_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
//Enroll a device
|
||||||
|
JsonObject enrollmentData = PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST);
|
||||||
|
client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device lock operation.")
|
||||||
|
public void testLock() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.LOCK_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.LOCK_OPERATION_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Test(groups = Constants.AndroidOperations.OPERATIONS_GROUP, description = "Test Android getPendingOperations.")
|
||||||
|
public void testGetPendingOperations() throws Exception {
|
||||||
|
HttpResponse response = client.put(Constants.AndroidOperations.OPERATION_ENDPOINT + Constants.DEVICE_ID,
|
||||||
|
"[]");
|
||||||
|
Assert.assertEquals(response.getResponseCode(), HttpStatus.SC_CREATED);
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device location "
|
||||||
|
+ "operation.")
|
||||||
|
public void testLocation() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.LOCATION_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.LOCATION_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device clear password " +
|
||||||
|
"operation.")
|
||||||
|
public void testClearPassword() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.CLEAR_PASSWORD_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.CLEAR_PASSWORD_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device camera "
|
||||||
|
+ "operation.")
|
||||||
|
public void testCamera() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.CAMERA_OPERATION,
|
||||||
|
Constants.AndroidOperations.CAMERA_OPERATION_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// //404
|
||||||
|
// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android device information "
|
||||||
|
// + "operation.")
|
||||||
|
// public void testDeviceInfo() throws Exception {
|
||||||
|
//
|
||||||
|
// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
// Constants.AndroidOperations.DEVICE_INFO_ENDPOINT,
|
||||||
|
// Constants.AndroidOperations.DEVICE_INFO_PAYLOAD);
|
||||||
|
// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android enterprise-wipe "
|
||||||
|
+ "operation.")
|
||||||
|
public void testEnterpriseWipe() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.ENTERPRISE_WIPE_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.ENTERPRISE_WIPE_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android wipe data operation.")
|
||||||
|
public void testWipeData() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.WIPE_DATA_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.WIPE_DATA_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// //400
|
||||||
|
// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android application list "
|
||||||
|
// + "operation.")
|
||||||
|
// public void testApplicationList() throws Exception {
|
||||||
|
// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
// Constants.AndroidOperations.APPLICATION_LIST_ENDPOINT,
|
||||||
|
// Constants.AndroidOperations.APPLICATION_LIST_PAYLOAD);
|
||||||
|
// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android ring operation.")
|
||||||
|
public void testRing() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.RING_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.RING_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android mute operation.")
|
||||||
|
public void testMute() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.MUTE_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.MUTE_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
// //400
|
||||||
|
// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android install apps operation.")
|
||||||
|
// public void testInstallApps() throws Exception {
|
||||||
|
// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
// Constants.AndroidOperations.INSTALL_APPS_ENDPOINT,
|
||||||
|
// Constants.AndroidOperations.INSTALL_APPS_PAYLOAD);
|
||||||
|
// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
// }
|
||||||
|
|
||||||
|
// //400
|
||||||
|
// @Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android uninstall apps "
|
||||||
|
// + "operation.")
|
||||||
|
// public void testUninstallApps() throws Exception {
|
||||||
|
// HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
// Constants.AndroidOperations.UNINSTALL_APPS_ENDPOINT,
|
||||||
|
// Constants.AndroidOperations.UNINSTALL_APPS_PAYLOAD);
|
||||||
|
// Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android notification operation.")
|
||||||
|
public void testNotification() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.NOTIFICATION_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.NOTIFICATION_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android WiFi operation.")
|
||||||
|
public void testWiFi() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.WIFI_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.WIFI_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android encrypt operation.")
|
||||||
|
public void testEncrypt() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.ENCRYPT_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.ENCRYPT_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android change lock operation.")
|
||||||
|
public void testChangeLock() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.CHANGE_LOCK_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.CHANGE_LOCK_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android password policy operation.")
|
||||||
|
public void testPasswordPolicy() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.PASSWORD_POLICY_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.PASSWORD_POLICY_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = {Constants.AndroidOperations.OPERATIONS_GROUP}, description = "Test Android web clip operation.")
|
||||||
|
public void testWebClip() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.AndroidOperations.OPERATION_ENDPOINT +
|
||||||
|
Constants.AndroidOperations.WEB_CLIP_ENDPOINT,
|
||||||
|
Constants.AndroidOperations.WEB_CLIP_PAYLOAD);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.device.policy;
|
||||||
|
|
||||||
|
import org.testng.annotations.BeforeTest;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This contain tests to check policy endpoints supported by Android.
|
||||||
|
* Test are executed against a previously enrolled device.
|
||||||
|
*/
|
||||||
|
public class AndroidPolicy extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeTest(alwaysRun = true, groups = { Constants.AndroidEnrollment.ENROLLMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(groups = Constants.AndroidPolicy.POLICY_GROUP, description = "Test Android getEffectivePolicy.")
|
||||||
|
public void testGetEffectivePolicy() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.AndroidPolicy.POLICY_ENDPOINT + Constants.DEVICE_ID);
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidPolicy.POLICY_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.AndroidPolicy.GET_EFFECTIVE_POLICY).toString(),
|
||||||
|
response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.extensions;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment;
|
||||||
|
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||||
|
import org.wso2.carbon.automation.engine.context.ContextXpathConstants;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
|
||||||
|
import org.wso2.carbon.automation.engine.extensions.ExecutionListenerExtension;
|
||||||
|
import org.wso2.carbon.automation.extensions.ExtensionConstants;
|
||||||
|
import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test Automation server extension to start the DAS.
|
||||||
|
* This will set the carbon_home to {carbonHome}/core and port offset : 2
|
||||||
|
*/
|
||||||
|
public class AnalyticsServerExtension extends ExecutionListenerExtension {
|
||||||
|
|
||||||
|
private CustomTestServerManager serverManager;
|
||||||
|
private static final Log log = LogFactory.getLog(CarbonServerExtension.class);
|
||||||
|
private String executionEnvironment;
|
||||||
|
private AutomationContext automationContext;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initiate() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
automationContext = new AutomationContext("IOT", TestUserMode.SUPER_TENANT_USER);
|
||||||
|
if(getParameters().get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) == null) {
|
||||||
|
getParameters().put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, "2");
|
||||||
|
}
|
||||||
|
serverManager = new CustomTestServerManager(getAutomationContext(), null, getParameters());
|
||||||
|
executionEnvironment =
|
||||||
|
automationContext.getConfigurationValue(ContextXpathConstants.EXECUTION_ENVIRONMENT);
|
||||||
|
|
||||||
|
} catch (XPathExpressionException e) {
|
||||||
|
handleException("Error while initiating test environment", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExecutionStart() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) {
|
||||||
|
String carbonHome = serverManager.startServer("analytics");
|
||||||
|
log.info(carbonHome);
|
||||||
|
System.setProperty(ExtensionConstants.CARBON_HOME, carbonHome);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException("Fail to start carbon server ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExecutionFinish() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) {
|
||||||
|
serverManager.stopServer();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException("Fail to stop carbon server ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleException(String msg, Exception e) {
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new RuntimeException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.extensions;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment;
|
||||||
|
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||||
|
import org.wso2.carbon.automation.engine.context.ContextXpathConstants;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
|
||||||
|
import org.wso2.carbon.automation.engine.extensions.ExecutionListenerExtension;
|
||||||
|
import org.wso2.carbon.automation.extensions.ExtensionConstants;
|
||||||
|
import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test Automation server extension to start the Broker.
|
||||||
|
* This will set the carbon_home to {carbonHome}/core and port offset : 3
|
||||||
|
*/
|
||||||
|
public class BrokerServerExtension extends ExecutionListenerExtension {
|
||||||
|
|
||||||
|
private CustomTestServerManager serverManager;
|
||||||
|
private static final Log log = LogFactory.getLog(CarbonServerExtension.class);
|
||||||
|
private String executionEnvironment;
|
||||||
|
private AutomationContext automationContext;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initiate() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
automationContext = new AutomationContext("IOT", TestUserMode.SUPER_TENANT_USER);
|
||||||
|
if(getParameters().get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) == null) {
|
||||||
|
getParameters().put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, "3");
|
||||||
|
}
|
||||||
|
serverManager = new CustomTestServerManager(getAutomationContext(), null, getParameters());
|
||||||
|
executionEnvironment =
|
||||||
|
automationContext.getConfigurationValue(ContextXpathConstants.EXECUTION_ENVIRONMENT);
|
||||||
|
|
||||||
|
} catch (XPathExpressionException e) {
|
||||||
|
handleException("Error while initiating test environment", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExecutionStart() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) {
|
||||||
|
String carbonHome = serverManager.startServer("broker");
|
||||||
|
log.info(carbonHome);
|
||||||
|
System.setProperty(ExtensionConstants.CARBON_HOME, carbonHome);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException("Fail to start carbon server ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExecutionFinish() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) {
|
||||||
|
serverManager.stopServer();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException("Fail to stop carbon server ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleException(String msg, Exception e) {
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new RuntimeException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2005-2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.extensions;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.automation.engine.FrameworkConstants;
|
||||||
|
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||||
|
import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
|
||||||
|
import org.wso2.carbon.automation.extensions.ExtensionConstants;
|
||||||
|
import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerManager;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class CustomTestServerManager {
|
||||||
|
protected CarbonServerManager carbonServer;
|
||||||
|
protected String carbonZip;
|
||||||
|
protected int portOffset;
|
||||||
|
protected Map<String, String> commandMap = new HashMap<String, String>();
|
||||||
|
private static final Log log = LogFactory.getLog(CustomTestServerManager.class);
|
||||||
|
protected String carbonHome;
|
||||||
|
|
||||||
|
public CustomTestServerManager(AutomationContext context) {
|
||||||
|
carbonServer = new CarbonServerManager(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomTestServerManager(AutomationContext context, String carbonZip) {
|
||||||
|
carbonServer = new CarbonServerManager(context);
|
||||||
|
this.carbonZip = carbonZip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomTestServerManager(AutomationContext context, int portOffset) {
|
||||||
|
carbonServer = new CarbonServerManager(context);
|
||||||
|
this.portOffset = portOffset;
|
||||||
|
commandMap.put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, String.valueOf(portOffset));
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomTestServerManager(AutomationContext context, String carbonZip,
|
||||||
|
Map<String, String> commandMap) {
|
||||||
|
carbonServer = new CarbonServerManager(context);
|
||||||
|
this.carbonZip = carbonZip;
|
||||||
|
if (commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) != null) {
|
||||||
|
this.portOffset = Integer.parseInt(commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND));
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("portOffset value must be set in command list");
|
||||||
|
}
|
||||||
|
this.commandMap = commandMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCarbonZip() {
|
||||||
|
return carbonZip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCarbonHome() {
|
||||||
|
return carbonHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPortOffset() {
|
||||||
|
return portOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void configureServer() throws AutomationFrameworkException {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public Map<String, String> getCommands() {
|
||||||
|
return commandMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called for starting a Carbon server in preparation for execution of a
|
||||||
|
* TestSuite
|
||||||
|
* <p/>
|
||||||
|
* Add the @BeforeSuite TestNG annotation in the method overriding this method
|
||||||
|
* @param server : The server which needs to be start.
|
||||||
|
* @return The CARBON_HOME
|
||||||
|
* @throws IOException If an error occurs while copying the deployment artifacts into the
|
||||||
|
* Carbon server
|
||||||
|
*/
|
||||||
|
public String startServer(String server)
|
||||||
|
throws AutomationFrameworkException, IOException, XPathExpressionException {
|
||||||
|
if(carbonHome == null) {
|
||||||
|
if (carbonZip == null) {
|
||||||
|
carbonZip = System.getProperty(FrameworkConstants.SYSTEM_PROPERTY_CARBON_ZIP_LOCATION);
|
||||||
|
}
|
||||||
|
if (carbonZip == null) {
|
||||||
|
throw new IllegalArgumentException("carbon zip file cannot find in the given location");
|
||||||
|
}
|
||||||
|
carbonHome = carbonServer.setUpCarbonHome(carbonZip) + "/" + server;
|
||||||
|
configureServer();
|
||||||
|
}
|
||||||
|
log.info("Carbon Home - " + carbonHome );
|
||||||
|
if (commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) != null) {
|
||||||
|
this.portOffset = Integer.parseInt(commandMap.get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND));
|
||||||
|
} else {
|
||||||
|
this.portOffset = 0;
|
||||||
|
}
|
||||||
|
carbonServer.startServerUsingCarbonHome(carbonHome, commandMap);
|
||||||
|
return carbonHome;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Restarting server already started by the method startServer
|
||||||
|
* @throws AutomationFrameworkException
|
||||||
|
*/
|
||||||
|
public void restartGracefully() throws AutomationFrameworkException {
|
||||||
|
if(carbonHome == null) {
|
||||||
|
throw new AutomationFrameworkException("No Running Server found to restart. " +
|
||||||
|
"Please make sure whether server is started");
|
||||||
|
}
|
||||||
|
carbonServer.restartGracefully();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method is called for stopping a Carbon server
|
||||||
|
* <p/>
|
||||||
|
* Add the @AfterSuite annotation in the method overriding this method
|
||||||
|
*
|
||||||
|
* @throws AutomationFrameworkException If an error occurs while shutting down the server
|
||||||
|
*/
|
||||||
|
public void stopServer() throws AutomationFrameworkException {
|
||||||
|
carbonServer.serverShutdown(portOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.extensions;
|
||||||
|
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment;
|
||||||
|
import org.wso2.carbon.automation.engine.context.AutomationContext;
|
||||||
|
import org.wso2.carbon.automation.engine.context.ContextXpathConstants;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.engine.exceptions.AutomationFrameworkException;
|
||||||
|
import org.wso2.carbon.automation.engine.extensions.ExecutionListenerExtension;
|
||||||
|
import org.wso2.carbon.automation.extensions.ExtensionConstants;
|
||||||
|
import org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension;
|
||||||
|
|
||||||
|
import javax.xml.xpath.XPathExpressionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Test Automation server extension to start the IOT core.
|
||||||
|
* This will set the carbon_home to {carbonHome}/core and port offset : 0
|
||||||
|
*/
|
||||||
|
public class IOTServerExtension extends ExecutionListenerExtension {
|
||||||
|
|
||||||
|
private CustomTestServerManager serverManager;
|
||||||
|
private static final Log log = LogFactory.getLog(CarbonServerExtension.class);
|
||||||
|
private String executionEnvironment;
|
||||||
|
private AutomationContext automationContext;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initiate() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
automationContext = new AutomationContext("IOT", TestUserMode.SUPER_TENANT_USER);
|
||||||
|
if(getParameters().get(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND) == null) {
|
||||||
|
getParameters().put(ExtensionConstants.SERVER_STARTUP_PORT_OFFSET_COMMAND, "0");
|
||||||
|
}
|
||||||
|
serverManager = new CustomTestServerManager(getAutomationContext(), null, getParameters());
|
||||||
|
executionEnvironment =
|
||||||
|
automationContext.getConfigurationValue(ContextXpathConstants.EXECUTION_ENVIRONMENT);
|
||||||
|
|
||||||
|
} catch (XPathExpressionException e) {
|
||||||
|
handleException("Error while initiating test environment", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExecutionStart() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) {
|
||||||
|
String carbonHome = serverManager.startServer("core");
|
||||||
|
log.info(carbonHome);
|
||||||
|
System.setProperty(ExtensionConstants.CARBON_HOME, carbonHome);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException("Fail to start carbon server ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onExecutionFinish() throws AutomationFrameworkException {
|
||||||
|
try {
|
||||||
|
if (executionEnvironment.equalsIgnoreCase(ExecutionEnvironment.STANDALONE.name())) {
|
||||||
|
serverManager.stopServer();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
handleException("Fail to stop carbon server ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void handleException(String msg, Exception e) {
|
||||||
|
log.error(msg, e);
|
||||||
|
throw new RuntimeException(msg, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.feature;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.Constants;
|
||||||
|
import org.wso2.iot.integration.common.OAuthUtil;
|
||||||
|
import org.wso2.iot.integration.common.RestClient;
|
||||||
|
import org.wso2.iot.integration.common.TestBase;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for feature management backend services.
|
||||||
|
*/
|
||||||
|
public class FeatureManagement extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.FeatureManagement.FEATURE_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test view features.")
|
||||||
|
public void testViewFeatures() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.FeatureManagement.VIEW_FEATURES_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.license;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for license management backend services.
|
||||||
|
*/
|
||||||
|
public class LicenseManagement extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.LicenseManagement.LICENSE_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test get license.")
|
||||||
|
public void testGetLicense() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.LicenseManagement.GET_LICENSE_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(Constants.LicenseManagement.LICENSE_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_GET).toString(), response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.mobileDevice;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for API Device management backend services.
|
||||||
|
*/
|
||||||
|
public class MobileDeviceManagement extends TestBase {
|
||||||
|
private IOTHttpClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Add an Android device.")
|
||||||
|
public void addEnrollment() throws Exception {
|
||||||
|
JsonObject enrollmentData = PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME, Constants.HTTP_METHOD_POST);
|
||||||
|
enrollmentData.addProperty(Constants.DEVICE_IDENTIFIER_KEY, Constants.DEVICE_ID);
|
||||||
|
IOTResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(), response.getBody(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = {"addEnrollment"}, description = "Test count devices")
|
||||||
|
public void testCountDevices() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_DEVICE_COUNT_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
Assert.assertTrue(response.getBody().equals(Constants.MobileDeviceManagement.NO_OF_DEVICES));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = {"addEnrollment"}, description = "Test view devices")
|
||||||
|
public void testViewDevices() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_ALL_DEVICES_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = {"addEnrollment"}, description = "Test view device types")
|
||||||
|
public void testViewDeviceTypes() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.MobileDeviceManagement.VIEW_DEVICE_TYPES_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
Assert.assertEquals(PayloadGenerator.getJsonPayloadToString
|
||||||
|
(Constants.MobileDeviceManagement.VIEW_DEVICE_RESPONSE_PAYLOAD_FILE_NAME), response.getBody());
|
||||||
|
//Response has two device types, because in windows enrollment a windows device is previously enrolled.
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Change device status")
|
||||||
|
public void testRemoveDevices() throws Exception {
|
||||||
|
String endpointUrl = Constants.MobileDeviceManagement.CHANGE_DEVICE_STATUS_ENDPOINT + Constants.ANDROID_DEVICE_TYPE
|
||||||
|
+ "/" + Constants.DEVICE_ID + "/changestatus?newStatus=" + Constants.INACTIVE;
|
||||||
|
IOTResponse response = client.put(endpointUrl, "");
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,73 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.mobileDevice;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.junit.experimental.theories.Theories;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.BeforeSuite;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for API Mobile Device Management with No Devices Enrolled.
|
||||||
|
*/
|
||||||
|
public class MobileDeviceManagementWithNoDevices extends TestBase {
|
||||||
|
private IOTHttpClient client;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @BeforeSuite annotation is added to run this verification before the test suite starts.
|
||||||
|
* As in IoT server, apis are published after the server startup. Due to that the generated token doesn't get
|
||||||
|
* required scope.
|
||||||
|
* This method delays test suit startup until the tokens get required scopes.
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
@BeforeSuite
|
||||||
|
public void verifyApiPublishing() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
|
||||||
|
while (!checkScopes(Constants.APIApplicationRegistration.PERMISSION_LIST)) {
|
||||||
|
TimeUnit.SECONDS.sleep(5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.MobileDeviceManagement.MOBILE_DEVICE_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test count devices with no added devices")
|
||||||
|
public void testCountDevicesWithNoDevices() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.MobileDeviceManagement.GET_DEVICE_COUNT_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
Assert.assertEquals(Constants.MobileDeviceManagement.NO_DEVICE, response.getBody());
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkScopes(String permissionsList) throws Exception {
|
||||||
|
String tokenString = OAuthUtil.getScopes(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
return tokenString.contains(permissionsList);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,80 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.notification;
|
||||||
|
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeTest;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for notification management backend services.
|
||||||
|
*/
|
||||||
|
public class NotificationManagement extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeTest(alwaysRun = true, groups = {Constants.NotificationManagement.NOTIFICATION_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
//Enroll a device
|
||||||
|
JsonObject enrollmentData = PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST);
|
||||||
|
enrollmentData.addProperty(Constants.DEVICE_IDENTIFIER_KEY, Constants.DEVICE_ID);
|
||||||
|
client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test add notification.")
|
||||||
|
public void testAddNotification() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.NotificationManagement.NOTIFICATION_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.NotificationManagement.NOTIFICATION_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.NotificationManagement.NOTIFICATION_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(),
|
||||||
|
response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test update notification.", dependsOnMethods = {"testAddNotification"})
|
||||||
|
public void testUpdateNotification() throws Exception {
|
||||||
|
HttpResponse response = client.put(Constants.NotificationManagement.NOTIFICATION_UPDATE_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.NotificationManagement.NOTIFICATION_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(Constants.NotificationManagement.NOTIFICATION_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString(),
|
||||||
|
response.getData().toString(), true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test get notification.", dependsOnMethods = {"testUpdateNotification"})
|
||||||
|
public void testGetNotification() throws Exception {
|
||||||
|
HttpResponse response = client.get(Constants.NotificationManagement.NOTIFICATION_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.operation;
|
||||||
|
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
|
import com.google.gson.JsonPrimitive;
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for API Operation management backend services.
|
||||||
|
*/
|
||||||
|
public class OperationManagement extends TestBase {
|
||||||
|
|
||||||
|
private JsonObject device;
|
||||||
|
private IOTHttpClient client;
|
||||||
|
private RestClient rclient;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.OperationManagement.OPERATION_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
this.rclient = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Add an Android device.")
|
||||||
|
public void testEnrollment() throws Exception {
|
||||||
|
JsonObject enrollmentData = PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST);
|
||||||
|
enrollmentData.addProperty(Constants.DEVICE_IDENTIFIER_KEY, Constants.DEVICE_ID);
|
||||||
|
IOTResponse response = client.post(Constants.AndroidEnrollment.ENROLLMENT_ENDPOINT, enrollmentData.toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidEnrollment.ENROLLMENT_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(), response.getBody(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = {"testEnrollment"}, description = "Test Android install apps operation.")
|
||||||
|
public void testInstallApps() throws Exception {
|
||||||
|
JsonObject operationData = PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.AndroidOperations.OPERATION_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.AndroidOperations.INSTALL_APPS_OPERATION);
|
||||||
|
JsonArray deviceIds = new JsonArray();
|
||||||
|
JsonPrimitive deviceID = new JsonPrimitive(Constants.DEVICE_ID);
|
||||||
|
deviceIds.add(deviceID);
|
||||||
|
operationData.add(Constants.DEVICE_IDENTIFIERS_KEY, deviceIds);
|
||||||
|
HttpResponse response = rclient.post(Constants.AndroidOperations.INSTALL_APPS_ENDPOINT,
|
||||||
|
operationData.toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = {"testInstallApps"}, description = "Test get device apps with wrong Device ID")
|
||||||
|
public void testGetDeviceAppsWithWrongDeviceID() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.OperationManagement.GET_DEVICE_APPS_ENDPOINT +
|
||||||
|
Constants.NUMBER_NOT_EQUAL_TO_DEVICE_ID + Constants.OperationManagement.PATH_APPS);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getStatus());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(dependsOnMethods = {"testInstallApps"}, description = "Test get operations for device with wrong Device ID")
|
||||||
|
public void testGetDeviceOperationsWithWrongDeviceID() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.OperationManagement.GET_DEVICE_OPERATIONS_ENDPOINT + Constants.DEVICE_IMEI);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getStatus());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.policy;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for policy management backend services.
|
||||||
|
*/
|
||||||
|
public class PolicyManagement extends TestBase {
|
||||||
|
|
||||||
|
private IOTHttpClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.PolicyManagement.POLICY_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test add policy.")
|
||||||
|
public void testAddPolicy() throws Exception {
|
||||||
|
|
||||||
|
IOTResponse response = client.post(Constants.PolicyManagement.ADD_POLICY_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(Constants.PolicyManagement.POLICY_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
Assert.assertEquals(PayloadGenerator.getJsonPayload(Constants.PolicyManagement.POLICY_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(), response.getBody());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test view policy list.", dependsOnMethods = {"testAddPolicy"})
|
||||||
|
public void testViewPolicyList() throws Exception {
|
||||||
|
IOTResponse response = client.get(Constants.PolicyManagement.VIEW_POLICY_LIST_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test update policy.", dependsOnMethods = {"testViewPolicyList"})
|
||||||
|
public void testUpdatePolicy() throws Exception {
|
||||||
|
|
||||||
|
IOTResponse response = client.put(Constants.PolicyManagement.UPDATE_POLICY_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(
|
||||||
|
Constants.PolicyManagement.POLICY_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
Assert.assertEquals(PayloadGenerator.getJsonPayload(Constants.PolicyManagement.POLICY_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString(), response.getBody());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test remove policy.", dependsOnMethods = {"testUpdatePolicy"})
|
||||||
|
public void testRemovePolicy() throws Exception {
|
||||||
|
|
||||||
|
IOTResponse response = client.post(Constants.PolicyManagement.REMOVE_POLICY_ENDPOINT,
|
||||||
|
Constants.PolicyManagement.REMOVE_POLICY_PAYLOAD_FILE_NAME);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
Assert.assertEquals(PayloadGenerator.getJsonPayload(Constants.PolicyManagement.POLICY_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_DELETE).toString(), response.getBody());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
package org.wso2.iot.integration.role;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for role management backend services.
|
||||||
|
*/
|
||||||
|
public class RoleManagement extends TestBase {
|
||||||
|
|
||||||
|
private IOTHttpClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.RoleManagement.ROLE_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new IOTHttpClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test add role.")
|
||||||
|
public void testAddRole() throws Exception {
|
||||||
|
IOTResponse response = client.post(Constants.RoleManagement.ADD_ROLE_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(Constants.RoleManagement.ROLE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test update permission role.", dependsOnMethods = {"testAddRole"})
|
||||||
|
public void testUpdateRolePermission() throws Exception {
|
||||||
|
IOTResponse response = client.put(Constants.RoleManagement.UPDATE_ROLE_PERMISSION_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(Constants.RoleManagement.UPDATE_ROLE_PERMISSION_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test remove user.", dependsOnMethods = {"testUpdateRolePermission"})
|
||||||
|
public void testRemoveRole() throws Exception {
|
||||||
|
IOTResponse response = client.delete(Constants.RoleManagement.REMOVE_ROLE_ENDPOINT);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getStatus());
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.wso2.iot.integration.user;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
|
import org.apache.commons.httpclient.HttpStatus;
|
||||||
|
import org.testng.annotations.BeforeClass;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
import org.wso2.carbon.automation.engine.context.TestUserMode;
|
||||||
|
import org.wso2.carbon.automation.test.utils.http.client.HttpResponse;
|
||||||
|
import org.wso2.iot.integration.common.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class contains integration tests for user management backend services.
|
||||||
|
*/
|
||||||
|
public class UserManagement extends TestBase {
|
||||||
|
|
||||||
|
private RestClient client;
|
||||||
|
|
||||||
|
@BeforeClass(alwaysRun = true, groups = { Constants.UserManagement.USER_MANAGEMENT_GROUP})
|
||||||
|
public void initTest() throws Exception {
|
||||||
|
super.init(TestUserMode.SUPER_TENANT_ADMIN);
|
||||||
|
String accessTokenString = "Bearer " + OAuthUtil.getOAuthToken(backendHTTPSURL, backendHTTPSURL);
|
||||||
|
this.client = new RestClient(backendHTTPSURL, Constants.APPLICATION_JSON, accessTokenString);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test add user.")
|
||||||
|
public void testAddUser() throws Exception {
|
||||||
|
HttpResponse response = client.post(Constants.UserManagement.USER_ENDPOINT,
|
||||||
|
PayloadGenerator.getJsonPayload(Constants.UserManagement.USER_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(Constants.UserManagement.USER_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_POST).toString(), response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test update user.", dependsOnMethods = {"testAddUser"})
|
||||||
|
public void testUpdateUser() throws Exception {
|
||||||
|
String url = GetURL(Constants.UserManagement.USER_ENDPOINT);
|
||||||
|
HttpResponse response = client.put(url,
|
||||||
|
PayloadGenerator.getJsonPayload(Constants.UserManagement.USER_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString());
|
||||||
|
Assert.assertEquals(HttpStatus.SC_CREATED, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(Constants.UserManagement.USER_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_PUT).toString(), response.getData().toString(), true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test view user.", dependsOnMethods = {"testUpdateUser"})
|
||||||
|
public void testViewUser() throws Exception {
|
||||||
|
String url = GetURL(Constants.UserManagement.VIEW_USER_ENDPOINT);
|
||||||
|
HttpResponse response = client.get(url);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(Constants.UserManagement.USER_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_GET).toString(), response.getData().toString(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(description = "Test remove user.", dependsOnMethods = {"testViewUser"})
|
||||||
|
public void testRemoveUser() throws Exception {
|
||||||
|
String url = GetURL(Constants.UserManagement.USER_ENDPOINT);
|
||||||
|
HttpResponse response = client.delete(url);
|
||||||
|
Assert.assertEquals(HttpStatus.SC_OK, response.getResponseCode());
|
||||||
|
AssertUtil.jsonPayloadCompare(PayloadGenerator.getJsonPayload(Constants.UserManagement.USER_RESPONSE_PAYLOAD_FILE_NAME,
|
||||||
|
Constants.HTTP_METHOD_DELETE).toString(), response.getData().toString(), true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String GetURL(String endPoint) {
|
||||||
|
return endPoint + "?username=" + Constants.UserManagement.USER_NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,224 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
<automation xmlns="automationXMLSchema.xsd">
|
||||||
|
<!-- ================================================= -->
|
||||||
|
<!-- Parameters -->
|
||||||
|
<!-- ================================================= -->
|
||||||
|
<configurations>
|
||||||
|
<!--
|
||||||
|
Change this to edit wait time for test artifact deployment
|
||||||
|
-->
|
||||||
|
<deploymentDelay>100000</deploymentDelay>
|
||||||
|
<!--
|
||||||
|
Change this to standalone|platform|all to execute test on specific environment
|
||||||
|
-->
|
||||||
|
<executionEnvironment>standalone</executionEnvironment>
|
||||||
|
<!--
|
||||||
|
Change this to true if you want to generate coverage statistics
|
||||||
|
-->
|
||||||
|
<coverage>false</coverage>
|
||||||
|
<!--
|
||||||
|
Change this to true if you want to enable framework dashboard
|
||||||
|
-->
|
||||||
|
<frameworkDashboard>false</frameworkDashboard>
|
||||||
|
<!--
|
||||||
|
Browser type with used by framework to execute UI test, supported types - chrome|firefox|opera|ie|htmlUnit
|
||||||
|
-->
|
||||||
|
</configurations>
|
||||||
|
<tools>
|
||||||
|
<selenium>
|
||||||
|
<!-- Change to enable remote webDriver -->
|
||||||
|
<!-- URL of remote webDriver server -->
|
||||||
|
<remoteDriverUrl enable="false">http://10.100.2.51:4444/wd/hub/</remoteDriverUrl>
|
||||||
|
|
||||||
|
<!-- Type of the browser selenium tests are running" -->
|
||||||
|
<browser>
|
||||||
|
<browserType>firefox</browserType>
|
||||||
|
<!-- path to webDriver executable - required only for chrome-->
|
||||||
|
<webdriverPath enable="false">/home/test/name/webDriver</webdriverPath>
|
||||||
|
</browser>
|
||||||
|
</selenium>
|
||||||
|
</tools>
|
||||||
|
<!--
|
||||||
|
Database configuration to be used for data service testing. DB configuration in dbs files will be replaced with
|
||||||
|
below configuration at test run time
|
||||||
|
-->
|
||||||
|
<datasources>
|
||||||
|
<datasource name="dataService">
|
||||||
|
<url>jdbc:h2:testDB</url>
|
||||||
|
<username>wso2carbon</username>
|
||||||
|
<password>wso2carbon</password>
|
||||||
|
<driverClassName>org.h2.Driver</driverClassName>
|
||||||
|
</datasource>
|
||||||
|
<datasource name="dataService1">
|
||||||
|
<url>jdbc:h2:testDB</url>
|
||||||
|
<username>wso2carbon</username>
|
||||||
|
<password>wso2carbon</password>
|
||||||
|
<driverClassName>org.h2.Driver</driverClassName>
|
||||||
|
</datasource>
|
||||||
|
</datasources>
|
||||||
|
<security>
|
||||||
|
<!--
|
||||||
|
KeyStore which will be used for encrypting/decrypting passwords
|
||||||
|
and other sensitive information.
|
||||||
|
-->
|
||||||
|
<keystore name="wso2">
|
||||||
|
<!-- Keystore file location -->
|
||||||
|
<fileName>keystores/products/wso2carbon.jks</fileName>
|
||||||
|
<!-- Keystore type (JKS/PKCS12 etc.) -->
|
||||||
|
<type>JKS</type>
|
||||||
|
<!-- Keystore password -->
|
||||||
|
<password>wso2carbon</password>
|
||||||
|
<!-- Private Key alias -->
|
||||||
|
<keyAlias>wso2carbon</keyAlias>
|
||||||
|
<!-- Private Key password -->
|
||||||
|
<keyPassword>wso2carbon</keyPassword>
|
||||||
|
</keystore>
|
||||||
|
<!--
|
||||||
|
System wide trust-store which is used to maintain the certificates of all
|
||||||
|
the trusted parties.
|
||||||
|
-->
|
||||||
|
<truststore name="wso2">
|
||||||
|
<!-- trust-store file location -->
|
||||||
|
<fileName>client-truststore.jks</fileName>
|
||||||
|
<!-- trust-store type (JKS/PKCS12 etc.) -->
|
||||||
|
<type>JKS</type>
|
||||||
|
<!-- trust-store password -->
|
||||||
|
<password>wso2carbon</password>
|
||||||
|
</truststore>
|
||||||
|
</security>
|
||||||
|
<featureManagement>
|
||||||
|
<p2Repositories>
|
||||||
|
<repository name="localDefault">
|
||||||
|
<repository repo-id="online-repository">https://wso2.org/repo</repository>
|
||||||
|
<repository repo-id="file-repository">file:///home/krishantha/test</repository>
|
||||||
|
</repository>
|
||||||
|
</p2Repositories>
|
||||||
|
</featureManagement>
|
||||||
|
<!--
|
||||||
|
System wide users who to be registered at the test initiation
|
||||||
|
-->
|
||||||
|
<userManagement>
|
||||||
|
<superTenant>
|
||||||
|
<tenant domain="carbon.super" key="superTenant">
|
||||||
|
<admin>
|
||||||
|
<user key="superAdmin">
|
||||||
|
<userName>admin</userName>
|
||||||
|
<password>admin</password>
|
||||||
|
</user>
|
||||||
|
</admin>
|
||||||
|
<users>
|
||||||
|
<user key="user1">
|
||||||
|
<userName>testuser11</userName>
|
||||||
|
<password>testuser11</password>
|
||||||
|
</user>
|
||||||
|
<user key="user2">
|
||||||
|
<userName>testuser21</userName>
|
||||||
|
<password>testuser21</password>
|
||||||
|
</user>
|
||||||
|
</users>
|
||||||
|
</tenant>
|
||||||
|
</superTenant>
|
||||||
|
<tenants>
|
||||||
|
<tenant domain="wso2.com" key="wso2">
|
||||||
|
<admin>
|
||||||
|
<user key="admin">
|
||||||
|
<userName>admin</userName>
|
||||||
|
<password>admin</password>
|
||||||
|
</user>
|
||||||
|
</admin>
|
||||||
|
<users>
|
||||||
|
<user key="user1">
|
||||||
|
<userName>testuser11</userName>
|
||||||
|
<password>testuser11</password>
|
||||||
|
</user>
|
||||||
|
<user key="user2">
|
||||||
|
<userName>testuser21</userName>
|
||||||
|
<password>testuser21</password>
|
||||||
|
</user>
|
||||||
|
</users>
|
||||||
|
</tenant>
|
||||||
|
</tenants>
|
||||||
|
</userManagement>
|
||||||
|
<!--
|
||||||
|
This section will initiate the initial deployment of the platform required by
|
||||||
|
the test suites.
|
||||||
|
-->
|
||||||
|
<platform>
|
||||||
|
<!--
|
||||||
|
cluster instance details to be used to platform test execution
|
||||||
|
-->
|
||||||
|
<productGroup name="IOT" clusteringEnabled="false" default="true">
|
||||||
|
|
||||||
|
<instance name="iot001" type="standalone" nonBlockingTransportEnabled="false">
|
||||||
|
<hosts>
|
||||||
|
<host type="default">localhost</host>
|
||||||
|
</hosts>
|
||||||
|
<ports>
|
||||||
|
<port type="http">9763</port>
|
||||||
|
<!--<port type="https">9446</port>-->
|
||||||
|
<port type="https">9443</port>
|
||||||
|
<!--<port type="https">9445</port>-->
|
||||||
|
</ports>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<!--<property name="webContext">admin</property>-->
|
||||||
|
</properties>
|
||||||
|
</instance>
|
||||||
|
|
||||||
|
</productGroup>
|
||||||
|
</platform>
|
||||||
|
|
||||||
|
<listenerExtensions>
|
||||||
|
<platformExecutionManager>
|
||||||
|
<extentionClasses>
|
||||||
|
<class>
|
||||||
|
<!--<name>org.wso2.iot.integration.extensions.BrokerServerExtension</name>-->
|
||||||
|
<name>org.wso2.iot.integration.extensions.IOTServerExtension</name>
|
||||||
|
<!--<name>org.wso2.iot.integration.extensions.AnalyticsServerExtension</name>-->
|
||||||
|
<name>org.wso2.carbon.integration.common.extensions.usermgt.UserPopulateExtension</name>
|
||||||
|
</class>
|
||||||
|
</extentionClasses>
|
||||||
|
</platformExecutionManager>
|
||||||
|
|
||||||
|
|
||||||
|
<PlatformSuiteManager>
|
||||||
|
<extentionClasses>
|
||||||
|
<!--<className>org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension</className>-->
|
||||||
|
</extentionClasses>
|
||||||
|
</PlatformSuiteManager>
|
||||||
|
|
||||||
|
<PlatformAnnotationTransferManager>
|
||||||
|
<extentionClasses>
|
||||||
|
<!--<className>org.wso2.carbon.automation.extensions.servers.carbonserver.CarbonServerExtension</className>-->
|
||||||
|
</extentionClasses>
|
||||||
|
</PlatformAnnotationTransferManager>
|
||||||
|
|
||||||
|
<PlatformTestManager>
|
||||||
|
<extentionClasses>
|
||||||
|
</extentionClasses>
|
||||||
|
</PlatformTestManager>
|
||||||
|
|
||||||
|
<PlatformReportManager>
|
||||||
|
<extentionClasses>
|
||||||
|
</extentionClasses>
|
||||||
|
</PlatformReportManager>
|
||||||
|
|
||||||
|
</listenerExtensions>
|
||||||
|
</automation>
|
||||||
@ -0,0 +1,565 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified"
|
||||||
|
elementFormDefault="qualified"
|
||||||
|
targetNamespace="automationSchema.xsd">
|
||||||
|
<xs:element name="automation">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="configurations">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>=================================================
|
||||||
|
Parameters =================================================
|
||||||
|
Browser type with used by framework to execute UI test, supported types
|
||||||
|
- chrome|firefox|opera|ie|htmlUnit
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="deploymentDelay">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Change this to edit wait time for test
|
||||||
|
artifact deployment
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="executionEnvironment">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Change this to product|platform/cloud to
|
||||||
|
execute test on specific environment
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:boolean" name="multiTenantMode">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Change this to user/tenant to execute test
|
||||||
|
with user mode or tenant mode
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="coverage">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Change this to true if you want to generate
|
||||||
|
coverage statistics
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="frameworkDashboard">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Change this to true if you want to enable
|
||||||
|
framework dashboard
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="tools">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="selenium">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="remoteDriverUrl">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Change to enable remote webDriver
|
||||||
|
URL of remote webDriver server
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:anyURI">
|
||||||
|
<xs:attribute type="xs:string"
|
||||||
|
name="enable"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="browser">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Type of the browser selenium tests
|
||||||
|
are running"
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string"
|
||||||
|
name="browserType"/>
|
||||||
|
<xs:element name="webdriverPath">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>path to webDriver
|
||||||
|
executable - required only for
|
||||||
|
chrome
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:string"
|
||||||
|
name="enable"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="datasources">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="datasource" maxOccurs="unbounded">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="url"/>
|
||||||
|
<xs:element type="xs:string" name="username"/>
|
||||||
|
<xs:element type="xs:string" name="password"/>
|
||||||
|
<xs:element type="xs:string" name="driverClassName"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="security">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="keystore" maxOccurs="unbounded">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>KeyStore which will be used for
|
||||||
|
encrypting/decrypting passwords
|
||||||
|
and other sensitive information.
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="fileName">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Keystore file location
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="type">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Keystore type (JKS/PKCS12 etc.)
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="password">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Keystore password
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="keyAlias">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Private Key alias
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="keyPassword">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Private Key password
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="truststore" maxOccurs="unbounded">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>System wide trust-store which is used to
|
||||||
|
maintain the certificates of all
|
||||||
|
the trusted parties.
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="fileName">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>trust-store file location
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="type">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>trust-store type (JKS/PKCS12
|
||||||
|
etc.)
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element type="xs:string" name="password">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>trust-store password
|
||||||
|
</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="featureManagement">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="p2Repositories">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="repository">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="repository"
|
||||||
|
maxOccurs="unbounded" minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension base="xs:string">
|
||||||
|
<xs:attribute type="xs:string"
|
||||||
|
name="repo-id"
|
||||||
|
use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="userManagement">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="superTenant">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="tenant">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="admin">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="user">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="userName"/>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="password"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="key"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="users">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="user"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="userName"/>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="password"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="key"
|
||||||
|
use="optional"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="key"
|
||||||
|
use="required"/>
|
||||||
|
<xs:attribute type="xs:string" name="domain"
|
||||||
|
use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="tenants">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="tenant" maxOccurs="unbounded"
|
||||||
|
minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="admin">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="user">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="userName"/>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="password"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="key"
|
||||||
|
use="optional"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="users">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="user"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="userName"/>
|
||||||
|
<xs:element
|
||||||
|
type="xs:string"
|
||||||
|
name="password"/>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="key"
|
||||||
|
use="optional"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="key"
|
||||||
|
use="required"/>
|
||||||
|
<xs:attribute type="xs:string" name="domain"
|
||||||
|
use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="platform">
|
||||||
|
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice>
|
||||||
|
<xs:element name="productGroup" maxOccurs="unbounded" minOccurs="1">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice maxOccurs="unbounded" minOccurs="1">
|
||||||
|
<xs:element name="instance">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="hosts">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="host"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension
|
||||||
|
base="xs:string">
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="type"
|
||||||
|
use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="ports">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="port"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension
|
||||||
|
base="xs:string">
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="type"
|
||||||
|
use="required"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="properties">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="property"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:simpleContent>
|
||||||
|
<xs:extension
|
||||||
|
base="xs:string">
|
||||||
|
<xs:attribute
|
||||||
|
type="xs:string"
|
||||||
|
name="name"
|
||||||
|
use="optional"/>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:simpleContent>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
<xs:attribute type="xs:string" name="name"
|
||||||
|
use="required"/>
|
||||||
|
<xs:attribute type="xs:string" name="type"
|
||||||
|
use="required"/>
|
||||||
|
<xs:attribute type="xs:boolean"
|
||||||
|
name="nonBlockingTransportEnabled"
|
||||||
|
use="required"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:choice>
|
||||||
|
<xs:attribute type="xs:string" name="name"/>
|
||||||
|
<xs:attribute type="xs:string" name="clusteringEnabled"/>
|
||||||
|
<xs:attribute type="xs:boolean" name="default"/>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="listenerExtensions">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="platformExecutionManager">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="extentionClasses">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="className"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PlatformSuiteManager">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="extentionClasses">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="className"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PlatformAnnotationTransferManager">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="extentionClasses">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="className"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PlatformTestManager">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="extentionClasses">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="className"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PlatformReportManager">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="extentionClasses">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element type="xs:string" name="className"
|
||||||
|
maxOccurs="unbounded"
|
||||||
|
minOccurs="0"/>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
-org.wso2.carbon.caching.core.identity.*
|
||||||
|
-org.wso2.carbon.caching.core.permissiontree.*
|
||||||
|
-org.wso2.carbon.caching.infinispan.*
|
||||||
|
-org.wso2.carbon.event.core.internal.delivery.jms.*
|
||||||
|
-org.wso2.carbon.event.core.qpid.*
|
||||||
|
-org.wso2.carbon.registry.synchronization.*
|
||||||
|
-*.stub*
|
||||||
|
-*.stub_
|
||||||
|
-*.stub_4.0.0
|
||||||
|
-*.stub-
|
||||||
|
-org.eclipse.*
|
||||||
|
-*.equinox.*
|
||||||
|
-org.wso2.carbon.user.core.*
|
||||||
|
-samples.*
|
||||||
|
-*.log4j*
|
||||||
|
-*.axis2*
|
||||||
|
-*.ui*
|
||||||
|
-*.tenant*
|
||||||
|
-*.stratos*
|
||||||
|
-*.eventing*
|
||||||
|
-*tests-transports*
|
||||||
|
-org.wso2.carbon.mediation.statistics*
|
||||||
|
-*startup*
|
||||||
@ -0,0 +1,41 @@
|
|||||||
|
org.wso2.carbon.caching.core_
|
||||||
|
org.wso2.carbon.discovery.core_
|
||||||
|
org.wso2.carbon.discovery.proxy_
|
||||||
|
org.wso2.carbon.email.verification_
|
||||||
|
org.wso2.carbon.event.core_
|
||||||
|
org.wso2.carbon.governance.custom.lifecycles.checklist_
|
||||||
|
org.wso2.carbon.governance.gadgets.impactanalysis_
|
||||||
|
org.wso2.carbon.governance.gadgetsource_
|
||||||
|
org.wso2.carbon.governance.gadgets.resourceimpact_
|
||||||
|
org.wso2.carbon.governance.generic_
|
||||||
|
org.wso2.carbon.governance.lcm_
|
||||||
|
org.wso2.carbon.governance.list_
|
||||||
|
org.wso2.carbon.governance.platform.extensions_
|
||||||
|
org.wso2.carbon.governance.registry.eventing_
|
||||||
|
org.wso2.carbon.governance.registry.extensions_
|
||||||
|
org.wso2.carbon.governance.services_
|
||||||
|
org.wso2.carbon.identity.user.profile_
|
||||||
|
org.wso2.carbon.mashup.javascript.hostobjects.registry_
|
||||||
|
org.wso2.carbon.registry.activities_
|
||||||
|
org.wso2.carbon.registry.common_
|
||||||
|
org.wso2.carbon.registry.core_
|
||||||
|
org.wso2.carbon.registry.eventing_
|
||||||
|
org.wso2.carbon.registry.extensions_
|
||||||
|
org.wso2.carbon.registry.handler_
|
||||||
|
org.wso2.carbon.registry.indexing_
|
||||||
|
org.wso2.carbon.registry.info_
|
||||||
|
org.wso2.carbon.registry.profiles_
|
||||||
|
org.wso2.carbon.registry.properties_
|
||||||
|
org.wso2.carbon.registry.relations_
|
||||||
|
org.wso2.carbon.registry.reporting_
|
||||||
|
org.wso2.carbon.registry.resource_
|
||||||
|
org.wso2.carbon.registry.search_
|
||||||
|
org.wso2.carbon.registry.server_
|
||||||
|
org.wso2.carbon.registry.servlet_
|
||||||
|
org.wso2.carbon.registry.task_
|
||||||
|
org.wso2.carbon.registry.uddi_
|
||||||
|
org.wso2.carbon.registry.webdav_
|
||||||
|
org.wso2.carbon.registry.ws.api_
|
||||||
|
org.wso2.carbon.reporting.api_
|
||||||
|
org.wso2.carbon.reporting.core_
|
||||||
|
org.wso2.carbon.reporting.util_
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,45 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
#
|
||||||
|
# WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
# Version 2.0 (the "License"); you may not use this file except
|
||||||
|
# in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing,
|
||||||
|
# software distributed under the License is distributed on an
|
||||||
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
# KIND, either express or implied. See the License for the
|
||||||
|
# specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# This is the log4j configuration file used by WSO2 Carbon
|
||||||
|
#
|
||||||
|
# IMPORTANT : Please do not remove or change the names of any
|
||||||
|
# of the Appenders defined here. The layout pattern & log file
|
||||||
|
# can be changed using the WSO2 Carbon Management Console, and those
|
||||||
|
# settings will override the settings in this file.
|
||||||
|
#
|
||||||
|
|
||||||
|
log4j.rootLogger=INFO, console, Default
|
||||||
|
|
||||||
|
log4j.logger.org.wso2=INFO
|
||||||
|
log4j.logger.org.apache.axis2.deployment.ModuleDeployer=ERROR
|
||||||
|
#Automation file apender
|
||||||
|
log4j.appender.Default=org.apache.log4j.RollingFileAppender
|
||||||
|
log4j.appender.Default.File=logs/automation.log
|
||||||
|
log4j.appender.Default.Append=true
|
||||||
|
log4j.appender.Default.MaxFileSize=10MB
|
||||||
|
log4j.appender.Default.MaxBackupIndex=10
|
||||||
|
log4j.appender.Default.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.Default.layout.ConversionPattern=%d{ISO8601} %-5p [%c] - %m%n
|
||||||
|
|
||||||
|
|
||||||
|
#Automation console apender
|
||||||
|
log4j.appender.console=org.apache.log4j.ConsoleAppender
|
||||||
|
log4j.appender.console.layout=org.apache.log4j.PatternLayout
|
||||||
|
log4j.appender.console.layout.ConversionPattern=%-5p [%c] - %m%n
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"responseCode": "Created",
|
||||||
|
"responseMessage": "Android platform configuration saved successfully."
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"responseCode": "Accepted",
|
||||||
|
"responseMessage": "Android platform configuration has updated successfully."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,42 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"type": "android",
|
||||||
|
"configuration": [
|
||||||
|
{
|
||||||
|
"name": "notifierType",
|
||||||
|
"value": "1",
|
||||||
|
"contentType": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "notifierFrequency",
|
||||||
|
"value": "100000",
|
||||||
|
"contentType": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "androidEula",
|
||||||
|
"value": "This End User License Agreement.",
|
||||||
|
"contentType": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"type": "android",
|
||||||
|
"configuration": [
|
||||||
|
{
|
||||||
|
"name": "notifierType",
|
||||||
|
"value": "1",
|
||||||
|
"contentType": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "notifierFrequency",
|
||||||
|
"value": "500000",
|
||||||
|
"contentType": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "androidEula",
|
||||||
|
"value": "This End User License Agreement is Eula.",
|
||||||
|
"contentType": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"PUT": {
|
||||||
|
"responseMessage": "Device information has modified successfully."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,186 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"id": 101234,
|
||||||
|
"name": "androiddevice1234",
|
||||||
|
"type": "android",
|
||||||
|
"description": "this is an android device",
|
||||||
|
"deviceIdentifier": "d24f870f390352a41234",
|
||||||
|
"enrolmentInfo": {
|
||||||
|
"id": 101234,
|
||||||
|
"device": {
|
||||||
|
},
|
||||||
|
"dateOfEnrolment": 0,
|
||||||
|
"dateOfLastUpdate": 0,
|
||||||
|
"ownership": "BYOD",
|
||||||
|
"status": "CREATED",
|
||||||
|
"owner": "admin"
|
||||||
|
},
|
||||||
|
"features": [
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"code": "aaaa1111",
|
||||||
|
"name": "newfeature1",
|
||||||
|
"description": "this is the new feature 1",
|
||||||
|
"deviceType": "android",
|
||||||
|
"metadataEntries": [
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"value": {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"name": "property1",
|
||||||
|
"value": "value1"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"deviceInfo": {
|
||||||
|
"deviceModel": "S8",
|
||||||
|
"vendor": "SAMSUNG",
|
||||||
|
"osVersion": "5.1",
|
||||||
|
"batteryLevel": 1,
|
||||||
|
"internalTotalMemory": 32,
|
||||||
|
"internalAvailableMemory": 24,
|
||||||
|
"externalTotalMemory": 64,
|
||||||
|
"externalAvailableMemory": 60,
|
||||||
|
"operator": "dialog",
|
||||||
|
"connectionType": "GSM",
|
||||||
|
"mobileSignalStrength": 1,
|
||||||
|
"ssid": "picassowifi",
|
||||||
|
"cpuUsage": 0,
|
||||||
|
"totalRAMMemory": 2,
|
||||||
|
"availableRAMMemory": 1,
|
||||||
|
"pluggedIn": false,
|
||||||
|
"location": {
|
||||||
|
"deviceId": 0,
|
||||||
|
"deviceIdentifier": {
|
||||||
|
"id": "string",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0,
|
||||||
|
"street1": "string",
|
||||||
|
"street2": "string",
|
||||||
|
"city": "string",
|
||||||
|
"state": "string",
|
||||||
|
"zip": "string",
|
||||||
|
"country": "string"
|
||||||
|
},
|
||||||
|
"deviceDetailsMap": {
|
||||||
|
},
|
||||||
|
"imei": "string",
|
||||||
|
"imsi": "string"
|
||||||
|
},
|
||||||
|
"applications": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"platform": "string",
|
||||||
|
"category": "string",
|
||||||
|
"name": "string",
|
||||||
|
"locationUrl": "string",
|
||||||
|
"imageUrl": "string",
|
||||||
|
"version": "string",
|
||||||
|
"type": "string",
|
||||||
|
"appProperties": {
|
||||||
|
},
|
||||||
|
"applicationIdentifier": "string",
|
||||||
|
"memoryUsage": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"id": 101234,
|
||||||
|
"name": "androiddevice1234",
|
||||||
|
"type": "android",
|
||||||
|
"description": "this is an android device",
|
||||||
|
"deviceIdentifier": "d24f870f390352a41234",
|
||||||
|
"enrolmentInfo": {
|
||||||
|
"id": 101234,
|
||||||
|
"device": {
|
||||||
|
},
|
||||||
|
"dateOfEnrolment": 0,
|
||||||
|
"dateOfLastUpdate": 0,
|
||||||
|
"ownership": "BYOD",
|
||||||
|
"status": "CREATED",
|
||||||
|
"owner": "admin"
|
||||||
|
},
|
||||||
|
"features": [
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"code": "aaaa1111",
|
||||||
|
"name": "newfeature2",
|
||||||
|
"description": "this is the new feature 2",
|
||||||
|
"deviceType": "android",
|
||||||
|
"metadataEntries": [
|
||||||
|
{
|
||||||
|
"id": 10,
|
||||||
|
"value": {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"name": "property2",
|
||||||
|
"value": "value2"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"deviceInfo": {
|
||||||
|
"deviceModel": "S8",
|
||||||
|
"vendor": "SAMSUNG",
|
||||||
|
"osVersion": "5.1",
|
||||||
|
"batteryLevel": 1,
|
||||||
|
"internalTotalMemory": 32,
|
||||||
|
"internalAvailableMemory": 24,
|
||||||
|
"externalTotalMemory": 64,
|
||||||
|
"externalAvailableMemory": 60,
|
||||||
|
"operator": "dialog",
|
||||||
|
"connectionType": "GSM",
|
||||||
|
"mobileSignalStrength": 1,
|
||||||
|
"ssid": "picassowifi",
|
||||||
|
"cpuUsage": 0,
|
||||||
|
"totalRAMMemory": 2,
|
||||||
|
"availableRAMMemory": 1,
|
||||||
|
"pluggedIn": false,
|
||||||
|
"location": {
|
||||||
|
"deviceId": 0,
|
||||||
|
"deviceIdentifier": {
|
||||||
|
"id": "string",
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"latitude": 0,
|
||||||
|
"longitude": 0,
|
||||||
|
"street1": "string",
|
||||||
|
"street2": "string",
|
||||||
|
"city": "string",
|
||||||
|
"state": "string",
|
||||||
|
"zip": "string",
|
||||||
|
"country": "string"
|
||||||
|
},
|
||||||
|
"deviceDetailsMap": {
|
||||||
|
},
|
||||||
|
"imei": "string",
|
||||||
|
"imsi": "string"
|
||||||
|
},
|
||||||
|
"applications": [
|
||||||
|
{
|
||||||
|
"id": 0,
|
||||||
|
"platform": "string",
|
||||||
|
"category": "string",
|
||||||
|
"name": "string",
|
||||||
|
"locationUrl": "string",
|
||||||
|
"imageUrl": "string",
|
||||||
|
"version": "string",
|
||||||
|
"type": "string",
|
||||||
|
"appProperties": {
|
||||||
|
},
|
||||||
|
"applicationIdentifier": "string",
|
||||||
|
"memoryUsage": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"responseCode": "OK",
|
||||||
|
"responseMessage": "Android device, which carries the id \u0027d24f870f390352a41234\u0027 has successfully been enrolled"
|
||||||
|
},
|
||||||
|
"GET": {
|
||||||
|
"responseCode": "OK",
|
||||||
|
"responseMessage": "Android device that carries the id \u0027d24f870f390352a41234\u0027 is enrolled"
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"responseCode": "Accepted",
|
||||||
|
"responseMessage": "Enrollment of Android device that carries the id \u0027d24f870f390352a41234\u0027 has successfully updated"
|
||||||
|
},
|
||||||
|
"DELETE" : {
|
||||||
|
"responseCode":"OK",
|
||||||
|
"responseMessage":"Android device that carries id \u0027d24f870f390352a41234\u0027 has successfully dis-enrolled"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,68 @@
|
|||||||
|
{
|
||||||
|
"camera": {
|
||||||
|
"operation": {
|
||||||
|
"enabled": false
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"wipe_data": {
|
||||||
|
"operation": {
|
||||||
|
"pin": "1234"
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"install_apps": {
|
||||||
|
"operation": {
|
||||||
|
"appIdentifier": "package_name",
|
||||||
|
"type": "enterprise/public/webapp",
|
||||||
|
"url": "https://www.youtube.com",
|
||||||
|
"name": "youtube"
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"notification": {
|
||||||
|
"operation": {
|
||||||
|
"message": "message"
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"wifi": {
|
||||||
|
"operation": {
|
||||||
|
"ssid": "ssid",
|
||||||
|
"password": "password"
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"encrypt": {
|
||||||
|
"operation": {
|
||||||
|
"encrypted": false
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"change_lock": {
|
||||||
|
"operation": {
|
||||||
|
"lockCode": "lock_code"
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"password_policy": {
|
||||||
|
"operation": {
|
||||||
|
"maxFailedAttempts": 1,
|
||||||
|
"minLength": 5,
|
||||||
|
"pinHistory": 1,
|
||||||
|
"minComplexChars": 4,
|
||||||
|
"maxPINAgeInDays": 1,
|
||||||
|
"requireAlphanumeric": true,
|
||||||
|
"allowSimple": true
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
},
|
||||||
|
"web_clip": {
|
||||||
|
"operation": {
|
||||||
|
"identity": "identity",
|
||||||
|
"title": "title",
|
||||||
|
"type": "install"
|
||||||
|
},
|
||||||
|
"deviceIDs": []
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"getEffectivePolicy": {
|
||||||
|
"responseCode": "No Content",
|
||||||
|
"responseMessage": "No effective policy found"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"configuration": [
|
||||||
|
{
|
||||||
|
"name": "notifierFrequency",
|
||||||
|
"value": "5",
|
||||||
|
"contentType": "text"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"statusCode": 201,
|
||||||
|
"messageFromServer": "Tenant configuration saved successfully."
|
||||||
|
},
|
||||||
|
"GET": {
|
||||||
|
"configuration": [
|
||||||
|
{
|
||||||
|
"name": "notifierFrequency",
|
||||||
|
"contentType": "text",
|
||||||
|
"value": "5"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"notificationId": 1,
|
||||||
|
"deviceIdentifier": {
|
||||||
|
"id": "1234",
|
||||||
|
"type": "android"
|
||||||
|
},
|
||||||
|
"description": "test notification",
|
||||||
|
"operationId": 1,
|
||||||
|
"status": "NEW"
|
||||||
|
}
|
||||||
|
]
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"GET": {
|
||||||
|
"statusCode": 200,
|
||||||
|
"messageFromServer": "License for \u0027android\u0027 was retrieved successfully",
|
||||||
|
"responseContent": "This End User License Agreement is Eula."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"id": 1,
|
||||||
|
"name": "android"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 2,
|
||||||
|
"name": "windows"
|
||||||
|
}
|
||||||
|
]
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"description": "test notification",
|
||||||
|
"operationId": 1,
|
||||||
|
"deviceIdentifier": {
|
||||||
|
"id": "1234",
|
||||||
|
"type": "android"
|
||||||
|
},
|
||||||
|
"status": "NEW"
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"description": "test notification changed",
|
||||||
|
"operationId": 1,
|
||||||
|
"deviceIdentifier": {
|
||||||
|
"id": "1234",
|
||||||
|
"type": "android"
|
||||||
|
},
|
||||||
|
"status": "NEW"
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"statusCode": 201,
|
||||||
|
"messageFromServer": "Notification has added successfully."
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"statusCode": 202,
|
||||||
|
"messageFromServer": "Notification status updated successfully."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"default perm:admin-groups:count perm:admin-groups:view perm:admin-users:view perm:admin:certificates:add perm:admin:certificates:delete perm:admin:certificates:details perm:admin:certificates:verify perm:admin:certificates:view perm:admin:devices:view perm:android:blacklist-applications perm:android:change-lock-code perm:android:clear-password perm:android:configure-vpn perm:android:configure-wifi perm:android:control-camera perm:android:disenroll perm:android:encrypt-storage perm:android:enroll perm:android:enterprise-wipe perm:android:info perm:android:install-application perm:android:location perm:android:lock-devices perm:android:logcat perm:android:manage-configuration perm:android:mute perm:android:reboot perm:android:ring perm:android:send-notification perm:android:set-password-policy perm:android:set-webclip perm:android:uninstall-application perm:android:unlock-devices perm:android:update-application perm:android:upgrade-firmware perm:android:view-configuration perm:android:wipe perm:applications:install perm:applications:uninstall perm:dashboard:by-groups perm:dashboard:count-overview perm:dashboard:details perm:dashboard:device-counts perm:dashboard:feature-non-compliant perm:dashboard:filtered-count perm:dashboard:non-compliant perm:dashboard:non-compliant-count perm:dashboard:vulnerabilities perm:device-types:features perm:device-types:types perm:devices:applications perm:devices:compliance-data perm:devices:delete perm:devices:details perm:devices:effective-policy perm:devices:features perm:devices:operations perm:devices:search perm:devices:update perm:devices:view perm:get-activity perm:groups:add perm:groups:assign perm:groups:count perm:groups:device perm:groups:devices perm:groups:devices-add perm:groups:devices-count perm:groups:devices-remove perm:groups:groups perm:groups:groups-view perm:groups:remove perm:groups:roles perm:groups:share perm:groups:update perm:manage-configuration perm:notifications:mark-checked perm:notifications:view perm:policies:activate perm:policies:changes perm:policies:deactivate perm:policies:get-details perm:policies:get-policy-details perm:policies:manage perm:policies:priorities perm:policies:remove perm:policies:update perm:roles:add perm:roles:add-users perm:roles:create-combined-role perm:roles:delete perm:roles:details perm:roles:permissions perm:roles:update perm:roles:view perm:users:add perm:users:count perm:users:credentials perm:users:delete perm:users:details perm:users:is-exist perm:users:roles perm:users:search perm:users:send-invitation perm:users:update perm:users:user-details perm:view-configuration"
|
||||||
|
}
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"policyName": "Camera",
|
||||||
|
"description": "Optional",
|
||||||
|
"compliance": "enforce",
|
||||||
|
"ownershipType": "ANY",
|
||||||
|
"profile": {
|
||||||
|
"profileName": "Camera",
|
||||||
|
"deviceType": {
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
"profileFeaturesList": [
|
||||||
|
{
|
||||||
|
"featureCode": "CAMERA",
|
||||||
|
"deviceTypeId": 1,
|
||||||
|
"content": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"users": [],
|
||||||
|
"roles": []
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"policyName": "Camera",
|
||||||
|
"description": "Optional",
|
||||||
|
"compliance": "enforce",
|
||||||
|
"ownershipType": "ANY",
|
||||||
|
"profile": {
|
||||||
|
"profileName": "Camera",
|
||||||
|
"deviceType": {
|
||||||
|
"id": 1
|
||||||
|
},
|
||||||
|
"profileFeaturesList": [
|
||||||
|
{
|
||||||
|
"featureCode": "CAMERA",
|
||||||
|
"deviceTypeId": 1,
|
||||||
|
"content": {
|
||||||
|
"enabled": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"featureCode": "ENCRYPT_STORAGE",
|
||||||
|
"deviceTypeId": 1,
|
||||||
|
"content": {
|
||||||
|
"encrypted": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"roles": [
|
||||||
|
"ANY"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"statusCode": 201,
|
||||||
|
"messageFromServer": "Policy has been added successfully."
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"statusCode": 201,
|
||||||
|
"messageFromServer": "Policy has been updated successfully."
|
||||||
|
},
|
||||||
|
"DELETE": {
|
||||||
|
"statusCode": 200,
|
||||||
|
"messageFromServer": "Policies have been successfully deleted."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"roleName": "administration",
|
||||||
|
"users": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"permissions": [
|
||||||
|
"permission/admin/device-mgt/android/operations/disenroll",
|
||||||
|
"permission/admin/device-mgt/android/operations/notification",
|
||||||
|
"/permission/admin/device-mgt/windows/operation/lock"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"username": "PRIMARY/username123",
|
||||||
|
"firstname": "userfirstname",
|
||||||
|
"lastname": "userlastname",
|
||||||
|
"emailAddress": "user123@gmail.com",
|
||||||
|
"roles": [
|
||||||
|
"admin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"username": "username123",
|
||||||
|
"firstname": "userfname",
|
||||||
|
"lastname": "userlname",
|
||||||
|
"emailAddress": "user1234@gmail.com",
|
||||||
|
"password": "username",
|
||||||
|
"roles": [
|
||||||
|
"admin",
|
||||||
|
"Internal/everyone"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
"POST": {
|
||||||
|
"statusCode": 201,
|
||||||
|
"messageFromServer": "User by username: PRIMARY/username123 was successfully added."
|
||||||
|
},
|
||||||
|
"PUT": {
|
||||||
|
"statusCode": 201,
|
||||||
|
"messageFromServer": "User by username: username123 was successfully updated."
|
||||||
|
},
|
||||||
|
"GET": {
|
||||||
|
"statusCode": 200,
|
||||||
|
"messageFromServer": "User information was retrieved successfully.",
|
||||||
|
"responseContent": {
|
||||||
|
"username": "username123",
|
||||||
|
"firstname": "userfname",
|
||||||
|
"lastname": "userlname",
|
||||||
|
"emailAddress": "user1234@gmail.com"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"DELETE": {
|
||||||
|
"statusCode": 200,
|
||||||
|
"messageFromServer": "User by username: username123 was successfully removed."
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||||
|
|
||||||
|
<suite name="mdm-suite">
|
||||||
|
|
||||||
|
</suite>
|
||||||
@ -0,0 +1,111 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||||
|
|
||||||
|
<suite name="iot-suite-initializer">
|
||||||
|
<parameter name="useDefaultListeners" value="false"/>
|
||||||
|
<listeners>
|
||||||
|
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestExecutionListener"/>
|
||||||
|
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestManagerListener"/>
|
||||||
|
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestReportListener"/>
|
||||||
|
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestSuiteListener"/>
|
||||||
|
<listener class-name="org.wso2.carbon.automation.engine.testlisteners.TestTransformerListener"/>
|
||||||
|
</listeners>
|
||||||
|
|
||||||
|
<test name="mobile-device-mgt-no-devices" preserve-order="true" parallel="false">
|
||||||
|
<classes>
|
||||||
|
<class name="org.wso2.iot.integration.mobileDevice.MobileDeviceManagementWithNoDevices"/>
|
||||||
|
</classes>
|
||||||
|
</test>
|
||||||
|
<test name="android-enrollment" preserve-order="true" parallel="false">
|
||||||
|
<classes>
|
||||||
|
<class name="org.wso2.iot.integration.device.enrollment.AndroidEnrollment"/>
|
||||||
|
</classes>
|
||||||
|
</test>
|
||||||
|
<test name="android-operation" preserve-order="false" parallel="true">
|
||||||
|
<classes>
|
||||||
|
<class name="org.wso2.iot.integration.device.operation.AndroidOperation"/>
|
||||||
|
</classes>
|
||||||
|
</test>
|
||||||
|
<!--<test name="windows-enrollment" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.device.enrollment.WindowsEnrollment"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="android-device-mgt" preserve-order="false" parallel="true">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.device.mgt.AndroidDeviceManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="android-configuration" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.device.configuration.AndroidConfigurationManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="android-policy" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.device.policy.AndroidPolicy"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="operation-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.operation.OperationManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="mobile-device-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.mobileDevice.MobileDeviceManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="user-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.user.UserManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="role-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.role.RoleManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="policy-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.policy.PolicyManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="feature-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.feature.FeatureManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="license-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.license.LicenseManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="configuration-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.configuration.ConfigurationManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
<!--<test name="notification-mgt" preserve-order="true" parallel="false">-->
|
||||||
|
<!--<classes>-->
|
||||||
|
<!--<class name="org.wso2.iot.integration.notification.NotificationManagement"/>-->
|
||||||
|
<!--</classes>-->
|
||||||
|
<!--</test>-->
|
||||||
|
</suite>
|
||||||
Binary file not shown.
@ -0,0 +1,42 @@
|
|||||||
|
<!--
|
||||||
|
~ Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<s:Envelope xmlns:a="http://www.w3.org/2005/08/addressing"
|
||||||
|
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
|
||||||
|
<s:Header>
|
||||||
|
<a:Action s:mustUnderstand="1">
|
||||||
|
http://schemas.microsoft.com/windows/management/2012/01/enrollment/IDiscoveryService/Discover
|
||||||
|
</a:Action>
|
||||||
|
<a:MessageID>urn:uuid:748132ec-a575-4329-b01b-6171a9cf8478</a:MessageID>
|
||||||
|
<a:ReplyTo>
|
||||||
|
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
|
||||||
|
</a:ReplyTo>
|
||||||
|
<a:To s:mustUnderstand="1">
|
||||||
|
https://EnterpriseEnrollment.wso2.com:443/EnrollmentServer/Discovery.svc
|
||||||
|
</a:To>
|
||||||
|
</s:Header>
|
||||||
|
<s:Body>
|
||||||
|
<Discover xmlns="http://schemas.microsoft.com/windows/management/2012/01/enrollment">
|
||||||
|
<request xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<EmailAddress>admin@wso2.com</EmailAddress>
|
||||||
|
<RequestVersion>2.0</RequestVersion>
|
||||||
|
<DeviceType>WindowsPhone</DeviceType>
|
||||||
|
</request>
|
||||||
|
</Discover>
|
||||||
|
</s:Body>
|
||||||
|
</s:Envelope>
|
||||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user