From d5661d2fe207f2f0b5e36344b1b3aa241ab24086 Mon Sep 17 00:00:00 2001 From: Natalia Kislicyn <47418786+Nkyn@users.noreply.github.com> Date: Wed, 20 Oct 2021 13:13:24 +0200 Subject: [PATCH] Support keywords in queries (#1193) * support targettype as keyword in target-queries Signed-off-by: Natalia Kislicyn * support valid as keyword in distributionset-queries Signed-off-by: Natalia Kislicyn * remove targettype.id from filter queries Signed-off-by: Natalia Kislicyn * remove targettype.description from filter queries Signed-off-by: Natalia Kislicyn --- .../repository/DistributionSetFields.java | 7 ++++- .../hawkbit/repository/TargetFields.java | 7 ++++- .../rsql/RSQLDistributionSetFieldTest.java | 22 +++++++++++---- .../jpa/rsql/RSQLTargetFieldTest.java | 28 +++++++++++++++++-- 4 files changed, 55 insertions(+), 9 deletions(-) diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFields.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFields.java index 53f1f42cd..48d9f052d 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFields.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/DistributionSetFields.java @@ -63,7 +63,12 @@ public enum DistributionSetFields implements FieldNameProvider { /** * The metadata. */ - METADATA("metadata", new SimpleImmutableEntry<>("key", "value")); + METADATA("metadata", new SimpleImmutableEntry<>("key", "value")), + + /** + * The valid field. + */ + VALID("valid"); private final String fieldName; private boolean mapField; diff --git a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/TargetFields.java b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/TargetFields.java index 2c620fa85..ce6b3f391 100644 --- a/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/TargetFields.java +++ b/hawkbit-core/src/main/java/org/eclipse/hawkbit/repository/TargetFields.java @@ -85,7 +85,12 @@ public enum TargetFields implements FieldNameProvider { /** * The metadata. */ - METADATA("metadata", new SimpleImmutableEntry<>("key", "value")); + METADATA("metadata", new SimpleImmutableEntry<>("key", "value")), + + /** + * The target type. + */ + TARGETTYPE("targetType", TargetTypeFields.NAME.getFieldName()); private final String fieldName; private List subEntityAttribues; diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java index 2dc9712ab..0dedd3336 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLDistributionSetFieldTest.java @@ -57,8 +57,9 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { distributionSetManagement.assignTag(Arrays.asList(ds.getId(), ds2.getId()), distSetTag.getId()); - distributionSetManagement + final DistributionSet ds3 = distributionSetManagement .create(entityFactory.distributionSet().create().name("test123").version("noDescription")); + distributionSetManagement.invalidate(ds3); } @Test @@ -119,7 +120,7 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { @Test @Description("Test filter distribution set by complete property") - public void testFilterByAttribute() { + public void testFilterByAttributeComplete() { assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "==true", 4); try { assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "==noExist*", 0); @@ -130,6 +131,17 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "=out=(true)", 1); } + @Test + @Description("Test filter distribution set by valid property") + public void testFilterByAttributeValid() { + assertRSQLQuery(DistributionSetFields.VALID.name() + "==true", 4); + assertRSQLQuery(DistributionSetFields.VALID.name() + "==false", 1); + assertThatExceptionOfType(RSQLParameterSyntaxException.class) + .isThrownBy(() -> assertRSQLQuery(DistributionSetFields.VALID.name() + "==noExist*", 0)); + assertRSQLQuery(DistributionSetFields.VALID.name() + "=in=(true)", 4); + assertRSQLQuery(DistributionSetFields.VALID.name() + "=out=(true)", 1); + } + @Test @Description("Test filter distribution set by tag name") public void testFilterByTag() { @@ -177,11 +189,11 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest { } - private void assertRSQLQuery(final String rsqlParam, final long excpectedEntity) { + private void assertRSQLQuery(final String rsqlParam, final long expectedEntity) { final Page find = distributionSetManagement.findByRsql(PageRequest.of(0, 100), rsqlParam); final long countAll = find.getTotalElements(); - assertThat(find).as("Founded entity is should not be null").isNotNull(); - assertThat(countAll).as("Founded entity size is wrong").isEqualTo(excpectedEntity); + assertThat(find).as("Found entity is should not be null").isNotNull(); + assertThat(countAll).as("Found entity size is wrong").isEqualTo(expectedEntity); } private void assertRSQLQueryThrowsException(final String rsqlParam, diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java index 4b060f30a..6d8928994 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLTargetFieldTest.java @@ -18,11 +18,13 @@ import java.util.Map; import org.assertj.core.util.Maps; import org.eclipse.hawkbit.repository.TargetFields; +import org.eclipse.hawkbit.repository.TargetTypeFields; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.TargetTag; +import org.eclipse.hawkbit.repository.model.TargetType; import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -38,6 +40,8 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { private Target target; private Target target2; + private TargetType targetType1; + private TargetType targetType2; private static final String OR = ","; private static final String AND = ";"; @@ -83,6 +87,12 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { targetTag3.getId()); assignDistributionSet(ds.getId(), target.getControllerId()); + + targetType1 = targetTypeManagement.create(entityFactory.targetType().create().name("Type1").description("Desc. Type1")); + targetType2 = targetTypeManagement.create(entityFactory.targetType().create().name("Type2").description("Desc. Type2")); + + targetManagement.assignType(target.getControllerId(), targetType1.getId()); + targetManagement.assignType(target2.getControllerId(), targetType2.getId()); } @Test @@ -296,11 +306,25 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest { RSQLUtility.validateRsqlFor(rsql6, TargetFields.class); } - private void assertRSQLQuery(final String rsqlParam, final long expcetedTargets) { + @Test + @Description("Test filter by target type") + public void shouldFilterTargetsByTypeIdNameAndDescription() { + assertRSQLQuery("targettype." + TargetTypeFields.NAME.name() + "==" + targetType1.getName(), 1); + assertRSQLQuery("targettype." + TargetTypeFields.NAME.name() + "==*1", 1); + assertRSQLQuery("targettype." + TargetTypeFields.NAME.name() + "!=" + targetType2.getName(), 4); + assertRSQLQuery("targettype." + TargetTypeFields.NAME.name() + "==noExist*", 0); + + assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) + .isThrownBy(() -> assertRSQLQuery("targettype.ID==1", 0)); + assertThatExceptionOfType(RSQLParameterUnsupportedFieldException.class) + .isThrownBy(() -> assertRSQLQuery("targettype.description==Description", 0)); + } + + private void assertRSQLQuery(final String rsqlParam, final long expectedTargets) { final Page findTargetPage = targetManagement.findByRsql(PAGE, rsqlParam); final long countTargetsAll = findTargetPage.getTotalElements(); assertThat(findTargetPage).isNotNull(); - assertThat(countTargetsAll).isEqualTo(expcetedTargets); + assertThat(countTargetsAll).isEqualTo(expectedTargets); } private void assertRSQLQueryThrowsException(final String rsqlParam,