You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2017/03/30 08:03:43 UTC
svn commit: r1789444 - in
/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation:
core/ impl/it/ impl/it/tests/ impl/it/tests/ValidationServiceIT.java
impl/it/tests/ValidationTestSupport.java
Author: olli
Date: Thu Mar 30 08:03:42 2017
New Revision: 1789444
URL: http://svn.apache.org/viewvc?rev=1789444&view=rev
Log:
move integration tests to package impl
Added:
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationServiceIT.java
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationTestSupport.java
Removed:
sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/core/
Added: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationServiceIT.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationServiceIT.java?rev=1789444&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationServiceIT.java (added)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationServiceIT.java Thu Mar 30 08:03:42 2017
@@ -0,0 +1,116 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.validation.impl.it.tests;
+
+import java.io.IOException;
+
+import org.apache.http.entity.mime.MultipartEntity;
+import org.apache.http.entity.mime.content.StringBody;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.sling.commons.json.JSONException;
+import org.apache.sling.commons.json.JSONObject;
+import org.apache.sling.servlets.post.SlingPostConstants;
+import org.apache.sling.testing.tools.http.RequestBuilder;
+import org.apache.sling.testing.tools.http.RequestExecutor;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.ops4j.pax.exam.junit.PaxExam;
+import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
+import org.ops4j.pax.exam.spi.reactors.PerClass;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * These tests leverage the {@link ValidationPostOperation} to validate the given request parameters.
+ * The according validation model enforces the properties "field1" matching regex=^\\\p{Upper}+$ and "field2" (having an arbitrary value).
+ *
+ */
+@RunWith(PaxExam.class)
+@ExamReactorStrategy(PerClass.class)
+public class ValidationServiceIT extends ValidationTestSupport {
+
+ protected DefaultHttpClient defaultHttpClient;
+
+ protected RequestExecutor requestExecutor;
+
+ @Before
+ public void setup() throws IOException {
+ defaultHttpClient = new DefaultHttpClient();
+ requestExecutor = new RequestExecutor(defaultHttpClient);
+ }
+
+ @Test
+ public void testValidRequestModel1() throws IOException, JSONException {
+ final String url = String.format("http://localhost:%s", httpPort());
+ final RequestBuilder requestBuilder = new RequestBuilder(url);
+ MultipartEntity entity = new MultipartEntity();
+ entity.addPart("sling:resourceType", new StringBody("validation/test/resourceType1"));
+ entity.addPart("field1", new StringBody("HELLOWORLD"));
+ entity.addPart("field2", new StringBody("30.01.1988"));
+ entity.addPart(SlingPostConstants.RP_OPERATION, new StringBody("validation"));
+ RequestExecutor re = requestExecutor.execute(requestBuilder.buildPostRequest
+ ("/validation/testing/fakeFolder1/resource").withEntity(entity)).assertStatus(200);
+ String content = re.getContent();
+ JSONObject jsonResponse = new JSONObject(content);
+ assertTrue(jsonResponse.getBoolean("valid"));
+ }
+
+ @Test
+ public void testInvalidRequestModel1() throws IOException, JSONException {
+ MultipartEntity entity = new MultipartEntity();
+ entity.addPart("sling:resourceType", new StringBody("validation/test/resourceType1"));
+ entity.addPart("field1", new StringBody("Hello World"));
+ entity.addPart(SlingPostConstants.RP_OPERATION, new StringBody("validation"));
+ final String url = String.format("http://localhost:%s", httpPort());
+ RequestBuilder requestBuilder = new RequestBuilder(url);
+ RequestExecutor re = requestExecutor.execute(requestBuilder.buildPostRequest
+ ("/validation/testing/fakeFolder1/resource").withEntity(entity)).assertStatus(200);
+ String content = re.getContent();
+ JSONObject jsonResponse = new JSONObject(content);
+ assertFalse(jsonResponse.getBoolean("valid"));
+ JSONObject failure = jsonResponse.getJSONArray("failures").getJSONObject(0);
+ assertEquals("Property does not match the pattern \"^\\p{Upper}+$\".", failure.get("message"));
+ assertEquals("field1", failure.get("location"));
+ assertEquals(10, failure.get("severity"));
+ failure = jsonResponse.getJSONArray("failures").getJSONObject(1);
+ assertEquals("Missing required property with name \"field2\".", failure.get("message"));
+ assertEquals("", failure.get("location")); // location is empty as the property is not found (property name is part of the message rather)
+ assertEquals(0, failure.get("severity"));
+ }
+
+ @Test
+ public void testPostProcessorWithInvalidModel() throws IOException, JSONException {
+ MultipartEntity entity = new MultipartEntity();
+ entity.addPart("sling:resourceType", new StringBody("validation/test/resourceType1"));
+ entity.addPart("field1", new StringBody("Hello World"));
+ final String url = String.format("http://localhost:%s", httpPort());
+ RequestBuilder requestBuilder = new RequestBuilder(url);
+ // test JSON response, because the HTML response overwrites the original exception (https://issues.apache.org/jira/browse/SLING-6703)
+ RequestExecutor re = requestExecutor.execute(requestBuilder.buildPostRequest
+ ("/content/validated/invalidresource").withEntity(entity).withHeader("Accept", "application/json").withCredentials("admin", "admin")).assertStatus(500);
+ String content = re.getContent();
+ JSONObject jsonResponse = new JSONObject(content);
+ JSONObject error = jsonResponse.getJSONObject("error");
+ assertEquals("org.apache.sling.validation.impl.postprocessor.InvalidResourcePostProcessorException", error.getString("class"));
+ assertEquals("Validation errors: field1 : Property does not match the pattern \"^\\p{Upper}+$\"., Missing required property with name \"field2\".", error.getString("message"));
+ }
+}
Added: sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationTestSupport.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationTestSupport.java?rev=1789444&view=auto
==============================================================================
--- sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationTestSupport.java (added)
+++ sling/trunk/bundles/extensions/validation/core/src/test/java/org/apache/sling/validation/impl/it/tests/ValidationTestSupport.java Thu Mar 30 08:03:42 2017
@@ -0,0 +1,117 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.validation.impl.it.tests;
+
+import javax.inject.Inject;
+
+import org.apache.sling.api.servlets.ServletResolver;
+import org.apache.sling.auth.core.AuthenticationSupport;
+import org.apache.sling.engine.SlingRequestProcessor;
+import org.apache.sling.resource.presence.ResourcePresence;
+import org.apache.sling.testing.paxexam.TestSupport;
+import org.apache.sling.validation.ValidationService;
+import org.ops4j.pax.exam.Configuration;
+import org.ops4j.pax.exam.Option;
+import org.ops4j.pax.exam.util.Filter;
+import org.ops4j.pax.exam.util.PathUtils;
+
+import static org.apache.sling.testing.paxexam.SlingOptions.slingExtensionI18n;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingExtensionResourcePresence;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingInstallerProviderJcr;
+import static org.apache.sling.testing.paxexam.SlingOptions.slingLaunchpadOakTar;
+import static org.ops4j.pax.exam.CoreOptions.composite;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.CoreOptions.systemProperty;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.factoryConfiguration;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
+public class ValidationTestSupport extends TestSupport {
+
+ @Inject
+ protected ServletResolver servletResolver;
+
+ @Inject
+ protected SlingRequestProcessor slingRequestProcessor;
+
+ @Inject
+ protected AuthenticationSupport authenticationSupport;
+
+ @Inject
+ protected ValidationService validationService;
+
+ @Inject
+ @Filter(value = "(path=/apps/sling/validation/models/model1)")
+ protected ResourcePresence models;
+
+ @Configuration
+ public Option[] configuration() {
+ return new Option[]{
+ baseConfiguration(),
+ launchpad(),
+ // Sling Validation
+ testBundle("bundle.filename"),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.validation.api").versionAsInProject(),
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.validation.test-services").versionAsInProject(),
+ factoryConfiguration("org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended")
+ .put("user.mapping", new String[]{
+ "org.apache.sling.validation.core=sling-validation",
+ "org.apache.sling.validation.test-services=sling-validation"
+ })
+ .asOption(),
+ // configure post processor
+ newConfiguration("org.apache.sling.validation.impl.postprocessor.ValidationPostProcessor")
+ .put("enabledForPathPrefix", new String[] {"/content/validated"})
+ .put("failForMissingValidationModels", Boolean.TRUE)
+ .asOption(),
+ // testing
+ mavenBundle().groupId("org.apache.sling").artifactId("org.apache.sling.testing.tools").versionAsInProject(),
+ mavenBundle().groupId("org.apache.servicemix.bundles").artifactId("org.apache.servicemix.bundles.hamcrest").versionAsInProject(),
+ factoryConfiguration("org.apache.sling.resource.presence.internal.ResourcePresenter")
+ .put("path", "/apps/sling/validation/models/model1")
+ .asOption(),
+ junitBundles(),
+ logging()
+ };
+ }
+
+ protected Option launchpad() {
+ final int httpPort = findFreePort();
+ final String workingDirectory = workingDirectory();
+ return composite(
+ slingLaunchpadOakTar(workingDirectory, httpPort),
+ slingExtensionI18n(),
+ slingExtensionResourcePresence(),
+ slingInstallerProviderJcr(),
+ mavenBundle().groupId("org.apache.commons").artifactId("commons-collections4").versionAsInProject()
+ );
+ }
+
+ protected Option logging() {
+ final String filename = String.format("file:%s/src/test/resources/logback.xml", PathUtils.getBaseDir());
+ return composite(
+ systemProperty("logback.configurationFile").value(filename),
+ mavenBundle().groupId("org.slf4j").artifactId("slf4j-api").version("1.7.21"),
+ mavenBundle().groupId("org.slf4j").artifactId("jcl-over-slf4j").version("1.7.21"),
+ mavenBundle().groupId("ch.qos.logback").artifactId("logback-core").version("1.1.7"),
+ mavenBundle().groupId("ch.qos.logback").artifactId("logback-classic").version("1.1.7")
+ );
+ }
+
+}