Sorry, I meant, "do the API sanity tests work properly for you when you run them on a clean trunk checkout"?
Karl On Thu, Aug 4, 2011 at 10:12 AM, Karl Wright <[email protected]> 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 > <[email protected]> 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 <[email protected]> >> >>> 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 [email protected]: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 <[email protected]> >>> >>>> 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 >>>> <[email protected]> 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 <[email protected]> >>>> > Date: 2011/8/4 >>>> > Subject: RE: CMIS and Lucene >>>> > To: [email protected] >>>> > >>>> > >>>> > 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:[email protected]] >>>> > Sent: Mittwoch, 3. August 2011 14:48 >>>> > To: [email protected] >>>> > 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 <[email protected]> >>>> > >>>> >> 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:[email protected]] >>>> >> Sent: Mittwoch, 3. August 2011 13:22 >>>> >> To: [email protected] >>>> >> 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 <[email protected]> >>>> >> >>>> >> > 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 <[email protected]> >>>> > >>>> >> 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 <[email protected]> >>>> >> >>>> >>> 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 <[email protected]> >>>> 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 >>>> >>> > <[email protected]> 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 <[email protected]> >>>> >>> >> >>>> >>> >>> 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 >>>> >>> >>> <[email protected]> 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 <[email protected]> >>>> >>> >>> > >>>> >>> >>> >> 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 <[email protected]> >>>> >>> >>> >> >>>> >>> >>> >>> 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 >>>> >>> >>> >>> <[email protected]> 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 >> >
