Support keywords in queries (#1193)

* support targettype as keyword in target-queries

Signed-off-by: Natalia Kislicyn <natalia.kislicyn@bosch.io>

* support valid as keyword in distributionset-queries

Signed-off-by: Natalia Kislicyn <natalia.kislicyn@bosch.io>

* remove targettype.id from filter queries

Signed-off-by: Natalia Kislicyn <natalia.kislicyn@bosch.io>

* remove targettype.description from filter queries

Signed-off-by: Natalia Kislicyn <natalia.kislicyn@bosch.io>
This commit is contained in:
Natalia Kislicyn
2021-10-20 13:13:24 +02:00
committed by GitHub
parent be3dfbf617
commit d5661d2fe2
4 changed files with 55 additions and 9 deletions

View File

@@ -63,7 +63,12 @@ public enum DistributionSetFields implements FieldNameProvider {
/** /**
* The metadata. * The metadata.
*/ */
METADATA("metadata", new SimpleImmutableEntry<>("key", "value")); METADATA("metadata", new SimpleImmutableEntry<>("key", "value")),
/**
* The valid field.
*/
VALID("valid");
private final String fieldName; private final String fieldName;
private boolean mapField; private boolean mapField;

View File

@@ -85,7 +85,12 @@ public enum TargetFields implements FieldNameProvider {
/** /**
* The metadata. * 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 final String fieldName;
private List<String> subEntityAttribues; private List<String> subEntityAttribues;

View File

@@ -57,8 +57,9 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest {
distributionSetManagement.assignTag(Arrays.asList(ds.getId(), ds2.getId()), distSetTag.getId()); distributionSetManagement.assignTag(Arrays.asList(ds.getId(), ds2.getId()), distSetTag.getId());
distributionSetManagement final DistributionSet ds3 = distributionSetManagement
.create(entityFactory.distributionSet().create().name("test123").version("noDescription")); .create(entityFactory.distributionSet().create().name("test123").version("noDescription"));
distributionSetManagement.invalidate(ds3);
} }
@Test @Test
@@ -119,7 +120,7 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest {
@Test @Test
@Description("Test filter distribution set by complete property") @Description("Test filter distribution set by complete property")
public void testFilterByAttribute() { public void testFilterByAttributeComplete() {
assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "==true", 4); assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "==true", 4);
try { try {
assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "==noExist*", 0); assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "==noExist*", 0);
@@ -130,6 +131,17 @@ public class RSQLDistributionSetFieldTest extends AbstractJpaIntegrationTest {
assertRSQLQuery(DistributionSetFields.COMPLETE.name() + "=out=(true)", 1); 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 @Test
@Description("Test filter distribution set by tag name") @Description("Test filter distribution set by tag name")
public void testFilterByTag() { 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<DistributionSet> find = distributionSetManagement.findByRsql(PageRequest.of(0, 100), rsqlParam); final Page<DistributionSet> find = distributionSetManagement.findByRsql(PageRequest.of(0, 100), rsqlParam);
final long countAll = find.getTotalElements(); final long countAll = find.getTotalElements();
assertThat(find).as("Founded entity is should not be null").isNotNull(); assertThat(find).as("Found entity is should not be null").isNotNull();
assertThat(countAll).as("Founded entity size is wrong").isEqualTo(excpectedEntity); assertThat(countAll).as("Found entity size is wrong").isEqualTo(expectedEntity);
} }
private <T extends Throwable> void assertRSQLQueryThrowsException(final String rsqlParam, private <T extends Throwable> void assertRSQLQueryThrowsException(final String rsqlParam,

View File

@@ -18,11 +18,13 @@ import java.util.Map;
import org.assertj.core.util.Maps; import org.assertj.core.util.Maps;
import org.eclipse.hawkbit.repository.TargetFields; import org.eclipse.hawkbit.repository.TargetFields;
import org.eclipse.hawkbit.repository.TargetTypeFields;
import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException; import org.eclipse.hawkbit.repository.exception.RSQLParameterUnsupportedFieldException;
import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest; import org.eclipse.hawkbit.repository.jpa.AbstractJpaIntegrationTest;
import org.eclipse.hawkbit.repository.model.DistributionSet; import org.eclipse.hawkbit.repository.model.DistributionSet;
import org.eclipse.hawkbit.repository.model.Target; import org.eclipse.hawkbit.repository.model.Target;
import org.eclipse.hawkbit.repository.model.TargetTag; import org.eclipse.hawkbit.repository.model.TargetTag;
import org.eclipse.hawkbit.repository.model.TargetType;
import org.eclipse.hawkbit.repository.test.util.TestdataFactory; import org.eclipse.hawkbit.repository.test.util.TestdataFactory;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -38,6 +40,8 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest {
private Target target; private Target target;
private Target target2; private Target target2;
private TargetType targetType1;
private TargetType targetType2;
private static final String OR = ","; private static final String OR = ",";
private static final String AND = ";"; private static final String AND = ";";
@@ -83,6 +87,12 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest {
targetTag3.getId()); targetTag3.getId());
assignDistributionSet(ds.getId(), target.getControllerId()); 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 @Test
@@ -296,11 +306,25 @@ public class RSQLTargetFieldTest extends AbstractJpaIntegrationTest {
RSQLUtility.validateRsqlFor(rsql6, TargetFields.class); 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<Target> findTargetPage = targetManagement.findByRsql(PAGE, rsqlParam); final Page<Target> findTargetPage = targetManagement.findByRsql(PAGE, rsqlParam);
final long countTargetsAll = findTargetPage.getTotalElements(); final long countTargetsAll = findTargetPage.getTotalElements();
assertThat(findTargetPage).isNotNull(); assertThat(findTargetPage).isNotNull();
assertThat(countTargetsAll).isEqualTo(expcetedTargets); assertThat(countTargetsAll).isEqualTo(expectedTargets);
} }
private <T extends Throwable> void assertRSQLQueryThrowsException(final String rsqlParam, private <T extends Throwable> void assertRSQLQueryThrowsException(final String rsqlParam,