/* * Copyright 2013 Cloud4SOA, www.cloud4soa.eu * * 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 eu.cloud4soa.soa; import eu.cloud4soa.repository.utils.RepositoryManager; import eu.cloud4soa.api.datamodel.core.PaaSInstance; import eu.cloud4soa.api.datamodel.soa.UserPaaSCredentials; import java.util.List; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import eu.cloud4soa.api.datamodel.core.UserInstance; import eu.cloud4soa.api.datamodel.core.utilBeans.DeveloperInstance; import eu.cloud4soa.api.datamodel.core.utilBeans.PaaSProviderInstance; import eu.cloud4soa.api.datamodel.core.utilBeans.PaaSUserInstance; import eu.cloud4soa.api.util.exception.soa.SOAException; import eu.cloud4soa.relational.persistence.UsertypeRepository; import eu.cloud4soa.soa.exceptions.ResourceException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Locale; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.junit.Ignore; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import static org.junit.Assert.assertTrue; //@Ignore @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:UserManagementCtx.xml"}) //@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class UserManagementAndSecurityModuleTest { final Logger logger = LoggerFactory.getLogger(UserManagementAndSecurityModuleTest.class); @Autowired private UserManagementAndSecurityModule userManagementAndSecurityModule; @Autowired private AnnouncementModule announcementModule; @Autowired private UsertypeRepository userTypeRepository; @Autowired private RepositoryManager repositoryManager; private UserInstance userInstance; private String userId; @Before public void setUp() { repositoryManager.beginTxOnSemRepo(); userInstance = createTestUserInstance(); String username = "yosu"; String password = "yosuPassword"; //Get userInstance through authentication. Response resp; try { resp = userManagementAndSecurityModule.createNewAccount(userInstance, username, password); userId = (String) resp.getEntity(); } catch (SOAException ex) { Assert.fail("createNewAccount has thrown an exception: " + ex.getMessage()); } } @Test public void testUserRepositoryContent() { assertTrue( "Usertype table should contain at least 2 elements", userTypeRepository.findAll().size() >= 2 ); } @Ignore @Test public void TestAuthenticateUser() { try { //AuthenticateUser input to be determined in SOA interface userManagementAndSecurityModule.authenticateUser("username", "password"); } catch (SOAException ex) { Assert.fail("authenticateUser method has thrown an exception!"); } } @Test public void TestGetUserInstance() { UserInstance retrivedUserInstance = null; try { retrivedUserInstance = userManagementAndSecurityModule.getUserInstance(userId); } catch (SOAException ex) { Assert.fail("getUserInstance method has thrown an exception!"); } Assert.assertEquals("retrieve UriId: ", userInstance.getUriId(), retrivedUserInstance.getUriId()); Assert.assertEquals("retrieve Accountname", userInstance.getAccountname(), retrivedUserInstance.getAccountname()); Assert.assertEquals("retrieve FirstName", userInstance.getFirstName(), retrivedUserInstance.getFirstName()); Assert.assertEquals("retrieve Surname", userInstance.getSurname(), retrivedUserInstance.getSurname()); Assert.assertEquals("retrieve Geekcode", userInstance.getGeekcode(), retrivedUserInstance.getGeekcode()); Assert.assertEquals("retrieve Cloud4SoaAccountUriId", userInstance.getCloud4SoaAccountUriId(), retrivedUserInstance.getCloud4SoaAccountUriId()); } @Test public void TestGetUserInstance1() { try { UserInstance retrivedUserInstance = userManagementAndSecurityModule.getUserInstance(userId); } catch (ResourceException e) { Assert.fail("userManagementAndSecurityModule in not able to retrieve an existing user: " + userId); } catch (SOAException ex) { Assert.fail("getUserInstance method has thrown an exception!"); } try { UserInstance retrivedUserInstance = userManagementAndSecurityModule.getUserInstance("yosu1"); Assert.fail("userManagementAndSecurityModule is able to retrieve a non existing user: " + userId); } catch (ResourceException e) { Response resp = e.getResponse(); Status.fromStatusCode(resp.getStatus()).equals(Status.BAD_REQUEST); Assert.assertTrue("Different exception code", Status.fromStatusCode(resp.getStatus()).equals(Status.BAD_REQUEST)); } catch (SOAException ex) { Assert.fail("getUserInstance method has thrown an exception!"); } } @Test public void TestIsAccountNameInUse() { UserInstance retrivedUserInstance = null; try { retrivedUserInstance = userManagementAndSecurityModule.getUserInstance(userId); } catch (ResourceException e) { Assert.fail("userManagementAndSecurityModule in not able to retrieve an existing user: " + userId); } catch (SOAException ex) { Assert.fail("getUserInstance method has thrown an exception!"); } try { boolean accountNameInUse = userManagementAndSecurityModule.isAccountNameInUse(retrivedUserInstance.getAccountname()); if (accountNameInUse == false) { Assert.fail("userManagementAndSecurityModule has not found the existing account name: " + retrivedUserInstance.getAccountname()); } String nonExistingAccountName = "whatever"; accountNameInUse = userManagementAndSecurityModule.isAccountNameInUse(nonExistingAccountName); if (accountNameInUse == true) { Assert.fail("userManagementAndSecurityModule has not found the existing account name: " + nonExistingAccountName); } } catch (ResourceException e) { Response resp = e.getResponse(); Status.fromStatusCode(resp.getStatus()).equals(Status.BAD_REQUEST); Assert.assertTrue("Different exception code", Status.fromStatusCode(resp.getStatus()).equals(Status.BAD_REQUEST)); } catch (SOAException ex) { Assert.fail("userManagementAndSecurityModule is not able to check if the account name already exists: " + ex.getMessage()); } } @Test @Transactional public void TestStoreCredentials() { //CLOUDBEES keys String api_key = "4184E8A5D19D02D9"; String api_secret = "UZPYSQVJMQLVNNVK6GSZQPRUTAZ+QKNB9QCKDWVNQMK="; String accountName = "testaccount"; String paaSInstanceUriId = null; //Application instance create in setUp PaaSInstance paaSInstance = createTestPaasInstance(); UserInstance paaSUserInstance = createTestPaaSUserInstance(); String paaSUserId = storePaaSUser(paaSUserInstance); try { paaSInstanceUriId = announcementModule.storePaaSInstance(paaSInstance, paaSUserId); } catch (SOAException ex) { Assert.fail("storePaaSInstance method has thrown an exception!"); } List<UserPaaSCredentials> listUserCredentialsForPaaS = null; try { listUserCredentialsForPaaS = userManagementAndSecurityModule.readAllUserCredentialsForPaaS(userId); Assert.assertTrue("Credentials list is not empty!", listUserCredentialsForPaaS.isEmpty()); //Testing STORE Credentials userManagementAndSecurityModule.storeUserCredentialsForPaaS(userId, paaSInstanceUriId, api_key, api_secret, accountName); //Testing READ ALL Credentials listUserCredentialsForPaaS = userManagementAndSecurityModule.readAllUserCredentialsForPaaS(userId); Assert.assertTrue("Credentials list size is not 1!", listUserCredentialsForPaaS.size()==1); UserPaaSCredentials userPaaSCredentials = listUserCredentialsForPaaS.get(0); String credentialsUserInstanceUriId = userPaaSCredentials.getUserInstanceUriId(); String credentialsPaaSInstanceUriId = userPaaSCredentials.getPaaSInstanceUriId(); String credentialsPublicKey = userPaaSCredentials.getPublicKey(); String credentialsSecretKey = userPaaSCredentials.getSecretKey(); String credentialsAccountName = userPaaSCredentials.getAccountName(); Assert.assertEquals("retrieved credential userInstanceUriId is not the expected one", userId, credentialsUserInstanceUriId); // Assert.assertEquals("retrieved credential paaSInstanceUriId is not the expected one", paaSInstanceUriId, credentialsPaaSInstanceUriId); Assert.assertEquals("retrieved credential publicKey is not the expected one", api_key, credentialsPublicKey); Assert.assertEquals("retrieved credential secretKey is not the expected one", api_secret, credentialsSecretKey); Assert.assertEquals("retrieved credential accountName is not the expected one", accountName, credentialsAccountName); //Testing READ ONE Credentials UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(userId, paaSInstanceUriId); Assert.assertNotNull("Credentials object is null!", userCredentialsForPaaS); credentialsUserInstanceUriId = userCredentialsForPaaS.getUserInstanceUriId(); credentialsPaaSInstanceUriId = userCredentialsForPaaS.getPaaSInstanceUriId(); credentialsPublicKey = userCredentialsForPaaS.getPublicKey(); credentialsSecretKey = userCredentialsForPaaS.getSecretKey(); credentialsAccountName = userCredentialsForPaaS.getAccountName(); Assert.assertEquals("retrieved credential userInstanceUriId is not the expected one", userId, credentialsUserInstanceUriId); // Assert.assertEquals("retrieved credential paaSInstanceUriId is not the expected one", paaSInstanceUriId, credentialsPaaSInstanceUriId); Assert.assertEquals("retrieved credential publicKey is not the expected one", api_key, credentialsPublicKey); Assert.assertEquals("retrieved credential secretKey is not the expected one", api_secret, credentialsSecretKey); Assert.assertEquals("retrieved credential accountName is not the expected one", accountName, credentialsAccountName); /* //Testing UPDATE Credentials api_key = "changedPublicKey"; api_secret = "changedSecretKey"; accountName = "accountNameChanged"; userManagementAndSecurityModule.updateUserCredentialsForPaaS(userId, paaSInstanceUriId, api_key, api_secret, accountName); userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(userId, paaSInstanceUriId); Assert.assertNotNull("Credentials object is null!", userCredentialsForPaaS); credentialsUserInstanceUriId = userCredentialsForPaaS.getUserInstanceUriId(); credentialsPaaSInstanceUriId = userCredentialsForPaaS.getPaaSInstanceUriId(); credentialsPublicKey = userCredentialsForPaaS.getPublicKey(); credentialsSecretKey = userCredentialsForPaaS.getSecretKey(); credentialsAccountName = userCredentialsForPaaS.getAccountName(); Assert.assertEquals("retrieved credential userInstanceUriId is not the expected one", userId, credentialsUserInstanceUriId); // Assert.assertEquals("retrieved credential paaSInstanceUriId is not the expected one", paaSInstanceUriId, credentialsPaaSInstanceUriId); Assert.assertEquals("retrieved credential publicKey is not the expected one", api_key, credentialsPublicKey); Assert.assertEquals("retrieved credential secretKey is not the expected one", api_secret, credentialsSecretKey); Assert.assertEquals("retrieved credential accountName is not the expected one", accountName, credentialsAccountName); */ //Testing REMOVE Credentials userManagementAndSecurityModule.removeUserCredentialsForPaaS(userId, paaSInstanceUriId); listUserCredentialsForPaaS = userManagementAndSecurityModule.readAllUserCredentialsForPaaS(userId); Assert.assertTrue("Credentials list is not empty!", listUserCredentialsForPaaS.isEmpty()); } catch (ResourceException e) { Assert.fail("userManagementAndSecurityModule in not able to retrieve an existing user: " + userId); } catch (SOAException ex) { Assert.fail("Exception: "+ex.getMessage()); } } @Ignore @Test public void TestStoreUserInstance() { //Commented since current SOA interface use frontend UserInstance // userMngt.storeUserInstance(userInstance); } @After public void cleanUp() { repositoryManager.rollbackTxSemRepo(); } private UserInstance createTestUserInstance() { UserInstance userInstance = new DeveloperInstance(); userInstance.setFirstName("Yosu"); userInstance.setFamilyname("GorroƱogoitia"); userInstance.setAccountname("yosu"); userInstance.setGeekcode("yosu"); userInstance.setSurname("GorroƱogoitia"); String date = 1967 + "/" + 3 + "/" + 11; java.util.Date utilDate = null; SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); try { utilDate = formatter.parse(date); } catch (ParseException ex) { logger.error(ex.getMessage()); } userInstance.setBirthday(utilDate); return userInstance; } private PaaSInstance createTestPaasInstance() { PaaSInstance paaSInstance = new PaaSInstance(); paaSInstance.setTitle("CloudControl"); paaSInstance.setSupportedProgrammingLanguage("PHP"); paaSInstance.setProviderTitle("Cloud Control Inc."); paaSInstance.setStatus("Active"); paaSInstance.setURL("http://cloudcontrol.com/"); return paaSInstance; } private UserInstance createTestPaaSUserInstance() { PaaSUserInstance userInstance = new PaaSUserInstance(); userInstance.setFirstName("CloudControl"); userInstance.setFamilyname("CloudControl"); userInstance.setAccountname("CloudControl"); userInstance.setGeekcode("CloudControl"); userInstance.setSurname("CloudControl"); Calendar calendar = Calendar.getInstance(Locale.ITALY); calendar.set(1967, 3, 11); userInstance.setBirthday(calendar.getTime()); PaaSProviderInstance paaSProviderInstance = new PaaSProviderInstance("CloudControl", "http://cloudcontrol.com"); userInstance.setPaaSProviderInstance(paaSProviderInstance); return userInstance; } private String storePaaSUser(UserInstance userInstance){ String username = "cc"; String password = "cc"; //Get userInstance through authentication. Response resp; String userId = null; try { resp = userManagementAndSecurityModule.createNewAccount(userInstance, username, password); userId = (String) resp.getEntity(); } catch (SOAException ex) { Assert.fail("createNewAccount has thrown an exception: " + ex.getMessage()); } return userId; } }