Java tutorial
/* * Copyright (c) 2014, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you under the Apache License, * Version 2.0 (the "License"); you may not use this file except * in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.wso2.carbon.ss.integration.test.rssmanager; import org.apache.axis2.AxisFault; import org.apache.commons.codec.binary.Base64; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import org.wso2.carbon.automation.engine.context.TestUserMode; import org.wso2.carbon.rssmanager.common.RSSManagerHelper; import org.wso2.carbon.rssmanager.core.dto.xsd.DatabaseInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.DatabasePrivilegeTemplateInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.DatabaseUserInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.MySQLPrivilegeSetInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.RSSInstanceInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.SSHInformationConfigInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.SnapshotConfigInfo; import org.wso2.carbon.rssmanager.core.dto.xsd.UserDatabaseEntryInfo; import org.wso2.carbon.ss.SSIntegrationTest; import org.wso2.ss.integration.common.clients.RSSManagerClient; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertTrue; public class RSSTenantMgtTest extends SSIntegrationTest { private static final Log log = LogFactory.getLog(RSSMgtTestCase.class); private RSSManagerClient client; private final String DEFAULT_ENVIRONMENT_NAME = "DEFAULT"; private final String SYSTEM_TYPE = "SYSTEM"; private final String USER_DEFINED_TYPE = "USER_DEFINED"; @BeforeClass(alwaysRun = true) public void initializeTest() throws Exception { super.init(TestUserMode.TENANT_USER); client = new RSSManagerClient(ssContext.getContextUrls().getBackEndUrl(), sessionCookie); } @DataProvider(name = "databases") public Object[][] databases() { return new Object[][] { { "testdb1" }, { "testdb2" }, { "testdb3" } }; } @DataProvider(name = "users") public Object[][] users() { return new Object[][] { { "user1" }, { "user2" }, { "user3" } }; } @DataProvider(name = "templates") public Object[][] templates() { return new Object[][] { { "testtemplate1" }, { "testtemplate2" }, { "testtemplate3" } }; } @DataProvider(name = "attachUsers") public Object[][] attachUsers() { return new Object[][] { { "user1", "testdb1", "testtemplate1" }, { "user2", "testdb1", "testtemplate1" } }; } @Test(groups = "wso2.ss", description = "create database", dataProvider = "databases", priority = 1) public void createDB(String dbName) throws AxisFault { DatabaseInfo database = new DatabaseInfo(); database.setName(dbName); database.setType(SYSTEM_TYPE); client.createDatabase(DEFAULT_ENVIRONMENT_NAME, database); String qualifiedDBName = dbName + "_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()); database = client.getDatabase(DEFAULT_ENVIRONMENT_NAME, SYSTEM_TYPE, qualifiedDBName, SYSTEM_TYPE); assertNotNull(database); assertEquals(qualifiedDBName, database.getName()); } @Test(groups = "wso2.ss", description = " get database list ", dependsOnMethods = { "createDB" }, priority = 1) public void getDatabasesList() throws AxisFault { assertTrue(client.getDatabaseList(DEFAULT_ENVIRONMENT_NAME).length == 3); } @Test(groups = "wso2.ss", description = "create database user", dataProvider = "users", priority = 1) public void createDbUser(String userName) throws AxisFault { DatabaseUserInfo databaseUser = new DatabaseUserInfo(); databaseUser.setUsername(userName); databaseUser.setPassword("user"); databaseUser.setType(SYSTEM_TYPE); client.createDatabaseUser(DEFAULT_ENVIRONMENT_NAME, databaseUser); String qualifiedDBUsername = userName + "_" + getDatabaseUserPostfix(tenantInfo.getDomain()); databaseUser = client.getDatabaseUser(DEFAULT_ENVIRONMENT_NAME, SYSTEM_TYPE, qualifiedDBUsername, SYSTEM_TYPE); assertNotNull(databaseUser); assertEquals(qualifiedDBUsername, databaseUser.getName()); } @Test(groups = "wso2.ss", description = "create databae priviledge template", dataProvider = "templates", priority = 1) public void createPrivilegeTemplate(String tempName) throws AxisFault { DatabasePrivilegeTemplateInfo template = new DatabasePrivilegeTemplateInfo(); template.setName(tempName); MySQLPrivilegeSetInfo privileges = new MySQLPrivilegeSetInfo(); privileges.setAlterPriv("Y"); template.setPrivileges(privileges); client.createDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, template); template = client.getDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, tempName); assertNotNull(template); assertEquals(tempName, template.getName()); } @Test(groups = "wso2.ss", description = "assign user to database", dependsOnMethods = { "createDB", "createDbUser", "createPrivilegeTemplate" }, dataProvider = "attachUsers", priority = 2) public void attachUserToDB(String user, String db, String temp) throws AxisFault { String qualifiedDBName = db + "_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()); String qualifiedDBUsername = user + "_" + getDatabaseUserPostfix(tenantInfo.getDomain()); client.attachUserToDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBName, qualifiedDBUsername, temp, SYSTEM_TYPE); DatabaseUserInfo[] databaseUserInfos = client.getUsersAttachedToDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBName, SYSTEM_TYPE); boolean userExist = false; for (DatabaseUserInfo databaseUserInfo : databaseUserInfos) { if (qualifiedDBUsername.equalsIgnoreCase(databaseUserInfo.getName())) { userExist = true; } } assertTrue(userExist); } @Test(groups = "wso2.ss", description = "detach user from database", dependsOnMethods = { "attachUserToDB" }, priority = 2) public void detachUserFromDB() throws AxisFault { String qualifiedDBName = "testdb1_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()); String qualifiedDBUsername = "user2_" + getDatabaseUserPostfix(tenantInfo.getDomain()); client.detachUserFromDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBName, qualifiedDBUsername, SYSTEM_TYPE); DatabaseUserInfo[] databaseUserInfos = client.getUsersAttachedToDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBName, SYSTEM_TYPE); boolean userExist = false; for (DatabaseUserInfo databaseUserInfo : databaseUserInfos) { if (qualifiedDBUsername.equalsIgnoreCase(databaseUserInfo.getName())) { userExist = true; } } assertFalse(userExist); } @Test(groups = "wso2.ss", description = "delete database privilege template", dependsOnMethods = { "createPrivilegeTemplate" }, priority = 2) public void deletePrivilegeTemplate() throws AxisFault { client.dropDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, "testtemplate1"); boolean isExist = false; for (DatabasePrivilegeTemplateInfo templateInfo : client .getDatabasePrivilegesTemplates(DEFAULT_ENVIRONMENT_NAME)) { if ("testtemplate1".equalsIgnoreCase(templateInfo.getName())) { isExist = true; } } assertFalse(isExist); } @Test(groups = "wso2.ss", description = "edit database privilege template", dependsOnMethods = { "createPrivilegeTemplate" }, priority = 2) public void editPrivilegeTemplate() throws AxisFault { DatabasePrivilegeTemplateInfo template; template = client.getDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, "testtemplate3"); MySQLPrivilegeSetInfo privileges = (MySQLPrivilegeSetInfo) template.getPrivileges(); privileges.setAlterPriv("N"); template.setPrivileges(privileges); client.editDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, template); DatabasePrivilegeTemplateInfo tempInfo = client.getDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, "testtemplate3"); Assert.assertEquals(tempInfo.getPrivileges().getAlterPriv(), "N"); } @Test(groups = "wso2.ss", expectedExceptions = AxisFault.class, description = "drop attached user ", dependsOnMethods = { "createDB", "createPrivilegeTemplate", "createDbUser", "attachUserToDB" }, priority = 2) public void dropAttachedUser() throws AxisFault { String qualifiedDBUsername = "user1_" + getDatabaseUserPostfix(tenantInfo.getDomain()); client.dropDatabaseUser(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBUsername, SYSTEM_TYPE); } @Test(groups = "wso2.ss", description = "drop attached user ", dependsOnMethods = { "createDB", "createPrivilegeTemplate", "createDbUser", "attachUserToDB" }, priority = 2) public void dropDatabaseUser() throws AxisFault { String qualifiedDBUsername = "user2_" + getDatabaseUserPostfix(tenantInfo.getDomain()); client.dropDatabaseUser(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBUsername, SYSTEM_TYPE); boolean isExist = false; for (DatabaseUserInfo databaseUserInfo : client.getDatabaseUsers(DEFAULT_ENVIRONMENT_NAME)) { if ("user2".equalsIgnoreCase(databaseUserInfo.getName())) { isExist = true; } } assertFalse(isExist); } @Test(groups = "wso2.ss", description = "create datasource from existing database", dependsOnMethods = { "attachUserToDB" }, priority = 2, dataProvider = "databases") public void createDatasource(String dbName) throws AxisFault { String qualifidDBName = dbName + "_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()); DatabaseUserInfo dBInfo[] = client.getUsersAttachedToDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifidDBName, SYSTEM_TYPE); if (dBInfo != null) { if (dBInfo.length > 0) { UserDatabaseEntryInfo entry = new UserDatabaseEntryInfo(); entry.setRssInstanceName("WSO2RSS1"); entry.setDatabaseName(qualifidDBName); entry.setUsername(dBInfo[0].getUsername()); entry.setType(SYSTEM_TYPE); ; client.createCarbonDataSource(DEFAULT_ENVIRONMENT_NAME, "ds_" + System.currentTimeMillis(), entry); assertTrue(true); } } } @Test(groups = "wso2.ss", description = "drop database", dependsOnMethods = { "createDB", "getDatabasesList", "detachUserFromDB" }) public void dropDatabase() throws AxisFault { String qualifiedDBName = "testdb1_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()); client.dropDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", qualifiedDBName, SYSTEM_TYPE); boolean isExist = false; for (DatabaseInfo databaseInfo : client.getDatabaseList(DEFAULT_ENVIRONMENT_NAME)) { if (qualifiedDBName.equalsIgnoreCase(databaseInfo.getName())) { isExist = true; } } assertFalse(isExist); } @AfterClass(alwaysRun = true) public void cleanUp() throws Exception { client.dropDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", "testdb2_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()), SYSTEM_TYPE); client.dropDatabase(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", "testdb3_" + RSSManagerHelper.processDomainName(tenantInfo.getDomain()), SYSTEM_TYPE); client.dropDatabaseUser(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", "user1_" + getDatabaseUserPostfix(tenantInfo.getDomain()), SYSTEM_TYPE); client.dropDatabaseUser(DEFAULT_ENVIRONMENT_NAME, "WSO2RSS1", "user3_" + getDatabaseUserPostfix(tenantInfo.getDomain()), SYSTEM_TYPE); client.dropDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, "temp1"); client.dropDatabasePrivilegesTemplate(DEFAULT_ENVIRONMENT_NAME, "temp3"); } private static String getDatabaseUserPostfix(String tenantDomain) { byte[] bytes = intToByteArray(tenantDomain.hashCode()); return Base64.encodeBase64URLSafeString(bytes).replace("_", "$"); } private static byte[] intToByteArray(int value) { byte[] b = new byte[6]; for (int i = 0; i < 6; ++i) { int offset = (b.length - 1 - i) * 8; b[i] = (byte) (value >>> offset & 255); } return b; } }