Skip to content

Commit

Permalink
adding test for merging initials objects
Browse files Browse the repository at this point in the history
  • Loading branch information
skublik committed Sep 13, 2023
1 parent 3dde478 commit f234ea0
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,13 @@ static Map<Class<?>, Supplier<ItemMerger>> createStandardTypeSpecificMergersMap(
() -> new GenericItemMerger(
marker,
DefaultNaturalKeyImpl.of(VirtualContainerItemSpecificationType.F_PATH))),
entry(
VirtualContainersSpecificationType.class,
() -> new GenericItemMerger(
marker,
DefaultNaturalKeyImpl.of(
VirtualContainersSpecificationType.F_IDENTIFIER,
VirtualContainersSpecificationType.F_PATH))),
entry(
GuiResourceDetailsPageType.class,
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(
Expand Down Expand Up @@ -173,8 +180,8 @@ static Map<Class<?>, Supplier<ItemMerger>> createStandardTypeSpecificMergersMap(
GuiObjectColumnType.class,
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(GuiObjectColumnType.F_NAME))),
entry(
SearchFilterParameterType.class,
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(SearchFilterParameterType.F_NAME))),
ParameterType.class,
() -> new GenericItemMerger(marker, DefaultNaturalKeyImpl.of(ParameterType.F_NAME))),
entry(
CollectionSpecificationType.class,
() -> new GenericItemMerger(
Expand Down Expand Up @@ -246,7 +253,14 @@ static Map<Class<?>, Supplier<ItemMerger>> createStandardTypeSpecificMergersMap(
GuiShadowDetailsPageType.F_TYPE,
GuiShadowDetailsPageType.F_RESOURCE_REF,
GuiShadowDetailsPageType.F_KIND,
GuiShadowDetailsPageType.F_INTENT))));
GuiShadowDetailsPageType.F_INTENT))),
entry(
SelectorQualifiedGetOptionType.class,
() -> new GenericItemMerger(
marker,
DefaultNaturalKeyImpl.of(
SelectorQualifiedGetOptionType.F_OPTIONS,
SelectorQualifiedGetOptionType.F_SELECTOR))));

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@
</focusMappings>
</inducement>
<inducement id="21">
<identifier>nameMapping</identifier>
<identifier>shadowMapping</identifier>
<focusMappings>
<mapping id="22">
<strength>weak</strength>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
/*
* Copyright (C) 2023 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.init;

import com.evolveum.midpoint.prism.CloneStrategy;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
import com.evolveum.midpoint.prism.util.PrismTestUtil;
import com.evolveum.midpoint.schema.MidPointPrismContextFactory;
import com.evolveum.midpoint.schema.merger.SimpleObjectMergeOperation;
import com.evolveum.midpoint.tools.testng.AbstractUnitTest;

import com.evolveum.midpoint.util.exception.ConfigurationException;
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.ObjectType;

import org.assertj.core.api.Assertions;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
import org.xml.sax.SAXException;

import java.io.File;
import java.io.IOException;

import static com.evolveum.midpoint.prism.util.PrismTestUtil.getPrismContext;

public class TestInitialObjects extends AbstractUnitTest {

private static final Trace LOGGER = TraceManager.getTrace(TestInitialObjects.class);

private static final File INITIAL_OBJECTS_DIR = new File("./src/main/resources/initial-objects");

private int success = 0;
private int failed = 0;

@BeforeSuite
public void setup() throws SchemaException, SAXException, IOException {
PrismTestUtil.resetPrismContext(MidPointPrismContextFactory.FACTORY);
}

@Test
public void mergeInitialObjects() throws Exception {
testMergeOnFiles(INITIAL_OBJECTS_DIR.listFiles());

LOGGER.info("Success: " + success + ", Failed: " + failed + ", Total: " + (success + failed));

Assertions.assertThat(failed).withFailMessage(() -> "Failed " + failed + " merged initial objects.")
.matches(t -> t == 0);
}

public void testMergeOnFiles(File... files) throws SchemaException, IOException, ConfigurationException {
for (File file : files) {
if (file.isDirectory()) {
testMergeOnFiles(file.listFiles());
} else {
testMergeOnFile(file);
success++;
}
}
}

private <O extends ObjectType> void testMergeOnFile(File file) throws SchemaException, IOException, ConfigurationException {
PrismObject<O> object = getPrismContext().parseObject(file);
PrismObject<O> objectBeforeMerge = object.cloneComplex(CloneStrategy.REUSE);

LOGGER.trace("Object before merge:\n{}", objectBeforeMerge.debugDump());

SimpleObjectMergeOperation.merge(object, objectBeforeMerge);

LOGGER.trace("Object after merge:\n{}", object.debugDump());

ObjectDelta<O> delta = objectBeforeMerge.diff(object);

try {
Assertions.assertThat(object)
.matches(
t -> t.equivalent(objectBeforeMerge));
success++;
} catch (AssertionError e) {
failed++;
LOGGER.error("Merged object is not equivalent to expected result\n" + delta.debugDump(), e);
}
}
}
1 change: 1 addition & 0 deletions repo/system-init/testng-unit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
<test name="Test" parallel="none">
<classes>
<class name="com.evolveum.midpoint.init.TestConfigurationLoad"/>
<class name="com.evolveum.midpoint.init.TestInitialObjects"/>
</classes>
</test>
</suite>

0 comments on commit f234ea0

Please sign in to comment.