Consider Target Fields when validating RSQL filters (#1121)

* Removed unnecessary DB queries when editing/validating RSQL query in Target Filter Management (#1023)

Added valid TargetFields to RSQL validation when editing Target Filter.

Signed-off-by: Sergey Gerasimov <sergey.gerasimov@devolo.de>

* Corrected visit OrNode implementation.

Changed isValid to receive FieldNameProvider as parameter

Reduced code duplication by moving commonly used utility methods to AbstractFieldNameRSQLVisitor from ValidationRSQLVisitor abd JpqQueryRSQLVisitor

Refactored and extended Unit Tests.

Minor corrections and typos.

Signed-off-by: Sergey Gerasimov <sergey.gerasimov@devolo.de>

* Added Maven entry for devolo 2020 copyright header.

Signed-off-by: Sergey Gerasimov <sergey.gerasimov@devolo.de>

* Fix failing unit tests

* # WARNING: head commit changed in the meantime

Signed-off-by: Stefan Behl <stefan.behl@bosch.io>

* Fix Sonar findings.

Signed-off-by: Stefan Behl <stefan.behl@bosch.io>

* Cleanup

Signed-off-by: Stefan Behl <stefan.behl@bosch.io>

* Fix PR review findings

* Fix invalid queries in unit tests

Signed-off-by: Stefan Behl <stefan.behl@bosch.io>

* Added test case to create filter with invalid query via Mgmt REST API

Signed-off-by: Stefan Behl <stefan.behl@bosch.io>

Co-authored-by: Sergey Gerasimov <sergey.gerasimov@devolo.de>
This commit is contained in:
Stefan Behl
2021-07-02 09:25:12 +02:00
committed by GitHub
parent 18851d62a1
commit 2af4e850b8
8 changed files with 366 additions and 171 deletions

View File

@@ -85,7 +85,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
@Description("Ensures that deletion is executed if permitted.")
public void deleteTargetFilterQueryReturnsOK() throws Exception {
final String filterName = "filter_01";
final TargetFilterQuery filterQuery = createSingleTargetFilterQuery(filterName, "name=test_01");
final TargetFilterQuery filterQuery = createSingleTargetFilterQuery(filterName, "name==test_01");
mvc.perform(delete(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/" + filterQuery.getId()))
.andExpect(status().isOk());
@@ -114,8 +114,8 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
@Description("Ensures that update request is reflected by repository.")
public void updateTargetFilterQueryQuery() throws Exception {
final String filterName = "filter_02";
final String filterQuery = "name=test_02";
final String filterQuery2 = "name=test_02_changed";
final String filterQuery = "name==test_02";
final String filterQuery2 = "name==test_02_changed";
final String body = new JSONObject().put("query", filterQuery2).toString();
// prepare
@@ -137,7 +137,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
public void updateTargetFilterQueryName() throws Exception {
final String filterName = "filter_03";
final String filterName2 = "filter_03_changed";
final String filterQuery = "name=test_03";
final String filterQuery = "name==test_03";
final String body = new JSONObject().put("name", filterName2).toString();
// prepare
@@ -162,7 +162,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
final String idA = "a";
final String idB = "b";
final String idC = "c";
final String testQuery = "name=test";
final String testQuery = "name==test";
createSingleTargetFilterQuery(idA, testQuery);
createSingleTargetFilterQuery(idB, testQuery);
@@ -191,7 +191,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
final String idA = "a";
final String idB = "b";
final String idC = "c";
final String testQuery = "name=test";
final String testQuery = "name==test";
createSingleTargetFilterQuery(idA, testQuery);
createSingleTargetFilterQuery(idB, testQuery);
@@ -217,7 +217,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
final String idC = "c";
final String idD = "d";
final String idE = "e";
final String testQuery = "name=test";
final String testQuery = "name==test";
createSingleTargetFilterQuery("a", testQuery);
createSingleTargetFilterQuery("b", testQuery);
@@ -247,7 +247,7 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
@Description("Ensures that a single target filter query can be retrieved via its id.")
public void getSingleTarget() throws Exception {
// create first a target which can be retrieved by rest interface
final String knownQuery = "name=test01";
final String knownQuery = "name==test01";
final String knownName = "someName";
final TargetFilterQuery tfq = createSingleTargetFilterQuery(knownName, knownQuery);
final String hrefPrefix = "http://localhost" + MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING + "/"
@@ -294,6 +294,18 @@ public class MgmtTargetFilterQueryResourceTest extends AbstractManagementApiInte
assertThat(exceptionInfo.getExceptionClass()).isEqualTo(MessageNotReadableException.class.getName());
assertThat(exceptionInfo.getErrorCode()).isEqualTo(SpServerError.SP_REST_BODY_NOT_READABLE.getKey());
}
@Test
@Description("Ensures that the creation of a target filter query based on an invalid RSQL query results in a HTTP Bad Request error (400).")
public void createTargetFilterWithInvalidQuery() throws Exception {
final String invalidQuery = "name=abc";
final String body = new JSONObject().put("query", invalidQuery).put("name", "invalidFilter").toString();
mvc.perform(post(MgmtRestConstants.TARGET_FILTER_V1_REQUEST_MAPPING).content(body)
.contentType(MediaType.APPLICATION_JSON)).andDo(print()).andExpect(status().isBadRequest()).andReturn();
assertThat(targetFilterQueryManagement.count()).isEqualTo(0);
}
@Test
@Description("Ensures that the assignment of an auto-assign distribution set results in a HTTP Forbidden error (403) "