Hi Dishara,
The Resource is not being found.

Things to check.

1. Check that the CassandraResourceProvider is registered with the
ResourceResolver at the correct path.

Got to
http://localhost:8080/system/console/services    (login admin:admin)
Locate the CassandraResourceProvider and take a note of the service ID
(first column).
Locate the service for org.apache.sling.api.resource.ResourceResolverFactory
Click on the bundle link in the left hand column, in my case
http://localhost:8080/system/console/bundles/146
Check that the the service ID for the CassandraResourceProvider is
used by this bundle.

2. Put some Log statements in the CassandraResourceProvider to prove
that the ResourceResolver is calling it.


3. Make certain that the Resource that the CassandrResourceProvider is
returning is properly formed. It has resource metadata with a
resourceType and path.

You can use http://localhost:8080/system/console/jcrresolver to check
how URLs are resolved, or use a curl command.

HTH
Ian

On 11 August 2013 01:08, Dishara Wijewardana <[email protected]> wrote:
> On Sat, Aug 10, 2013 at 1:47 PM, Bertrand Delacretaz <[email protected]
>> wrote:
>
>> Hi,
>>
>> On Sat, Aug 10, 2013 at 7:02 AM, Dishara Wijewardana
>> <[email protected]> wrote:
>> > ...The integration tests
>> > calls to HTTP REST endpoints. So there should be a place that I should be
>> > writing something like JAX-RS using sling APIs...
>>
>> You don't need JAX-RS, Sling provides RESTful HTTP APIs out of the box.
>>
>> > ...Apparently what I should be
>> > writing is something similar to PlanetsResourceProviderTest....
>>
>> Yeah can be a good starting point - setup a Sling instance with your
>> resource provider active and create, retrieve, update and delete
>> resources via Sling's HTTP API.
>>
>> You can also probably test your ResourceProvider without a Sling
>> instance, either with unit tests or pax exam integration tests. If you
>> can demonstrate there that it works according to the ResourceProvider
>> semantics, integration tests can be minimal and just verify that your
>> provider hooks up in the right way when activated.
>>
>
> Hi Bertrand
> You are quite right. My provider works standalone and wants to make sure
> whether my provider picked up by the sling engine. Where should I specify
> my provider when calling the HTTP endpoint. Or if  I call to a correct
> resource path, will it picked it up ?
>
> I tried writing something similar to PlanetsResourceProviderTest and did a
> HTTP GET call to the endpoint "
> http://localhost:8080/content/cassandra/movies/foo"; and when I remotely
> debug the test, the http client of HTTPTestBase receives a 404 for that GET
> call..
>
> NOTE: /content/cassandra/movies/foo is an existing resource node in
> cassandra and my provider capable of returning it in standalone mode.
>
> This is the BE error log..
>
> unning
> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest
> Checking if the required Sling services are started (timeout 62 seconds)...
> (base URLs=http://localhost:8080 and http://localhost:8080; servlet
> context=)
> Sling services seem to be started, continuing with integration tests.
> Listening for transport dt_socket at address: 5006
> Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.472 sec
> <<< FAILURE!
> testMovieResource(org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest)
>  Time elapsed: 0.437 sec  <<< FAILURE!
> junit.framework.AssertionFailedError: Expected status 200 for
> http://localhost:8080/content/cassandra/movies/foo (content=<!DOCTYPE HTML
> PUBLIC "-//IETF//DTD HTML 2.0//EN">
> <html>
> <head>
> <title>404 No resource found</title>
> </head>
> <body>
> <h1>No resource found (404)</h1>
> <p>The requested URL /content/cassandra/movies/foo resulted in an error in
> org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet.</p>
> <h3>Request Progress:</h3>
> <pre>
>       0 (2013-08-11 05:25:39) TIMER_START{Request Processing}
>       0 (2013-08-11 05:25:39) COMMENT timer_end format is {&lt;elapsed
> msec&gt;,&lt;timer name&gt;} &lt;optional message&gt;
>       0 (2013-08-11 05:25:39) LOG Method=GET,
> PathInfo=/content/cassandra/movies/foo
>       0 (2013-08-11 05:25:39) TIMER_START{ResourceResolution}
>       2 (2013-08-11 05:25:39) TIMER_END{2,ResourceResolution}
> URI=/content/cassandra/movies/foo resolves to Resource=NonExistingResource,
> path=/content/cassandra/movies/foo
>       3 (2013-08-11 05:25:39) LOG Resource Path Info: SlingRequestPathInfo:
> path='/content/cassandra/movies/foo', selectorString='null',
> extension='null', suffix='null'
>       3 (2013-08-11 05:25:39) TIMER_START{ServletResolution}
>       3 (2013-08-11 05:25:39)
> TIMER_START{resolveServlet(NonExistingResource,
> path=/content/cassandra/movies/foo)}
>       3 (2013-08-11 05:25:39)
> TIMER_END{0,resolveServlet(NonExistingResource,
> path=/content/cassandra/movies/foo)} Using servlet
> org.apache.sling.servlets.get.DefaultGetServlet
>       3 (2013-08-11 05:25:39) TIMER_END{0,ServletResolution}
> URI=/content/cassandra/movies/foo handled by
> Servlet=org.apache.sling.servlets.get.DefaultGetServlet
>       3 (2013-08-11 05:25:39) LOG Applying Requestfilters
>       3 (2013-08-11 05:25:39) LOG Calling filter:
> org.apache.sling.engine.impl.debug.RequestProgressTrackerLogFilter
>       3 (2013-08-11 05:25:39)
> TIMER_START{org.apache.sling.servlets.get.DefaultGetServlet#0}
>       3 (2013-08-11 05:25:39)
> TIMER_END{0,org.apache.sling.servlets.get.DefaultGetServlet#0}
>       3 (2013-08-11 05:25:39) TIMER_START{handleError:status=404}
>       4 (2013-08-11 05:25:39) TIMER_END{1,handleError:status=404} Using
> handler
> org.apache.sling.servlets.resolver.internal.defaults.DefaultErrorHandlerServlet
>       5 (2013-08-11 05:25:39) TIMER_END{5,Request Processing} Dumping
> SlingRequestProgressTracker Entries
> </pre>
> <hr>
> <address>ApacheSling/2.2 (jetty/6.1.x, OpenJDK 64-Bit Server VM 1.6.0_27,
> Linux 3.0.0-12-generic amd64)</address>
> </body>
> </html>
> ) expected:<200> but was:<404>
> at junit.framework.Assert.fail(Assert.java:47)
> at junit.framework.Assert.failNotEquals(Assert.java:277)
> at junit.framework.Assert.assertEquals(Assert.java:64)
> at junit.framework.Assert.assertEquals(Assert.java:195)
> at
> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:380)
> at
> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:355)
> at
> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:347)
> at
> org.apache.sling.commons.testing.integration.HttpTestBase.getContent(HttpTestBase.java:342)
> at
> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest.assertStrings(CassandraResourceProviderTest.java:27)
> at
> org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest.testMovieResource(CassandraResourceProviderTest.java:64)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at junit.framework.TestCase.runTest(TestCase.java:168)
> at junit.framework.TestCase.runBare(TestCase.java:134)
> at junit.framework.TestResult$1.protect(TestResult.java:110)
> at junit.framework.TestResult.runProtected(TestResult.java:128)
> at junit.framework.TestResult.run(TestResult.java:113)
> at junit.framework.TestCase.run(TestCase.java:124)
> at junit.framework.TestSuite.runTest(TestSuite.java:232)
> at junit.framework.TestSuite.run(TestSuite.java:227)
> at
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
> at
> org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
> at
> org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
> at
> org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
> at
> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
> at
> org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
> at
> org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
> at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
>
>
> Results :
>
> Failed tests:
> testMovieResource(org.apache.sling.launchpad.webapp.integrationtest.resourceprovider.CassandraResourceProviderTest):
> Expected status 200 for
> http://localhost:8080/content/cassandra/movies/foo(content=<!DOCTYPE
> HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">(..)
>
> Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
>
> [INFO]
> ------------------------------------------------------------------------
> [INFO] BUILD FAILURE
> [
>
>
>
>>
>> -Bertrand
>>
>
>
>
> --
> Thanks
> /Dishara

Reply via email to