Skip to content

Commit

Permalink
MID-8842 ninja - improved update object processing and error handling
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Jul 20, 2023
1 parent eeeed53 commit 493eb13
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,31 @@

package com.evolveum.midpoint.schema.validator.processor;

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

import org.assertj.core.api.Assertions;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;

import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.schema.AbstractSchemaTest;
import com.evolveum.midpoint.schema.validator.*;
import com.evolveum.midpoint.util.exception.SchemaException;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AssignmentType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.PersonaConstructionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleType;

import org.assertj.core.api.Assertions;
import org.testng.AssertJUnit;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;

public class TestUpgradeProcessors extends AbstractSchemaTest {

Expand Down Expand Up @@ -69,20 +72,26 @@ private <O extends ObjectType> PrismObject<O> parseObject(File file) throws Sche

private void assertUpgrade(String file, UpgradeValidationResult result) {
try {
PrismObject<ResourceType> original = parseObject(new File(RESOURCES, file));
PrismObject<ResourceType> expected = parseObject(new File(EXPECTED, file));

result.getItems().forEach(i -> {
try {
ObjectDelta delta = i.getDelta();
if (delta == null || delta.isEmpty()) {
return;
}
delta.applyTo(original);
} catch (SchemaException e) {
throw new RuntimeException(e.getMessage(), e);
}
});
PrismObject original = parseObject(new File(RESOURCES, file));
PrismObject<?> expected = parseObject(new File(EXPECTED, file));

result.getItems().stream()
.filter(item -> item.getIdentifier() != null)
.sorted(Comparator.comparing(UpgradeValidationItem::getIdentifier))
.forEach(item -> {
String identifier = item.getIdentifier();
if (identifier == null) {
return;
}

UpgradeObjectProcessor<?> processor = UpgradeProcessor.getProcessor(identifier);
if (processor == null) {
return;
}

ItemPath path = item.getItem().getItemPath();
processor.process(original, path);
});

AssertJUnit.assertTrue(
"EXPECTED:\n" + PrismTestUtil.serializeObjectToString(expected) +
Expand Down Expand Up @@ -145,7 +154,7 @@ private String getProcessorIdentifier(Class<?> processorClass) {
@Test
public void test30TestSystemConfig() throws Exception {
testUpgradeValidator("system-configuration.xml", result -> {
Assertions.assertThat(result.getItems()).hasSize(3);
Assertions.assertThat(result.getItems()).hasSize(4);

UpgradeValidationItem item = assertGetItem(result, getProcessorIdentifier(RoleCatalogCollectionsProcessor.class));
Assertions.assertThat(item.getDelta().getModifiedItems()).hasSize(2);
Expand All @@ -172,7 +181,7 @@ public void test40TestRole() throws Exception {
RoleType.F_ASSIGNMENT, 1L, AssignmentType.F_PERSONA_CONSTRUCTION, PersonaConstructionType.F_TARGET_SUBTYPE));
Assertions.assertThat(item.getDelta().getModifiedItems()).isEmpty();

// todo assert deltas
assertUpgrade("role.xml", result);
});
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,6 @@

package com.evolveum.midpoint.ninja.action.upgrade;

import java.util.*;
import java.util.stream.Collectors;

import com.evolveum.midpoint.ninja.action.upgrade.action.UpgradeObjectsOptions;
import com.evolveum.midpoint.ninja.impl.NinjaContext;
import com.evolveum.midpoint.prism.PrismContext;
Expand All @@ -18,6 +15,9 @@
import com.evolveum.midpoint.schema.validator.*;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import java.util.*;
import java.util.stream.Collectors;

/**
* Handles upgrade of single object, filters out items that are not applicable for upgrade based on options selected by user.
*/
Expand Down Expand Up @@ -82,41 +82,44 @@ public <O extends ObjectType> boolean execute(PrismObject<O> object) {
}

private List<UpgradeValidationItem> filterApplicableItems(String oid, List<UpgradeValidationItem> items) {
return items.stream().filter(item -> {
if (!item.isChanged()) {
return false;
}

if (!matchesOption(options.getIdentifiers(), item.getIdentifier())) {
return false;
}

if (!matchesOption(options.getTypes(), item.getType())) {
return false;
}

if (!matchesOption(options.getPhases(), item.getPhase())) {
return false;
}

if (!matchesOption(options.getPriorities(), item.getPriority())) {
return false;
}

ItemPath path = item.getItem().getItemPath();
if (path == null) {
return true;
}

Set<SkipUpgradeItem> skipItems = skipUpgradeItems.getOrDefault(UUID.fromString(oid), new HashSet<>());
for (SkipUpgradeItem skipItem : skipItems) {
if (Objects.equals(skipItem.getPath(), path.toString())) {
return false;
}
}

return true;
}).collect(Collectors.toList());
return items.stream()
.filter(item -> {
if (!item.isChanged()) {
return false;
}

if (!matchesOption(options.getIdentifiers(), item.getIdentifier())) {
return false;
}

if (!matchesOption(options.getTypes(), item.getType())) {
return false;
}

if (!matchesOption(options.getPhases(), item.getPhase())) {
return false;
}

if (!matchesOption(options.getPriorities(), item.getPriority())) {
return false;
}

ItemPath path = item.getItem().getItemPath();
if (path == null) {
return true;
}

Set<SkipUpgradeItem> skipItems = skipUpgradeItems.getOrDefault(UUID.fromString(oid), new HashSet<>());
for (SkipUpgradeItem skipItem : skipItems) {
if (Objects.equals(skipItem.getPath(), path.toString())) {
return false;
}
}

return true;
})
.sorted(Comparator.comparing(UpgradeValidationItem::getIdentifier))
.collect(Collectors.toList());
}

private <T> boolean matchesOption(List<T> options, T option) {
Expand Down

0 comments on commit 493eb13

Please sign in to comment.