/* * 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.api.util.exception.repository.RepositoryException; import eu.cloud4soa.api.util.exception.soa.SOAException; import java.util.Calendar; import java.util.List; import java.util.Locale; import eu.cloud4soa.repository.utils.RepositoryManager; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import eu.cloud4soa.api.datamodel.core.ApplicationInstance; import eu.cloud4soa.api.datamodel.core.UserInstance; import eu.cloud4soa.api.datamodel.core.equivalence.EquivalenceRuleHWCategoryInstance; import eu.cloud4soa.api.repository.ApplicationProfilesRepository; import java.util.UUID; import javax.ws.rs.core.Response; 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; //@Ignore @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath:ModelManagerCtx.xml"}) //@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) public class ModelManageTest { final Logger logger = LoggerFactory.getLogger(ModelManageTest.class); @Autowired private ModelManager modelManager; @Autowired private RepositoryManager repositoryManager; // private UserManagementAndSecurityModule userMngt; private ApplicationInstance applicationInstance; UserInstance userInstance; //mock objects @Autowired private ApplicationProfilesRepository applicationProfilesRepository; @Before public void setUp() { // userMngt = new UserManagementAndSecurityModule(); repositoryManager.beginTxOnSemRepo(); applicationInstance = createApplicationInstance(); userInstance = createTestUserInstance(); //Get userInstance through authentication. // userInstance = userMngt.authenticateUser(); } @After public void cleanUp() { // applicationProfilesRepository.cleanUp(); repositoryManager.rollbackTxSemRepo(); } @Test public void TestStoreApplicationProfile() { try { //Application instance create in setUp Assert.assertNull("Application already stored in ApplicationRepository", applicationProfilesRepository.getApplicationInstance(applicationInstance.getUriId())); } catch (RepositoryException ex) { Assert.fail("getApplicationInstance method has thrown an exception!"); } try { modelManager.storeApplicationProfile(applicationInstance, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } try { Assert.assertNotNull("Application is not stored in ApplicationRepository", applicationProfilesRepository.getApplicationInstance(applicationInstance.getUriId())); } catch (RepositoryException ex) { Assert.fail("getApplicationInstance method has thrown an exception!"); } } // also before @Ignore @Test public void TestStoreTurtleApplicationProfile() { String stringModelProfile = "@prefix essential-metamodel: <http://www.enterprise-architecture.org/essential-metamodel.owl#> ." + "@prefix c4s-app-m: <http://www.cloud4soa.eu/v0.1/application-domain#> ." + "@prefix c4s-inf-m: <http://www.cloud4soa.eu/v0.1/infrastructural-domain#> ." + "@prefix dcterms: <http://purl.org/dc/terms/> ." + "@prefix xsd: <http://www.w3.org/2001/XMLSchema#> ." + "c4s-app-m:aaa1 a essential-metamodel:Application; " + "dcterms:title \"C4Sv1.0\"^^xsd:string ; " + "dcterms:alternative \"c4sApp\" ; " + "essential-metamodel:description \"new c4s test application\" ; " + "c4s-app-m:application_code \"c4s00001\"^^xsd:string ; " + "dcterms:hasVersion \"1.0\"^^xsd:string . "; //Application instance create in setUp // Assert.assertFalse("Application already stored in ApplicationRepository", applicationProfilesRepository.hasApplicationProfile(applicationInstance, userInstance.getUriId())); try { modelManager.storeTurtleApplicationProfile(stringModelProfile, "http://www.cloud4soa.eu/v0.1/user-model#Developer/0910e8cf-6031-4d33-999e-7c0583c45257"); } catch (SOAException ex) { Assert.fail("storeTurtleApplicationProfile method has thrown an exception!"); } // Assert.assertTrue("Application is not stored in ApplicationRepository", applicationProfilesRepository.hasApplicationProfile(applicationInstance, userInstance.getUriId())); } @Test public void TestUpdateApplicationProfile() { try { modelManager.storeApplicationProfile(applicationInstance, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } try { Assert.assertTrue("Application has a different version", applicationProfilesRepository.getApplicationInstance(applicationInstance.getUriId()).getVersion().equalsIgnoreCase("1.0")); } catch (RepositoryException ex) { Assert.fail("getApplicationInstance method has thrown an exception!"); } applicationInstance.setVersion("2.0"); try { modelManager.updateApplicationProfile(applicationInstance); } catch (SOAException ex) { Assert.fail("updateApplicationProfile method has thrown an exception!"); } try { Assert.assertTrue("Application has a different version", applicationProfilesRepository.getApplicationInstance(applicationInstance.getUriId()).getVersion().equalsIgnoreCase("2.0")); } catch (RepositoryException ex) { Assert.fail("getApplicationInstance method has thrown an exception!"); } } @Test public void TestRetrieveAllApplicationProfiles() { //Test create 2 application instances ApplicationInstance applicationInstance2 = createApplicationInstance2(); try { modelManager.storeApplicationProfile(applicationInstance, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } try { modelManager.storeApplicationProfile(applicationInstance2, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } List<ApplicationInstance> applications = null; try { applications = modelManager.retrieveAllApplicationProfile(userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("retrieveAllApplicationProfile method has thrown an exception!"); } Assert.assertEquals( "retrieved a different number of applicationProfiles,", 2, applications.size()); Assert.assertTrue("Application is not retrieved", applicationInstance.getUriId().equals(applications.get(0).getUriId()) || applicationInstance.getUriId().equals(applications.get(1).getUriId())); Assert.assertTrue("Application2 is not retrieved", applicationInstance2.getUriId().equals(applications.get(0).getUriId()) || applicationInstance2.getUriId().equals(applications.get(1).getUriId())); } @Test public void TestRemoveApplicationProfile() { //Store first try { modelManager.storeApplicationProfile(applicationInstance, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } //try to remove try { modelManager.removeApplicationProfile(applicationInstance.getUriId()); } catch (SOAException ex) { Assert.fail("removeApplicationProfile method has thrown an exception!"); } try { ApplicationInstance retrievedApplicationProfile = modelManager.retrieveApplicationProfile(applicationInstance.getUriId(), userInstance.getUriId()); Assert.fail("Removed application is retrieved succesfully!"); } catch (SOAException ex) { Assert.assertEquals("Different exception status", Response.Status.BAD_REQUEST, ex.getResponseStatus()); } } @Test public void TestRemoveApplicationProfile2() { //Store first ApplicationInstance applicationInstance2 = createApplicationInstance2(); try { modelManager.storeApplicationProfile(applicationInstance, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } try { modelManager.storeApplicationProfile(applicationInstance2, userInstance.getUriId()); } catch (SOAException ex) { Assert.fail("storeApplicationProfile method has thrown an exception!"); } try { //try to remove modelManager.removeApplicationProfile(applicationInstance.getUriId()); } catch (SOAException ex) { Assert.fail("removeApplicationProfile method has thrown an exception!"); } try { ApplicationInstance retrievedApplicationProfile = modelManager.retrieveApplicationProfile(applicationInstance.getUriId(), userInstance.getUriId()); Assert.fail("Removed application is retrieved succesfully!"); } catch (SOAException ex) { Assert.assertEquals("Different exception status", Response.Status.BAD_REQUEST, ex.getResponseStatus()); } } @Test public void TestStoreEquivalenceRule_justName() { String source; String target; EquivalenceRuleHWCategoryInstance ruleToAdd; logger.info("%@%@%@@%@%@@%@%@%@%@@%@%@%@%@ TestStoreEquivalenceRule_justName %@%@%@%%@%@@%@%@%@%@% " + repositoryManager.getManager().isAutocommit() + " - transaction support " + repositoryManager.checkAutocommit() ); // repositoryManager.begin(); source = "Clone"; target = "ECU"; ruleToAdd = createEquivalenceRule( source, target, 1f ); try { modelManager.addEquivalenceRule( ruleToAdd ); } catch (SOAException ex) { logger.error("Error in storing equivalence rule: ", ex); Assert.fail("Impossible to store the EquivalenceRule: " + ex.getMessage()); } logger.info("^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TestStoreEquivalenceRule_justName finished ^^^^^^^^^^^^^^^^^^"); logger.info( " <><><><> aborting"); // repositoryManager.rollback(); } @Transactional @Test public void TestStoreEquivalenceRule_fullUris() { String source; String target; EquivalenceRuleHWCategoryInstance ruleToAdd; logger.info("%@%@%@@%@%@@%@%@%@%@@%@%@%@%@ TestStoreEquivalenceRule_fullUris %@%@%@%%@%@@%@%@%@%@%" + repositoryManager.getManager().isAutocommit() + " - transaction support " + repositoryManager.checkAutocommit()); source = "http://www.cloud4soa.eu/v0.1/infrastructural-domain#Clone"; target = "http://www.cloud4soa.eu/v0.1/infrastructural-domain#ECU"; ruleToAdd = createEquivalenceRule( source, target, 1f ); try { modelManager.addEquivalenceRule( ruleToAdd ); } catch (SOAException ex) { logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~ TestStoreEquivalenceRule_fullUris ERROR ~~~~~~~~~~~~~~~~~~~~"); Assert.fail("Impossible to store the EquivalenceRule: " + ex.getMessage()); } logger.info("^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TestStoreEquivalenceRule_fullUris finished ^^^^^^^^^^^^^^^^^^"); logger.info( " <><><><> aborting"); // repositoryManager.rollback(); } @Test public void TestStoreEquivalenceRule2() { EquivalenceRuleHWCategoryInstance erhc = new EquivalenceRuleHWCategoryInstance(); erhc.setHasSource("http://www.cloud4soa.eu/v0.1/infrastructural-domain#Clone"); erhc.setHasTarget("http://www.cloud4soa.eu/v0.1/infrastructural-domain#ECU"); erhc.setHasConversionRate(1f); try { modelManager.addEquivalenceRule(erhc); } catch (SOAException ex) { Assert.fail("Impossible to store the EquivalenceRule: " + ex.getMessage()); } erhc = new EquivalenceRuleHWCategoryInstance(); erhc.setHasSource("http://www.cloud4soa.eu/v0.1/infrastructural-domain#Clone"); erhc.setHasTarget("http://www.cloud4soa.eu/v0.1/infrastructural-domain#ECU"); erhc.setHasConversionRate(1f); try { modelManager.addEquivalenceRule(erhc); Assert.fail("The model manager should not permit to store an EquivalenceRule havin an UriId that already exists!"); } catch (SOAException ex) { Assert.assertEquals("The thrown exception is not the expected one!", "An EquivalenceRuleHardwareCategory with the same UriId already exists", ex.getMessage()); } erhc = new EquivalenceRuleHWCategoryInstance(); erhc.setEquivalenceRuleHWCategoryUriId("eqRuleCloneToECU"); erhc.setHasSource("http://www.cloud4soa.eu/v0.1/infrastructural-domain#Clone"); erhc.setHasTarget("http://www.cloud4soa.eu/v0.1/infrastructural-domain#ECU"); erhc.setHasConversionRate(1f); try { modelManager.addEquivalenceRule(erhc); Assert.fail("The model manager should not permit to store an already existent EquivalenceRule!"); } catch (SOAException ex) { Assert.assertEquals("The thrown exception is not the expected one!", "An EquivalenceRuleHardwareCategory with the same Source and Target already exists", ex.getMessage()); } } private ApplicationInstance createApplicationInstance() { ApplicationInstance ai = new ApplicationInstance(); ai.setAcronym("C4S"); ai.setApplicationcode("C4Sv1.0"); ai.setDigest("C4S_Digest"); ai.setProgramminglanguage("Java"); ai.setProgramminglanguageVersion("1.6"); ai.setSizeQuantity(45234567f); // ai.setUriId("http://www.cloud4soa.eu/software/C4S_v1.0/"); ai.setVersion("1.0"); return ai; } private ApplicationInstance createApplicationInstance2() { ApplicationInstance ai = new ApplicationInstance(); ai.setAcronym("C4S2"); ai.setApplicationcode("C4S2v1.0"); ai.setDigest("C4S_Digest"); ai.setProgramminglanguage("Java"); ai.setProgramminglanguageVersion("1.6"); ai.setSizeQuantity(45234567f); // ai.setUriId("http://www.cloud4soa.eu/software/C4S_v1.0/"); ai.setVersion("1.0"); return ai; } private UserInstance createTestUserInstance() { UserInstance userInstance = new UserInstance(); userInstance.setUriId("yosuId"); userInstance.setFirstName("Yosu"); userInstance.setFamilyname("GorroƱogoitia"); userInstance.setAccountname("yosu"); userInstance.setGeekcode("yosu"); userInstance.setSurname("GorroƱogoitia"); Calendar calendar = Calendar.getInstance(Locale.ITALY); calendar.set(1967, 3, 11); userInstance.setBirthday(calendar.getTime()); userInstance.setCloud4SoaAccountUriId("yosu"); userInstance.setAccountname("yosu"); // cloud4SoaAccount.setUriId("http:www.cloud4soa.eu/yosu#"); return userInstance; } private EquivalenceRuleHWCategoryInstance createEquivalenceRule( String source, String target, float conversionFactor ) { EquivalenceRuleHWCategoryInstance erhc = new EquivalenceRuleHWCategoryInstance(); erhc = new EquivalenceRuleHWCategoryInstance(); erhc.setEquivalenceRuleHWCategoryUriId( UUID.randomUUID().toString() ); erhc.setHasSource( source ); erhc.setHasTarget( target ); erhc.setHasConversionRate( conversionFactor); return erhc; } }