diff --git a/.travis.yml b/.travis.yml index 479501e901b..a916f32fe61 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,12 +10,20 @@ cache: before_install: - choco install maven - - export MAVEN_OPTS='-Xmx6g' - RefreshEnv.cmd + - export MAVEN_OPTS='-Xmx6g -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn' - export JAVA_HOME=`find "/c/Program Files/Java" -name jdk1.8.*` -# custom script is used so build and tests are done in one mvn command, separating it (as Travis does by default) leads to problem with ConnId (notably DummyResource) -script: mvn -B clean install - addons: - hostname: localhost # workaround for short hostname \ No newline at end of file + hostname: localhost # workaround for short hostname + +env: + global: + - MALLOC_ARENA_MAX=2 + +matrix: + include: + - name: JDK8 - Run all excluding model-intest + script: mvn install -B -DskipTests; mvn verify -DskipModelIntTest=true -DskipModelUnitTest=true + - name: JDK8 - Run only model-intest + script: mvn install -B -DskipTests; mvn verify -pl :model-intest diff --git a/build-system/pom.xml b/build-system/pom.xml index 5e752d7a0cc..b4ba46582a5 100644 --- a/build-system/pom.xml +++ b/build-system/pom.xml @@ -89,11 +89,11 @@ 1.8.0 2.9.5 1.19 - 2.22.1 + 3.0.0-M2 0.9.11 20.0 1.72 - 2.22.0 + 3.0.0-M2 1.8 @@ -1427,6 +1427,7 @@ + + false + --> false @@ -1492,6 +1494,50 @@ + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${failsafe.version} + + + integration-test + integration-test + + integration-test + verify + + + true + + src/test/resources/truststore.jks + target/midpoint-home + ${project.build.directory}/test-classes/logging.properties + + -Xms1024m -Xmx4096m -Duser.language=en + + testng-integration.xml + + + + suitename + Integration + + + usedefaultlisteners + false + + + + + + + org.codehaus.mojo findbugs-maven-plugin @@ -1626,6 +1672,13 @@ true + + maven-failsafe-plugin + ${failsafe.version} + + true + + @@ -1641,6 +1694,13 @@ true + + maven-failsafe-plugin + ${failsafe.version} + + true + + @@ -1656,6 +1716,13 @@ true + + maven-failsafe-plugin + ${failsafe.version} + + true + + @@ -1671,6 +1738,13 @@ true + + maven-failsafe-plugin + ${failsafe.version} + + true + + diff --git a/dist/midpoint-api/pom.xml b/dist/midpoint-api/pom.xml index a3d4839e4c3..73aea5f9a34 100644 --- a/dist/midpoint-api/pom.xml +++ b/dist/midpoint-api/pom.xml @@ -134,6 +134,12 @@ true + + maven-failsafe-plugin + + true + + maven-dependency-plugin diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java index a33dfd28c63..5ec83f6881b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/page/PageBase.java @@ -1790,6 +1790,8 @@ private MainMenuItem createServerTasksItems() { PageTaskEdit.class, null, createVisibleDisabledBehaviorForEditMenu(PageTaskEdit.class)); item.getItems().add(menuItem); + addCollectionsMenuItems(item.getItems(), TaskType.COMPLEX_TYPE); + return item; } @@ -1806,6 +1808,8 @@ private MainMenuItem createResourcesItems() { addMenuItem(item, "PageAdmin.menu.top.resources.import", PageImportResource.class); addMenuItem(item, "PageAdmin.menu.top.connectorHosts.list", PageConnectorHosts.class); + addCollectionsMenuItems(item.getItems(), ResourceType.COMPLEX_TYPE); + return item; } @@ -1930,7 +1934,7 @@ private MainMenuItem createUsersItems() { createFocusPageNewEditMenu(item.getItems(), "PageAdmin.menu.top.users.new", "PageAdmin.menu.top.users.edit", PageUser.class, true); - addUsersViewMenuItems(item.getItems()); + addCollectionsMenuItems(item.getItems(), UserType.COMPLEX_TYPE); return item; } @@ -2048,6 +2052,8 @@ private MainMenuItem createOrganizationsMenu() { createFocusPageNewEditMenu(item.getItems(), "PageAdmin.menu.top.users.org.new", "PageAdmin.menu.top.users.org.edit", PageOrgUnit.class, true); + addCollectionsMenuItems(item.getItems(), OrgType.COMPLEX_TYPE); + return item; } @@ -2060,6 +2066,8 @@ private MainMenuItem createRolesItems() { createFocusPageNewEditMenu(item.getItems(), "PageAdmin.menu.top.roles.new", "PageAdmin.menu.top.roles.edit", PageRole.class, true); + addCollectionsMenuItems(item.getItems(), RoleType.COMPLEX_TYPE); + return item; } @@ -2072,11 +2080,13 @@ private MainMenuItem createServicesItems() { createFocusPageNewEditMenu(item.getItems(), "PageAdmin.menu.top.services.new", "PageAdmin.menu.top.services.edit", PageService.class, true); + addCollectionsMenuItems(item.getItems(), ServiceType.COMPLEX_TYPE); + return item; } - private void addUsersViewMenuItems(List menu) { - List objectViews = getCompiledUserProfile().findAllApplicableObjectCollectionViews(UserType.COMPLEX_TYPE); + private void addCollectionsMenuItems(List menu, QName type) { + List objectViews = getCompiledUserProfile().findAllApplicableObjectCollectionViews(type); if (objectViews == null) { return; } @@ -2102,18 +2112,13 @@ private void addUsersViewMenuItems(List menu) { return; } ObjectType objectType = collectionObject.asObjectable(); - if (!(objectType instanceof ObjectCollectionType)) { - return; - } - - ObjectCollectionType collectionValue = (ObjectCollectionType) objectType; - if (!QNameUtil.match(collectionValue.getType(), UserType.COMPLEX_TYPE)) { + if (!(objectType instanceof ObjectCollectionType) && !(objectType instanceof ArchetypeType)) { return; } DisplayType viewDisplayType = objectView.getDisplay(); PageParameters pageParameters = new PageParameters(); - pageParameters.add(PageUsersView.PARAMETER_OBJECT_COLLECTION_TYPE_OID, collectionValue.getOid()); + pageParameters.add(PageUsersView.PARAMETER_OBJECT_COLLECTION_TYPE_OID, objectType.getOid()); MenuItem userViewMenu = new MenuItem(viewDisplayType != null && PolyStringUtils.isNotEmpty(viewDisplayType.getLabel()) ? createStringResource(viewDisplayType.getLabel()) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java index 195c37adefd..cff072998e5 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/resources/ResourceContentPanel.java @@ -986,8 +986,8 @@ protected void deleteResourceObjectPerformed(ShadowType selected, AjaxRequestTar } ConfirmationPanel dialog = new ConfirmationPanel(((PageBase) getPage()).getMainPopupBodyId(), - createDeleteConfirmString(selected, "pageContentAccounts.message.deleteConfirmation", - "pageContentAccounts.message.deleteConfirmationSingle")) { + createDeleteConfirmString(selected, "pageContentAccounts.message.deleteConfirmationSingle", + "pageContentAccounts.message.deleteConfirmation")) { @Override public void yesPerformed(AjaxRequestTarget target) { deleteAccountConfirmedPerformed(target, result, selectedShadow); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java index 58911374878..49b1f8ebf0a 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/self/PageAssignmentsList.java @@ -80,12 +80,16 @@ public class PageAssignmentsList extends PageBase{ private IModel> assignmentsModel; private OperationResult backgroundTaskOperationResult = null; IModel descriptionModel; + private boolean conflictProblemExists = false; + private boolean loadConflicts = false; + public PageAssignmentsList(){ this(false); } public PageAssignmentsList(boolean loadConflicts){ + this.loadConflicts = loadConflicts; initModels(); if (loadConflicts){ getSessionStorage().getRoleCatalog().setConflictsList(getAssignmentConflicts()); @@ -155,14 +159,13 @@ protected String getUserButtonLabel(){ protected void onDeleteSelectedUsersPerformed(AjaxRequestTarget target){ super.onDeleteSelectedUsersPerformed(target); getSessionStorage().getRoleCatalog().setTargetUserList(new ArrayList<>()); - - target.add(getTargetUserSelectionButton()); + targetUserChangePerformed(target); } @Override protected void multipleUsersSelectionPerformed(AjaxRequestTarget target, List usersList){ getSessionStorage().getRoleCatalog().setTargetUserList(usersList); - target.add(getTargetUserSelectionButton()); + targetUserChangePerformed(target); } }; @@ -215,6 +218,7 @@ protected void updateAjaxAttributes(AjaxRequestAttributes attributes) { public boolean isEnabled(){ return (getSessionStorage().getRoleCatalog().isMultiUserRequest() || onlyWarnings() || areConflictsResolved()) && + !conflictProblemExists && getSessionStorage().getRoleCatalog().getAssignmentShoppingCart() != null && getSessionStorage().getRoleCatalog().getAssignmentShoppingCart().size() > 0; } @@ -286,6 +290,15 @@ private void onSingleUserRequestPerformed(AjaxRequestTarget target) { } } + private void targetUserChangePerformed(AjaxRequestTarget target){ + PageAssignmentsList.this.getFeedbackMessages().clear(); + conflictProblemExists = false; + if (loadConflicts){ + getSessionStorage().getRoleCatalog().setConflictsList(getAssignmentConflicts()); + } + target.add(PageAssignmentsList.this); + } + @NotNull private ModelExecuteOptions createOptions() { OperationBusinessContextType businessContextType; @@ -449,17 +462,22 @@ private List getAssignmentConflicts(){ .previewChanges(WebComponentUtil.createDeltaCollection(delta), recomputeOptions, task, result); DeltaSetTriple evaluatedAssignmentTriple = modelContext .getEvaluatedAssignmentTriple(); - Collection addedAssignments = evaluatedAssignmentTriple.getPlusSet(); - for (EvaluatedAssignment evaluatedAssignment : addedAssignments) { - - for (EvaluatedPolicyRule policyRule : evaluatedAssignment.getAllTargetsPolicyRules()) { - if (!policyRule.containsEnabledAction()) { - continue; + if (evaluatedAssignmentTriple != null) { + Collection addedAssignments = evaluatedAssignmentTriple.getPlusSet(); + for (EvaluatedAssignment evaluatedAssignment : addedAssignments) { + for (EvaluatedPolicyRule policyRule : evaluatedAssignment.getAllTargetsPolicyRules()) { + if (!policyRule.containsEnabledAction()) { + continue; + } + // everything other than 'enforce' is a warning + boolean isWarning = !policyRule.containsEnabledAction(EnforcementPolicyActionType.class); + fillInConflictedObjects(evaluatedAssignment, policyRule.getAllTriggers(), isWarning, conflictsMap); } - // everything other than 'enforce' is a warning - boolean isWarning = !policyRule.containsEnabledAction(EnforcementPolicyActionType.class); - fillInConflictedObjects(evaluatedAssignment, policyRule.getAllTriggers(), isWarning, conflictsMap); } + } else if (!result.isSuccess() && StringUtils.isNotEmpty(getSubresultWarningMessages(result))) { + getFeedbackMessages().warn(PageAssignmentsList.this, + createStringResource("PageAssignmentsList.conflictsWarning").getString() + " " + getSubresultWarningMessages(result)); + conflictProblemExists = true; } } catch (Exception e) { LoggingUtils.logUnexpectedException(LOGGER, "Couldn't get assignments conflicts. Reason: ", e); @@ -468,6 +486,20 @@ private List getAssignmentConflicts(){ conflictsList.addAll(conflictsMap.values()); return conflictsList; } + + private String getSubresultWarningMessages(OperationResult result){ + if (result == null || result.getSubresults() == null){ + return ""; + } + StringBuilder sb = new StringBuilder(); + result.getSubresults().forEach(subresult ->{ + if (subresult.isWarning()){ + sb.append(subresult.getMessage()); + sb.append("\n"); + } + }); + return sb.toString(); + } private void fillInConflictedObjects(EvaluatedAssignment evaluatedAssignment, Collection> triggers, boolean isWarning, Map conflictsMap) { diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index cece65fcf7f..063e95d1c4f 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -3901,6 +3901,7 @@ AssignmentConflictPanel.undoAction=Undo PageAssignmentConflicts.title=Assignments conflicts PageAssignmentConflicts.back=Back PageAssignmentConflicts.submit=Submit +PageAssignmentsList.conflictsWarning=Unable to calculate assignment conflicts due to authorization problem. Reason: AbstractShoppingCartTabPanel.addAllButton=Add all AbstractShoppingCartTabPanel.requestingForLabel=Requesting for AbstractShoppingCartTabPanel.availableRelationsLabel=Available relations diff --git a/infra/prism-maven-plugin/pom.xml b/infra/prism-maven-plugin/pom.xml index 6cb866969e7..3e5b4f941d7 100644 --- a/infra/prism-maven-plugin/pom.xml +++ b/infra/prism-maven-plugin/pom.xml @@ -87,6 +87,12 @@ true + + maven-failsafe-plugin + + true + + diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/SchemaTransformer.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/SchemaTransformer.java index aa77ec20d59..7620ea9f23b 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/SchemaTransformer.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/controller/SchemaTransformer.java @@ -269,6 +269,10 @@ public void applySchemasAndSecurity(LensContext contex AuthorizationDecisionType assignmentDecision = securityConstraints.findItemDecision(SchemaConstants.PATH_ASSIGNMENT, ModelAuthorizationAction.AUTZ_ACTIONS_URLS_GET, phase); if (!AuthorizationDecisionType.ALLOW.equals(assignmentDecision)) { + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Logged in user isn't authorized to read (or get) assignment item of the object: {}", object); + } + result.recordWarning("Logged in user isn't authorized to read (or get) assignment item of the object: " + object); context.setEvaluatedAssignmentTriple(null); } diff --git a/model/model-intest/pom.xml b/model/model-intest/pom.xml index 5519713ab50..d84d982195b 100644 --- a/model/model-intest/pom.xml +++ b/model/model-intest/pom.xml @@ -375,6 +375,57 @@ + + maven-failsafe-plugin + + + testng-integration.xml + testng-db-specific.xml + + + + + + + + skipModelIntTest + + + skipModelIntTest + true + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + ${failsafe.version} + + true + + + + + + + skipModelUnitTest + + + skipModelUnitTest + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${surefire.version} + + true + + diff --git a/repo/repo-sql-impl-test/pom.xml b/repo/repo-sql-impl-test/pom.xml index f8e7aa69258..4a4213d34e0 100644 --- a/repo/repo-sql-impl-test/pom.xml +++ b/repo/repo-sql-impl-test/pom.xml @@ -208,6 +208,17 @@ maven-surefire-plugin + ${surefire.version} + + + testng-integration.xml + testng-db-specific.xml + + + + + maven-failsafe-plugin + ${failsafe.version} testng-integration.xml diff --git a/samples/model-client-sample/pom.xml b/samples/model-client-sample/pom.xml index 10ce6a8412a..821e5040aa0 100644 --- a/samples/model-client-sample/pom.xml +++ b/samples/model-client-sample/pom.xml @@ -25,6 +25,8 @@ 1.8 3.1.6 + 3.0.0-M2 + 3.0.0-M2 Evolveum @@ -162,9 +164,15 @@ - org.apache.maven.plugins maven-surefire-plugin - 2.20 + ${surefire.version} + + true + + + + maven-failsafe-plugin + ${failsafe.version} true diff --git a/samples/samples-test/pom.xml b/samples/samples-test/pom.xml index c441c8764b0..081ba112d2d 100644 --- a/samples/samples-test/pom.xml +++ b/samples/samples-test/pom.xml @@ -54,6 +54,12 @@ alphabetical + + maven-failsafe-plugin + + alphabetical + + diff --git a/testing/conntest/pom.xml b/testing/conntest/pom.xml index 7dd32c716f5..03131277987 100644 --- a/testing/conntest/pom.xml +++ b/testing/conntest/pom.xml @@ -54,6 +54,12 @@ alphabetical + + maven-failsafe-plugin + + alphabetical + + @@ -257,7 +263,12 @@ maven-surefire-plugin false - -XX:MaxPermSize=256m + + + + maven-failsafe-plugin + + false diff --git a/testing/longtest/pom.xml b/testing/longtest/pom.xml index 95a09dcc98e..d33509d0e98 100644 --- a/testing/longtest/pom.xml +++ b/testing/longtest/pom.xml @@ -54,6 +54,12 @@ alphabetical + + maven-failsafe-plugin + + alphabetical + + @@ -252,9 +258,14 @@ maven-surefire-plugin + + false + + + + maven-failsafe-plugin false - -XX:MaxPermSize=256m diff --git a/testing/rest/pom.xml b/testing/rest/pom.xml index de1260894de..8a6da5398aa 100644 --- a/testing/rest/pom.xml +++ b/testing/rest/pom.xml @@ -285,9 +285,14 @@ maven-surefire-plugin false - -XX:MaxPermSize=256m + + maven-failsafe-plugin + + false + + diff --git a/testing/sanity/pom.xml b/testing/sanity/pom.xml index b89de377559..cea39711c36 100644 --- a/testing/sanity/pom.xml +++ b/testing/sanity/pom.xml @@ -54,6 +54,12 @@ alphabetical + + maven-failsafe-plugin + + alphabetical + + diff --git a/testing/selenidetest/pom.xml b/testing/selenidetest/pom.xml index 79e1084ea76..5b8a9d4d5ff 100644 --- a/testing/selenidetest/pom.xml +++ b/testing/selenidetest/pom.xml @@ -117,7 +117,12 @@ maven-surefire-plugin false - -XX:MaxPermSize=256m + + + + maven-failsafe-plugin + + false diff --git a/testing/story/pom.xml b/testing/story/pom.xml index 3e81c1e89db..562cf1d961b 100644 --- a/testing/story/pom.xml +++ b/testing/story/pom.xml @@ -54,6 +54,12 @@ alphabetical + + maven-failsafe-plugin + + alphabetical + + @@ -319,9 +325,14 @@ maven-surefire-plugin false - -XX:MaxPermSize=256m + + maven-failsafe-plugin + + false + + diff --git a/testing/wstest/pom.xml b/testing/wstest/pom.xml index ae5b577a971..5c1f83f3b2b 100644 --- a/testing/wstest/pom.xml +++ b/testing/wstest/pom.xml @@ -162,9 +162,14 @@ maven-surefire-plugin false - -XX:MaxPermSize=256m + + maven-failsafe-plugin + + false + + diff --git a/tools/schema-dist-maven-plugin/pom.xml b/tools/schema-dist-maven-plugin/pom.xml index 179c13d27a4..62bea1ef07d 100644 --- a/tools/schema-dist-maven-plugin/pom.xml +++ b/tools/schema-dist-maven-plugin/pom.xml @@ -83,6 +83,12 @@ true + + maven-failsafe-plugin + + true + +