You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by sk...@apache.org on 2019/12/12 08:40:31 UTC

[syncope] branch master updated: [SYNCOPE-957] Fixed missing Pull report for linked accounts

This is an automated email from the ASF dual-hosted git repository.

skylark17 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/master by this push:
     new 13fdf4b  [SYNCOPE-957] Fixed missing Pull report for linked accounts
13fdf4b is described below

commit 13fdf4bab2dac37880226a5ded220a392933e662
Author: skylark17 <sk...@apache.org>
AuthorDate: Wed Dec 11 14:36:37 2019 +0100

    [SYNCOPE-957] Fixed missing Pull report for linked accounts
---
 .../pushpull/AbstractProvisioningJobDelegate.java  | 137 +++++++++++++++++----
 .../syncope/fit/core/LinkedAccountITCase.java      |   3 +
 2 files changed, 113 insertions(+), 27 deletions(-)

diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
index 7a3140e..5f06bfd 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractProvisioningJobDelegate.java
@@ -23,12 +23,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import javax.annotation.Resource;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.TraceLevel;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
-import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.api.entity.resource.Mapping;
 import org.apache.syncope.core.persistence.api.entity.resource.Provision;
@@ -44,6 +44,12 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask> extends AbstractSchedTaskJobDelegate {
 
+    private static final String USER = "USER";
+
+    private static final String GROUP = "GROUP";
+
+    private static final String LINKED_ACCOUNT = "LINKED_ACCOUNT";
+
     @Resource(name = "adminUser")
     protected String adminUser;
 
@@ -53,6 +59,9 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
     @Autowired
     protected ConnectorFactory connFactory;
 
+    /**
+     * AnyTypeDAO DAO
+     */
     @Autowired
     protected AnyTypeDAO anyTypeDAO;
 
@@ -127,27 +136,36 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
         List<ProvisioningReport> aFailDelete = new ArrayList<>();
         List<ProvisioningReport> aSuccNone = new ArrayList<>();
         List<ProvisioningReport> aIgnore = new ArrayList<>();
+        List<ProvisioningReport> laSuccCreate = new ArrayList<>();
+        List<ProvisioningReport> laFailCreate = new ArrayList<>();
+        List<ProvisioningReport> laSuccUpdate = new ArrayList<>();
+        List<ProvisioningReport> laFailUpdate = new ArrayList<>();
+        List<ProvisioningReport> laSuccDelete = new ArrayList<>();
+        List<ProvisioningReport> laFailDelete = new ArrayList<>();
+        List<ProvisioningReport> laSuccNone = new ArrayList<>();
+        List<ProvisioningReport> laIgnore = new ArrayList<>();
 
         for (ProvisioningReport provResult : provResults) {
-            AnyType anyType = anyTypeDAO.find(provResult.getAnyType());
-
             switch (provResult.getStatus()) {
                 case SUCCESS:
                     switch (provResult.getOperation()) {
                         case CREATE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rSuccCreate.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uSuccCreate.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laSuccCreate.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gSuccCreate.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aSuccCreate.add(provResult);
                                 }
@@ -155,19 +173,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                             break;
 
                         case UPDATE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rSuccUpdate.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uSuccUpdate.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laSuccUpdate.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gSuccUpdate.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aSuccUpdate.add(provResult);
                                 }
@@ -175,19 +196,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                             break;
 
                         case DELETE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rSuccDelete.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uSuccDelete.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laSuccDelete.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gSuccDelete.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aSuccDelete.add(provResult);
                                 }
@@ -195,19 +219,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                             break;
 
                         case NONE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rSuccNone.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uSuccNone.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laSuccNone.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gSuccNone.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aSuccNone.add(provResult);
                                 }
@@ -221,19 +248,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                 case FAILURE:
                     switch (provResult.getOperation()) {
                         case CREATE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rFailCreate.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uFailCreate.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laFailCreate.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gFailCreate.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aFailCreate.add(provResult);
                                 }
@@ -241,19 +271,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                             break;
 
                         case UPDATE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rFailUpdate.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uFailUpdate.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laFailUpdate.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gFailUpdate.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aFailUpdate.add(provResult);
                                 }
@@ -261,19 +294,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                             break;
 
                         case DELETE:
-                            if (anyType == null) {
+                            if (StringUtils.isBlank(provResult.getAnyType())) {
                                 rFailDelete.add(provResult);
                             } else {
-                                switch (anyType.getKind()) {
+                                switch (provResult.getAnyType()) {
                                     case USER:
                                         uFailDelete.add(provResult);
                                         break;
 
+                                    case LINKED_ACCOUNT:
+                                        laFailDelete.add(provResult);
+                                        break;
+
                                     case GROUP:
                                         gFailDelete.add(provResult);
                                         break;
 
-                                    case ANY_OBJECT:
                                     default:
                                         aFailDelete.add(provResult);
                                 }
@@ -285,19 +321,22 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                     break;
 
                 case IGNORE:
-                    if (anyType == null) {
+                    if (StringUtils.isBlank(provResult.getAnyType())) {
                         rIgnore.add(provResult);
                     } else {
-                        switch (anyType.getKind()) {
+                        switch (provResult.getAnyType()) {
                             case USER:
                                 uIgnore.add(provResult);
                                 break;
 
+                            case LINKED_ACCOUNT:
+                                laIgnore.add(provResult);
+                                break;
+
                             case GROUP:
                                 gIgnore.add(provResult);
                                 break;
 
-                            case ANY_OBJECT:
                             default:
                                 aIgnore.add(provResult);
                         }
@@ -325,6 +364,16 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                     append(' ').
                     append("[no operation/ignored]: ").append(uSuccNone.size()).append('/').append(uIgnore.size()).
                     append('\n');
+
+            report.append("Accounts ").
+                    append("[created/failures]: ").append(laSuccCreate.size()).append('/').append(laFailCreate.size()).
+                    append(' ').
+                    append("[updated/failures]: ").append(laSuccUpdate.size()).append('/').append(laFailUpdate.size()).
+                    append(' ').
+                    append("[deleted/failures]: ").append(laSuccDelete.size()).append('/').append(laFailDelete.size()).
+                    append(' ').
+                    append("[no operation/ignored]: ").append(laSuccNone.size()).append('/').append(laIgnore.size()).
+                    append('\n');
         }
         if (includeGroup) {
             report.append("Groups ").
@@ -373,6 +422,19 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                     report.append("\nUsers failed to delete: ");
                     report.append(ProvisioningReport.generate(uFailDelete, traceLevel));
                 }
+
+                if (!laFailCreate.isEmpty()) {
+                    report.append("\n\nAccounts failed to create: ");
+                    report.append(ProvisioningReport.generate(laFailCreate, traceLevel));
+                }
+                if (!laFailUpdate.isEmpty()) {
+                    report.append("\nAccounts failed to update: ");
+                    report.append(ProvisioningReport.generate(laFailUpdate, traceLevel));
+                }
+                if (!laFailDelete.isEmpty()) {
+                    report.append("\nAccounts failed to delete: ");
+                    report.append(ProvisioningReport.generate(laFailDelete, traceLevel));
+                }
             }
 
             if (includeGroup) {
@@ -442,6 +504,27 @@ public abstract class AbstractProvisioningJobDelegate<T extends ProvisioningTask
                     report.append("\nUsers ignored:\n").
                             append(ProvisioningReport.generate(uIgnore, traceLevel));
                 }
+
+                if (!laSuccCreate.isEmpty()) {
+                    report.append("\n\nAccounts created:\n").
+                            append(ProvisioningReport.generate(laSuccCreate, traceLevel));
+                }
+                if (!laSuccUpdate.isEmpty()) {
+                    report.append("\nAccounts updated:\n").
+                            append(ProvisioningReport.generate(laSuccUpdate, traceLevel));
+                }
+                if (!laSuccDelete.isEmpty()) {
+                    report.append("\nAccounts deleted:\n").
+                            append(ProvisioningReport.generate(laSuccDelete, traceLevel));
+                }
+                if (!laSuccNone.isEmpty()) {
+                    report.append("\nAccounts no operation:\n").
+                            append(ProvisioningReport.generate(laSuccNone, traceLevel));
+                }
+                if (!laIgnore.isEmpty()) {
+                    report.append("\nAccounts ignored:\n").
+                            append(ProvisioningReport.generate(laIgnore, traceLevel));
+                }
             }
             if (includeGroup) {
                 if (!gSuccCreate.isEmpty()) {
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
index a04a07f..b5c3357 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/LinkedAccountITCase.java
@@ -403,6 +403,7 @@ public class LinkedAccountITCase extends AbstractITCase {
 
             ExecTO exec = AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PULL, pullTaskKey, 50, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
+            assertTrue(exec.getMessage().contains("Accounts created"));
 
             accounts = userService.read("vivaldi").getLinkedAccounts();
             assertEquals(3, accounts.size());
@@ -451,6 +452,8 @@ public class LinkedAccountITCase extends AbstractITCase {
             // 4. execute pull task again and verify linked accounts were pulled
             exec = AbstractTaskITCase.execProvisioningTask(taskService, TaskType.PULL, pullTaskKey, 50, false);
             assertEquals(ExecStatus.SUCCESS, ExecStatus.valueOf(exec.getStatus()));
+            assertTrue(exec.getMessage().contains("Accounts updated"));
+            assertTrue(exec.getMessage().contains("Accounts deleted"));
 
             accounts = userService.read("vivaldi").getLinkedAccounts();
             assertEquals(2, accounts.size());