From a21d6f5678a7311065ccc0c5c2bae0fb9082a722 Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Tue, 21 Mar 2017 14:25:39 +0530 Subject: [PATCH 1/8] kernel 5.2.0 dependecy upgrade --- pom.xml | 64 ++++++++++++--- product/carbon.product | 4 +- product/pom.xml | 82 +++++++++++++++++-- .../pom.xml | 2 +- .../sample/simpleauth/bundle/CaasUser.java | 6 +- 5 files changed, 133 insertions(+), 25 deletions(-) diff --git a/pom.xml b/pom.xml index d38bb847..82a13b0e 100644 --- a/pom.xml +++ b/pom.xml @@ -51,9 +51,10 @@ features/org.wso2.carbon.uuf.renderablecreator.html.feature features/org.wso2.carbon.uuf.httpconnector.msf4j.feature samples + product tests - product + @@ -190,7 +191,7 @@ org.wso2.carbon.security.userstore - org.wso2.carbon.security.userstore.jdbc + org.wso2.carbon.identity.mgt.store.connector.jdbc ${carbon.security.userstore.jdbc.version} @@ -491,6 +492,17 @@ ${disruptor.orbit.version} test + + org.wso2.carbon + org.wso2.carbon.container + ${carbon.kernel.version} + test + + + org.wso2.carbon.identity.mgt + org.wso2.carbon.identity.mgt + ${org.wso2.carbon.identity.mgt.version} + @@ -557,11 +569,11 @@ 1.0.0-SNAPSHOT - 5.1.0 + 5.2.0-m3 [5.0,6) - 5.0.0 + 5.1.0 1.0.0 - 1.0.0 + 1.1.3 1.0.0 [1.0.0, 2.0.0) [0.0.0, 1.0.0) @@ -592,10 +604,10 @@ 1.0.0 - 2.0.0 - 1.0.11 - [1.0.11, 2.0.0) - 2.1.4 + 2.0.1 + 2.3.1 + [2.0.0, 3.0.0) + 4.3.0-m1 4.0.3.wso2v1 @@ -603,22 +615,24 @@ 4.5.1-1 - 2.1.0 + 2.3.0-m1 [2.1.0, 3.0.0) - 1.0.0-m2 - 1.0.0-m2 + 1.0.2-m1 + 0.1.3 1.0.0-m11 - 2.0.1 + 3.0.0 2.5.0 6.9.10 2.4.2 + 0.1.38 + 1.8.4 1.8.4 @@ -736,5 +750,29 @@ false + + wso2-snapshot + WSO2 Snapshot Repository + https://maven.wso2.org/nexus/content/repositories/orgwso2carbonsecuritycaas-1009/ + + true + daily + + + true + + + + wso2-msf4j + WSO2 Snapshot Repository + https://maven.wso2.org/nexus/content/repositories/orgwso2msf4j-1014/ + + true + daily + + + true + + diff --git a/product/carbon.product b/product/carbon.product index b68bda71..b91c4ccc 100644 --- a/product/carbon.product +++ b/product/carbon.product @@ -2,7 +2,7 @@ +version="5.2.0.m3" useFeatures="true" includeLaunchers="true"> @@ -14,7 +14,7 @@ version="5.1.0" useFeatures="true" includeLaunchers="true"> - + diff --git a/product/pom.xml b/product/pom.xml index 8946c7c6..ee83a27a 100644 --- a/product/pom.xml +++ b/product/pom.xml @@ -121,6 +121,12 @@ ${carbon.transport.http.netty.version} zip + + org.wso2.carbon.transport + org.wso2.carbon.connector.framework.feature + ${carbon.transport.http.netty.version} + zip + org.wso2.carbon.metrics org.wso2.carbon.metrics.core.feature @@ -170,7 +176,7 @@ org.wso2.carbon.security.userstore - org.wso2.carbon.security.userstore.jdbc.feature + org.wso2.carbon.identity.mgt.store.connector.jdbc.feature ${carbon.security.userstore.jdbc.version} zip @@ -180,6 +186,30 @@ ${carbon.security.caas.version} zip + + org.wso2.carbon.identity.mgt + org.wso2.carbon.identity.mgt.feature + ${org.wso2.carbon.identity.mgt.version} + zip + + + org.wso2.carbon.identity.commons + org.wso2.carbon.identity.common.feature + 0.1.24 + zip + + + org.wso2.carbon.lcm + org.wso2.carbon.lcm.core.feature + 1.0.3 + zip + + + org.wso2.carbon.lcm + org.wso2.carbon.lcm.sql.feature + 1.0.3 + zip + @@ -276,6 +306,10 @@ org.wso2.carbon.transport.http.netty.feature ${carbon.transport.http.netty.version} + + org.wso2.carbon.connector.framework.feature + ${carbon.transport.http.netty.version} + org.wso2.carbon.uuf.core.feature ${carbon.uuf.version} @@ -313,7 +347,7 @@ ${carbon.datasources.version} - org.wso2.carbon.security.userstore.jdbc.feature + org.wso2.carbon.identity.mgt.store.connector.jdbc.feature ${carbon.security.userstore.jdbc.version} @@ -329,6 +363,22 @@ org.wso2.carbon.uuf.sample.features-app.feature ${carbon.uuf.version} + + org.wso2.carbon.identity.mgt.feature + ${org.wso2.carbon.identity.mgt.version} + + + org.wso2.carbon.identity.common.feature + 0.1.24 + + + org.wso2.carbon.lcm.core.feature + 1.0.3 + + + org.wso2.carbon.lcm.sql.feature + 1.0.3 + @@ -348,7 +398,7 @@ file:${basedir}/target/p2-repo - + + + materialize-product + package + + generate-runtime + + + ${basedir}/carbon.product + file:${basedir}/target/p2-repo + file:${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/wso2 + + default + feature-installation @@ -371,12 +435,14 @@ install - profiles/default + default + file:${basedir}/target/p2-repo ${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/osgi - true + + true org.wso2.carbon.kernel.feature.group @@ -452,13 +518,17 @@ ${carbon.uuf.version} - org.wso2.carbon.security.userstore.jdbc.feature.group + org.wso2.carbon.identity.mgt.store.connector.jdbc.feature ${carbon.security.userstore.jdbc.version} org.wso2.carbon.security.caas.feature.group ${carbon.security.caas.version} + + org.wso2.carbon.connector.framework.feature + ${carbon.transport.http.netty.version} + diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml index 5850f53e..e38e2869 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml @@ -44,7 +44,7 @@ org.wso2.carbon.security.userstore - org.wso2.carbon.security.userstore.jdbc + org.wso2.carbon.identity.mgt.store.connector.jdbc org.wso2.carbon.uuf diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/CaasUser.java b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/CaasUser.java index 02743e3b..b6640b53 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/CaasUser.java +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/CaasUser.java @@ -17,7 +17,7 @@ package org.wso2.carbon.uuf.sample.simpleauth.bundle; import org.wso2.carbon.security.caas.api.CarbonPrincipal; -import org.wso2.carbon.security.caas.user.core.bean.Permission; +import org.wso2.carbon.security.caas.api.CarbonPermission; import org.wso2.carbon.uuf.spi.auth.User; public class CaasUser implements User { @@ -37,9 +37,9 @@ public String getUsername() { @Override public boolean hasPermission(String resourceUri, String action) { - Permission permission = new Permission(resourceUri, action); + CarbonPermission permission = new CarbonPermission(resourceUri, action); try { - return principal.getUser().isAuthorized(permission); + return principal.getUser().isUserAuthorized(permission); //TODO catch generic carbon-security exception once confirmed by the identity team } catch (Exception e) { } From 0b54581e8fc6958005736b889a4b436a448f4e0e Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Fri, 24 Mar 2017 11:23:58 +0530 Subject: [PATCH 2/8] kernel upgrade --- components/uuf-core/pom.xml | 2 +- components/uuf-renderablecreator-hbs/pom.xml | 2 +- .../org.wso2.carbon.uuf.core.feature/pom.xml | 8 ++- pom.xml | 25 +++++--- .../carbon-home/conf/osgi/launch.properties | 2 +- .../conf/transports/netty-transports.yml | 36 +++-------- product/pom.xml | 60 +++++++++---------- product/src/assembly/bin.xml | 2 +- .../pom.xml | 10 ++-- .../simpleauth/bundle/SimpleAuthHandler.java | 8 ++- tests/osgi-tests/pom.xml | 2 +- 11 files changed, 75 insertions(+), 82 deletions(-) diff --git a/components/uuf-core/pom.xml b/components/uuf-core/pom.xml index 95035712..b72fb14a 100644 --- a/components/uuf-core/pom.xml +++ b/components/uuf-core/pom.xml @@ -53,7 +53,7 @@ - org.wso2.orbit.org.yaml + org.yaml snakeyaml diff --git a/components/uuf-renderablecreator-hbs/pom.xml b/components/uuf-renderablecreator-hbs/pom.xml index d7c54636..561a265d 100644 --- a/components/uuf-renderablecreator-hbs/pom.xml +++ b/components/uuf-renderablecreator-hbs/pom.xml @@ -45,7 +45,7 @@ handlebars - org.wso2.orbit.org.yaml + org.yaml snakeyaml diff --git a/features/org.wso2.carbon.uuf.core.feature/pom.xml b/features/org.wso2.carbon.uuf.core.feature/pom.xml index f8ed6559..c7dc40c7 100644 --- a/features/org.wso2.carbon.uuf.core.feature/pom.xml +++ b/features/org.wso2.carbon.uuf.core.feature/pom.xml @@ -38,6 +38,10 @@ org.wso2.carbon.uuf.core ${carbon.uuf.version} + + org.yaml + snakeyaml + @@ -70,8 +74,8 @@ ${carbon.uuf.version} - snakeyaml - ${orbit.org.yaml.version} + org.yaml.snakeyaml + ${org.snakeyaml.version} org.objectweb.asm diff --git a/pom.xml b/pom.xml index 82a13b0e..9244276c 100644 --- a/pom.xml +++ b/pom.xml @@ -131,10 +131,16 @@ gson ${gson.version} - + + + org.yaml + snakeyaml + ${org.snakeyaml.version} org.ow2.asm @@ -189,11 +195,11 @@ org.wso2.carbon.security.caas ${carbon.security.caas.version} - + @@ -596,8 +602,8 @@ [18.0,19.0) 2.6.2 [2.6.2,3) - 1.16.0.wso2v1 - [1.16.0, 1.17.0) + 1.17 + [1.17.0,2.0.0) 5.1 [5.1, 6.0) [2.0.0, 3.0.0) @@ -607,7 +613,7 @@ 2.0.1 2.3.1 [2.0.0, 3.0.0) - 4.3.0-m1 + 4.3.0-SNAPSHOT 4.0.3.wso2v1 @@ -615,15 +621,16 @@ 4.5.1-1 - 2.3.0-m1 + 2.3.0-SNAPSHOT [2.1.0, 3.0.0) 1.0.2-m1 - 0.1.3 + [1.0.0, 2.0.0) + - 1.0.0-m11 + 1.0.0-SNAPSHOT 3.0.0 2.5.0 diff --git a/product/carbon-home/conf/osgi/launch.properties b/product/carbon-home/conf/osgi/launch.properties index 4c39502c..3a7f94a9 100644 --- a/product/carbon-home/conf/osgi/launch.properties +++ b/product/carbon-home/conf/osgi/launch.properties @@ -24,4 +24,4 @@ osgi.clean=true carbon.server.listeners=org.wso2.carbon.launcher.extensions.DropinsBundleDeployer org.osgi.framework.system.packages.extra=sun.misc -org.osgi.framework.bootdelegation=sun.misc \ No newline at end of file +org.osgi.framework.bootdelegation=sun.misc,org.wso2.carbon.security.caas.boot \ No newline at end of file diff --git a/product/carbon-home/conf/transports/netty-transports.yml b/product/carbon-home/conf/transports/netty-transports.yml index 5788d515..8fba63f3 100644 --- a/product/carbon-home/conf/transports/netty-transports.yml +++ b/product/carbon-home/conf/transports/netty-transports.yml @@ -13,35 +13,13 @@ # See the License for the specific language governing permissions and # limitations under the License. ################################################################################ -listenerConfigurations: +transportProperties: - - id: "netty-gw" - host: "0.0.0.0" - port: 9090 - bossThreadPoolSize: 4 - workerThreadPoolSize: 8 - enableDisruptor: false - parameters: - - - name: "executor.workerpool.size" - value: 20 - + name: "latency.metrics.enabled" + value: true - - id: "netty-gw-https" - host: "0.0.0.0" - port: 9292 - bossThreadPoolSize: 4 - workerThreadPoolSize: 8 - enableDisruptor: false - scheme: "https" - keyStoreFile: "resources/security/wso2carbon.jks" - keyStorePass: "wso2carbon" - certPass: "wso2carbon" - parameters: - - - name: "executor.workerpool.size" - value: 20 - -senderConfigurations: + name: "server.bootstrap.boss.group.size" + value: 4 - - id: "netty-gw" \ No newline at end of file + name: "server.bootstrap.worker.group.size" + value: 8 diff --git a/product/pom.xml b/product/pom.xml index ee83a27a..10bcf77d 100644 --- a/product/pom.xml +++ b/product/pom.xml @@ -174,19 +174,19 @@ zip - + org.wso2.carbon.security.caas org.wso2.carbon.security.caas.feature ${carbon.security.caas.version} zip - + @@ -346,10 +346,10 @@ org.wso2.carbon.datasource.core.feature ${carbon.datasources.version} - + org.wso2.carbon.security.caas.feature ${carbon.security.caas.version} @@ -363,7 +363,7 @@ org.wso2.carbon.uuf.sample.features-app.feature ${carbon.uuf.version} - + @@ -439,7 +439,7 @@ file:${basedir}/target/p2-repo - ${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/osgi + ${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/wso2 true @@ -449,80 +449,80 @@ ${carbon.kernel.version} - org.wso2.carbon.deployment.engine.feature.group + org.wso2.carbon.deployment.engine.feature ${carbon.deployment.version} - org.wso2.carbon.deployment.notifier.feature.group + org.wso2.carbon.deployment.notifier.feature ${carbon.deployment.version} - org.wso2.carbon.caching.feature.group + org.wso2.carbon.caching.feature ${carbon.cache.version} - org.wso2.msf4j.feature.group + org.wso2.msf4j.feature ${msf4j.version} - org.wso2.carbon.messaging.feature.group + org.wso2.carbon.messaging.feature ${carbon.messaging.version} - org.wso2.carbon.transport.http.netty.feature.group + org.wso2.carbon.transport.http.netty.feature ${carbon.transport.http.netty.version} - org.wso2.carbon.uuf.core.feature.group + org.wso2.carbon.uuf.core.feature ${carbon.uuf.version} - org.wso2.carbon.uuf.renderablecreator.hbs.feature.group + org.wso2.carbon.uuf.renderablecreator.hbs.feature ${carbon.uuf.version} - org.wso2.carbon.uuf.renderablecreator.html.feature.group + org.wso2.carbon.uuf.renderablecreator.html.feature ${carbon.uuf.version} - org.wso2.carbon.uuf.httpconnector.msf4j.feature.group + org.wso2.carbon.uuf.httpconnector.msf4j.feature ${carbon.uuf.version} - org.wso2.carbon.jndi.feature.group + org.wso2.carbon.jndi.feature ${carbon.jndi.version} - org.wso2.carbon.metrics.core.feature.group + org.wso2.carbon.metrics.core.feature ${carbon.metrics.version} - org.wso2.carbon.metrics.jdbc.core.feature.group + org.wso2.carbon.metrics.jdbc.core.feature ${carbon.metrics.version} - org.wso2.carbon.metrics.das.core.feature.group + org.wso2.carbon.metrics.das.core.feature ${carbon.metrics.version} - org.wso2.carbon.datasource.core.feature.group + org.wso2.carbon.datasource.core.feature ${carbon.datasources.version} - org.wso2.carbon.uuf.sample.pets-store.feature.group + org.wso2.carbon.uuf.sample.pets-store.feature ${carbon.uuf.version} - org.wso2.carbon.uuf.sample.features-app.feature.group + org.wso2.carbon.uuf.sample.features-app.feature ${carbon.uuf.version} - + - org.wso2.carbon.security.caas.feature.group + org.wso2.carbon.security.caas.feature ${carbon.security.caas.version} @@ -542,7 +542,7 @@ package - + diff --git a/product/src/assembly/bin.xml b/product/src/assembly/bin.xml index 6afc6b05..a389c488 100644 --- a/product/src/assembly/bin.xml +++ b/product/src/assembly/bin.xml @@ -46,7 +46,7 @@ carbon-home/conf/osgi - conf/osgi + conf/wso2 644 diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml index e38e2869..a2d505bd 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml @@ -42,10 +42,10 @@ org.wso2.carbon.messaging org.wso2.carbon.messaging - + org.wso2.carbon.uuf org.wso2.carbon.uuf.core @@ -60,15 +60,17 @@ + org.wso2.carbon.security.caas.api.module.*; version="${carbon.security.caas.version.range}", - org.wso2.carbon.security.caas.api.*, - org.wso2.carbon.security.caas.user.core.*, + org.wso2.carbon.security.caas.api.*; version="${carbon.security.caas.version.range}", + org.wso2.carbon.security.caas.user.core.*; version="${carbon.security.caas.version.range}", org.wso2.carbon.kernel.utils; version="${carbon.kernel.version.range}", org.wso2.carbon.kernel.context; version="${carbon.kernel.version.range}", org.wso2.carbon.messaging; version="${carbon.messaging.version.range}", org.wso2.carbon.uuf.api.auth.*; version="${carbon.uuf.version}", org.wso2.carbon.uuf.spi.auth.*; version="${carbon.uuf.version}", + * org.wso2.carbon.uuf.sample.simpleauth.bundle.internal.* !org.wso2.carbon.uuf.sample.simpleauth.bundle.internal.*, diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java index 3416ad2a..5e21c718 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java @@ -27,6 +27,7 @@ import org.wso2.carbon.security.caas.api.CarbonPrincipal; import org.wso2.carbon.security.caas.api.ProxyCallbackHandler; +import org.wso2.carbon.security.caas.api.handler.UsernamePasswordCallbackHandler; import org.wso2.carbon.uuf.api.auth.Session; import javax.security.auth.login.LoginContext; import javax.security.auth.login.LoginException; @@ -57,12 +58,13 @@ public void activate(BundleContext bundleContext) { */ public static CaasUser authenticate(String userName, String password) throws LoginException { PrivilegedCarbonContext.destroyCurrentContext(); + CarbonMessage carbonMessage = new DefaultCarbonMessage(); carbonMessage.setHeader("Authorization", "Basic " + Base64.getEncoder() - .encodeToString((userName + ":" + password).getBytes()) - ); + .encodeToString("admin:admin".getBytes())); + UsernamePasswordCallbackHandler callbackHandler = new UsernamePasswordCallbackHandler(); + callbackHandler.setCarbonMessage(carbonMessage); - ProxyCallbackHandler callbackHandler = new ProxyCallbackHandler(carbonMessage); LoginContext loginContext = new LoginContext("CarbonSecurityConfig", callbackHandler); loginContext.login(); CarbonPrincipal principal = (CarbonPrincipal)PrivilegedCarbonContext.getCurrentContext().getUserPrincipal(); diff --git a/tests/osgi-tests/pom.xml b/tests/osgi-tests/pom.xml index 23be35d8..881dd9b9 100644 --- a/tests/osgi-tests/pom.xml +++ b/tests/osgi-tests/pom.xml @@ -149,7 +149,7 @@ org.wso2.carbon.core - org.wso2.orbit.org.yaml + org.yaml snakeyaml From 40bf15f769e2b18e90c83062ba70b5da1876339d Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Tue, 28 Mar 2017 16:43:48 +0530 Subject: [PATCH 3/8] update kernel version and introduce OSgi tests --- pom.xml | 21 +- .../conf/transports/netty-transports.yml | 16 + .../simpleauth/bundle/SimpleAuthHandler.java | 6 +- tests/osgi-tests/pom.xml | 139 ++++- .../carbon/uuf/osgi/OSGiServicesTest.java | 71 +-- .../carbon/uuf/osgi/utils/OSGiTestUtils.java | 204 ------- .../osgi-tests/src/test/resources/testng.xml | 6 +- tests/pom.xml | 1 + .../conf/data-bridge/client-truststore.jks | Bin 0 -> 32554 bytes .../conf/data-bridge/data-agent-conf.xml | 62 ++ .../carbon-home/conf/osgi/launch.properties | 27 + .../conf/transports/netty-transports.yml | 41 ++ .../datasources/simpleauth-datasources.xml | 41 ++ .../carbon-home/dbscripts/WSO2CARBON_DB.sql | 125 ++++ .../carbon-home/dbscripts/h2_test_data.sql | 78 +++ .../resources/security/wso2carbon.jks | Bin 0 -> 33260 bytes tests/tests-distribution/carbon.product | 36 ++ tests/tests-distribution/pom.xml | 567 ++++++++++++++++++ tests/tests-distribution/src/assembly/bin.xml | 90 +++ 19 files changed, 1254 insertions(+), 277 deletions(-) delete mode 100644 tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/utils/OSGiTestUtils.java create mode 100644 tests/tests-distribution/carbon-home/conf/data-bridge/client-truststore.jks create mode 100644 tests/tests-distribution/carbon-home/conf/data-bridge/data-agent-conf.xml create mode 100644 tests/tests-distribution/carbon-home/conf/osgi/launch.properties create mode 100644 tests/tests-distribution/carbon-home/conf/transports/netty-transports.yml create mode 100644 tests/tests-distribution/carbon-home/datasources/simpleauth-datasources.xml create mode 100644 tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql create mode 100644 tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql create mode 100644 tests/tests-distribution/carbon-home/resources/security/wso2carbon.jks create mode 100644 tests/tests-distribution/carbon.product create mode 100644 tests/tests-distribution/pom.xml create mode 100644 tests/tests-distribution/src/assembly/bin.xml diff --git a/pom.xml b/pom.xml index 9244276c..7ebd01a4 100644 --- a/pom.xml +++ b/pom.xml @@ -509,6 +509,12 @@ org.wso2.carbon.identity.mgt ${org.wso2.carbon.identity.mgt.version} + + org.wso2.carbon + org.wso2.carbon.pax.exam.feature + ${carbon.kernel.version} + zip + @@ -567,6 +573,11 @@ build-helper-maven-plugin 1.8 + + org.jacoco + jacoco-maven-plugin + ${maven.jacocoplugin.version} + @@ -613,7 +624,7 @@ 2.0.1 2.3.1 [2.0.0, 3.0.0) - 4.3.0-SNAPSHOT + 4.3.0-m2 4.0.3.wso2v1 @@ -621,11 +632,11 @@ 4.5.1-1 - 2.3.0-SNAPSHOT + 2.3.0-m1 [2.1.0, 3.0.0) - 1.0.2-m1 + 1.0.2-SNAPSHOT [1.0.0, 2.0.0) @@ -649,6 +660,8 @@ 4.6.0 1.6.0 1.2.4 + 0.7.5.201505241946 + 0.7.5.201505241946 1.1.0.v20131217-1203 0.10.0.v201209301215 0.10.0.v201209301036 @@ -772,7 +785,7 @@ wso2-msf4j WSO2 Snapshot Repository - https://maven.wso2.org/nexus/content/repositories/orgwso2msf4j-1014/ + https://maven.wso2.org/nexus/content/repositories/orgwso2msf4j-1016/ true daily diff --git a/product/carbon-home/conf/transports/netty-transports.yml b/product/carbon-home/conf/transports/netty-transports.yml index 8fba63f3..5984036c 100644 --- a/product/carbon-home/conf/transports/netty-transports.yml +++ b/product/carbon-home/conf/transports/netty-transports.yml @@ -23,3 +23,19 @@ transportProperties: - name: "server.bootstrap.worker.group.size" value: 8 +listenerConfigurations: +- + id: "msf4j-http" + host: "0.0.0.0" + port: 9090 +- + id: "msf4j-https" + host: "0.0.0.0" + port: 9292 + scheme: https + keyStoreFile: "resources/security/wso2carbon.jks" + keyStorePass: wso2carbon + certPass: wso2carbon +senderConfigurations: + - + id: "netty-gw" \ No newline at end of file diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java index 5e21c718..f933022b 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/src/main/java/org/wso2/carbon/uuf/sample/simpleauth/bundle/SimpleAuthHandler.java @@ -61,10 +61,10 @@ public static CaasUser authenticate(String userName, String password) throws Log CarbonMessage carbonMessage = new DefaultCarbonMessage(); carbonMessage.setHeader("Authorization", "Basic " + Base64.getEncoder() - .encodeToString("admin:admin".getBytes())); - UsernamePasswordCallbackHandler callbackHandler = new UsernamePasswordCallbackHandler(); - callbackHandler.setCarbonMessage(carbonMessage); + .encodeToString((userName + ":" + password).getBytes()) + ); + ProxyCallbackHandler callbackHandler = new ProxyCallbackHandler(carbonMessage); LoginContext loginContext = new LoginContext("CarbonSecurityConfig", callbackHandler); loginContext.login(); CarbonPrincipal principal = (CarbonPrincipal)PrivilegedCarbonContext.getCurrentContext().getUserPrincipal(); diff --git a/tests/osgi-tests/pom.xml b/tests/osgi-tests/pom.xml index 881dd9b9..e9554262 100644 --- a/tests/osgi-tests/pom.xml +++ b/tests/osgi-tests/pom.xml @@ -15,7 +15,8 @@ ~ limitations under the License. --> - + 4.0.0 org.wso2.carbon.uuf.tests.osgi @@ -259,8 +260,52 @@ org.wso2.lmax disruptor + + org.wso2.carbon + org.wso2.carbon.container + + + org.wso2.carbon.uuf.tests + wso2uuf-test + ${carbon.uuf.version} + zip + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + org.apache.rat + apache-rat-plugin + + + org.apache.maven.plugins + maven-checkstyle-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + + src/test/resources/testng.xml + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + org.apache.felix + maven-bundle-plugin + + + + with-tests @@ -319,15 +364,107 @@ ${settings.localRepository} ${project.build.directory}/jacoco.exec + + org.wso2.carbon.uuf.tests:wso2uuf-test + + ERROR + src/test/resources/testng.xml + + ${jcoverage.command} + + + + + org.jacoco + jacoco-maven-plugin + ${maven.jacocoplugin.version} + + + default-prepare-agent + + prepare-agent + + + jcoverage.command + + org.wso2.carbon* + + true + + + + default-check + + check + + + + + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + prepare-package + + + //this task is to provide class/src files locations for jacoco report generation + + + + + + + + + + + + + + + + + + + + + run + + + + + + org.jacoco + org.jacoco.ant + ${org.jacoco.ant.version} + + org.ops4j.pax.exam maven-paxexam-plugin + ${maven.paxexam.plugin.version} generate-config diff --git a/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/OSGiServicesTest.java b/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/OSGiServicesTest.java index e149f6e1..6cea802c 100644 --- a/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/OSGiServicesTest.java +++ b/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/OSGiServicesTest.java @@ -16,9 +16,7 @@ package org.wso2.carbon.uuf.osgi; -import org.ops4j.pax.exam.Configuration; -import org.ops4j.pax.exam.CoreOptions; -import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.ExamFactory; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerClass; import org.ops4j.pax.exam.testng.listener.PaxExam; @@ -27,70 +25,30 @@ import org.testng.Assert; import org.testng.annotations.Listeners; import org.testng.annotations.Test; +import org.wso2.carbon.container.CarbonContainerFactory; import org.wso2.carbon.kernel.utils.CarbonServerInfo; import org.wso2.carbon.uuf.core.API; -import org.wso2.carbon.uuf.osgi.utils.OSGiTestUtils; import org.wso2.carbon.uuf.sample.petsstore.bundle.service.PetsStoreService; -import javax.inject.Inject; import java.util.Map; +import javax.inject.Inject; -import static org.ops4j.pax.exam.CoreOptions.mavenBundle; @Listeners(PaxExam.class) @ExamReactorStrategy(PerClass.class) +@ExamFactory(CarbonContainerFactory.class) public class OSGiServicesTest { @Inject - private BundleContext bundleContext; + private CarbonServerInfo carbonServerInfo; @Inject - private CarbonServerInfo carbonServerInfo; + BundleContext bundleContext; - /** - * Adding all the required OSGi bundles bundles into pax exam container. - * - * @return Options list of pax exam container - * @throws Exception - */ - @Configuration - public Option[] createConfiguration() throws Exception { - OSGiTestUtils.setEnv(); - Option[] options = CoreOptions.options( - // Carbon - getBundleOption("org.wso2.carbon.jndi", "org.wso2.carbon.jndi"), - getBundleOption("org.wso2.carbon.caching", "org.wso2.carbon.caching"), - getBundleOption("org.wso2.carbon.deployment.engine", "org.wso2.carbon.deployment"), - getBundleOption("org.wso2.carbon.deployment.notifier", "org.wso2.carbon.deployment"), - // Others - getBundleOption("geronimo-jms_1.1_spec", "org.apache.geronimo.specs"), - getBundleOption("commons-pool", "commons-pool.wso2"), - getBundleOption("commons-io", "commons-io.wso2"), - getBundleOption("gson", "com.google.code.gson"), - getBundleOption("guava", "com.google.guava"), - getBundleOption("commons-lang3", "org.apache.commons"), - getBundleOption("asm", "org.ow2.asm"), - // UUF - getBundleOption("org.wso2.carbon.uuf.core", "org.wso2.carbon.uuf"), - getBundleOption("org.wso2.carbon.uuf.renderablecreator.html", "org.wso2.carbon.uuf"), - getBundleOption("org.wso2.carbon.uuf.tests.dummy-http-connector", "org.wso2.carbon.uuf.tests"), - getBundleOption("org.wso2.carbon.uuf.sample.pets-store.bundle", "org.wso2.carbon.uuf.sample"), - // MSF4J - getBundleOption("msf4j-core", "org.wso2.msf4j"), - getBundleOption("org.apache.servicemix.bundles.commons-beanutils", "org.apache.servicemix.bundles"), - getBundleOption("javax.ws.rs-api", "javax.ws.rs"), - getBundleOption("netty-buffer", "io.netty"), - getBundleOption("netty-common", "io.netty"), - getBundleOption("netty-handler", "io.netty"), - getBundleOption("netty-transport", "io.netty"), - getBundleOption("netty-codec", "io.netty"), - getBundleOption("netty-codec-http", "io.netty"), - getBundleOption("disruptor", "org.wso2.lmax"), - getBundleOption("org.wso2.carbon.transport.http.netty", "org.wso2.carbon.transport"), - getBundleOption("org.wso2.carbon.messaging", "org.wso2.carbon.messaging") - ); - return OSGiTestUtils.getDefaultPaxOptions(options); + @Test + public void testServerStarup() { + Assert.assertNotNull(carbonServerInfo, "CarbonServerInfo Service is null"); } @Test @@ -123,15 +81,4 @@ public void testOSGiServicesAPI() { String serviceOutput = ((PetsStoreService) petsStoreService).getHelloMessage("Alice"); Assert.assertEquals(serviceOutput, "Hello Alice!"); } - - /** - * Returns the maven bundle option for pax-exam container. - * - * @param artifactId Bundle artifact id - * @param groupId Bundle group id - * @return Maven bundle option - */ - private Option getBundleOption(String artifactId, String groupId) { - return mavenBundle().artifactId(artifactId).groupId(groupId).versionAsInProject(); - } } diff --git a/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/utils/OSGiTestUtils.java b/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/utils/OSGiTestUtils.java deleted file mode 100644 index 16830362..00000000 --- a/tests/osgi-tests/src/test/java/org/wso2/carbon/uuf/osgi/utils/OSGiTestUtils.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.wso2.carbon.uuf.osgi.utils; - -import org.ops4j.pax.exam.Option; -import org.ops4j.pax.exam.options.UrlProvisionOption; -import org.wso2.carbon.kernel.Constants; - -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardCopyOption; -import java.util.Arrays; -import java.util.stream.Stream; - -import static org.ops4j.pax.exam.CoreOptions.mavenBundle; -import static org.ops4j.pax.exam.CoreOptions.options; -import static org.ops4j.pax.exam.CoreOptions.repositories; -import static org.ops4j.pax.exam.CoreOptions.systemProperty; -import static org.ops4j.pax.exam.CoreOptions.url; - -/** - * This class contains Utility methods to configure PAX-EXAM container. - * - * @since 5.0.0 - */ -public class OSGiTestUtils { - - /** - * Returns a merged array of user specified options and default options. - * - * @param options custom options. - * @return a merged array. - */ - public static Option[] getDefaultPaxOptions(Option[] options) { - return Stream.concat(Arrays.stream(getDefaultPaxOptions()), Arrays.stream(options)) - .toArray(Option[]::new); - } - - /** - * Set the environment prior to tests. - * - * @throws IOException - */ - public static void setEnv() throws Exception { - setCarbonHome(); - setStartupTime(); - copyFiles(); - } - - /** - * Returns an array of default PAX-EXAM options. - * - * @return array of Options - */ - private static Option[] getDefaultPaxOptions() { - return options( - repositories("http://maven.wso2.org/nexus/content/groups/wso2-public"), - systemProperty("carbon.home").value(System.getProperty("carbon.home")), - systemProperty(Constants.START_TIME).value(System.getProperty(Constants.START_TIME)), - getUrlProvisionOption("testng", "org.testng"), - getUrlProvisionOption("org.eclipse.osgi.services", "org.wso2.eclipse.osgi"), - getUrlProvisionOption("pax-logging-api", "org.ops4j.pax.logging"), - getUrlProvisionOption("pax-logging-log4j2", "org.ops4j.pax.logging"), - getUrlProvisionOption("org.eclipse.equinox.simpleconfigurator", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.apache.felix.gogo.command", "org.apache.felix"), - getUrlProvisionOption("org.apache.felix.gogo.runtime", "org.apache.felix"), - getUrlProvisionOption("org.apache.felix.gogo.shell", "org.apache.felix"), - getUrlProvisionOption("org.eclipse.equinox.app", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.common", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.concurrent", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.console", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.ds", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.frameworkadmin", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.frameworkadmin.equinox", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.launcher", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.preferences", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.registry", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.simpleconfigurator.manipulator", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.util", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("org.eclipse.equinox.cm", "org.wso2.eclipse.equinox"), - getUrlProvisionOption("snakeyaml", "org.wso2.orbit.org.yaml"), - getUrlProvisionOption("org.wso2.carbon.core", "org.wso2.carbon") - ); - } - - /** - * Set the carbon home. - */ - private static void setCarbonHome() { - String currentDir = Paths.get("").toAbsolutePath().toString(); - Path carbonHome = Paths.get(currentDir, "target", "carbon-home"); - System.setProperty("carbon.home", carbonHome.toString()); - } - - /** - * Set the startup time to calculate the server startup time. - */ - private static void setStartupTime() { - if (System.getProperty(Constants.START_TIME) == null) { - System.setProperty(Constants.START_TIME, System.currentTimeMillis() + ""); - } - } - - /** - * Copying resource files to the carbon home location. - * - * @throws IOException - */ - private static void copyFiles() throws Exception { - //Replace the existing carbon.yml file with populated carbon.yml file. - copy(Paths.get("src", "test", "resources", "conf", "carbon.yml"), - Paths.get(System.getProperty("carbon.home"), "conf", "carbon.yml")); - - //Replace the existing log4j2.xml file with populated log4j2.xml file. - copy(Paths.get("src", "test", "resources", "conf", "log4j2.xml"), Paths.get("conf", "log4j2.xml")); - - //Replace the existing launch.properties file with populated launch.properties file. - copy(Paths.get("src", "test", "resources", "conf", "osgi", "launch.properties"), - Paths.get("conf", "osgi", "launch.properties")); - - //Copy deployment.yaml file - copy(Paths.get("src", "test", "resources", "conf", "deployment.yml"), Paths.get("conf", "deployment.yml")); - - //Replace the existing "README.txt file with populated "README.txt file. - copy(Paths.get("src", "test", "resources", "deployment", "uufapps", "README.txt"), - Paths.get("deployment", "uufapps", "README.txt")); - } - - /** - * Copy files. - * - * @param sourcePath Path for source - * @param destinationPath Path for destination - * @throws IOException - */ - private static void copy(Path sourcePath, Path destinationPath) throws Exception { - String basedir = System.getProperty("basedir"); - if (basedir == null) { - basedir = Paths.get(".").toString(); - } - - sourcePath = Paths.get(basedir).resolve(sourcePath); - destinationPath = getCarbonHome().resolve(destinationPath); - - createOutputFolderStructure(destinationPath); - try { - Files.copy(sourcePath, destinationPath, StandardCopyOption.REPLACE_EXISTING); - } catch (IOException e) { - throw new Exception("Error occurred while copying '" + sourcePath + "' file to " + destinationPath + ".", - e); - } - } - - /** - * Return carbon home path - * - * @return Path for carbon home - */ - private static Path getCarbonHome() { - return Paths.get(System.getProperty("carbon.home")); - } - - /** - * Create the directory structure. - * - * @param destinationPath Path to file copying destination - * @throws IOException - */ - private static void createOutputFolderStructure(Path destinationPath) throws Exception { - Path parentPath = destinationPath.getParent(); - try { - Files.createDirectories(parentPath); - } catch (IOException e) { - throw new Exception("Error occurred while creating the directory '" + parentPath + "'.", e); - } - } - - /** - * Return Url provision option of a particular maven bundle. - * - * @param artifactId Bundle artifact id - * @param groupId Bundle group id - * @return Url provision option - */ - private static UrlProvisionOption getUrlProvisionOption(String artifactId, String groupId) { - return url(mavenBundle().artifactId(artifactId).groupId(groupId).versionAsInProject().getURL()); - } -} diff --git a/tests/osgi-tests/src/test/resources/testng.xml b/tests/osgi-tests/src/test/resources/testng.xml index 1de9156a..fe39efa2 100644 --- a/tests/osgi-tests/src/test/resources/testng.xml +++ b/tests/osgi-tests/src/test/resources/testng.xml @@ -19,8 +19,8 @@ - - - + + + diff --git a/tests/pom.xml b/tests/pom.xml index 9035cad6..28a73c02 100644 --- a/tests/pom.xml +++ b/tests/pom.xml @@ -35,6 +35,7 @@ dummy-http-connector + tests-distribution osgi-tests diff --git a/tests/tests-distribution/carbon-home/conf/data-bridge/client-truststore.jks b/tests/tests-distribution/carbon-home/conf/data-bridge/client-truststore.jks new file mode 100644 index 0000000000000000000000000000000000000000..ba69878b067144bfa218a1135500981d1653ea9d GIT binary patch literal 32554 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 nF+6zEb;=;bgjzTLj!tCTE` + + + + + Thrift + org.wso2.carbon.databridge.agent.endpoint.thrift.ThriftDataEndpoint + conf/data-bridge/client-truststore.jks + wso2carbon + 32768 + 200 + 5 + 10 + 20 + 30 + 250 + 250 + 5500 + 5000 + 250 + 250 + 5500 + 5000 + + + + Binary + org.wso2.carbon.databridge.agent.endpoint.binary.BinaryDataEndpoint + + conf/data-bridge/client-truststore.jks + wso2carbon + 32768 + 200 + 5 + 10 + 20 + 30 + 250 + 250 + 5500 + 5000 + 250 + 250 + 5500 + 5000 + + + diff --git a/tests/tests-distribution/carbon-home/conf/osgi/launch.properties b/tests/tests-distribution/carbon-home/conf/osgi/launch.properties new file mode 100644 index 00000000..3a7f94a9 --- /dev/null +++ b/tests/tests-distribution/carbon-home/conf/osgi/launch.properties @@ -0,0 +1,27 @@ +# Uncomment the following line to enable OSGi console. Specify a port as value of the following property to allow +# telnet access to OSGi console +# TODO Implement SSH access to the OSGi console. +osgi.console= + +org.osgi.framework.bundle.parent=framework + + +# When osgi.clean is set to "true", any cached data used by the OSGi framework +# will be wiped clean. This will clean the caches used to store bundle +# dependency resolution and eclipse extension registry data. Using this +# option will force OSGi framework to reinitialize these caches. +# The following setting is put in place to create rid of the problems +# faced when re-starting the system. Please note that, when this setting is +# true, if you manually start a bundle, it would not be available when +# you re-start the system. To avid this, copy the bundle jar to the plugins +# folder, before you re-start the system. +osgi.clean=true + +# Uncomment the following line to turn on Eclipse Equinox debugging. +# You may also edit the osgi-debug.options file and fine tune the debugging +# options to suite your needs. +#osgi.debug=./conf/osgi/osgi-debug.options + +carbon.server.listeners=org.wso2.carbon.launcher.extensions.DropinsBundleDeployer +org.osgi.framework.system.packages.extra=sun.misc +org.osgi.framework.bootdelegation=sun.misc,org.wso2.carbon.security.caas.boot \ No newline at end of file diff --git a/tests/tests-distribution/carbon-home/conf/transports/netty-transports.yml b/tests/tests-distribution/carbon-home/conf/transports/netty-transports.yml new file mode 100644 index 00000000..76a65567 --- /dev/null +++ b/tests/tests-distribution/carbon-home/conf/transports/netty-transports.yml @@ -0,0 +1,41 @@ +################################################################################ +# Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +################################################################################ +transportProperties: + - + name: "latency.metrics.enabled" + value: true + - + name: "server.bootstrap.boss.group.size" + value: 4 + - + name: "server.bootstrap.worker.group.size" + value: 8 +listenerConfigurations: +- + id: "msf4j-http" + host: "0.0.0.0" + port: 9090 +- + id: "msf4j-https" + host: "0.0.0.0" + port: 9292 + scheme: https + keyStoreFile: "resources/security/wso2carbon.jks" + keyStorePass: wso2carbon + certPass: wso2carbon +senderConfigurations: + - + id: "netty-gw" \ No newline at end of file diff --git a/tests/tests-distribution/carbon-home/datasources/simpleauth-datasources.xml b/tests/tests-distribution/carbon-home/datasources/simpleauth-datasources.xml new file mode 100644 index 00000000..c9a5d62e --- /dev/null +++ b/tests/tests-distribution/carbon-home/datasources/simpleauth-datasources.xml @@ -0,0 +1,41 @@ + + + + + + WSO2_CARBON_DB + The datasource used for JDBC User Store + + jdbc/WSO2CARBON_DB + + + + jdbc:h2:./database/WSO2CARBON_DB;IFEXISTS=TRUE;DB_CLOSE_ON_EXIT=FALSE;LOCK_TIMEOUT=60000;MVCC=TRUE + wso2carbon + wso2carbon + org.h2.Driver + 50 + 60000 + true + SELECT 1 + 30000 + false + + + + + diff --git a/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql b/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql new file mode 100644 index 00000000..55becd27 --- /dev/null +++ b/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql @@ -0,0 +1,125 @@ +-- +-- Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +-- NOTE: Use VARCHAR(255) instead of VARCHAR(256) if the length needed is less than 256. Because 256 will require +-- two bytes to store the VARCHAR character length. +-- + +CREATE TABLE IF NOT EXISTS UM_TENANT +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + DOMAIN_NAME VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS UM_USER +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + USER_UNIQUE_ID VARCHAR(64) NOT NULL, + USERNAME VARCHAR(255) NOT NULL, + IDENTITY_STORE_ID VARCHAR(255) NOT NULL, + CREDENTIAL_STORE_ID VARCHAR(255) NOT NULL, + TENANT_ID INTEGER NOT NULL, + FOREIGN KEY (TENANT_ID) REFERENCES UM_TENANT (ID) +); +CREATE UNIQUE INDEX "unique_USERNAME_INDEX_1" ON UM_USER (USERNAME); + +CREATE TABLE IF NOT EXISTS UM_GROUP +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + GROUP_NAME VARCHAR(255) NOT NULL, + GROUP_UNIQUE_ID VARCHAR(64) NOT NULL, + TENANT_ID INTEGER NOT NULL, + FOREIGN KEY (TENANT_ID) REFERENCES UM_TENANT (ID) +); + +CREATE TABLE IF NOT EXISTS UM_ROLE +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + ROLE_UNIQUE_ID VARCHAR(64) NOT NULL, + ROLE_NAME VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS UM_PERMISSION +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + RESOURCE_ID VARCHAR(255) NOT NULL, + ACTION VARCHAR(255) NOT NULL, + PERMISSION_UNIQUE_ID VARCHAR(64) NOT NULL +); + +CREATE TABLE IF NOT EXISTS UM_USER_ATTRIBUTES +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + ATTR_NAME VARCHAR(255) NOT NULL, + ATTR_VALUE VARCHAR(1024) NOT NULL, + USER_ID INTEGER NOT NULL, + FOREIGN KEY (USER_ID) REFERENCES UM_USER (ID) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS UM_PASSWORD +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + PASSWORD VARCHAR(88) NOT NULL, + USER_UNIQUE_ID VARCHAR(64) NOT NULL, + IDENTITY_STORE_ID VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS UM_PASSWORD_INFO +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + PASSWORD_SALT VARCHAR(64) NOT NULL, + HASH_ALGO VARCHAR(128) NOT NULL, + ITERATION_COUNT INT, + KEY_LENGTH INT, + USER_UNIQUE_ID VARCHAR(64) NOT NULL, + IDENTITY_STORE_ID VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS UM_USER_ROLE +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + USER_UNIQUE_ID VARCHAR(64) NOT NULL, + IDENTITY_STORE_ID VARCHAR(255) NOT NULL, + ROLE_ID INTEGER NOT NULL, + FOREIGN KEY (ROLE_ID) REFERENCES UM_ROLE (ID) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS UM_USER_GROUP +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + USER_ID INTEGER NOT NULL, + GROUP_ID INTEGER NOT NULL, + FOREIGN KEY (GROUP_ID) REFERENCES UM_GROUP (ID) ON DELETE CASCADE, + FOREIGN KEY (USER_ID) REFERENCES UM_USER (ID) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS UM_GROUP_ROLE +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + GROUP_UNIQUE_ID VARCHAR(64) NOT NULL, + IDENTITY_STORE_ID VARCHAR(255) NOT NULL, + ROLE_ID INTEGER NOT NULL, + FOREIGN KEY (ROLE_ID) REFERENCES UM_ROLE (ID) ON DELETE CASCADE +); + +CREATE TABLE IF NOT EXISTS UM_ROLE_PERMISSION +( + ID INTEGER AUTO_INCREMENT PRIMARY KEY NOT NULL, + ROLE_ID INTEGER NOT NULL, + PERMISSION_ID INTEGER NOT NULL, + FOREIGN KEY (PERMISSION_ID) REFERENCES UM_PERMISSION (ID) ON DELETE CASCADE, + FOREIGN KEY (ROLE_ID) REFERENCES UM_ROLE (ID) ON DELETE CASCADE +); diff --git a/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql b/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql new file mode 100644 index 00000000..fac9f88e --- /dev/null +++ b/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql @@ -0,0 +1,78 @@ +-- +-- Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +-- +-- Licensed under the Apache License, Version 2.0 (the "License"); +-- you may not use this file except in compliance with the License. +-- You may obtain a copy of the License at +-- +-- http://www.apache.org/licenses/LICENSE-2.0 +-- +-- Unless required by applicable law or agreed to in writing, software +-- distributed under the License is distributed on an "AS IS" BASIS, +-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +-- See the License for the specific language governing permissions and +-- limitations under the License. +-- + +INSERT INTO UM_TENANT (DOMAIN_NAME) +VALUES ('wso2.com'); + +INSERT INTO UM_USER (USER_UNIQUE_ID, USERNAME, IDENTITY_STORE_ID, CREDENTIAL_STORE_ID, TENANT_ID) +VALUES ('41dadd2aea6e11e59ce95e5517507c66', 'admin', 'JDBCIS1', 'JDBCCS1', '1'), + ('b5572242139d11e6a1483e1d05defe78', 'user1', 'JDBCIS1', 'JDBCCS1', '1'), + ('b5572580139d11e6a1483e1d05defe78', 'user2', 'JDBCIS1', 'JDBCCS1', '1'); + +INSERT INTO UM_PASSWORD (PASSWORD, USER_UNIQUE_ID, IDENTITY_STORE_ID) +VALUES ('3opCozpRixH6BvSXyr0513v1nyFWpdcQy7F6r6P/LFE=', '41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1'), + ('3opCozpRixH6BvSXyr0513v1nyFWpdcQy7F6r6P/LFE=', 'b5572242139d11e6a1483e1d05defe78', 'JDBCIS1'), + ('3opCozpRixH6BvSXyr0513v1nyFWpdcQy7F6r6P/LFE=', 'b5572580139d11e6a1483e1d05defe78', 'JDBCIS1'); + +INSERT INTO UM_PASSWORD_INFO (PASSWORD_SALT, HASH_ALGO, ITERATION_COUNT, KEY_LENGTH, USER_UNIQUE_ID, IDENTITY_STORE_ID) +VALUES ('1ff1188e-f1bf-11e5-9ce9-5e5517507c66', 'SHA256', 4096, 256, '41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1'), + ('1ff1188e-f1bf-11e5-9ce9-5e5517507c66', 'SHA256', 4096, 256, '41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1'), + ('1ff1188e-f1bf-11e5-9ce9-5e5517507c66', 'SHA256', 4096, 256, '41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1'); + +INSERT INTO UM_GROUP (GROUP_NAME, GROUP_UNIQUE_ID, TENANT_ID) +VALUES ('is', 'a422aa98ecf411e59ce95e5517507c66', '1'), + ('security', '16231aee15a711e6a1483e1d05defe78', '1'), + ('kernel', '16231f8a15a711e6a1483e1d05defe78', '1'), + ('governance', '162321d815a711e6a1483e1d05defe78', '1'); + +INSERT INTO UM_ROLE (ROLE_NAME, ROLE_UNIQUE_ID) +VALUES ('admin', '985b79ecfcdf11e586aa5e5517507c66'), + ('guest', 'df813f5e105e11e6a1483e1d05defe78'), + ('general', '70e2e088105f11e6a1483e1d05defe78'), + ('role1', '7f8adbe6134c11e6a1483e1d05defe78'), + ('role2', '7f8ade5c134c11e6a1483e1d05defe78'), + ('role3', '7f8adf56134c11e6a1483e1d05defe78'), + ('role4', '7f8ae028134c11e6a1483e1d05defe78'), + ('role5', '7f8ae2a8134c11e6a1483e1d05defe78'); + +INSERT INTO UM_PERMISSION (RESOURCE_ID, ACTION, PERMISSION_UNIQUE_ID) +VALUES ('root/resource/id', 'add', 'f61a1c240df011e6a1483e1d05defe78'), + ('root/resource/id', 'delete', '64335ff4106211e6a1483e1d05defe78'), + ('root/resource/id', 'update', 'e890bfd0135011e6a1483e1d05defe78'), + ('root/resource/id', 'action1', 'e890c548135011e6a1483e1d05defe78'), + ('root/resource/id', 'action2', 'e890c688135011e6a1483e1d05defe78'); + +INSERT INTO UM_USER_GROUP (USER_ID, GROUP_ID) +VALUES ('1', '1'); + +INSERT INTO UM_USER_ATTRIBUTES (ATTR_NAME, ATTR_VALUE, USER_ID) +VALUES ('firstName', 'Jayanga', 1), ('lastName', 'Kaushalya', 1); + +INSERT INTO UM_ROLE_PERMISSION (ROLE_ID, PERMISSION_ID) +VALUES ('1', '1'), ('1', '2'), ('1', '3'), ('1', '4'), + ('2', '2'), ('2', '1'), ('2', '3'), ('2', '4'), + ('3', '3'), ('3', '1'), ('3', '2'), ('3', '4'), + ('4', '4'), ('4', '1'), ('4', '2'), ('4', '3'); + +INSERT INTO UM_USER_ROLE (USER_UNIQUE_ID, IDENTITY_STORE_ID, ROLE_ID) +VALUES ('41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1', '1'), + ('41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1', '2'), + ('41dadd2aea6e11e59ce95e5517507c66', 'JDBCIS1', '3'); + +INSERT INTO UM_GROUP_ROLE (GROUP_UNIQUE_ID, IDENTITY_STORE_ID, ROLE_ID) +VALUES ('a422aa98ecf411e59ce95e5517507c66', 'JDBCIS1', '1'), + ('a422aa98ecf411e59ce95e5517507c66', 'JDBCIS1', '2'), + ('a422aa98ecf411e59ce95e5517507c66', 'JDBCIS1', '3'); diff --git a/tests/tests-distribution/carbon-home/resources/security/wso2carbon.jks b/tests/tests-distribution/carbon-home/resources/security/wso2carbon.jks new file mode 100644 index 0000000000000000000000000000000000000000..7942c53cf935bcdd305f3406400039c9020ebd78 GIT binary patch literal 33260 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 literal 0 HcmV?d00001 diff --git a/tests/tests-distribution/carbon.product b/tests/tests-distribution/carbon.product new file mode 100644 index 00000000..b91c4ccc --- /dev/null +++ b/tests/tests-distribution/carbon.product @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/tests-distribution/pom.xml b/tests/tests-distribution/pom.xml new file mode 100644 index 00000000..cd969d82 --- /dev/null +++ b/tests/tests-distribution/pom.xml @@ -0,0 +1,567 @@ + + + + + org.wso2.carbon.uuf.tests + tests-parent + 1.0.0-SNAPSHOT + ../pom.xml + + 4.0.0 + wso2uuf-test + WSO2 Carbon UUF - Test - Distribution + pom + + + + + org.wso2.carbon.uuf + org.wso2.carbon.uuf.core.feature + ${carbon.uuf.version} + zip + + + org.wso2.carbon.uuf + org.wso2.carbon.uuf.renderablecreator.hbs.feature + ${carbon.uuf.version} + zip + + + org.wso2.carbon.uuf + org.wso2.carbon.uuf.renderablecreator.html.feature + ${carbon.uuf.version} + zip + + + org.wso2.carbon.uuf + org.wso2.carbon.uuf.httpconnector.msf4j.feature + ${carbon.uuf.version} + zip + + + + + org.wso2.carbon + org.wso2.carbon.kernel.feature + ${carbon.kernel.version} + zip + + + org.wso2.carbon + org.wso2.carbon.runtime.feature + ${carbon.kernel.version} + zip + + + org.wso2.carbon + org.wso2.carbon.launcher + ${carbon.kernel.version} + + + org.wso2.carbon.deployment + org.wso2.carbon.deployment.engine.feature + ${carbon.deployment.version} + zip + + + org.wso2.carbon.deployment + org.wso2.carbon.deployment.notifier.feature + ${carbon.deployment.version} + zip + + + org.wso2.carbon.jndi + org.wso2.carbon.jndi.feature + ${carbon.jndi.version} + zip + + + org.wso2.carbon.caching + org.wso2.carbon.caching.feature + ${carbon.cache.version} + zip + + + + org.wso2.carbon.datasources + org.wso2.carbon.datasource.core.feature + ${carbon.datasources.version} + zip + + + + org.wso2.carbon.messaging + org.wso2.carbon.messaging.feature + ${carbon.messaging.version} + zip + + + org.wso2.carbon.transport + org.wso2.carbon.transport.http.netty.feature + ${carbon.transport.http.netty.version} + zip + + + org.wso2.carbon.transport + org.wso2.carbon.connector.framework.feature + ${carbon.transport.http.netty.version} + zip + + + org.wso2.carbon.metrics + org.wso2.carbon.metrics.core.feature + ${carbon.metrics.version} + zip + + + org.wso2.carbon.metrics + org.wso2.carbon.metrics.jdbc.core.feature + ${carbon.metrics.version} + zip + + + org.wso2.carbon.metrics + org.wso2.carbon.metrics.das.core.feature + ${carbon.metrics.version} + zip + + + + org.osgi + org.osgi.core + ${org.osgi.api.version} + + + + + org.wso2.msf4j + org.wso2.msf4j.feature + ${msf4j.version} + zip + + + + + org.wso2.carbon.uuf.sample + org.wso2.carbon.uuf.sample.pets-store.feature + ${carbon.uuf.version} + zip + + + org.wso2.carbon.uuf.sample + org.wso2.carbon.uuf.sample.features-app.feature + ${carbon.uuf.version} + zip + + + org.wso2.carbon.security.caas + org.wso2.carbon.security.caas.feature + ${carbon.security.caas.version} + zip + + + org.wso2.carbon + org.wso2.carbon.pax.exam.feature + zip + + + + + + + org.codehaus.mojo + buildnumber-maven-plugin + + {0,date,dd MMM yyyy} + + timestamp + + false + false + + + + validate + + create + + + + + + org.apache.maven.plugins + maven-dependency-plugin + false + + + unpack-equinox-executable + package + + unpack + + + + + org.eclipse.equinox + org.eclipse.equinox.executable + 3.5.0.v20110530-7P7NFUFFLWUl76mart + zip + true + target + + + + + + + + org.wso2.carbon.maven + carbon-feature-plugin + ${carbon.feature.plugin.version} + + + p2-repo-generation + package + + generate-repo + + + file:${basedir}/target/p2-repo + + + org.wso2.carbon.kernel.feature + ${carbon.kernel.version} + + + org.wso2.carbon.deployment.engine.feature + ${carbon.deployment.version} + + + org.wso2.carbon.deployment.notifier.feature + ${carbon.deployment.version} + + + org.wso2.carbon.runtime.feature + ${carbon.kernel.version} + + + org.wso2.carbon.caching.feature + ${carbon.cache.version} + + + org.wso2.msf4j.feature + ${msf4j.version} + + + org.wso2.carbon.messaging.feature + ${carbon.messaging.version} + + + org.wso2.carbon.transport.http.netty.feature + ${carbon.transport.http.netty.version} + + + org.wso2.carbon.connector.framework.feature + ${carbon.transport.http.netty.version} + + + org.wso2.carbon.uuf.core.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.renderablecreator.hbs.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.renderablecreator.html.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.httpconnector.msf4j.feature + ${carbon.uuf.version} + + + org.wso2.carbon.jndi.feature + ${carbon.jndi.version} + + + org.wso2.carbon.metrics.core.feature + ${carbon.metrics.version} + + + org.wso2.carbon.metrics.jdbc.core.feature + ${carbon.metrics.version} + + + org.wso2.carbon.metrics.das.core.feature + ${carbon.metrics.version} + + + org.wso2.carbon.datasource.core.feature + ${carbon.datasources.version} + + + + org.wso2.carbon.security.caas.feature + ${carbon.security.caas.version} + + + + org.wso2.carbon.uuf.sample.pets-store.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.sample.features-app.feature + ${carbon.uuf.version} + + + org.wso2.carbon.pax.exam.feature + ${carbon.kernel.version} + + + + + + publishing products + package + + publish-product + + + ${basedir}/carbon.product + + + ${basedir}/target/org.eclipse.equinox.executable_3.5.0.v20110530-7P7NFUFFLWUl76mart + + file:${basedir}/target/p2-repo + + + + materialize-product + package + + generate-runtime + + + ${basedir}/carbon.product + file:${basedir}/target/p2-repo + file:${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/wso2 + + default + + + + feature-installation + package + + install + + + default + + file:${basedir}/target/p2-repo + + ${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/wso2 + + + true + + + org.wso2.carbon.kernel.feature.group + ${carbon.kernel.version} + + + org.wso2.carbon.deployment.engine.feature + ${carbon.deployment.version} + + + org.wso2.carbon.deployment.notifier.feature + ${carbon.deployment.version} + + + org.wso2.carbon.caching.feature + ${carbon.cache.version} + + + org.wso2.msf4j.feature + ${msf4j.version} + + + org.wso2.carbon.messaging.feature + ${carbon.messaging.version} + + + org.wso2.carbon.transport.http.netty.feature + ${carbon.transport.http.netty.version} + + + org.wso2.carbon.uuf.core.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.renderablecreator.hbs.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.renderablecreator.html.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.httpconnector.msf4j.feature + ${carbon.uuf.version} + + + org.wso2.carbon.jndi.feature + ${carbon.jndi.version} + + + org.wso2.carbon.metrics.core.feature + ${carbon.metrics.version} + + + org.wso2.carbon.metrics.jdbc.core.feature + ${carbon.metrics.version} + + + org.wso2.carbon.metrics.das.core.feature + ${carbon.metrics.version} + + + org.wso2.carbon.datasource.core.feature + ${carbon.datasources.version} + + + + org.wso2.carbon.uuf.sample.pets-store.feature + ${carbon.uuf.version} + + + org.wso2.carbon.uuf.sample.features-app.feature + ${carbon.uuf.version} + + + + org.wso2.carbon.security.caas.feature + ${carbon.security.caas.version} + + + org.wso2.carbon.connector.framework.feature + ${carbon.transport.http.netty.version} + + + org.wso2.carbon.pax.exam.feature + ${carbon.kernel.version} + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + package + + + + + + + + + run + + + + create-databases + package + + run + + + + + + + + + + + + + + + + + + + + clean_target + install + + + + + + + + + + + + + + run + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + distribution + package + + attached + + + + ${basedir}/src/assembly/filter.properties + + + ${basedir}/src/assembly/bin.xml + + false + + + + + + + + diff --git a/tests/tests-distribution/src/assembly/bin.xml b/tests/tests-distribution/src/assembly/bin.xml new file mode 100644 index 00000000..5606e18a --- /dev/null +++ b/tests/tests-distribution/src/assembly/bin.xml @@ -0,0 +1,90 @@ + + + + true + wso2uuf-test-${project.version} + wso2uuf-test + + zip + + + + + target/wso2carbon-kernel-${carbon.kernel.version} + . + + README.txt + LICENSE.txt + INSTALL.txt + release-notes.html + **/*.ipr + **/*.iwr + **/*.eclipse + **/netty-transports.yml + + + + + carbon-home/conf/transports + conf/transports + 644 + + + + carbon-home/conf/osgi + conf/wso2 + 644 + + + + carbon-home/conf/data-bridge + conf/data-bridge + 644 + + + + carbon-home/deployment/ + deployment/ + 644 + + + + carbon-home/resources/ + resources/ + 644 + + + + carbon-home/datasources/ + conf/datasources/ + 644 + + + + + ../analytics/das-setup + analytics/das-setup + + **/target/** + **/*.iml + **/*.ipr + **/*.iwr + **/*.eclipse + + + + From d818b75e5b33e897c5a9c3f089f5da9fd6afea4f Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Tue, 28 Mar 2017 16:44:09 +0530 Subject: [PATCH 4/8] update kernel version and introduce OSgi tests --- pom.xml | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/pom.xml b/pom.xml index 7ebd01a4..86c216a6 100644 --- a/pom.xml +++ b/pom.xml @@ -770,29 +770,5 @@ false - - wso2-snapshot - WSO2 Snapshot Repository - https://maven.wso2.org/nexus/content/repositories/orgwso2carbonsecuritycaas-1009/ - - true - daily - - - true - - - - wso2-msf4j - WSO2 Snapshot Repository - https://maven.wso2.org/nexus/content/repositories/orgwso2msf4j-1016/ - - true - daily - - - true - - From afc15780670eedef6ba44b4da7a04841ca537068 Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Wed, 29 Mar 2017 13:00:55 +0530 Subject: [PATCH 5/8] update carbon-security --- pom.xml | 2 +- .../org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 86c216a6..fdecde7e 100644 --- a/pom.xml +++ b/pom.xml @@ -636,7 +636,7 @@ [2.1.0, 3.0.0) - 1.0.2-SNAPSHOT + 1.0.2-m1 [1.0.0, 2.0.0) diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml index a2d505bd..23a95083 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml @@ -70,7 +70,6 @@ org.wso2.carbon.uuf.api.auth.*; version="${carbon.uuf.version}", org.wso2.carbon.uuf.spi.auth.*; version="${carbon.uuf.version}", - * org.wso2.carbon.uuf.sample.simpleauth.bundle.internal.* !org.wso2.carbon.uuf.sample.simpleauth.bundle.internal.*, From 4f56c9b3f5c92c7452c99b106cbfa0b28f84f174 Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Thu, 30 Mar 2017 14:09:32 +0530 Subject: [PATCH 6/8] adding cass related jvm arguments --- product/carbon-home/bin/carbon.bat | 171 ++++++++++++++++++ product/carbon-home/bin/carbon.sh | 280 +++++++++++++++++++++++++++++ product/src/assembly/bin.xml | 9 + 3 files changed, 460 insertions(+) create mode 100644 product/carbon-home/bin/carbon.bat create mode 100755 product/carbon-home/bin/carbon.sh diff --git a/product/carbon-home/bin/carbon.bat b/product/carbon-home/bin/carbon.bat new file mode 100644 index 00000000..9e72506c --- /dev/null +++ b/product/carbon-home/bin/carbon.bat @@ -0,0 +1,171 @@ +@echo off + +REM --------------------------------------------------------------------------- +REM Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +REM +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. + +rem --------------------------------------------------------------------------- +rem Main Script for WSO2 Carbon +rem +rem Environment Variable Prequisites +rem +rem CARBON_HOME Home of CARBON installation. If not set I will try +rem to figure it out. +rem +rem JAVA_HOME Must point at your Java Development Kit installation. +rem +rem JAVA_OPTS (Optional) Java runtime options used when the commands +rem is executed. +rem --------------------------------------------------------------------------- + +rem ----- if JAVA_HOME is not set we're not happy ------------------------------ +:checkJava + +if "%JAVA_HOME%" == "" goto noJavaHome +if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome +goto checkServer + +:noJavaHome +echo "You must set the JAVA_HOME variable before running CARBON." +goto end + +rem ----- Only set CARBON_HOME if not already set ---------------------------- +:checkServer +rem %~sdp0 is expanded pathname of the current script under NT with spaces in the path removed +if "%CARBON_HOME%"=="" set CARBON_HOME=%~sdp0.. +SET curDrive=%cd:~0,1% +SET wsasDrive=%CARBON_HOME:~0,1% +if not "%curDrive%" == "%wsasDrive%" %wsasDrive%: + +rem find CARBON_HOME if it does not exist due to either an invalid value passed +rem by the user or the %0 problem on Windows 9x +if not exist "%CARBON_HOME%\bin\kernel-version.txt" goto noServerHome + +goto updateClasspath + +:noServerHome +echo CARBON_HOME is set incorrectly or CARBON could not be located. Please set CARBON_HOME. +goto end + +rem ----- update classpath ----------------------------------------------------- +:updateClasspath + +setlocal EnableDelayedExpansion +cd %CARBON_HOME% +set CARBON_CLASSPATH= +FOR %%C in ("%CARBON_HOME%\bin\bootstrap\*.jar") DO set CARBON_CLASSPATH=!CARBON_CLASSPATH!;".\bin\bootstrap\%%~nC%%~xC" + +set CARBON_CLASSPATH="%JAVA_HOME%\lib\tools.jar";%CARBON_CLASSPATH%; + +FOR %%D in ("%CARBON_HOME%\lib\commons-lang*.jar") DO set CARBON_CLASSPATH=!CARBON_CLASSPATH!;".\lib\%%~nD%%~xD" + +rem ----- Process the input command ------------------------------------------- + +rem Slurp the command line arguments. This loop allows for an unlimited number +rem of arguments (up to the command line limit, anyway). + + +:setupArgs +if ""%1""=="""" goto doneStart + +if ""%1""==""-run"" goto commandLifecycle +if ""%1""==""--run"" goto commandLifecycle +if ""%1""==""run"" goto commandLifecycle + +if ""%1""==""-restart"" goto commandLifecycle +if ""%1""==""--restart"" goto commandLifecycle +if ""%1""==""restart"" goto commandLifecycle + +if ""%1""==""debug"" goto commandDebug +if ""%1""==""-debug"" goto commandDebug +if ""%1""==""--debug"" goto commandDebug + +if ""%1""==""version"" goto commandVersion +if ""%1""==""-version"" goto commandVersion +if ""%1""==""--version"" goto commandVersion + +shift +goto setupArgs + +rem ----- commandVersion ------------------------------------------------------- +:commandVersion +shift +type "%CARBON_HOME%\bin\kernel-version.txt" +goto end + +rem ----- commandDebug --------------------------------------------------------- +:commandDebug +shift +set DEBUG_PORT=%1 +if "%DEBUG_PORT%"=="" goto noDebugPort +if not "%JAVA_OPTS%"=="" echo Warning !!!. User specified JAVA_OPTS will be ignored, once you give the --debug option. +set JAVA_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=%DEBUG_PORT% +echo Please start the remote debugging client to continue... +goto findJdk + +:noDebugPort +echo Please specify the debug port after the --debug option +goto end + +rem ----- commandLifecycle ----------------------------------------------------- +:commandLifecycle +goto findJdk + +:doneStart +if "%OS%"=="Windows_NT" @setlocal +if "%OS%"=="WINNT" @setlocal + +rem ---------- Handle the SSL Issue with proper JDK version -------------------- +rem find the version of the jdk +:findJdk + +set CMD=RUN %* + +:checkJdk16 +"%JAVA_HOME%\bin\java" -version 2>&1 | findstr /r "1.[8]" >NUL +IF ERRORLEVEL 1 goto unknownJdk +goto jdk16 + +:unknownJdk +echo Starting WSO2 Carbon (in unsupported JDK) +echo [ERROR] CARBON is supported only on JDK 1.8 +goto jdk16 + +:jdk16 +goto runServer + +rem ----------------- Execute The Requested Command ---------------------------- + +:runServer +cd %CARBON_HOME% + +rem ---------- Add jars to classpath ---------------- + +set CARBON_CLASSPATH=.\bin\bootstrap;%CARBON_CLASSPATH% + +set JAVA_ENDORSED=".\bin\bootstrap\endorsed";"%JAVA_HOME%\jre\lib\endorsed";"%JAVA_HOME%\lib\endorsed" + +set CMD_LINE_ARGS=-Xbootclasspath/a:%CARBON_XBOOTCLASSPATH% -Xms256m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath="%CARBON_HOME%\logs\heap-dump.hprof" -Djava.security.auth.login.config="%CARBON_HOME%\conf\security\carbon-jaas.config" -Dcom.sun.management.jmxremote -classpath %CARBON_CLASSPATH% %JAVA_OPTS% -Djava.endorsed.dirs=%JAVA_ENDORSED% -Dcarbon.home="%CARBON_HOME%" -Djava.command="%JAVA_HOME%\bin\java" -Djava.opts="%JAVA_OPTS%" -Djava.io.tmpdir="%CARBON_HOME%\tmp" -Dcarbon.classpath=%CARBON_CLASSPATH% -Dfile.encoding=UTF8 + +:runJava +echo JAVA_HOME environment variable is set to %JAVA_HOME% +echo CARBON_HOME environment variable is set to %CARBON_HOME% +"%JAVA_HOME%\bin\java" %CMD_LINE_ARGS% org.wso2.carbon.launcher.Main %CMD% +if "%ERRORLEVEL%"=="121" goto runJava +:end +goto endlocal + +:endlocal + +:END diff --git a/product/carbon-home/bin/carbon.sh b/product/carbon-home/bin/carbon.sh new file mode 100755 index 00000000..1a37f30c --- /dev/null +++ b/product/carbon-home/bin/carbon.sh @@ -0,0 +1,280 @@ +#!/bin/sh +# --------------------------------------------------------------------------- +# Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ---------------------------------------------------------------------------- +# Main Script for the WSO2 Carbon Server +# +# Environment Variable Prequisites +# +# CARBON_HOME Home of WSO2 Carbon installation. If not set I will try +# to figure it out. +# +# JAVA_HOME Must point at your Java Development Kit installation. +# +# JAVA_OPTS (Optional) Java runtime options used when the commands +# is executed. +# +# NOTE: Borrowed generously from Apache Tomcat startup scripts. +# ----------------------------------------------------------------------------- + +# OS specific support. $var _must_ be set to either true or false. +#ulimit -n 100000 + +cygwin=false; +darwin=false; +os400=false; +mingw=false; +case "`uname`" in +CYGWIN*) cygwin=true;; +MINGW*) mingw=true;; +OS400*) os400=true;; +Darwin*) darwin=true + if [ -z "$JAVA_VERSION" ] ; then + JAVA_VERSION="CurrentJDK" + else + echo "Using Java version: $JAVA_VERSION" + fi + if [ -z "$JAVA_HOME" ] ; then + JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/${JAVA_VERSION}/Home + fi + ;; +esac + +# resolve links - $0 may be a softlink +PRG="$0" + +while [ -h "$PRG" ]; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '.*/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`/"$link" + fi +done + +# Get standard environment variables +PRGDIR=`dirname "$PRG"` + +# Only set CARBON_HOME if not already set +[ -z "$CARBON_HOME" ] && CARBON_HOME=`cd "$PRGDIR/.." ; pwd` + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CARBON_HOME" ] && CARBON_HOME=`cygpath --unix "$CARBON_HOME"` +fi + +# For OS400 +if $os400; then + # Set job priority to standard for interactive (interactive - 6) by using + # the interactive priority - 6, the helper threads that respond to requests + # will be running at the same priority as interactive jobs. + COMMAND='chgjob job('$JOBNAME') runpty(6)' + system $COMMAND + + # Enable multi threading + QIBM_MULTI_THREADED=Y + export QIBM_MULTI_THREADED +fi + +# For Migwn, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$CARBON_HOME" ] && + CARBON_HOME="`(cd "$CARBON_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" + # TODO classpath? +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD=java + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." + echo " CARBON cannot execute $JAVACMD" + exit 1 +fi + +# if JAVA_HOME is not set we're not happy +if [ -z "$JAVA_HOME" ]; then + echo "You must set the JAVA_HOME variable before running CARBON." + exit 1 +fi + +if [ -e "$CARBON_HOME/carbon.pid" ]; then + PID=`cat "$CARBON_HOME"/carbon.pid` +fi + +# ----- Process the input command ---------------------------------------------- +args="" +for c in $* +do + if [ "$c" = "--debug" ] || [ "$c" = "-debug" ] || [ "$c" = "debug" ]; then + CMD="--debug" + continue + elif [ "$CMD" = "--debug" ]; then + if [ -z "$PORT" ]; then + PORT=$c + fi + elif [ "$c" = "--stop" ] || [ "$c" = "-stop" ] || [ "$c" = "stop" ]; then + CMD="stop" + elif [ "$c" = "--start" ] || [ "$c" = "-start" ] || [ "$c" = "start" ]; then + CMD="start" + elif [ "$c" = "--version" ] || [ "$c" = "-version" ] || [ "$c" = "version" ]; then + CMD="version" + elif [ "$c" = "--restart" ] || [ "$c" = "-restart" ] || [ "$c" = "restart" ]; then + CMD="restart" + elif [ "$c" = "--test" ] || [ "$c" = "-test" ] || [ "$c" = "test" ]; then + CMD="test" + else + args="$args $c" + fi +done + +if [ "$CMD" = "--debug" ]; then + if [ "$PORT" = "" ]; then + echo " Please specify the debug port after the --debug option" + exit 1 + fi + if [ -n "$JAVA_OPTS" ]; then + echo "Warning !!!. User specified JAVA_OPTS will be ignored, once you give the --debug option." + fi + CMD="RUN" + JAVA_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=$PORT" + echo "Please start the remote debugging client to continue..." +elif [ "$CMD" = "start" ]; then + if [ -e "$CARBON_HOME/carbon.pid" ]; then + if ps -p $PID > /dev/null ; then + echo "Process is already running" + exit 0 + fi + fi + export CARBON_HOME=$CARBON_HOME +# using nohup bash to avoid erros in solaris OS.TODO + nohup bash $CARBON_HOME/bin/carbon.sh $args > /dev/null 2>&1 & + exit 0 +elif [ "$CMD" = "stop" ]; then + export CARBON_HOME=$CARBON_HOME + kill -term `cat $CARBON_HOME/carbon.pid` + exit 0 +elif [ "$CMD" = "restart" ]; then + export CARBON_HOME=$CARBON_HOME + kill -term `cat $CARBON_HOME/carbon.pid` + process_status=0 + pid=`cat $CARBON_HOME/carbon.pid` + while [ "$process_status" -eq "0" ] + do + sleep 1; + ps -p$pid 2>&1 > /dev/null + process_status=$? + done + +# using nohup bash to avoid erros in solaris OS.TODO + nohup bash $CARBON_HOME/bin/carbon.sh $args > /dev/null 2>&1 & + exit 0 +elif [ "$CMD" = "test" ]; then + JAVACMD="exec "$JAVACMD"" +elif [ "$CMD" = "version" ]; then + cat $CARBON_HOME/bin/kernel-version.txt + exit 0 +fi + +# ---------- Handle the SSL Issue with proper JDK version -------------------- +jdk_18=`$JAVA_HOME/bin/java -version 2>&1 | grep "1.[8]"` +if [ "$jdk_18" = "" ]; then + echo " Starting WSO2 Carbon (in unsupported JDK)" + echo " [ERROR] CARBON is supported only on JDK 1.8" +fi + +CARBON_XBOOTCLASSPATH="" +for f in "$CARBON_HOME"/bin/bootstrap/xboot/*.jar +do + if [ "$f" != "$CARBON_HOME/bin/bootstrap/xboot/*.jar" ];then + CARBON_XBOOTCLASSPATH="$CARBON_XBOOTCLASSPATH":$f + fi +done + +JAVA_ENDORSED_DIRS="$CARBON_HOME/bin/bootstrap/endorsed":"$JAVA_HOME/jre/lib/endorsed":"$JAVA_HOME/lib/endorsed" + +CARBON_CLASSPATH="" +if [ -e "$JAVA_HOME/bin/bootstrap/tools.jar" ]; then + CARBON_CLASSPATH="$JAVA_HOME/lib/tools.jar" +fi +for f in "$CARBON_HOME"/bin/bootstrap/*.jar +do + if [ "$f" != "$CARBON_HOME/bin/bootstrap/*.jar" ];then + CARBON_CLASSPATH="$CARBON_CLASSPATH":$f + fi +done +for t in "$CARBON_HOME"/bin/bootstrap/commons-lang*.jar +do + CARBON_CLASSPATH="$CARBON_CLASSPATH":$t +done +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"` + CARBON_HOME=`cygpath --absolute --windows "$CARBON_HOME"` + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"` + CARBON_CLASSPATH=`cygpath --path --windows "$CARBON_CLASSPATH"` + CARBON_XBOOTCLASSPATH=`cygpath --path --windows "$CARBON_XBOOTCLASSPATH"` +fi + +# ----- Execute The Requested Command ----------------------------------------- + +echo JAVA_HOME environment variable is set to $JAVA_HOME +echo CARBON_HOME environment variable is set to $CARBON_HOME + +cd "$CARBON_HOME" + +START_EXIT_STATUS=121 +status=$START_EXIT_STATUS + +#To monitor a Carbon server in remote JMX mode on linux host machines, set the below system property. +# -Djava.rmi.server.hostname="your.IP.goes.here" + +while [ "$status" = "$START_EXIT_STATUS" ] +do + $JAVACMD \ + -Xbootclasspath/a:"$CARBON_XBOOTCLASSPATH" \ + -Xms256m -Xmx1024m \ + -XX:+HeapDumpOnOutOfMemoryError \ + -XX:HeapDumpPath="$CARBON_HOME/logs/heap-dump.hprof" \ + -Djava.security.auth.login.config="$CARBON_HOME/conf/security/carbon-jaas.config" \ + $JAVA_OPTS \ + -classpath "$CARBON_CLASSPATH" \ + -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" \ + -Djava.io.tmpdir="$CARBON_HOME/tmp" \ + -Dcarbon.registry.root=/ \ + -Djava.command="$JAVACMD" \ + -Dcarbon.home="$CARBON_HOME" \ + -Djava.util.logging.config.file="$CARBON_HOME/bin/bootstrap/logging.properties" \ + -Djava.security.egd=file:/dev/./urandom \ + -Dfile.encoding=UTF8 \ + org.wso2.carbon.launcher.Main $* + status=$? +done diff --git a/product/src/assembly/bin.xml b/product/src/assembly/bin.xml index a389c488..65a19404 100644 --- a/product/src/assembly/bin.xml +++ b/product/src/assembly/bin.xml @@ -34,6 +34,8 @@ **/*.ipr **/*.iwr **/*.eclipse + **/carbon.sh + **/carbon.bat **/netty-transports.yml @@ -44,6 +46,13 @@ 644 + + carbon-home/bin + bin + 644 + + + carbon-home/conf/osgi conf/wso2 From 18ca10c0b8e360e849515c8e7b4efb839f68c545 Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Thu, 30 Mar 2017 14:10:02 +0530 Subject: [PATCH 7/8] include code review changes --- .../uuf/internal/RequestDispatcher.java | 2 - .../hbs/impl/js/JsFunctionsImpl.java | 10 ++- pom.xml | 19 ----- product/pom.xml | 74 ------------------- .../pom.xml | 4 - tests/osgi-tests/pom.xml | 11 --- .../conf/data-bridge/data-agent-conf.xml | 1 - .../carbon-home/dbscripts/WSO2CARBON_DB.sql | 2 +- .../carbon-home/dbscripts/h2_test_data.sql | 2 +- 9 files changed, 10 insertions(+), 115 deletions(-) diff --git a/components/uuf-core/src/main/java/org/wso2/carbon/uuf/internal/RequestDispatcher.java b/components/uuf-core/src/main/java/org/wso2/carbon/uuf/internal/RequestDispatcher.java index 049736b7..deed2f3d 100644 --- a/components/uuf-core/src/main/java/org/wso2/carbon/uuf/internal/RequestDispatcher.java +++ b/components/uuf-core/src/main/java/org/wso2/carbon/uuf/internal/RequestDispatcher.java @@ -96,8 +96,6 @@ private void servePageOrFragment(App app, HttpRequest request, HttpResponse resp response.setContent(STATUS_OK, renderedFragment.toString(), CONTENT_TYPE_APPLICATION_JSON); } else { // Request for a page. - - // Logic to validate against CSRF attacks if (request.getMethod().equals("POST") && !app.getConfiguration().getCsrfIgnoreUris().contains(request.getUriWithoutContextPath())) { diff --git a/components/uuf-renderablecreator-hbs/src/main/java/org/wso2/carbon/uuf/renderablecreator/hbs/impl/js/JsFunctionsImpl.java b/components/uuf-renderablecreator-hbs/src/main/java/org/wso2/carbon/uuf/renderablecreator/hbs/impl/js/JsFunctionsImpl.java index c9e32243..b944e17f 100644 --- a/components/uuf-renderablecreator-hbs/src/main/java/org/wso2/carbon/uuf/renderablecreator/hbs/impl/js/JsFunctionsImpl.java +++ b/components/uuf-renderablecreator-hbs/src/main/java/org/wso2/carbon/uuf/renderablecreator/hbs/impl/js/JsFunctionsImpl.java @@ -165,13 +165,19 @@ public SendToClientFunction getSendToClientFunction() { "=" + GSON.toJson(values[0]) + ";"; api.getRequestLookup().addToPlaceholder( - (values.length == 2 && Placeholder.headJs.name().equalsIgnoreCase((String) values[1])) ? - Placeholder.headJs : Placeholder.js, scriptTag); + isHeadJsPlaceholder(values) ? Placeholder.headJs : Placeholder.js, scriptTag); }; } return sendToClientFunction; } + private boolean isHeadJsPlaceholder(Object[] values) { + // this method check whether the user wants to push javascript into HeadJs placeholder. + // argument length is one means that, user haven't passed any placeholder. + // argument length two means that user passed a placeholder. so are checking pass argument value is HeadJs. + return values.length == 2 && Placeholder.headJs.name().equalsIgnoreCase((String) values[1]); + } + public I18nFunction getI18nFunction() { if (i18nFunction == null) { i18nFunction = (String key, String... values) -> { diff --git a/pom.xml b/pom.xml index fdecde7e..52a47d7d 100644 --- a/pom.xml +++ b/pom.xml @@ -131,12 +131,6 @@ gson ${gson.version} - org.yaml snakeyaml @@ -195,11 +189,6 @@ org.wso2.carbon.security.caas ${carbon.security.caas.version} - @@ -504,11 +493,6 @@ ${carbon.kernel.version} test - - org.wso2.carbon.identity.mgt - org.wso2.carbon.identity.mgt - ${org.wso2.carbon.identity.mgt.version} - org.wso2.carbon org.wso2.carbon.pax.exam.feature @@ -638,7 +622,6 @@ 1.0.2-m1 [1.0.0, 2.0.0) - 1.0.0-SNAPSHOT @@ -649,8 +632,6 @@ 6.9.10 2.4.2 - 0.1.38 - 1.8.4 1.8.4 diff --git a/product/pom.xml b/product/pom.xml index 10bcf77d..9aab59b1 100644 --- a/product/pom.xml +++ b/product/pom.xml @@ -173,43 +173,12 @@ ${carbon.uuf.version} zip - - org.wso2.carbon.security.caas org.wso2.carbon.security.caas.feature ${carbon.security.caas.version} zip - @@ -346,10 +315,6 @@ org.wso2.carbon.datasource.core.feature ${carbon.datasources.version} - org.wso2.carbon.security.caas.feature ${carbon.security.caas.version} @@ -363,23 +328,6 @@ org.wso2.carbon.uuf.sample.features-app.feature ${carbon.uuf.version} - - @@ -398,22 +346,6 @@ file:${basedir}/target/p2-repo - materialize-product package @@ -436,12 +368,10 @@ default - file:${basedir}/target/p2-repo ${basedir}/target/wso2carbon-kernel-${carbon.kernel.version}/wso2 - true @@ -517,10 +447,6 @@ org.wso2.carbon.uuf.sample.features-app.feature ${carbon.uuf.version} - org.wso2.carbon.security.caas.feature ${carbon.security.caas.version} diff --git a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml index 23a95083..09d14780 100644 --- a/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml +++ b/samples/osgi-bundles/org.wso2.carbon.uuf.sample.simple-auth.bundle/pom.xml @@ -42,10 +42,6 @@ org.wso2.carbon.messaging org.wso2.carbon.messaging - org.wso2.carbon.uuf org.wso2.carbon.uuf.core diff --git a/tests/osgi-tests/pom.xml b/tests/osgi-tests/pom.xml index e9554262..27e88be5 100644 --- a/tests/osgi-tests/pom.xml +++ b/tests/osgi-tests/pom.xml @@ -377,16 +377,6 @@ ${jcoverage.command} - org.jacoco @@ -478,5 +468,4 @@ - diff --git a/tests/tests-distribution/carbon-home/conf/data-bridge/data-agent-conf.xml b/tests/tests-distribution/carbon-home/conf/data-bridge/data-agent-conf.xml index 91f63d30..6de24173 100644 --- a/tests/tests-distribution/carbon-home/conf/data-bridge/data-agent-conf.xml +++ b/tests/tests-distribution/carbon-home/conf/data-bridge/data-agent-conf.xml @@ -59,4 +59,3 @@ 5000 - diff --git a/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql b/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql index 55becd27..25975625 100644 --- a/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql +++ b/tests/tests-distribution/carbon-home/dbscripts/WSO2CARBON_DB.sql @@ -1,5 +1,5 @@ -- --- Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +-- Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. diff --git a/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql b/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql index fac9f88e..14ced843 100644 --- a/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql +++ b/tests/tests-distribution/carbon-home/dbscripts/h2_test_data.sql @@ -1,5 +1,5 @@ -- --- Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. +-- Copyright (c) 2017, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. -- -- Licensed under the Apache License, Version 2.0 (the "License"); -- you may not use this file except in compliance with the License. From f1a5b81cd6e9bc43c13191fe700d5d1889b908ca Mon Sep 17 00:00:00 2001 From: cnapagoda Date: Thu, 30 Mar 2017 14:24:02 +0530 Subject: [PATCH 8/8] remove unwanted new line --- product/src/assembly/bin.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/product/src/assembly/bin.xml b/product/src/assembly/bin.xml index 65a19404..9261fe25 100644 --- a/product/src/assembly/bin.xml +++ b/product/src/assembly/bin.xml @@ -52,7 +52,6 @@ 644 - carbon-home/conf/osgi conf/wso2