5555import com .marklogic .client .query .StructuredQueryDefinition ;
5656import com .marklogic .client .query .StructuredQueryBuilder .TemporalOperator ;
5757
58- // BUGS: 30098, 30092,
59-
6058public class TestBiTemporal extends BasicJavaClientREST {
6159
6260 private static String dbName = "TestBiTemporalJava" ;
@@ -90,6 +88,8 @@ public class TestBiTemporal extends BasicJavaClientREST{
9088 @ BeforeClass
9189 public static void setUpBeforeClass () throws Exception {
9290
91+ System .setProperty ("org.apache.commons.logging.simplelog.log.org.apache.http.wire" , "debug" );
92+
9393 System .out .println ("In setup" );
9494 setupJavaRESTServer (dbName , fNames [0 ], restServerName ,restPort );
9595
@@ -487,7 +487,7 @@ private JacksonDatabindHandle<ObjectNode> getJSONDocumentHandle(
487487
488488 @ Test
489489 public void testInsertXMLSingleDocumentUsingTemplate () throws Exception {
490- System .out .println ("Inside testInsertXMLSingleDocumentUsingDescriptor " );
490+ System .out .println ("Inside testInsertXMLSingleDocumentUsingTemplate " );
491491
492492 String docId = "javaSingleXMLDoc.xml" ;
493493 DOMHandle handle = getXMLDocumentHandle (
@@ -851,6 +851,14 @@ public void testJSONConsolidated() throws Exception {
851851 metadataHandle = new DocumentMetadataHandle ();
852852 record .getMetadata (metadataHandle );
853853 Iterator <String > resCollections = metadataHandle .getCollections ().iterator ();
854+
855+ if (record .getUri ().equals (docId )) {
856+ // Must belong to latest collection as well. So, count must be 4
857+ assert (resCollections .equals (4 ));
858+ }
859+ else {
860+ assert (resCollections .equals (3 ));
861+ }
854862 while (resCollections .hasNext ()) {
855863 String collection = resCollections .next ();
856864 System .out .println ("Collection = " + collection );
@@ -860,6 +868,11 @@ public void testJSONConsolidated() throws Exception {
860868 !collection .equals (temporalCollectionName )) {
861869 assertFalse ("Collection not what is expected: " + collection , true );
862870 }
871+
872+ if (collection .equals (latestCollectionName )) {
873+ // If there is a latest collection, docId must match the URI
874+ assert (record .getUri ().equals (docId ));
875+ }
863876 }
864877
865878 if (record .getFormat () != Format .JSON ) {
@@ -1183,8 +1196,7 @@ record = termQueryResults.next();
11831196 (actualPermissions .contains ("app-user:[" ) && actualPermissions .contains ("READ" ) &&
11841197 actualPermissions .contains ("UPDATE" ) && actualPermissions .contains ("EXECUTE" )));
11851198
1186- // BUG: Returns a 99, when it should be 11
1187- // assertEquals(quality, 11);
1199+ assertEquals (quality , 11 );
11881200 }
11891201
11901202 if (validStartDate .contains ("2008-12-31T23:59:59" ) && validEndDate .contains ("2011-12-31T23:59:59" )) {
@@ -1218,8 +1230,7 @@ record = termQueryResults.next();
12181230 (actualPermissions .contains ("app-user:[" ) && actualPermissions .contains ("READ" ) &&
12191231 actualPermissions .contains ("UPDATE" ) && actualPermissions .contains ("EXECUTE" )));
12201232
1221- // BUG: Returns a 99, when it should be 11
1222- // assertEquals(quality, 11);
1233+ assertEquals (quality , 11 );
12231234
12241235 validateMetadata (metadataHandle );
12251236 }
@@ -1253,8 +1264,7 @@ record = termQueryResults.next();
12531264 (actualPermissions .contains ("app-user:[" ) && actualPermissions .contains ("READ" ) &&
12541265 actualPermissions .contains ("UPDATE" ) && actualPermissions .contains ("EXECUTE" )));
12551266
1256- // BUG: Returns a 99, when it should be 11
1257- // assertEquals(quality, 11);
1267+ assertEquals (quality , 11 );
12581268 }
12591269 }
12601270 }
@@ -1383,8 +1393,7 @@ record = termQueryResults.next();
13831393 actualPermissions .contains ("UPDATE" )));
13841394 assertFalse ("Document permissions difference in app-user permission" , actualPermissions .contains ("EXECUTE" ));
13851395
1386- // BUG: Returns a 0, when it should be 99
1387- // assertEquals(quality, 99);
1396+ assertEquals (quality , 99 );
13881397 }
13891398
13901399 if (validStartDate .contains ("2001-01-01T00:00:00" ) && validEndDate .contains ("2003-01-01T00:00:00" )) {
@@ -1416,8 +1425,7 @@ record = termQueryResults.next();
14161425 (actualPermissions .contains ("app-user:[" ) && actualPermissions .contains ("READ" ) &&
14171426 actualPermissions .contains ("UPDATE" ) && actualPermissions .contains ("EXECUTE" )));
14181427
1419- // BUG: Returns a 0, when it should be 11
1420- // assertEquals(quality, 11);
1428+ assertEquals (quality , 11 );
14211429 }
14221430
14231431 if (validStartDate .contains ("2008-12-31T23:59:59" ) && validEndDate .contains ("2011-12-31T23:59:59" )) {
@@ -1450,8 +1458,7 @@ record = termQueryResults.next();
14501458 (actualPermissions .contains ("app-user:[" ) && actualPermissions .contains ("READ" ) &&
14511459 actualPermissions .contains ("UPDATE" ) && actualPermissions .contains ("EXECUTE" )));
14521460
1453- // BUG: Returns a 0, when it should be 11
1454- // assertEquals(quality, 11);
1461+ assertEquals (quality , 11 );
14551462
14561463 // Properties should still be associated this document
14571464 // BUG ... This should be commented out when properties are not deleted when document is deleted
@@ -1486,8 +1493,7 @@ record = termQueryResults.next();
14861493 (actualPermissions .contains ("app-user:[" ) && actualPermissions .contains ("READ" ) &&
14871494 actualPermissions .contains ("UPDATE" ) && actualPermissions .contains ("EXECUTE" )));
14881495
1489- // BUG: Returns a 0, when it should be 11
1490- // assertEquals(quality, 11);
1496+ assertEquals (quality , 11 );
14911497 }
14921498 }
14931499 }
@@ -1696,7 +1702,6 @@ record = termQueryResults.next();
16961702 (actualPermissions.contains("app-user:[") && actualPermissions.contains("READ") &&
16971703 actualPermissions.contains("UPDATE") && actualPermissions.contains("EXECUTE")));
16981704
1699- // BUG: Returns a 99, when it should be 11
17001705 // assertEquals(quality, 11);
17011706 }
17021707
@@ -1731,7 +1736,6 @@ record = termQueryResults.next();
17311736 (actualPermissions.contains("app-user:[") && actualPermissions.contains("READ") &&
17321737 actualPermissions.contains("UPDATE") && actualPermissions.contains("EXECUTE")));
17331738
1734- // BUG: Returns a 99, when it should be 11
17351739 // assertEquals(quality, 11);
17361740
17371741 validateMetadata(metadataHandle);
@@ -1766,7 +1770,6 @@ record = termQueryResults.next();
17661770 (actualPermissions.contains("app-user:[") && actualPermissions.contains("READ") &&
17671771 actualPermissions.contains("UPDATE") && actualPermissions.contains("EXECUTE")));
17681772
1769- // BUG: Returns a 99, when it should be 11
17701773 // assertEquals(quality, 11);
17711774 }
17721775 }
@@ -1896,7 +1899,6 @@ record = termQueryResults.next();
18961899 actualPermissions.contains("UPDATE")));
18971900 assertFalse("Document permissions difference in app-user permission", actualPermissions.contains("EXECUTE"));
18981901
1899- // BUG: Returns a 0, when it should be 99
19001902 // assertEquals(quality, 99);
19011903 }
19021904
@@ -1929,7 +1931,6 @@ record = termQueryResults.next();
19291931 (actualPermissions.contains("app-user:[") && actualPermissions.contains("READ") &&
19301932 actualPermissions.contains("UPDATE") && actualPermissions.contains("EXECUTE")));
19311933
1932- // BUG: Returns a 0, when it should be 11
19331934 // assertEquals(quality, 11);
19341935 }
19351936
@@ -1963,7 +1964,6 @@ record = termQueryResults.next();
19631964 (actualPermissions.contains("app-user:[") && actualPermissions.contains("READ") &&
19641965 actualPermissions.contains("UPDATE") && actualPermissions.contains("EXECUTE")));
19651966
1966- // BUG: Returns a 0, when it should be 11
19671967 // assertEquals(quality, 11);
19681968
19691969 // Properties should still be associated this document
@@ -1999,7 +1999,6 @@ record = termQueryResults.next();
19991999 (actualPermissions.contains("app-user:[") && actualPermissions.contains("READ") &&
20002000 actualPermissions.contains("UPDATE") && actualPermissions.contains("EXECUTE")));
20012001
2002- // BUG: Returns a 0, when it should be 11
20032002 // assertEquals(quality, 11);
20042003 }
20052004 }
@@ -2078,6 +2077,7 @@ public void testSystemTimeUsingInvalidTime() throws Exception {
20782077 }
20792078
20802079 @ Test
2080+ // BUG: REST API bug around transactions fails this test
20812081 public void testTransactionCommit () throws Exception {
20822082
20832083 System .out .println ("Inside testTransactionCommit" );
@@ -2114,6 +2114,15 @@ public void testTransactionCommit() throws Exception {
21142114 assertEquals ("Document uri wrong after insert" , docId , latestDoc .getUri ());
21152115 }
21162116
2117+ // Make sure document is not visible to any other transaction
2118+ readResults = docMgr .read (docId );
2119+ System .out .println ("Number of results = " + readResults .size ());
2120+ if (readResults .size () != 0 ) {
2121+ transaction .rollback ();
2122+
2123+ assertEquals ("Wrong number of results" , 1 , readResults .size ());
2124+ }
2125+
21172126 try {
21182127 updateJSONSingleDocument (docId , transaction );
21192128 }
@@ -2137,7 +2146,7 @@ public void testTransactionCommit() throws Exception {
21372146 assertEquals ("Wrong number of results" , 1 , termQueryResults .getTotalSize ());
21382147 }
21392148
2140- // There should be 1 document in docId collection
2149+ // There should be 4 documents in docId collection
21412150 queryMgr = client .newQueryManager ();
21422151 sqb = queryMgr .newStructuredQueryBuilder ();
21432152 termQuery = sqb .collection (docId );
@@ -2151,6 +2160,22 @@ public void testTransactionCommit() throws Exception {
21512160
21522161 assertEquals ("Wrong number of results" , 4 , termQueryResults .getTotalSize ());
21532162 }
2163+
2164+ // Search for documents using doc uri collection and no transaction object passed.
2165+ // There should be 0 documents in docId collection
2166+ queryMgr = client .newQueryManager ();
2167+ sqb = queryMgr .newStructuredQueryBuilder ();
2168+ termQuery = sqb .collection (docId );
2169+
2170+ start = 1 ;
2171+ termQueryResults = docMgr .search (termQuery , start );
2172+ System .out .println ("Number of results = " + termQueryResults .getTotalSize ());
2173+
2174+ if (termQueryResults .getTotalSize () != 0 ) {
2175+ transaction .rollback ();
2176+
2177+ assertEquals ("Wrong number of results" , 0 , termQueryResults .getTotalSize ());
2178+ }
21542179
21552180 try {
21562181 deleteJSONSingleDocument (docId , transaction );
@@ -2190,6 +2215,7 @@ public void testTransactionCommit() throws Exception {
21902215 }
21912216
21922217 @ Test
2218+ // BUG: REST API bug around transactions fails this test
21932219 public void testTransactionRollback () throws Exception {
21942220
21952221 System .out .println ("Inside testTransaction" );
@@ -2573,7 +2599,7 @@ public void testPeriodCompareQuerySingleAxisBasedOnALNContains() throws Exceptio
25732599 (validStartDate .contains ("2001-01-01T00:00:00" ) && validEndDate .contains ("2011-12-31T23:59:59" )));
25742600
25752601 assertTrue ("System start date check failed" ,
2576- (systemStartDate .contains ("2005-01-01T00:00:01" ) && ! systemEndDate .contains ("2010-01-01T00:00:01" )));
2602+ (systemStartDate .contains ("2005-01-01T00:00:01" ) && systemEndDate .contains ("2010-01-01T00:00:01" )));
25772603
25782604 }
25792605 }
@@ -2584,6 +2610,8 @@ public void testPeriodCompareQuerySingleAxisBasedOnALNContains() throws Exceptio
25842610
25852611 @ Test
25862612 public void testLsqtQuery () throws Exception {
2613+
2614+ System .setProperty ("org.apache.commons.logging.simplelog.log.org.apache.http.wire" , "debug" );
25872615 // Read documents based on document URI and ALN Contains. We are just looking for count of documents to be correct
25882616 String docId = "javaSingleJSONDoc.json" ;
25892617
@@ -2659,6 +2687,7 @@ public void testLsqtQuery() throws Exception {
26592687 }
26602688 }
26612689
2690+ // BUG. I believe Java API is doing a get instead of a POST that returns all documents in doc uri collection
26622691 System .out .println ("Number of results using SQB = " + count );
26632692 assertEquals ("Wrong number of results" , 3 , count );
26642693 }
@@ -2755,10 +2784,9 @@ public void testDocumentUsingCollectionNamedLatest() throws Exception {
27552784
27562785 assertTrue ("Exception not thrown for invalid temporal collection" , exceptionThrown );
27572786 }
2758-
27592787
27602788 @ Test
2761- // Negative test .. check if this is needed
2789+ // Negative test. Doc URI Id is the same as the temporal collection name
27622790 public void testInsertDocumentUsingDocumentURIAsCollectionName () throws Exception {
27632791 // Now insert a JSON document
27642792 String jsonDocId = "javaSingleJSONDoc.json" ;
@@ -2789,15 +2817,68 @@ public void testInsertDocumentUsingDocumentURIAsCollectionName() throws Exceptio
27892817 System .out .println (ex .getFailedRequest ().getStatusCode ());
27902818 System .out .println (ex .getFailedRequest ().getMessageCode ());
27912819
2792- // BUG: Right now this returns 500 error. Bug is open to fix this
2793- // assert(ex.getFailedRequest().getMessageCode().equals("TEMPORAL-SYSTEMTIME-BACKWARDS"));
2794- // assert(ex.getFailedRequest().getStatusCode() == 400);
2820+ assert (ex .getFailedRequest ().getMessageCode ().equals ("TEMPORAL-URIALREADYEXISTS" ));
2821+ assert (ex .getFailedRequest ().getStatusCode () == 400 );
27952822 }
27962823
27972824 ConnectedRESTQA .deleteElementRangeIndexTemporalCollection ("Documents" , jsonDocId );
27982825
2799- // Looks like this should fail. But is not failing
2826+ assertTrue ("Exception not thrown for invalid temporal collection" , exceptionThrown );
2827+ }
2828+
2829+ @ Test
2830+ // Negative test. Doc URI Id is the same as the temporal collection name
2831+ // BUG 30173 exists for this non failure.
2832+ public void testCreateCollectionUsingSameNameAsDocURI () throws Exception {
2833+ // Now insert a JSON document
2834+ String jsonDocId = "javaSingleJSONDoc.json" ;
2835+
2836+ System .out .println ("Inside testInserDocumentUsingDocumentURIAsCollectionName" );
2837+
2838+ // Insert a document called as insertJSONSingleDocument
2839+ insertJSONSingleDocument (jsonDocId , null );
2840+
2841+ boolean exceptionThrown = false ;
2842+ try {
2843+ // Create collection a collection with same name as doci URI
2844+ ConnectedRESTQA .addElementRangeIndexTemporalCollection (dbName , jsonDocId , axisSystemName , axisValidName );
2845+ }
2846+ catch (com .marklogic .client .FailedRequestException ex ) {
2847+ exceptionThrown = true ;
2848+ System .out .println (ex .getFailedRequest ().getStatusCode ());
2849+ System .out .println (ex .getFailedRequest ().getMessageCode ());
2850+
2851+ // assert(ex.getFailedRequest().getMessageCode().equals("TEMPORAL-URIALREADYEXISTS"));
2852+ // assert(ex.getFailedRequest().getStatusCode() == 400);
2853+ }
28002854 // assertTrue("Exception not thrown for invalid temporal collection", exceptionThrown);
2855+
2856+ // Create a document using the collection created above
2857+ // So, we are creating a document under a collection whose name is the same as an existing temporal doc uri
2858+ JacksonDatabindHandle <ObjectNode > handle = getJSONDocumentHandle (
2859+ "2001-01-01T00:00:00" , "2011-12-31T23:59:59" , "999 Skyway Park - JSON" , jsonDocId );
2860+
2861+ JSONDocumentManager docMgr = client .newJSONDocumentManager ();
2862+ docMgr .setMetadataCategories (Metadata .ALL );
2863+
2864+ // put meta-data
2865+ DocumentMetadataHandle mh = setMetadata (false );
2866+
2867+ exceptionThrown = false ;
2868+ try {
2869+ docMgr .write ("1.json" , mh , handle , null , null , jsonDocId , null );
2870+ }
2871+ catch (com .marklogic .client .FailedRequestException ex ) {
2872+ exceptionThrown = true ;
2873+ System .out .println (ex .getFailedRequest ().getStatusCode ());
2874+ System .out .println (ex .getFailedRequest ().getMessageCode ());
2875+
2876+ // assert(ex.getFailedRequest().getMessageCode().equals("TEMPORAL-URIALREADYEXISTS"));
2877+ // assert(ex.getFailedRequest().getStatusCode() == 400);
2878+ }
2879+
2880+ ConnectedRESTQA .deleteElementRangeIndexTemporalCollection ("Documents" , jsonDocId );
2881+ assertTrue ("Exception not thrown for invalid temporal collection" , exceptionThrown );
28012882 }
28022883
28032884 public void bulkWrite () throws Exception {
0 commit comments