PageRenderTime 49ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/1.2.0/tests/src/test/java/com/orientechnologies/orient/test/database/auto/IndexTxAwareMultiValueGetTest.java

http://orient.googlecode.com/
Java | 346 lines | 255 code | 91 blank | 0 comment | 1 complexity | d19a42cb927520635e917b729135ce19 MD5 | raw file
Possible License(s): Apache-2.0, AGPL-3.0
  1. package com.orientechnologies.orient.test.database.auto;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.List;
  5. import org.testng.Assert;
  6. import org.testng.annotations.AfterMethod;
  7. import org.testng.annotations.BeforeClass;
  8. import org.testng.annotations.BeforeMethod;
  9. import org.testng.annotations.Parameters;
  10. import org.testng.annotations.Test;
  11. import com.orientechnologies.orient.core.db.document.ODatabaseDocumentTx;
  12. import com.orientechnologies.orient.core.id.ORecordId;
  13. import com.orientechnologies.orient.core.index.OIndex;
  14. import com.orientechnologies.orient.core.index.OIndexTxAwareMultiValue;
  15. import com.orientechnologies.orient.core.iterator.ORecordIteratorCluster;
  16. import com.orientechnologies.orient.core.record.ORecord;
  17. import com.orientechnologies.orient.core.sql.OCommandSQL;
  18. @Test
  19. public class IndexTxAwareMultiValueGetTest {
  20. private ODatabaseDocumentTx database;
  21. @Parameters(value = "url")
  22. public IndexTxAwareMultiValueGetTest(final String iURL) {
  23. database = new ODatabaseDocumentTx(iURL);
  24. }
  25. @BeforeClass
  26. public void beforeClass() {
  27. database.open("admin", "admin");
  28. database.command(new OCommandSQL("create index idxTxAwareMultiValueGetTest notunique")).execute();
  29. database.close();
  30. }
  31. @BeforeMethod
  32. public void beforeMethod() {
  33. database.open("admin", "admin");
  34. }
  35. @AfterMethod
  36. public void afterMethod() {
  37. database.command(new OCommandSQL("delete from index:idxTxAwareMultiValueGetTest")).execute();
  38. database.close();
  39. }
  40. @Test
  41. public void testPut() {
  42. database.getMetadata().getIndexManager().reload();
  43. database.begin();
  44. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  45. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  46. final int clusterId = database.getDefaultClusterId();
  47. final List<Long> positions = getValidPositions(clusterId);
  48. index.put(1, new ORecordId(clusterId, positions.get(0)));
  49. index.put(1, new ORecordId(clusterId, positions.get(1)));
  50. index.put(2, new ORecordId(clusterId, positions.get(2)));
  51. database.commit();
  52. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  53. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  54. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  55. database.begin();
  56. index.put(2, new ORecordId(clusterId, 3));
  57. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  58. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 2);
  59. database.rollback();
  60. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  61. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  62. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  63. }
  64. @Test
  65. public void testClear() {
  66. database.getMetadata().getIndexManager().reload();
  67. database.begin();
  68. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  69. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  70. final int clusterId = database.getDefaultClusterId();
  71. final List<Long> positions = getValidPositions(clusterId);
  72. index.put(1, new ORecordId(clusterId, positions.get(0)));
  73. index.put(1, new ORecordId(clusterId, positions.get(1)));
  74. index.put(2, new ORecordId(clusterId, positions.get(2)));
  75. database.commit();
  76. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  77. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  78. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  79. database.begin();
  80. index.clear();
  81. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  82. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 0);
  83. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 0);
  84. database.rollback();
  85. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  86. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  87. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  88. }
  89. @Test
  90. public void testClearAndPut() {
  91. database.getMetadata().getIndexManager().reload();
  92. database.begin();
  93. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  94. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  95. final int clusterId = database.getDefaultClusterId();
  96. final List<Long> positions = getValidPositions(clusterId);
  97. index.put(1, new ORecordId(clusterId, positions.get(0)));
  98. index.put(1, new ORecordId(clusterId, positions.get(1)));
  99. index.put(2, new ORecordId(clusterId, positions.get(2)));
  100. database.commit();
  101. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  102. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  103. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  104. database.begin();
  105. index.clear();
  106. index.put(2, new ORecordId(clusterId, 3));
  107. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  108. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 0);
  109. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  110. database.rollback();
  111. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  112. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  113. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  114. }
  115. @Test
  116. public void testRemove() {
  117. database.getMetadata().getIndexManager().reload();
  118. database.begin();
  119. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  120. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  121. final int clusterId = database.getDefaultClusterId();
  122. final List<Long> positions = getValidPositions(clusterId);
  123. index.put(1, new ORecordId(clusterId, positions.get(0)));
  124. index.put(1, new ORecordId(clusterId, positions.get(1)));
  125. index.put(2, new ORecordId(clusterId, positions.get(2)));
  126. database.commit();
  127. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  128. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  129. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  130. database.begin();
  131. index.remove(1);
  132. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  133. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 0);
  134. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  135. database.rollback();
  136. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  137. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  138. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  139. }
  140. @Test
  141. public void testRemoveOne() {
  142. database.getMetadata().getIndexManager().reload();
  143. database.begin();
  144. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  145. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  146. final int clusterId = database.getDefaultClusterId();
  147. final List<Long> positions = getValidPositions(clusterId);
  148. final ORecordId firstRecordId = new ORecordId(clusterId, positions.get(0));
  149. index.put(1, firstRecordId);
  150. index.put(1, new ORecordId(clusterId, positions.get(1)));
  151. index.put(2, new ORecordId(clusterId, positions.get(2)));
  152. database.commit();
  153. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  154. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  155. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  156. database.begin();
  157. index.remove(1, firstRecordId);
  158. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  159. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 1);
  160. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  161. database.rollback();
  162. Assert.assertNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  163. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 2);
  164. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(2).size(), 1);
  165. }
  166. private List<Long> getValidPositions(int clusterId) {
  167. final List<Long> positions = new ArrayList<Long>();
  168. final ORecordIteratorCluster<?> iteratorCluster = database.browseCluster(database.getClusterNameById(clusterId));
  169. for (int i = 0; i < 3; i++) {
  170. iteratorCluster.hasNext();
  171. ORecord doc = iteratorCluster.next();
  172. positions.add(doc.getIdentity().getClusterPosition());
  173. }
  174. return positions;
  175. }
  176. @Test
  177. public void testMultiPut() {
  178. database.getMetadata().getIndexManager().reload();
  179. database.begin();
  180. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  181. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  182. final int clusterId = database.getDefaultClusterId();
  183. index.put(1, new ORecordId(clusterId, 1));
  184. index.put(1, new ORecordId(clusterId, 1));
  185. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  186. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 1);
  187. database.commit();
  188. Assert.assertEquals(((OIndexTxAwareMultiValue) index).get(1).size(), 1);
  189. }
  190. @Test
  191. public void testPutAfterTransaction() {
  192. database.getMetadata().getIndexManager().reload();
  193. database.begin();
  194. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  195. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  196. final int clusterId = database.getDefaultClusterId();
  197. index.put(1, new ORecordId(clusterId, 1));
  198. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  199. Collection<?> resultOne = ((OIndexTxAwareMultiValue) index).get(1);
  200. Assert.assertEquals(resultOne.size(), 1);
  201. database.commit();
  202. index.put(1, new ORecordId(clusterId, 1));
  203. resultOne = ((OIndexTxAwareMultiValue) index).get(1);
  204. Assert.assertEquals(resultOne.size(), 1);
  205. }
  206. @Test
  207. public void testRemoveOneWithinTransaction() {
  208. database.getMetadata().getIndexManager().reload();
  209. database.begin();
  210. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  211. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  212. final int clusterId = database.getDefaultClusterId();
  213. index.put(1, new ORecordId(clusterId, 1));
  214. index.remove(1, new ORecordId(clusterId, 1));
  215. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  216. Collection<?> result = ((OIndexTxAwareMultiValue) index).get(1);
  217. Assert.assertEquals(result.size(), 0);
  218. database.commit();
  219. result = ((OIndexTxAwareMultiValue) index).get(1);
  220. Assert.assertEquals(result.size(), 0);
  221. }
  222. @Test
  223. public void testRemoveAllWithinTransaction() {
  224. database.getMetadata().getIndexManager().reload();
  225. database.begin();
  226. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  227. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  228. final int clusterId = database.getDefaultClusterId();
  229. index.put(1, new ORecordId(clusterId, 1));
  230. index.remove(1, null);
  231. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  232. Collection<?> result = ((OIndexTxAwareMultiValue) index).get(1);
  233. Assert.assertEquals(result.size(), 0);
  234. database.commit();
  235. result = ((OIndexTxAwareMultiValue) index).get(1);
  236. Assert.assertEquals(result.size(), 0);
  237. }
  238. @Test
  239. public void testPutAfterRemove() {
  240. database.getMetadata().getIndexManager().reload();
  241. database.begin();
  242. final OIndex<?> index = database.getMetadata().getIndexManager().getIndex("idxTxAwareMultiValueGetTest");
  243. Assert.assertTrue(index instanceof OIndexTxAwareMultiValue);
  244. final int clusterId = database.getDefaultClusterId();
  245. index.put(1, new ORecordId(clusterId, 1));
  246. index.remove(1, new ORecordId(clusterId, 1));
  247. index.put(1, new ORecordId(clusterId, 1));
  248. Assert.assertNotNull(database.getTransaction().getIndexChanges("idxTxAwareMultiValueGetTest"));
  249. Collection<?> result = ((OIndexTxAwareMultiValue) index).get(1);
  250. Assert.assertEquals(result.size(), 1);
  251. database.commit();
  252. result = ((OIndexTxAwareMultiValue) index).get(1);
  253. Assert.assertEquals(result.size(), 1);
  254. }
  255. }