manifoldcf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Karl Wright <daddy...@gmail.com>
Subject Re: CMIS Connector - Tests
Date Thu, 04 Aug 2011 14:36:44 GMT
Hmm, okay, then it must be something pretty strange.  Maybe jetty is
getting starved of threads or something?
I wonder if you can start a second Jetty instance for the CMIS server.
 That would eliminate any kind of jetty resource conflict.
Karl

On Thu, Aug 4, 2011 at 10:23 AM, Piergiorgio Lucidi
<piergiorgiolucidi@gmail.com> wrote:
> 2011/8/4 Karl Wright <daddywri@gmail.com>
>
>> Sorry, I meant, "do the API sanity tests work properly for you when
>> you run them on a clean trunk checkout"?
>>
>
> The other tests yes, work correctly, only CMIS tests don't work.
>
>
>>
>> Karl
>>
>> On Thu, Aug 4, 2011 at 10:12 AM, Karl Wright <daddywri@gmail.com> wrote:
>> > This is going to be complicated to debug.  I'm happy to help but yes,
>> > we'll need a branch to work off of.  If you can attach the patch file
>> > I'll try to set everything up this evening.
>> >
>> > Do the APISanity tests still work consistently on your setup?  The "No
>> > current connection" error seems like it is coming from some very basic
>> > level and I would expect it to appear with APISanity as well.
>> >
>> > The timeout indicates that the job is not completing.  If we can get
>> > at the log when the test fails before they are cleaned up we will
>> > probably learn why.
>> >
>> > Karl
>> >
>> >
>> > On Thu, Aug 4, 2011 at 10:06 AM, Piergiorgio Lucidi
>> > <piergiorgiolucidi@gmail.com> wrote:
>> >> After some minutes sometimes it returns the following exception to check
>> the
>> >> timeout:
>> >>
>> >>  org.apache.manifoldcf.core.interfaces.ManifoldCFException: ManifoldCF
>> did
>> >>> not terminate in the allotted time of 120000 milliseconds
>> >>> at org.apache.manifoldcf.cmis_tests.APISanityTest.waitJobInactive(
>> >>> APISanityTest.java:529)
>> >>> at org.apache.manifoldcf.cmis_tests.APISanityTest.sanityCheck(
>> >>> APISanityTest.java:365)
>> >>> 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>> >>> FrameworkMethod.java:44)
>> >>> at org.junit.internal.runners.model.ReflectiveCallable.run(
>> >>> ReflectiveCallable.java:15)
>> >>> at org.junit.runners.model.FrameworkMethod.invokeExplosively(
>> >>> FrameworkMethod.java:41)
>> >>> at org.junit.internal.runners.statements.InvokeMethod.evaluate(
>> >>> InvokeMethod.java:20)
>> >>> at org.junit.internal.runners.statements.RunBefores.evaluate(
>> >>> RunBefores.java:28)
>> >>> at org.junit.internal.runners.statements.RunAfters.evaluate(
>> >>> RunAfters.java:31)
>> >>> at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(
>> >>> BlockJUnit4ClassRunner.java:79)
>> >>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(
>> >>> BlockJUnit4ClassRunner.java:71)
>> >>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(
>> >>> BlockJUnit4ClassRunner.java:49)
>> >>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> >>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> >>> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> >>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> >>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> >>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> >>> at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(
>> >>> JUnit4TestSet.java:53)
>> >>> at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(
>> >>> JUnit4Provider.java:123)
>> >>> at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(
>> >>> JUnit4Provider.java:104)
>> >>> 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:164)
>> >>> at
>> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(
>> >>> ProviderFactory.java:110)
>> >>> at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(
>> >>> SurefireStarter.java:172)
>> >>> at
>> >>>
>> org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(
>> >>> SurefireStarter.java:78)
>> >>> at
>> org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:70
>> >>> )
>> >>
>> >>
>> >>
>> >> 2011/8/4 Piergiorgio Lucidi <piergiorgiolucidi@gmail.com>
>> >>
>> >>> Hi Karl,
>> >>>
>> >>> the integration test implementation is finished and it works fine using
>> the
>> >>> public Alfresco CMIS server.
>> >>>
>> >>> But now that I'm using the OpenCMIS InMemory Repository, deployed in
>> the
>> >>> same Jetty instance of Manifold, I have a problem, it seems that
>> starting
>> >>> test from the Maven goal, the test can't startup any job, that stay in
>> >>> starting state without moving on.
>> >>>
>> >>> Sometimes it returns the following exception during the startup:
>> >>>
>> >>>> 2011-08-04 16:00:26.172:INFO::Started SocketConnector@0.0.0.0:8346
>> >>>> java.lang.Exception: API http error; expected 201, saw 200:
>> {"error":"No
>> >>>> current connection."}
>> >>>> at org.apache.manifoldcf.cmis_tests.Base.performAPIPutOperation(
>> >>>> Base.java:208)
>> >>>> at
>> org.apache.manifoldcf.cmis_tests.Base.performAPIPutOperationViaNodes(
>> >>>> Base.java:271)
>> >>>> at org.apache.manifoldcf.cmis_tests.APISanityTest.sanityCheck(
>> >>>> APISanityTest.java:264)
>> >>>>
>> >>>> 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>> >>>> FrameworkMethod.java:44)
>> >>>> at org.junit.internal.runners.model.ReflectiveCallable.run(
>> >>>> ReflectiveCallable.java:15)
>> >>>> at org.junit.runners.model.FrameworkMethod.invokeExplosively(
>> >>>> FrameworkMethod.java:41)
>> >>>> at org.junit.internal.runners.statements.InvokeMethod.evaluate(
>> >>>> InvokeMethod.java:20)
>> >>>> at org.junit.internal.runners.statements.RunBefores.evaluate(
>> >>>> RunBefores.java:28)
>> >>>>
>> >>>> at org.junit.internal.runners.statements.RunAfters.evaluate(
>> >>>> RunAfters.java:31)
>> >>>> at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(
>> >>>> BlockJUnit4ClassRunner.java:79)
>> >>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(
>> >>>> BlockJUnit4ClassRunner.java:71)
>> >>>> at org.junit.runners.BlockJUnit4ClassRunner.runChild(
>> >>>> BlockJUnit4ClassRunner.java:49)
>> >>>> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> >>>> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> >>>> at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> >>>> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> >>>> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> >>>> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> >>>>  at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(
>> >>>> JUnit4TestSet.java:53)
>> >>>> at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(
>> >>>> JUnit4Provider.java:123)
>> >>>> at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(
>> >>>> JUnit4Provider.java:104)
>> >>>>
>> >>>> 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:164)
>> >>>> at
>> org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(
>> >>>> ProviderFactory.java:110)
>> >>>> at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(
>> >>>> SurefireStarter.java:172)
>> >>>> at
>> >>>>
>> org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcessWhenForked(
>> >>>> SurefireStarter.java:78)
>> >>>> at org.apache.maven.surefire.booter.ForkedBooter.main(
>> >>>> ForkedBooter.java:70)
>> >>>
>> >>>
>> >>>
>> >>> Starting the test from Eclipse it works fine.
>> >>> Maybe it could be useful to create a branch to solve this problem, to
>> >>> investigate together.
>> >>>
>> >>> Then I could attach my patch for integration tests.
>> >>> Can you help me?
>> >>>
>> >>> Let me know.
>> >>> Thank you for your support.
>> >>>
>> >>> Piergiorgio
>> >>>
>> >>> 2011/8/4 Karl Wright <daddywri@gmail.com>
>> >>>
>> >>>> Thanks for the update.  Let me know if there's anything I can do to
>> help.
>> >>>>
>> >>>> Karl
>> >>>>
>> >>>> On Thu, Aug 4, 2011 at 4:10 AM, Piergiorgio Lucidi
>> >>>> <piergiorgiolucidi@gmail.com> wrote:
>> >>>> > I found a solution to create the right configuration for the CMIS
>> >>>> Repository
>> >>>> > Connector in the integration test code, and now it works ;)
>> >>>> >
>> >>>> > Chemistry guys are supporting me about an issue that I have found in
>> the
>> >>>> > OpenCMIS InMemory Repository that I would like to use in the
>> integration
>> >>>> > test for Manifold.
>> >>>> >
>> >>>> > Now I'm finishing the integration test implementation using the
>> public
>> >>>> > Alfresco CMIS server. Then I can start to test this new version of
>> the
>> >>>> > InMemory Repository with the bugfix provided by Jens. And I have to
>> >>>> follow
>> >>>> > some useful suggestions provided by Florian.
>> >>>> >
>> >>>> > I'll let you know soon about all these tasks.
>> >>>> >
>> >>>> > Piergiorgio
>> >>>> >
>> >>>> > ---------- Forwarded message ----------
>> >>>> > From: Jens Hübel <jhuebel@opentext.com>
>> >>>> > Date: 2011/8/4
>> >>>> > Subject: RE: CMIS and Lucene
>> >>>> > To: dev@chemistry.apache.org
>> >>>> >
>> >>>> >
>> >>>> > Hi Piergiorgio,
>> >>>> >
>> >>>> > you are right. I could reproduce the problem. There is a bug in the
>> >>>> query
>> >>>> > implementation of the InMemory server if you query for predefined
>> >>>> properties
>> >>>> > like cmis:name, cmis:createdBy, etc. :-(
>> >>>> >
>> >>>> > I have fixed this, so hopefully this works for you now if you take
>> the
>> >>>> > latest build. I have created CMIS-413 for this (
>> >>>> > https://issues.apache.org/jira/browse/CMIS-414). Please reopen if
>> you
>> >>>> still
>> >>>> > have issues.
>> >>>> >
>> >>>> > One more note: Your test code is quite fragile if you use a fixed
>> name
>> >>>> for
>> >>>> > your test document/folder. This implementation does not allow
>> multiple
>> >>>> > objects with the same name in one folder. This means unless you
>> restart
>> >>>> the
>> >>>> > server your code will work only once. I recommend you using a random
>> >>>> UUID as
>> >>>> > name or something like that. In the default configuration the
>> InMemory
>> >>>> > creates a tree of document and folders by default. So it might not
>> be
>> >>>> > necessary to create objects at all (use the Workbench to take a look
>> at
>> >>>> > that). If you really need this reproducible behavior there is an
>> option
>> >>>> to
>> >>>> > run the server using the local binding in the same Java VM. Then you
>> can
>> >>>> > restart the server with each test. The InMemory JUnit tests use this
>> >>>> > mechanism. I do not recommend this however, because you bypass the
>> whole
>> >>>> > protocol layer for AtomPub/SOAP. This leaves many issues undetected
>> a
>> >>>> client
>> >>>> > may see in a real connection later (and of course you lose the
>> option to
>> >>>> > switch to another CMIS server just by changing configuration).
>> >>>> >
>> >>>> > Jens
>> >>>> >
>> >>>> >
>> >>>> > -----Original Message-----
>> >>>> > From: Piergiorgio Lucidi [mailto:piergiorgiolucidi@gmail.com]
>> >>>> > Sent: Mittwoch, 3. August 2011 14:48
>> >>>> > To: dev@chemistry.apache.org
>> >>>> > Subject: Re: CMIS and Lucene
>> >>>> >
>> >>>> > Hi Jens,
>> >>>> >
>> >>>> > here the code of my integration test that is used to create some
>> content
>> >>>> in
>> >>>> > the InMemory Repository, the OpenCMIS server is running because it
>> is
>> >>>> > bootstrapped by Jetty / Maven. The CMIS Repository Connector works
>> fine
>> >>>> with
>> >>>> > Alfresco 3.4d Community, but I would like to have the OpenCMIS
>> server in
>> >>>> the
>> >>>> > test suite.
>> >>>> >
>> >>>> > In the following snippet I started to initialize the test
>> environment
>> >>>> with a
>> >>>> > new folder with a new content, here I don't have any problem, it
>> works
>> >>>> with
>> >>>> > the InMemory Repository:
>> >>>> >
>> >>>> >  private Session getCmisClientSession(){
>> >>>> >>     // default factory implementation
>> >>>> >>     SessionFactory factory = SessionFactoryImpl.newInstance();
>> >>>> >>     Map<String, String> parameters = new HashMap<String, String>();
>> >>>> >>     // user credentials
>> >>>> >>     parameters.put(SessionParameter.USER, "dummyuser");
>> >>>> >>     parameters.put(SessionParameter.PASSWORD, "dummysecret");
>> >>>> >>     // connection settings
>> >>>> >>     parameters.put(SessionParameter.ATOMPUB_URL,
>> >>>> CMIS_ENDPOINT_TEST_SERVER
>> >>>> >> );
>> >>>> >>     parameters.put(SessionParameter.BINDING_TYPE,
>> BindingType.ATOMPUB
>> >>>> >> .value());
>> >>>> >>     // create session
>> >>>> >>     return
>> factory.getRepositories(parameters).get(0).createSession();
>> >>>> >>   }
>> >>>> >>  @Before
>> >>>> >>   public void createTestArea()
>> >>>> >>     throws Exception
>> >>>> >>   {
>> >>>> >>     try
>> >>>> >>     {
>> >>>> >>       Session session = getCmisClientSession();
>> >>>> >>       //creating a new folder
>> >>>> >>       Folder root = session.getRootFolder();
>> >>>> >>       Map<String, Object> folderProperties = new HashMap<String,
>> >>>> >> Object>();
>> >>>> >>       folderProperties.put(PropertyIds.OBJECT_TYPE_ID,
>> "cmis:folder");
>> >>>> >>       folderProperties.put(PropertyIds.NAME, "testdata");
>> >>>> >>
>> >>>> >>       Folder newFolder = root.createFolder(folderProperties);
>> >>>> >>       //create a new content in the folder
>> >>>> >>       String name = "testdata1.txt";
>> >>>> >>       // properties
>> >>>> >>       // (minimal set: name and object type id)
>> >>>> >>       Map<String, Object> contentProperties = new HashMap<String,
>> >>>> >> Object>();
>> >>>> >>       contentProperties.put(PropertyIds.OBJECT_TYPE_ID,
>> >>>> "cmis:document");
>> >>>> >>       contentProperties.put(PropertyIds.NAME, name);
>> >>>> >>
>> >>>> >>       // content
>> >>>> >>       byte[] content = "CMIS Testdata One".getBytes();
>> >>>> >>       InputStream stream = new ByteArrayInputStream(content);
>> >>>> >>       ContentStream contentStream = new ContentStreamImpl(name,
>> >>>> > newBigInteger(content),
>> >>>> >> "text/plain", stream);
>> >>>> >>
>> >>>> >>        // create a major version
>> >>>> >>       Document newContent1 =
>> >>>> newFolder.createDocument(contentProperties,
>> >>>> >> contentStream, null);
>> >>>> >
>> >>>> >
>> >>>> > But if I try to search the new content in the InMemory Repository,
>> in
>> >>>> the
>> >>>> > same way I implemented in the CMIS Repository Connector:
>> >>>> >
>> >>>> >  ItemIterable<QueryResult> results = session.query("SELECT * FROM
>> >>>> >> cmis:folder WHERE cmis:name='testdata'", false);
>> >>>> >>       for (QueryResult result : results) {
>> >>>> >>         String id =
>> result.getPropertyValueById(PropertyIds.OBJECT_ID);
>> >>>> >>       }
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> > It returns the following exception:
>> >>>> >
>> >>>> >
>>  org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException:
>> >>>> null
>> >>>> >> at
>> >>>> >>
>> >>>> >
>> >>>>
>> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.convertStatusCode(
>> >>>> >> AbstractAtomPubService.java:450)
>> >>>> >> at
>> >>>> >>
>> >>>> >
>> >>>>
>> org.apache.chemistry.opencmis.client.bindings.spi.atompub.AbstractAtomPubService.post(
>> >>>> >> AbstractAtomPubService.java:568)
>> >>>> >> at
>> >>>> >>
>> >>>> >
>> >>>>
>> org.apache.chemistry.opencmis.client.bindings.spi.atompub.DiscoveryServiceImpl.query(
>> >>>> >> DiscoveryServiceImpl.java:141)
>> >>>> >> at
>> >>>> org.apache.chemistry.opencmis.client.runtime.SessionImpl$3.fetchPage(
>> >>>> >> SessionImpl.java:557)
>> >>>> >> at
>> >>>> >>
>> >>>> >
>> >>>>
>> org.apache.chemistry.opencmis.client.runtime.util.AbstractIterator.getCurrentPage(
>> >>>> >> AbstractIterator.java:132)
>> >>>> >> at
>> >>>> >>
>> >>>> >
>> >>>>
>> org.apache.chemistry.opencmis.client.runtime.util.CollectionIterator.hasNext(
>> >>>> >> CollectionIterator.java:48)
>> >>>> >> at org.apache.manifoldcf.cmis_tests.APISanityTest.createTestArea(
>> >>>> >> APISanityTest.java:139)
>> >>>> >> 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.junit.runners.model.FrameworkMethod$1.runReflectiveCall(
>> >>>> >> FrameworkMethod.java:44)
>> >>>> >> at org.junit.internal.runners.model.ReflectiveCallable.run(
>> >>>> >> ReflectiveCallable.java:15)
>> >>>> >> at org.junit.runners.model.FrameworkMethod.invokeExplosively(
>> >>>> >> FrameworkMethod.java:41)
>> >>>> >> at org.junit.internal.runners.statements.RunBefores.evaluate(
>> >>>> >> RunBefores.java:27)
>> >>>> >> at org.junit.internal.runners.statements.RunAfters.evaluate(
>> >>>> >> RunAfters.java:31)
>> >>>> >> at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(
>> >>>> >> BlockJUnit4ClassRunner.java:79)
>> >>>> >> at org.junit.runners.BlockJUnit4ClassRunner.runChild(
>> >>>> >> BlockJUnit4ClassRunner.java:71)
>> >>>> >> at org.junit.runners.BlockJUnit4ClassRunner.runChild(
>> >>>> >> BlockJUnit4ClassRunner.java:49)
>> >>>> >> at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
>> >>>> >> at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
>> >>>> >> at
>> org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
>> >>>> >> at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
>> >>>> >> at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
>> >>>> >> at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
>> >>>> >> at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(
>> >>>> >> JUnit4TestReference.java:49)
>> >>>> >> at org.eclipse.jdt.internal.junit.runner.TestExecution.run(
>> >>>> >> TestExecution.java:38)
>> >>>> >> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
>> >>>> >> RemoteTestRunner.java:467)
>> >>>> >> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
>> >>>> >> RemoteTestRunner.java:683)
>> >>>> >> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
>> >>>> >> RemoteTestRunner.java:390)
>> >>>> >> at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
>> >>>> >> RemoteTestRunner.java:197)
>> >>>> >
>> >>>> >
>> >>>> > Let me know if you have any hints!
>> >>>> >
>> >>>> > Thank you again for your support.
>> >>>> >
>> >>>> > Regards,
>> >>>> >
>> >>>> > Piergiorgio
>> >>>> >
>> >>>> > 2011/8/3 Jens Hübel <jhuebel@opentext.com>
>> >>>> >
>> >>>> >> Hi Pergiorio,
>> >>>> >>
>> >>>> >> do you have a code piece that I can take a look at? What is your
>> client
>> >>>> >> API? Do you connect to Chemistry client API
>> >>>> > (chemistry-opencmis-client-api)?
>> >>>> >> Or perhaps you can grab the query sent from the log file?
>> >>>> >>
>> >>>> >> Thanks Jens
>> >>>> >>
>> >>>> >>
>> >>>> >> -----Original Message-----
>> >>>> >> From: Piergiorgio Lucidi [mailto:piergiorgiolucidi@gmail.com]
>> >>>> >> Sent: Mittwoch, 3. August 2011 13:22
>> >>>> >> To: dev@chemistry.apache.org
>> >>>> >> Subject: Re: CMIS and Lucene
>> >>>> >>
>> >>>> >> Hi Jens,
>> >>>> >>
>> >>>> >> I contributed to the Apache ManifoldCF (ex Lucene Connector
>> Framework)
>> >>>> >> project implementing the CMIS Connector using OpenCMIS 0.4.0.
>> >>>> >>
>> >>>> >> Now I'm working on integration test trying to use the OpenCMIS
>> InMemory
>> >>>> >> Repository that is available from Apache Chemistry ;)
>> >>>> >>
>> >>>> >> I have some problems because now I'm finishing my test
>> implementation
>> >>>> but
>> >>>> >> it
>> >>>> >> seems that I can't execute queries on the InMemory Repository, it
>> >>>> returns
>> >>>> > a
>> >>>> >> null string in the convertStatusCode method.
>> >>>> >>
>> >>>> >> The CMIS Repository Connector that I implemented for ManifoldCF has
>> a
>> >>>> job
>> >>>> >> parameter that is the CMIS Query, this parameter is used by agents
>> to
>> >>>> >> select
>> >>>> >> all the contents that needs to be indexed on the Output Connector
>> (for
>> >>>> >> example Apache Solr).
>> >>>> >> Without a query feature exposed by the InMemory Repository I can't
>> test
>> >>>> > the
>> >>>> >> connector in the right way.
>> >>>> >>
>> >>>> >> I tried to use the latest version of the InMemory Repository
>> >>>> >> (0.5.0-SNAPSHOT) but with the same result.
>> >>>> >>
>> >>>> >> Have you got any ideas to solve this problem?
>> >>>> >> Thank you for your support.
>> >>>> >>
>> >>>> >> Regards,
>> >>>> >> Piergiorgio
>> >>>> >>
>> >>>> >>
>> >>>> >> 2011/8/3 Jens Hübel <jhuebel@opentext.com>
>> >>>> >>
>> >>>> >> > Hi Chemistries,
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > is anyone of us already involved in the Lucene project?
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > Reading this here
>> >>>> >> >
>> http://search-lucene.com/m/wI38e1K3BWJ&subj=Re+CMIS+Connector+Tests
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > I think it would make sense to give them an introduction to what
>> we
>> >>>> > have.
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > if I understand this correctly one of the options they discuss is
>> to
>> >>>> >> create
>> >>>> >> > an InMemory mock server. It does not make much sense to duplicate
>> >>>> what
>> >>>> > we
>> >>>> >> > already have (and if we need getContentChanges() for that I am
>> happy
>> >>>> to
>> >>>> >> > implement this).
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> > Jens
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >> >
>> >>>> >>
>> >>>> >>
>> >>>> >> --
>> >>>> >> Piergiorgio Lucidi
>> >>>> >> Web: http://about.me/piergiorgiolucidi
>> >>>> >>
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> > --
>> >>>> > Piergiorgio Lucidi
>> >>>> > Web: http://about.me/piergiorgiolucidi
>> >>>> >
>> >>>> >
>> >>>> >
>> >>>> > --
>> >>>> > Piergiorgio Lucidi
>> >>>> > Web: http://about.me/piergiorgiolucidi
>> >>>> >
>> >>>> > 2011/8/3 Piergiorgio Lucidi <piergiorgiolucidi@gmail.com>
>> >>>> >
>> >>>> >> Yes, this is a very quick way to test my configuration code for the
>> >>>> >> integration test ;)
>> >>>> >> I'm going to fix this part, I saw what I need in the JSON retrieved
>> by
>> >>>> a
>> >>>> >> GET call against the Manifold API service.
>> >>>> >>
>> >>>> >> I'll let you know tomorrow an update about this.
>> >>>> >>
>> >>>> >> Anyway we have a problem with the OpenCMIS InMemory server. It
>> seems
>> >>>> that
>> >>>> >> there is a problem during the execution of CMIS queries, I notified
>> the
>> >>>> >> problem to the Chemistry guys (Jens Hubel and Florian Muller) and
>> they
>> >>>> are
>> >>>> >> trying to reproduce the issue to solve our problem.
>> >>>> >>
>> >>>> >> I'm going on developing the code using the public Alfresco CMIS
>> server
>> >>>> >> exposed at the following address:
>> >>>> >> http://cmis.alfresco.com
>> >>>> >>
>> >>>> >> Piergiorgio
>> >>>> >>
>> >>>> >>
>> >>>> >> 2011/8/3 Karl Wright <daddywri@gmail.com>
>> >>>> >>
>> >>>> >>> Another good way to see exactly what you need to do is to call the
>> API
>> >>>> >>> to get configuration information for an existing connection.
>>  Then,
>> >>>> >>> use the toXML() method to convert to XML, or the toJSON() to get
>> it as
>> >>>> >>> JSON.  Either way you will see the structure.  BTW, ManifoldCF in
>> >>>> >>> Action Chapter 3 covers this in great detail as well.
>> >>>> >>>
>> >>>> >>> Karl
>> >>>> >>>
>> >>>> >>> On Wed, Aug 3, 2011 at 12:50 PM, Karl Wright <daddywri@gmail.com>
>> >>>> wrote:
>> >>>> >>> > The ConfigParams class is, I believe, derived from the
>> Configuration
>> >>>> >>> > class.  So, you can create a ConfigParams object instead of a
>> >>>> >>> > Configuration object if you want to use the API in the manner
>> you
>> >>>> >>> > describe.
>> >>>> >>> >
>> >>>> >>> > The reason your commented-out code doesn't work is because the
>> >>>> >>> > setParameter() method isn't doing quite what you are expecting.
>> >>>>  It's
>> >>>> >>> > creating a node named "_PARAMETER_" with a "name" attribute and
>> a
>> >>>> >>> > value area, and you are creating nodes named by the parameter
>> name.
>> >>>> >>> >
>> >>>> >>> > Karl
>> >>>> >>> >
>> >>>> >>> > On Wed, Aug 3, 2011 at 12:41 PM, Piergiorgio Lucidi
>> >>>> >>> > <piergiorgiolucidi@gmail.com> wrote:
>> >>>> >>> >> I'm trying to implement tests but I found a problem to set all
>> the
>> >>>> >>> needed
>> >>>> >>> >> parameters to the CMIS Repository Connector that needs: an
>> >>>> username, a
>> >>>> >>> >> password and the endpoint (url).
>> >>>> >>> >>
>> >>>> >>> >> I need to know how to create the configuration nodes for the
>> >>>> connector,
>> >>>> >>> in
>> >>>> >>> >> the connector code I managed the configuration parameters in
>> this
>> >>>> way
>> >>>> >>> in the
>> >>>> >>> >> processConfigurationPost method:
>> >>>> >>> >>
>> >>>> >>> >>  public String processConfigurationPost(IThreadContext
>> >>>> threadContext,
>> >>>> >>> >>>       IPostParameters variableContext, ConfigParams
>> parameters)
>> >>>> >>> >>>       throws ManifoldCFException {
>> >>>> >>> >>>     String username =
>> >>>> >>> variableContext.getParameter(CONFIG_PARAM_USERNAME);
>> >>>> >>> >>>     if (StringUtils.isNotEmpty(username))
>> >>>> >>> >>>       parameters.setParameter(CONFIG_PARAM_USERNAME,
>> username);
>> >>>> >>> >>>     String password =
>> >>>> >>> variableContext.getParameter(CONFIG_PARAM_PASSWORD);
>> >>>> >>> >>>     if (StringUtils.isNotEmpty(password))
>> >>>> >>> >>>       parameters.setParameter(CONFIG_PARAM_PASSWORD,
>> password);
>> >>>> >>> >>>     String endpoint =
>> >>>> >>> variableContext.getParameter(CONFIG_PARAM_ENDPOINT);
>> >>>> >>> >>>     if (StringUtils.isNotEmpty(endpoint) && endpoint.length()
>> > 0)
>> >>>> >>> >>>       parameters.setParameter(CONFIG_PARAM_ENDPOINT,
>> endpoint);
>> >>>> >>> >>>     String repositoryId = variableContext
>> >>>> >>> >>>         .getParameter(CONFIG_PARAM_REPOSITORY_ID);
>> >>>> >>> >>>     if (StringUtils.isNotEmpty(repositoryId))
>> >>>> >>> >>>       parameters.setParameter(CONFIG_PARAM_REPOSITORY_ID,
>> >>>> >>> repositoryId);
>> >>>> >>> >>>     return null;
>> >>>> >>> >>>   }
>> >>>> >>> >>
>> >>>> >>> >>
>> >>>> >>> >> Now I have to setup the same parameters inside my test class
>> >>>> >>> APISanityTest
>> >>>> >>> >> that doesn't like the following snippet, it works only if CMIS
>> >>>> >>> parameters
>> >>>> >>> >> are commented as the following:
>> >>>> >>> >>
>> >>>> >>> >>  @Test
>> >>>> >>> >>>   public void sanityCheck()
>> >>>> >>> >>>     throws Exception
>> >>>> >>> >>>   {
>> >>>> >>> >>>     try
>> >>>> >>> >>>     {
>> >>>> >>> >>>       // Hey, we were able to install the file system
>> connector
>> >>>> etc.
>> >>>> >>> >>>       // Now, create a local test job and run it.
>> >>>> >>> >>>       IThreadContext tc = ThreadContextFactory.make();
>> >>>> >>> >>>       int i;
>> >>>> >>> >>>       IJobManager jobManager = JobManagerFactory.make(tc);
>> >>>> >>> >>>       // Create a basic file system connection, and save it.
>> >>>> >>> >>>       ConfigurationNode connectionObject;
>> >>>> >>> >>>       ConfigurationNode child;
>> >>>> >>> >>>       Configuration requestObject;
>> >>>> >>> >>>       Configuration result;
>> >>>> >>> >>>
>> >>>> >>> >>>       connectionObject = new
>> >>>> >>> ConfigurationNode("repositoryconnection");
>> >>>> >>> >>>
>> >>>> >>> >>>       child = new ConfigurationNode("name");
>> >>>> >>> >>>       child.setValue("CMIS Connection");
>> >>>> >>> >>>
>> >>>> >>> connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>>
>> >>>> >>> >>>       child = new ConfigurationNode("class_name");
>> >>>> >>> >>>       child.setValue(
>> >>>> >>> >>>
>> >>>> >>>
>> >>>>
>> "org.apache.manifoldcf.crawler.connectors.cmis.CmisRepositoryConnector");
>> >>>> >>> >>>
>> >>>> >>> connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>>
>> >>>> >>> >>>       child = new ConfigurationNode("description");
>> >>>> >>> >>>       child.setValue("CMIS Connection");
>> >>>> >>> >>>
>> >>>> >>> connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>>       child = new ConfigurationNode("max_connections");
>> >>>> >>> >>>       child.setValue("10");
>> >>>> >>> >>>
>> >>>> >>> connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>>
>> >>>> >>> >>>       //setting the CMIS specific parameters
>> >>>> >>> >>> //      child = new ConfigurationNode("username");
>> >>>> >>> >>> //      child.setValue(CMIS_USERNAME);
>> >>>> >>> >>> //
>> >>>> >>>
>>  connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>> //
>> >>>> >>> >>> //      child = new ConfigurationNode("password");
>> >>>> >>> >>> //      child.setValue(CMIS_PASSWORD);
>> >>>> >>> >>> //
>> >>>> >>>
>>  connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>> //
>> >>>> >>> >>> //      child = new ConfigurationNode("endpoint");
>> >>>> >>> >>> //      child.setValue(CMIS_ENDPOINT_TEST_SERVER);
>> >>>> >>> >>> //
>> >>>> >>>
>>  connectionObject.addChild(connectionObject.getChildCount(),child);
>> >>>> >>> >>>       requestObject = new Configuration();
>> >>>> >>> >>>       requestObject.addChild(0,connectionObject);
>> >>>> >>> >>>
>> >>>> >>> >>>       result = performAPIPutOperationViaNodes(
>> >>>> >>> >>> "repositoryconnections/CMIS%20Connection",201,requestObject);
>> >>>> >>> >>
>> >>>> >>> >>
>> >>>> >>> >> How can I set the username, password and endpoint for the CMIS
>> >>>> >>> Repository
>> >>>> >>> >> Connector parameters in this test class?
>> >>>> >>> >>
>> >>>> >>> >> Thank you.
>> >>>> >>> >>
>> >>>> >>> >> Piergiorgio
>> >>>> >>> >>
>> >>>> >>> >>
>> >>>> >>> >> 2011/8/2 Karl Wright <daddywri@gmail.com>
>> >>>> >>> >>
>> >>>> >>> >>> Thanks for the status report.  I hope to see your patch soon!
>> >>>> >>> >>>
>> >>>> >>> >>> Also, FWIW, once the documentation is also done I'd like to
>> >>>> consider
>> >>>> >>> >>> solidifying the 0.3 release.  It's got a lot of good stuff in
>> it
>> >>>> and I
>> >>>> >>> >>> think as soon as we've finished off the new CMIS connector in
>> all
>> >>>> >>> >>> dimensions we should go ahead.  Thoughts, anyone?
>> >>>> >>> >>>
>> >>>> >>> >>> Karl
>> >>>> >>> >>>
>> >>>> >>> >>>
>> >>>> >>> >>> On Tue, Aug 2, 2011 at 5:00 AM, Piergiorgio Lucidi
>> >>>> >>> >>> <piergiorgiolucidi@gmail.com> wrote:
>> >>>> >>> >>> > Yesterday I started to work on end-to-end integration test
>> for
>> >>>> the
>> >>>> >>> CMIS
>> >>>> >>> >>> > Connector and now I have a full running OpenCMIS test server
>> >>>> >>> integrated
>> >>>> >>> >>> with
>> >>>> >>> >>> > the ManifoldCF Maven build process.
>> >>>> >>> >>> >
>> >>>> >>> >>> > Now I have to implement:
>> >>>> >>> >>> > - a setup method to create the test documents in the CMIS
>> server
>> >>>> >>> >>> > - a null output connector using the ManifoldCF api
>> >>>> >>> >>> > - tests using the ManifoldCF api to create a mock
>> configuration
>> >>>> >>> against
>> >>>> >>> >>> the
>> >>>> >>> >>> > test CMIS server
>> >>>> >>> >>> >
>> >>>> >>> >>> > I'll let you know when it works.
>> >>>> >>> >>> >
>> >>>> >>> >>> > Regards,
>> >>>> >>> >>> > Piergiorgio
>> >>>> >>> >>> >
>> >>>> >>> >>> > 2011/7/29 Piergiorgio Lucidi <piergiorgiolucidi@gmail.com>
>> >>>> >>> >>> >
>> >>>> >>> >>> >> Hi Karl,
>> >>>> >>> >>> >>
>> >>>> >>> >>> >> thank you for the details and as soon as I finish a first
>> >>>> version
>> >>>> >>> of
>> >>>> >>> >>> >> integration and/or unit test I will create a new ticket in
>> the
>> >>>> CMIS
>> >>>> >>> >>> >> Component to release the patch.
>> >>>> >>> >>> >>
>> >>>> >>> >>> >> I hope to release this new patch soon.
>> >>>> >>> >>> >> I'll let you know during the next week.
>> >>>> >>> >>> >>
>> >>>> >>> >>> >> Piergiorgio
>> >>>> >>> >>> >>
>> >>>> >>> >>> >>
>> >>>> >>> >>> >> 2011/7/28 Karl Wright <daddywri@gmail.com>
>> >>>> >>> >>> >>
>> >>>> >>> >>> >>> The tests/filesystem/src/test/java area are end-to-end
>> tests
>> >>>> >>> >>> >>> principally designed to test the filesystem connector.
>>  (They
>> >>>> also
>> >>>> >>> >>> >>> involve other connectors because, obviously, an end-to-end
>> >>>> test is
>> >>>> >>> not
>> >>>> >>> >>> >>> going going to work without them.  This is why they are at
>> the
>> >>>> >>> root
>> >>>> >>> >>> >>> level.)
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> There are also unit tests you can use as models under
>> >>>> >>> >>> >>> connectors/filesystem/connector/src/test/....  These tests
>> use
>> >>>> >>> only
>> >>>> >>> >>> >>> the filesystem connector, no others.
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> If you would be so kind as to create a ticket to cover
>> your
>> >>>> test
>> >>>> >>> work,
>> >>>> >>> >>> >>> that would be great.
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> Also, another workitem I've been meaning to get to but
>> haven't
>> >>>> >>> >>> >>> involves the conversion of a python-based HTML browser and
>> >>>> >>> Javascript
>> >>>> >>> >>> >>> engine I wrote for MetaCarta into a Java equivalent.  This
>> >>>> would
>> >>>> >>> allow
>> >>>> >>> >>> >>> direct testing of the UI components of the framework and
>> >>>> >>> connectors.
>> >>>> >>> >>> >>> The python sources are in:
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> legacy-tests/VirtualBrowser.py
>> >>>> >>> >>> >>> and
>> >>>> >>> >>> >>> legacy-tests/Javascript.py
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> You may not have time to get that far for a while, but I
>> >>>> thought
>> >>>> >>> you'd
>> >>>> >>> >>> >>> want to know where my thoughts were headed. ;-)
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> Karl
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>> On Thu, Jul 28, 2011 at 2:03 PM, Piergiorgio Lucidi
>> >>>> >>> >>> >>> <piergiorgiolucidi@gmail.com> wrote:
>> >>>> >>> >>> >>> > I'm starting to think a way to implement tests for the
>> CMIS
>> >>>> >>> >>> Connector,
>> >>>> >>> >>> >>> > probably I can use the Apache Chemistry (OpenCMIS) local
>> >>>> binding
>> >>>> >>> to
>> >>>> >>> >>> >>> create a
>> >>>> >>> >>> >>> > mock of a CMIS Server (an InMemory repository), but I
>> have
>> >>>> to
>> >>>> >>> check
>> >>>> >>> >>> this
>> >>>> >>> >>> >>> > possibility because I'm not sure that all the features
>> are
>> >>>> now
>> >>>> >>> >>> >>> implemented.
>> >>>> >>> >>> >>> >
>> >>>> >>> >>> >>> > Anyway I saw some test classes for the filesystem
>> connector
>> >>>> at
>> >>>> >>> the
>> >>>> >>> >>> >>> following
>> >>>> >>> >>> >>> > package:
>> >>>> >>> >>> >>> >
>> >>>> >>> >>> >>> > tests/filesystem/src/test/java
>> >>>> >>> >>> >>> >
>> >>>> >>> >>> >>> > Could you please confirm that these classes could be
>> taken
>> >>>> as an
>> >>>> >>> >>> example
>> >>>> >>> >>> >>> for
>> >>>> >>> >>> >>> > tests?
>> >>>> >>> >>> >>> > Or do I need to take a look at other classes?
>> >>>> >>> >>> >>> >
>> >>>> >>> >>> >>> > Thank you.
>> >>>> >>> >>> >>> > Piergiorgio
>> >>>> >>> >>> >>> >
>> >>>> >>> >>> >>> > --
>> >>>> >>> >>> >>> > Piergiorgio Lucidi
>> >>>> >>> >>> >>> > Web: http://about.me/piergiorgiolucidi
>> >>>> >>> >>> >>> >
>> >>>> >>> >>> >>>
>> >>>> >>> >>> >>
>> >>>> >>> >>> >>
>> >>>> >>> >>> >>
>> >>>> >>> >>> >> --
>> >>>> >>> >>> >> Piergiorgio Lucidi
>> >>>> >>> >>> >> Web: http://about.me/piergiorgiolucidi
>> >>>> >>> >>> >>
>> >>>> >>> >>> >>
>> >>>> >>> >>> >
>> >>>> >>> >>> >
>> >>>> >>> >>> > --
>> >>>> >>> >>> > Piergiorgio Lucidi
>> >>>> >>> >>> > Web: http://about.me/piergiorgiolucidi
>> >>>> >>> >>> >
>> >>>> >>> >>>
>> >>>> >>> >>
>> >>>> >>> >>
>> >>>> >>> >>
>> >>>> >>> >> --
>> >>>> >>> >> Piergiorgio Lucidi
>> >>>> >>> >> Web: http://about.me/piergiorgiolucidi
>> >>>> >>> >>
>> >>>> >>> >
>> >>>> >>>
>> >>>> >>
>> >>>> >>
>> >>>> >>
>> >>>> >> --
>> >>>> >> Piergiorgio Lucidi
>> >>>> >> Web: http://about.me/piergiorgiolucidi
>> >>>> >>
>> >>>> >>
>> >>>> >
>> >>>> >
>> >>>> > --
>> >>>> > Piergiorgio Lucidi
>> >>>> > Web: http://about.me/piergiorgiolucidi
>> >>>> >
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Piergiorgio Lucidi
>> >>> Web: http://about.me/piergiorgiolucidi
>> >>>
>> >>>
>> >>
>> >>
>> >> --
>> >> Piergiorgio Lucidi
>> >> Web: http://about.me/piergiorgiolucidi
>> >>
>> >
>>
>
>
>
> --
> Piergiorgio Lucidi
> Web: http://about.me/piergiorgiolucidi
>

Mime
View raw message