PageRenderTime 67ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/test/org/opencms/module/TestModuleUpdate.java

http://github.com/alkacon/opencms-core
Java | 1402 lines | 1040 code | 154 blank | 208 comment | 16 complexity | 5600ea2266a80273b6225e885b64d363 MD5 | raw file
Possible License(s): MIT, Apache-2.0, BSD-3-Clause, LGPL-2.1

Large files files are truncated, but you can click here to view the full file

  1. /*
  2. * This library is part of OpenCms -
  3. * the Open Source Content Management System
  4. *
  5. * Copyright (c) Alkacon Software GmbH & Co. KG (http://www.alkacon.com)
  6. *
  7. * This library is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * This library is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * For further information about Alkacon Software GmbH & Co. KG, please see the
  18. * company website: http://www.alkacon.com
  19. *
  20. * For further information about OpenCms, please see the
  21. * project website: http://www.opencms.org
  22. *
  23. * You should have received a copy of the GNU Lesser General Public
  24. * License along with this library; if not, write to the Free Software
  25. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  26. */
  27. package org.opencms.module;
  28. import org.opencms.db.CmsExportPoint;
  29. import org.opencms.file.CmsFile;
  30. import org.opencms.file.CmsObject;
  31. import org.opencms.file.CmsProperty;
  32. import org.opencms.file.CmsResource;
  33. import org.opencms.file.CmsResourceFilter;
  34. import org.opencms.importexport.CmsImportParameters;
  35. import org.opencms.lock.CmsLock;
  36. import org.opencms.lock.CmsLockFilter;
  37. import org.opencms.main.CmsException;
  38. import org.opencms.main.OpenCms;
  39. import org.opencms.relations.CmsRelation;
  40. import org.opencms.relations.CmsRelationFilter;
  41. import org.opencms.relations.CmsRelationType;
  42. import org.opencms.report.CmsShellReport;
  43. import org.opencms.test.OpenCmsTestCase;
  44. import org.opencms.test.OpenCmsTestProperties;
  45. import org.opencms.test.OpenCmsTestResourceConfigurableFilter;
  46. import org.opencms.util.CmsStringUtil;
  47. import org.opencms.util.CmsUUID;
  48. import org.opencms.util.CmsZipBuilder;
  49. import java.io.File;
  50. import java.io.IOException;
  51. import java.util.ArrayList;
  52. import java.util.Arrays;
  53. import java.util.HashMap;
  54. import java.util.List;
  55. import java.util.Locale;
  56. import junit.framework.Test;
  57. /**
  58. * Unit tests for OpenCms module updates.<p>
  59. */
  60. public class TestModuleUpdate extends OpenCmsTestCase {
  61. /** Module name. */
  62. public static final String MODULE = "org.test.foo";
  63. /** Base path for the module. */
  64. public static final String MODULE_PATH = "/system/modules/" + MODULE;
  65. /**
  66. * Default JUnit constructor.<p>
  67. *
  68. * @param arg0 JUnit parameters
  69. */
  70. public TestModuleUpdate(String arg0) {
  71. super(arg0);
  72. }
  73. /**
  74. * Test suite for this test class.<p>
  75. *
  76. * @return the test suite
  77. */
  78. public static Test suite() {
  79. OpenCmsTestProperties.initialize(org.opencms.test.AllTests.TEST_PROPERTIES_PATH);
  80. return generateSetupTestWrapper(TestModuleUpdate.class, "simpletest", "/");
  81. }
  82. /**
  83. * Creates a temporary file for module exports.<p>
  84. *
  85. * @return the created file
  86. * @throws IOException if something goes wrong
  87. */
  88. public File tempExport() throws IOException {
  89. File file = File.createTempFile("opencms-test-export_", ".zip");
  90. file.deleteOnExit();
  91. return file;
  92. }
  93. /**
  94. * Test case.<p>
  95. * @throws Exception if an error happens
  96. */
  97. public void testAcl() throws Exception {
  98. CmsObject cms = cms();
  99. removeTestModuleIfExists(cms);
  100. File export = null;
  101. // use custom resource storage so there is no interference from other tests
  102. newStorage();
  103. String username = "ModuleTestAclUser";
  104. cms.createUser(username, "password", "description", new HashMap<String, Object>());
  105. // use blocks so we don't accidentally use wrong object
  106. {
  107. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  108. builder.addModule();
  109. builder.addFolder("");
  110. builder.addTextFile("test.txt", "test");
  111. cms.chacc(MODULE_PATH + "/test.txt", "USER", username, "+w+v+c");
  112. cms.chacc(MODULE_PATH + "/test.txt", "USER", "ALL_OTHERS", "-r");
  113. builder.addTextFile("test2.txt", "test");
  114. builder.publish();
  115. export = tempExport();
  116. builder.export(export.getAbsolutePath());
  117. storeResources(cms, MODULE_PATH);
  118. builder.delete();
  119. }
  120. {
  121. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  122. builder.addModule();
  123. builder.addFolder("");
  124. builder.addTextFile("test.txt", "test");
  125. builder.addTextFile("test2.txt", "test");
  126. cms.chacc(MODULE_PATH + "/test2.txt", "USER", username, "+w+v+c");
  127. builder.publish();
  128. }
  129. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  130. cms,
  131. export.getAbsolutePath(),
  132. new CmsShellReport(Locale.ENGLISH));
  133. assertTrue("should have used update mechanism", result.usedUpdater());
  134. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  135. filter.disableProjectLastModifiedTest();
  136. filter.disableDateContentTest();
  137. filter.disableDateLastModifiedTest();
  138. filter.disableResourceIdTest();
  139. List<CmsResource> resources = new ArrayList<>();
  140. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  141. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  142. // first test that existing resources match their stored version, then check that there are no extra resources
  143. for (CmsResource resource : resources) {
  144. System.out.println("Comparing " + resource.getRootPath());
  145. assertFilter(cms, resource.getRootPath(), filter);
  146. }
  147. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  148. }
  149. /**
  150. * Test case.<p>
  151. * @throws Exception if an error happens
  152. */
  153. public void testExplodedModule() throws Exception {
  154. CmsObject cms = cms();
  155. removeTestModuleIfExists(cms);
  156. File export = null;
  157. // use custom resource storage so there is no interference from other tests
  158. newStorage();
  159. // use blocks so we don't accidentally use wrong object
  160. {
  161. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, "org.opencms.bar");
  162. builder.addExplodedModule(
  163. "org.opencms.bar1",
  164. Arrays.asList("/system/modules/org.opencms.bar/a1.txt", "/system/modules/org.opencms.bar/dir/a2.txt"));
  165. builder.setNextStructureId(new CmsUUID());
  166. builder.addFolder("");
  167. builder.setNextStructureId(new CmsUUID());
  168. builder.addFolder("dir");
  169. builder.addTextFile("a1.txt", "this is the modified foo file");
  170. builder.addTextFile("dir/a2.txt", "this is the bar file");
  171. builder.publish();
  172. export = tempExport();
  173. builder.export(export.getAbsolutePath());
  174. builder.delete();
  175. }
  176. {
  177. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, "org.opencms.bar");
  178. builder.addExplodedModule(
  179. "org.opencms.bar1",
  180. Arrays.asList(
  181. "/system/modules/org.opencms.bar/a1.txt",
  182. "/system/modules/org.opencms.bar/dir/a2.txt",
  183. "/system/modules/org.opencms.bar/todelete.txt"));
  184. builder.setNextStructureId(new CmsUUID());
  185. builder.addFolder("");
  186. builder.setNextStructureId(new CmsUUID());
  187. builder.addFolder("dir");
  188. builder.addTextFile("a1.txt", "this is the foo file");
  189. builder.addTextFile("todelete.txt", "todelete");
  190. builder.addTextFile("dir/a2.txt", "this is the bar file");
  191. builder.addTextFile("notinmodule.txt", "notinmodule");
  192. builder.publish();
  193. }
  194. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  195. filter.disableProjectLastModifiedTest();
  196. filter.disableDateContentTest();
  197. filter.disableDateLastModifiedTest();
  198. filter.disableResourceIdTest();
  199. CmsReplaceModuleInfo info = OpenCms.getModuleManager().replaceModule(
  200. cms,
  201. export.getAbsolutePath(),
  202. new CmsShellReport(Locale.ENGLISH));
  203. assertTrue("Should have used new module updater", info.usedUpdater());
  204. cms.readResource("/system/modules/org.opencms.bar/notinmodule.txt");
  205. assertFalse("file should have been deleted", cms.existsResource("/system/module/org.opencms.bar/todelete.txt"));
  206. }
  207. /**
  208. * Test case.<p>
  209. * @throws Exception if an error happens
  210. */
  211. public void testExportPoints() throws Exception {
  212. File target = File.createTempFile("ocms-test-exportpoint-", ".dat");
  213. target.delete();
  214. target.deleteOnExit();
  215. CmsObject cms = cms();
  216. removeTestModuleIfExists(cms);
  217. File export = null;
  218. // use blocks so we don't accidentally use wrong object
  219. {
  220. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  221. builder.addExportPoint(new CmsExportPoint(MODULE_PATH + "/test.txt", target.getAbsolutePath()));
  222. builder.addModule();
  223. builder.addFolder("");
  224. builder.addTextFile("test.txt", "new");
  225. builder.publish();
  226. export = tempExport();
  227. builder.export(export.getAbsolutePath());
  228. storeResources(cms, MODULE_PATH);
  229. builder.delete();
  230. }
  231. {
  232. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  233. builder.addModule();
  234. builder.addFolder("");
  235. builder.publish();
  236. }
  237. assertFalse("Export point should not exist", target.exists());
  238. CmsReplaceModuleInfo info = OpenCms.getModuleManager().replaceModule(
  239. cms,
  240. export.getAbsolutePath(),
  241. new CmsShellReport(Locale.ENGLISH));
  242. assertTrue("Export point has not been exported", target.exists());
  243. assertTrue("Module update should have been used", info.usedUpdater());
  244. }
  245. /**
  246. * Test case.<p>
  247. * @throws Exception if an error happens
  248. */
  249. public void testImportScript() throws Exception {
  250. CmsObject cms = cms();
  251. removeTestModuleIfExists(cms);
  252. File export = null;
  253. // use custom resource storage so there is no interference from other tests
  254. // use blocks so we don't accidentally use wrong object
  255. {
  256. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  257. builder.setImportScript("createFolder \"/system/\" \"testImportScriptFolder/\"");
  258. builder.addModule();
  259. builder.addFolder("");
  260. builder.publish();
  261. export = tempExport();
  262. builder.export(export.getAbsolutePath());
  263. builder.delete();
  264. }
  265. {
  266. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  267. builder.addModule();
  268. builder.addFolder("");
  269. builder.publish();
  270. }
  271. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  272. cms,
  273. export.getAbsolutePath(),
  274. new CmsShellReport(Locale.ENGLISH));
  275. assertTrue("should have used update mechanism", result.usedUpdater());
  276. cms.readResource("/system/testImportScriptFolder");
  277. }
  278. /**
  279. * Test case.<p>
  280. * @throws Exception if an error happens
  281. */
  282. public void testModuleResourceChangeToSubfolder() throws Exception {
  283. CmsObject cms = cms();
  284. removeTestModuleIfExists(cms);
  285. File export1 = null;
  286. File export2 = null;
  287. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  288. builder.addModule();
  289. builder.addFolder("");
  290. builder.addFolder("folder");
  291. builder.addTextFile("folder/file.txt", "123");
  292. builder.publish();
  293. export1 = tempExport();
  294. builder.export(export1.getAbsolutePath());
  295. builder.updateModuleResources("/system/modules/" + MODULE + "/folder");
  296. export2 = tempExport();
  297. builder.export(export2.getAbsolutePath());
  298. builder.updateModuleResources("/system/modules/" + MODULE);
  299. builder.delete();
  300. CmsShellReport report = new CmsShellReport(Locale.ENGLISH);
  301. OpenCms.getModuleManager().replaceModule(cms, export1.getAbsolutePath(), report);
  302. OpenCms.getModuleManager().replaceModule(cms, export2.getAbsolutePath(), report);
  303. CmsResource res = cms.readResource("/system/modules/" + MODULE);
  304. CmsLock lock = cms.getLock(res);
  305. cms.lockResource(res);
  306. cms.deleteResource("/system/modules/" + MODULE, CmsResource.DELETE_PRESERVE_SIBLINGS);
  307. OpenCms.getPublishManager().publishProject(cms);
  308. OpenCms.getPublishManager().waitWhileRunning();
  309. }
  310. /**
  311. * Test case.<p>
  312. * @throws Exception if an error happens
  313. */
  314. public void testMoveNewDelete() throws Exception {
  315. CmsObject cms = cms();
  316. removeTestModuleIfExists(cms);
  317. File export = null;
  318. // use custom resource storage so there is no interference from other tests
  319. newStorage();
  320. // use blocks so we don't accidentally use wrong object
  321. {
  322. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  323. builder.addModule();
  324. builder.addFolder("");
  325. builder.addFolder("dir1");
  326. builder.addFolder("dir2");
  327. builder.addTextFile("filefromdeleteddir.txt", "file from deleted dir");
  328. // foo.txt is the moved file, the module builder helper calculates the uuid from the file name (not path)
  329. builder.addTextFile("dir2/moved.txt", "foo");
  330. builder.addTextFile("new.txt", "new");
  331. builder.publish();
  332. export = tempExport();
  333. builder.export(export.getAbsolutePath());
  334. storeResources(cms, MODULE_PATH);
  335. builder.delete();
  336. }
  337. {
  338. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  339. builder.addModule();
  340. builder.addFolder("");
  341. builder.addFolder("dir1");
  342. builder.addFolder("dir2");
  343. builder.addFolder("deleteddir");
  344. builder.addTextFile("deleteddir/filefromdeleteddir.txt", "file from deleted dir");
  345. builder.addTextFile("old.txt", "old");
  346. builder.addTextFile("dir1/moved.txt", "foo");
  347. builder.publish();
  348. }
  349. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  350. filter.disableProjectLastModifiedTest();
  351. filter.disableDateContentTest();
  352. filter.disableDateLastModifiedTest();
  353. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  354. cms,
  355. export.getAbsolutePath(),
  356. new CmsShellReport(Locale.ENGLISH));
  357. assertTrue("should have used update mechanism", result.usedUpdater());
  358. List<CmsResource> resources = new ArrayList<>();
  359. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  360. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  361. // first test that existing resources match their stored version, then check that there are no extra resources
  362. for (CmsResource resource : resources) {
  363. System.out.println("Comparing " + resource.getRootPath());
  364. assertFilter(cms, resource.getRootPath(), filter);
  365. }
  366. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  367. }
  368. /**
  369. * Test case.<p>
  370. * @throws Exception if an error happens
  371. */
  372. public void testNestedMove() throws Exception {
  373. CmsObject cms = cms();
  374. removeTestModuleIfExists(cms);
  375. File export = null;
  376. // use custom resource storage so there is no interference from other tests
  377. newStorage();
  378. CmsUUID foo = new CmsUUID();
  379. CmsUUID page = new CmsUUID();
  380. // use blocks so we don't accidentally use wrong object
  381. {
  382. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  383. builder.addModule();
  384. builder.addFolder("");
  385. builder.setNextStructureId(foo);
  386. builder.setNextResourceId(foo);
  387. builder.addFolder("foo2");
  388. builder.addFolder("foo2/news");
  389. builder.setNextStructureId(page);
  390. builder.setNextResourceId(page);
  391. builder.addFolder("foo2/news/article");
  392. builder.publish();
  393. export = tempExport();
  394. builder.export(export.getAbsolutePath());
  395. builder.delete();
  396. }
  397. {
  398. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  399. builder.addModule();
  400. builder.addFolder("");
  401. builder.setNextStructureId(foo);
  402. builder.setNextResourceId(foo);
  403. builder.addFolder("foo1");
  404. builder.setNextStructureId(page);
  405. builder.setNextResourceId(page);
  406. builder.addFolder("foo1/news");
  407. builder.publish();
  408. }
  409. CmsReplaceModuleInfo replaceInfo = OpenCms.getModuleManager().replaceModule(
  410. cms,
  411. export.getAbsolutePath(),
  412. new CmsShellReport(Locale.ENGLISH));
  413. assertFalse("new module update mechanism should not have been used", replaceInfo.usedUpdater());
  414. }
  415. /**
  416. * Test case.<p>
  417. * @throws Exception if an error happens
  418. */
  419. public void testNewTypeWithContents() throws Exception {
  420. CmsObject cms = cms();
  421. removeTestModuleIfExists(cms);
  422. String typeName = "tntwc";
  423. int typeId = 77994;
  424. File[] exports = new File[] {null, null};
  425. for (int version : new int[] {0, 1}) {
  426. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  427. if (version == 1) {
  428. builder.addType(typeName, typeId);
  429. }
  430. builder.addModule();
  431. builder.addFolder("");
  432. builder.addTextFile("plain.txt", "test");
  433. if (version == 1) {
  434. builder.addFile(typeName, "special.txt", "special");
  435. }
  436. builder.publish();
  437. File exportFile = tempExport();
  438. builder.export(exportFile.getAbsolutePath());
  439. exports[version] = exportFile;
  440. builder.delete();
  441. }
  442. CmsShellReport report = new CmsShellReport(Locale.ENGLISH);
  443. OpenCms.getModuleManager().replaceModule(cms, exports[0].getAbsolutePath(), report);
  444. OpenCms.getModuleManager().replaceModule(cms, exports[1].getAbsolutePath(), report);
  445. assertEquals(typeId, cms.readResource("/system/modules/" + MODULE + "/special.txt").getTypeId());
  446. }
  447. /**
  448. * Test case.<p>
  449. * @throws Exception if an error happens
  450. */
  451. public void testParseLinks() throws Exception {
  452. CmsObject cms = cms();
  453. removeTestModuleIfExists(cms);
  454. File export = null;
  455. // use custom resource storage so there is no interference from other tests
  456. newStorage();
  457. // use blocks so we don't accidentally use wrong object
  458. {
  459. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  460. builder.addModule();
  461. builder.addFolder("");
  462. builder.addTextFile("test.txt", "test");
  463. builder.addFile("jsp", "test.jsp", "%(link.weak:" + MODULE_PATH + "/test.txt)");
  464. builder.publish();
  465. export = tempExport();
  466. builder.export(export.getAbsolutePath());
  467. builder.delete();
  468. }
  469. {
  470. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  471. builder.addModule();
  472. builder.addFolder("");
  473. builder.addTextFile("test.txt", "test");
  474. builder.publish();
  475. }
  476. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  477. cms,
  478. export.getAbsolutePath(),
  479. new CmsShellReport(Locale.ENGLISH));
  480. assertTrue("should have used update mechanism", result.usedUpdater());
  481. // assertTrue("New updater should have been used", info.usedUpdater());
  482. CmsResource testJsp = cms.readResource("/system/modules/org.test.foo/test.jsp");
  483. List<CmsRelation> relations = cms.readRelations(
  484. CmsRelationFilter.relationsFromStructureId(testJsp.getStructureId()));
  485. assertEquals("Should have one relation", 1, relations.size());
  486. CmsRelation relation = relations.get(0);
  487. assertEquals("/system/modules/org.test.foo/test.txt", relation.getTargetPath());
  488. }
  489. /**
  490. * Test case.<p>
  491. * @throws Exception if an error happens
  492. */
  493. public void testProperties() throws Exception {
  494. CmsObject cms = cms();
  495. removeTestModuleIfExists(cms);
  496. File export = null;
  497. // use custom resource storage so there is no interference from other tests
  498. newStorage();
  499. // use blocks so we don't accidentally use wrong object
  500. {
  501. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  502. builder.addModule();
  503. builder.addFolder("");
  504. builder.addTextFile("test.txt", "test");
  505. cms.writePropertyObject(MODULE_PATH + "/test.txt", new CmsProperty("Title", "title", null));
  506. cms.writePropertyObject(MODULE_PATH + "/test.txt", new CmsProperty("Description", "desc", null));
  507. builder.addTextFile("new.txt", "new");
  508. cms.writePropertyObject(MODULE_PATH + "/new.txt", new CmsProperty("Title", "title", null));
  509. builder.publish();
  510. export = tempExport();
  511. builder.export(export.getAbsolutePath());
  512. storeResources(cms, MODULE_PATH);
  513. builder.delete();
  514. }
  515. {
  516. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  517. builder.addModule();
  518. builder.addFolder("");
  519. builder.addTextFile("test.txt", "test");
  520. cms.writePropertyObject(MODULE_PATH + "/test.txt", new CmsProperty("Title", "title2", null));
  521. cms.writePropertyObject(MODULE_PATH + "/test.txt", new CmsProperty("template", "template", null));
  522. builder.publish();
  523. }
  524. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  525. cms,
  526. export.getAbsolutePath(),
  527. new CmsShellReport(Locale.ENGLISH));
  528. assertTrue("should have used update mechanism", result.usedUpdater());
  529. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  530. filter.disableProjectLastModifiedTest();
  531. filter.disableDateContentTest();
  532. filter.disableDateLastModifiedTest();
  533. List<CmsResource> resources = new ArrayList<>();
  534. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  535. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  536. // first test that existing resources match their stored version, then check that there are no extra resources
  537. for (CmsResource resource : resources) {
  538. System.out.println("Comparing " + resource.getRootPath());
  539. assertFilter(cms, resource.getRootPath(), filter);
  540. }
  541. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  542. }
  543. /**
  544. * Test case.<p>
  545. * @throws Exception if an error happens
  546. */
  547. public void testRelations() throws Exception {
  548. CmsObject cms = cms();
  549. removeTestModuleIfExists(cms);
  550. File export = null;
  551. // use custom resource storage so there is no interference from other tests
  552. newStorage();
  553. CmsResource relTarget = cms.createResource(
  554. "system/testRelationsTarget",
  555. OpenCms.getResourceManager().getResourceType("folder"));
  556. // use blocks so we don't accidentally use wrong object
  557. {
  558. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  559. builder.addModule();
  560. builder.addFolder("");
  561. CmsResource test = builder.addTextFile("test.txt", "test");
  562. cms.addRelationToResource(test, relTarget, "TESTRELATION1");
  563. CmsResource test2 = builder.addFile(
  564. "jsp",
  565. "test2.txt",
  566. "%(link.weak:/system/modules/org.test.foo/test.txt");
  567. cms.addRelationToResource(test2, relTarget, "TESTRELATION2");
  568. builder.publish();
  569. export = tempExport();
  570. builder.export(export.getAbsolutePath());
  571. storeResources(cms, MODULE_PATH);
  572. builder.delete();
  573. }
  574. {
  575. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  576. builder.addModule();
  577. builder.addFolder("");
  578. CmsResource test = builder.addTextFile("test.txt", "test");
  579. cms.addRelationToResource(test, relTarget, "TESTRELATION2");
  580. builder.addTextFile("test2.txt", "test");
  581. builder.publish();
  582. }
  583. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  584. cms,
  585. export.getAbsolutePath(),
  586. new CmsShellReport(Locale.ENGLISH));
  587. assertTrue("should have used update mechanism", result.usedUpdater());
  588. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  589. filter.disableProjectLastModifiedTest();
  590. filter.disableDateContentTest();
  591. filter.disableDateLastModifiedTest();
  592. //filter.disableResourceIdTest();
  593. List<CmsResource> resources = new ArrayList<>();
  594. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  595. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  596. // first test that existing resources match their stored version, then check that there are no extra resources
  597. for (CmsResource resource : resources) {
  598. System.out.println("Comparing " + resource.getRootPath());
  599. assertFilter(cms, resource.getRootPath(), filter);
  600. }
  601. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  602. }
  603. /**
  604. * Test case for exporting / importing relations to immutables.
  605. *
  606. * @throws Exception
  607. */
  608. public void testRelationsToImmutable() throws Exception {
  609. CmsObject cms = cms();
  610. CmsResource sysWorkplace = cms.createResource("/system/workplace", 0);
  611. OpenCms.getPublishManager().publishProject(cms);
  612. OpenCms.getPublishManager().waitWhileRunning();
  613. removeTestModuleIfExists(cms);
  614. File export = null;
  615. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  616. builder.addModule();
  617. builder.addFolder("");
  618. CmsResource foo = builder.addTextFile("foo.txt", "text");
  619. cms.addRelationToResource(foo, sysWorkplace, CmsRelationType.CATEGORY.getName());
  620. export = tempExport();
  621. builder.publish();
  622. builder.export(export.getAbsolutePath());
  623. builder.delete();
  624. cms.lockResource(sysWorkplace);
  625. cms.deleteResource("/system/workplace", CmsResource.DELETE_PRESERVE_SIBLINGS);
  626. builder.publish();
  627. CmsResource sysWorkplace2 = cms.createResource("/system/workplace", 0);
  628. assertNotSame(sysWorkplace.getStructureId(), sysWorkplace2.getStructureId());
  629. builder.publish();
  630. OpenCms.getModuleManager().replaceModule(cms, export.getAbsolutePath(), new CmsShellReport(Locale.ENGLISH));
  631. List<CmsRelation> relations = cms.readRelations(
  632. CmsRelationFilter.relationsFromStructureId(foo.getStructureId()));
  633. assertEquals(1, relations.size());
  634. CmsRelation rel = relations.get(0);
  635. assertEquals(sysWorkplace2.getStructureId(), rel.getTargetId());
  636. builder.delete();
  637. cms.lockResource(sysWorkplace2);
  638. cms.deleteResource("/system/workplace", CmsResource.DELETE_PRESERVE_SIBLINGS);
  639. builder.publish();
  640. }
  641. /**
  642. * Test case for exporting / importing relations to immutables.
  643. *
  644. * @throws Exception
  645. */
  646. public void testRelationsToImmutable2() throws Exception {
  647. CmsObject cms = cms();
  648. CmsResource sysWorkplace = cms.createResource("/system/workplace", 0);
  649. OpenCms.getPublishManager().publishProject(cms);
  650. OpenCms.getPublishManager().waitWhileRunning();
  651. removeTestModuleIfExists(cms);
  652. File export = null;
  653. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  654. builder.addModule();
  655. builder.addFolder("");
  656. CmsResource foo = builder.addTextFile("foo.txt", "text");
  657. cms.addRelationToResource(foo, sysWorkplace, CmsRelationType.CATEGORY.getName());
  658. export = tempExport();
  659. builder.publish();
  660. builder.export(export.getAbsolutePath());
  661. cms.lockResource(sysWorkplace);
  662. cms.deleteResource("/system/workplace", CmsResource.DELETE_PRESERVE_SIBLINGS);
  663. builder.publish();
  664. CmsResource sysWorkplace2 = cms.createResource("/system/workplace", 0);
  665. assertNotSame(sysWorkplace.getStructureId(), sysWorkplace2.getStructureId());
  666. builder.publish();
  667. OpenCms.getModuleManager().replaceModule(cms, export.getAbsolutePath(), new CmsShellReport(Locale.ENGLISH));
  668. List<CmsRelation> relations = cms.readRelations(
  669. CmsRelationFilter.relationsFromStructureId(foo.getStructureId()));
  670. assertEquals(1, relations.size());
  671. CmsRelation rel = relations.get(0);
  672. assertEquals(sysWorkplace2.getStructureId(), rel.getTargetId());
  673. builder.delete();
  674. cms.lockResource(sysWorkplace2);
  675. cms.deleteResource("/system/workplace", CmsResource.DELETE_PRESERVE_SIBLINGS);
  676. builder.publish();
  677. }
  678. /**
  679. * Test case.<p>
  680. * @throws Exception if an error happens
  681. */
  682. public void testSiblings() throws Exception {
  683. CmsObject cms = cms();
  684. removeTestModuleIfExists(cms);
  685. File export = null;
  686. // use custom resource storage so there is no interference from other tests
  687. newStorage();
  688. CmsUUID resId = new CmsUUID();
  689. // use blocks so we don't accidentally use wrong object
  690. {
  691. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  692. builder.addModule();
  693. builder.addFolder("");
  694. builder.setNextResourceId(resId);
  695. String content = "content1";
  696. builder.addTextFile("file1.txt", content);
  697. builder.setNextResourceId(resId);
  698. builder.addTextFile("file2.txt", null);
  699. builder.publish();
  700. assertEquals(
  701. "file content doesn't match",
  702. "content1",
  703. new String(cms.readFile(MODULE_PATH + "/file1.txt").getContents(), "UTF-8"));
  704. assertEquals(
  705. "file content doesn't match",
  706. "content1",
  707. new String(cms.readFile(MODULE_PATH + "/file2.txt").getContents(), "UTF-8"));
  708. export = tempExport();
  709. builder.export(export.getAbsolutePath());
  710. storeResources(cms, MODULE_PATH);
  711. builder.delete();
  712. }
  713. {
  714. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  715. builder.addModule();
  716. builder.addFolder("");
  717. builder.setNextResourceId(resId);
  718. String content = "content2";
  719. builder.addTextFile("file1.txt", content);
  720. builder.setNextResourceId(resId);
  721. builder.addTextFile("file2.txt", null);
  722. assertEquals(
  723. "file content doesn't match",
  724. "content2",
  725. new String(cms.readFile(MODULE_PATH + "/file1.txt").getContents(), "UTF-8"));
  726. assertEquals(
  727. "file content doesn't match",
  728. "content2",
  729. new String(cms.readFile(MODULE_PATH + "/file2.txt").getContents(), "UTF-8"));
  730. builder.publish();
  731. }
  732. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  733. filter.disableProjectLastModifiedTest();
  734. filter.disableDateContentTest();
  735. filter.disableDateLastModifiedTest();
  736. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  737. cms,
  738. export.getAbsolutePath(),
  739. new CmsShellReport(Locale.ENGLISH));
  740. assertTrue("should have used update mechanism", result.usedUpdater());
  741. List<CmsResource> resources = new ArrayList<>();
  742. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  743. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  744. // first test that existing resources match their stored version, then check that there are no extra resources
  745. for (CmsResource resource : resources) {
  746. System.out.println("Comparing " + resource.getRootPath());
  747. assertFilter(cms, resource.getRootPath(), filter);
  748. }
  749. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  750. }
  751. /**
  752. * Test case.<p>
  753. * @throws Exception if an error happens
  754. */
  755. public void testUnlockedAndUnchanged() throws Exception {
  756. CmsObject cms = cms();
  757. removeTestModuleIfExists(cms);
  758. File export = null;
  759. // use custom resource storage so there is no interference from other tests
  760. newStorage();
  761. // use blocks so we don't accidentally use wrong object
  762. {
  763. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  764. builder.addModule();
  765. builder.addFolder("");
  766. builder.addTextFile("bar.txt", "this is the original bar file");
  767. builder.publish();
  768. export = tempExport();
  769. builder.export(export.getAbsolutePath());
  770. storeResources(cms, MODULE_PATH);
  771. builder.delete();
  772. }
  773. {
  774. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  775. builder.addModule();
  776. builder.addFolder("");
  777. builder.addTextFile("foo.txt", "this is the original foo file");
  778. builder.publish();
  779. }
  780. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  781. filter.disableProjectLastModifiedTest();
  782. filter.disableDateContentTest();
  783. filter.disableDateLastModifiedTest();
  784. filter.disableResourceIdTest();
  785. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  786. cms,
  787. export.getAbsolutePath(),
  788. new CmsShellReport(Locale.ENGLISH));
  789. assertTrue("should have used update mechanism", result.usedUpdater());
  790. CmsResource mainFolder = cms.readResource(MODULE_PATH);
  791. assertEquals(CmsResource.STATE_UNCHANGED, mainFolder.getState());
  792. assertEquals(CmsResource.STATE_UNCHANGED, cms.readResource(MODULE_PATH + "/bar.txt").getState());
  793. assertTrue(
  794. "there are locked resources in the main folder",
  795. cms.getLockedResources(mainFolder, CmsLockFilter.FILTER_ALL).isEmpty());
  796. }
  797. /**
  798. * Test case.<p>
  799. * @throws Exception if an error happens
  800. */
  801. public void testUpdateContent() throws Exception {
  802. CmsObject cms = cms();
  803. removeTestModuleIfExists(cms);
  804. File export = null;
  805. // use custom resource storage so there is no interference from other tests
  806. newStorage();
  807. // use blocks so we don't accidentally use wrong object
  808. {
  809. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  810. builder.addModule();
  811. builder.addFolder("");
  812. builder.addTextFile("foo.txt", "this is the modified foo file");
  813. builder.addTextFile("bar.txt", "this is the bar file");
  814. builder.publish();
  815. export = tempExport();
  816. builder.export(export.getAbsolutePath());
  817. storeResources(cms, MODULE_PATH);
  818. builder.delete();
  819. }
  820. {
  821. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  822. builder.addModule();
  823. builder.addFolder("");
  824. builder.addTextFile("foo.txt", "this is the original foo file");
  825. builder.addTextFile("bar.txt", "this is the bar file");
  826. builder.publish();
  827. }
  828. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  829. filter.disableProjectLastModifiedTest();
  830. filter.disableDateContentTest();
  831. filter.disableDateLastModifiedTest();
  832. filter.disableResourceIdTest();
  833. CmsReplaceModuleInfo info = OpenCms.getModuleManager().replaceModule(
  834. cms,
  835. export.getAbsolutePath(),
  836. new CmsShellReport(Locale.ENGLISH));
  837. assertTrue("Should have used new module updater", info.usedUpdater());
  838. List<CmsResource> resources = new ArrayList<>();
  839. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  840. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  841. // first test that existing resources match their stored version, then check that there are no extra resources
  842. for (CmsResource resource : resources) {
  843. System.out.println("Comparing " + resource.getRootPath());
  844. assertFilter(cms, resource.getRootPath(), filter);
  845. }
  846. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  847. }
  848. /**
  849. * Test case.<p>
  850. * @throws Exception if an error happens
  851. */
  852. public void testUpdateModuleWithModifiedResource() throws Exception {
  853. CmsObject cms = cms();
  854. removeTestModuleIfExists(cms);
  855. File export1 = null;
  856. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  857. builder.addModule();
  858. builder.addFolder("");
  859. CmsResource res = builder.addTextFile("file.txt", "aaa");
  860. builder.publish();
  861. export1 = tempExport();
  862. builder.export(export1.getAbsolutePath());
  863. try {
  864. CmsFile file = cms.readFile(res);
  865. file.setContents("aaa".getBytes("UTF-8"));
  866. cms.lockResourceTemporary(res);
  867. cms.writeFile(file);
  868. CmsShellReport report = new CmsShellReport(Locale.ENGLISH);
  869. OpenCms.getModuleManager().replaceModule(cms, export1.getAbsolutePath(), report);
  870. assertTrue(cms.readResource(res.getRootPath()).getState().isUnchanged());
  871. } finally {
  872. builder.delete();
  873. }
  874. }
  875. /**
  876. * Test case.<p>
  877. * @throws Exception if an error happens
  878. */
  879. public void testUpdateTypes() throws Exception {
  880. CmsObject cms = cms();
  881. removeTestModuleIfExists(cms);
  882. File export = null;
  883. // use custom resource storage so there is no interference from other tests
  884. newStorage();
  885. // use blocks so we don't accidentally use wrong object
  886. {
  887. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  888. builder.addType("firsttype", 7001);
  889. builder.addModule();
  890. export = tempExport();
  891. builder.export(export.getAbsolutePath());
  892. builder.delete();
  893. }
  894. {
  895. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  896. builder.addType("secondtype", 7002);
  897. builder.addModule();
  898. }
  899. CmsReplaceModuleInfo result = OpenCms.getModuleManager().replaceModule(
  900. cms,
  901. export.getAbsolutePath(),
  902. new CmsShellReport(Locale.ENGLISH));
  903. assertTrue("should have used update mechanism", result.usedUpdater());
  904. assertNull(
  905. "explorer type secondtype should have been removed",
  906. OpenCms.getWorkplaceManager().getExplorerTypeSetting("secondtype"));
  907. assertNotNull(
  908. "explorer type firsttype is missing",
  909. OpenCms.getWorkplaceManager().getExplorerTypeSetting("firsttype"));
  910. assertTrue("missing type firsttype", OpenCms.getResourceManager().hasResourceType("firsttype"));
  911. assertFalse("shouldn't have type secondttype", OpenCms.getResourceManager().hasResourceType("secondtype"));
  912. }
  913. /**
  914. * Test case.<p>
  915. * @throws Exception if an error happens
  916. */
  917. public void testUpdateWithSimpleFileIdConflict() throws Exception {
  918. CmsObject cms = cms();
  919. removeTestModuleIfExists(cms);
  920. File export = null;
  921. // use custom resource storage so there is no interference from other tests
  922. newStorage();
  923. // use blocks so we don't accidentally use wrong object
  924. {
  925. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  926. builder.addModule();
  927. builder.addFolder("");
  928. builder.addTextFile("foo.txt", "this is the modified foo file");
  929. builder.publish();
  930. export = tempExport();
  931. builder.export(export.getAbsolutePath());
  932. storeResources(cms, MODULE_PATH);
  933. builder.delete();
  934. }
  935. {
  936. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  937. builder.addModule();
  938. builder.addFolder("");
  939. builder.setNextStructureId(new CmsUUID());
  940. builder.setNextResourceId(new CmsUUID());
  941. builder.addTextFile("foo.txt", "this is the original foo file");
  942. builder.publish();
  943. }
  944. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  945. filter.disableProjectLastModifiedTest();
  946. filter.disableDateContentTest();
  947. filter.disableDateLastModifiedTest();
  948. filter.disableResourceIdTest();
  949. CmsReplaceModuleInfo info = OpenCms.getModuleManager().replaceModule(
  950. cms,
  951. export.getAbsolutePath(),
  952. new CmsShellReport(Locale.ENGLISH));
  953. assertTrue("Should have used new module updater", info.usedUpdater());
  954. List<CmsResource> resources = new ArrayList<>();
  955. resources.add(cms.readResource(MODULE_PATH, CmsResourceFilter.ALL));
  956. resources.addAll(cms.readResources(MODULE_PATH, CmsResourceFilter.ALL, true));
  957. // first test that existing resources match their stored version, then check that there are no extra resources
  958. for (CmsResource resource : resources) {
  959. System.out.println("Comparing " + resource.getRootPath());
  960. assertFilter(cms, resource.getRootPath(), filter);
  961. }
  962. assertEquals("Resource count doesn't match", m_currentResourceStrorage.size(), resources.size());
  963. }
  964. /**
  965. * Test case.<p>
  966. * @throws Exception if an error happens
  967. */
  968. public void testUpdateWithSimpleFileIdConflict2() throws Exception {
  969. CmsObject cms = cms();
  970. removeTestModuleIfExists(cms);
  971. CmsResource res = cms.createResource("/system/anotherfile", 1);
  972. CmsUUID sid = res.getStructureId();
  973. CmsUUID rid = res.getResourceId();
  974. CmsUUID[][] idSeqs = new CmsUUID[][] {{new CmsUUID(), new CmsUUID()}, {sid, rid}};
  975. // First create a module, then try to update it with a module containing the same resource path but with
  976. // a structure id that occurs elsewhere in the system
  977. for (int i = 0; i < 2; i++) {
  978. String manifest = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
  979. + "\n"
  980. + "<export>\n"
  981. + " <info>\n"
  982. + " <infoproject>Offline</infoproject>\n"
  983. + " <export_version>10</export_version>\n"
  984. + " </info>\n"
  985. + " <module>\n"
  986. + " <name>org.opencms.configtest2</name>\n"
  987. + " <nicename><![CDATA[OpenCms configuration module]]></nicename>\n"
  988. + " <group>OpenCms Editors</group>\n"
  989. + " <class />\n"
  990. + " <site>/</site>\n"
  991. + " <export-mode name=\"reduced\" />\n"
  992. + " <description><![CDATA[<p>Contains various configuration files to specify OpenCms core behavior.</p>\n"
  993. + "<p><i>&copy; by Alkacon Software GmbH &amp; Co. KG (http://www.alkacon.com).</i></p>]]></description>\n"
  994. + " <version>11.0.0</version>\n"
  995. + " <authorname><![CDATA[Alkacon Software GmbH &amp; Co. KG]]></authorname>\n"
  996. + " <authoremail><![CDATA[info@alkacon.com]]></authoremail>\n"
  997. + " <datecreated />\n"
  998. + " <userinstalled />\n"
  999. + " <dateinstalled />\n"
  1000. + " <dependencies />\n"
  1001. + " <exportpoints />\n"
  1002. + " <resources>\n"
  1003. + " <resource uri=\"/system/test1234\" />\n"
  1004. + " </resources>\n"
  1005. + " <excluderesources />\n"
  1006. + " <parameters />\n"
  1007. + " </module>\n"
  1008. + " <files>\n"
  1009. + " <file>\n"
  1010. + " <destination>system</destination>\n"
  1011. + " <type>folder</type>\n"
  1012. + " <properties />\n"
  1013. + " </file>\n"
  1014. + " <file>\n"
  1015. + " <source>system/test1234</source>\n"
  1016. + " <destination>system/test1234</destination>\n"
  1017. + " <uuidstructure>"
  1018. + idSeqs[i][0]
  1019. + "</uuidstructure>\n"
  1020. + " <uuidresource>"
  1021. + idSeqs[i][1]
  1022. + "</uuidresource>\n"
  1023. + " <type>plain</type>\n"
  1024. + " <datecreated>Tue, 08 Nov 2005 15:35:44 GMT</datecreated>\n"
  1025. + " <flags>0</flags>\n"
  1026. + " <properties />\n"
  1027. + " <relations />\n"
  1028. + " <accesscontrol />\n"
  1029. + " </file>\n"
  1030. + " </files>\n"
  1031. + "</export>\n"
  1032. + "";
  1033. CmsZipBuilder zipBuilder = new CmsZipBuilder();
  1034. zipBuilder.addFile("manifest.xml", manifest);
  1035. zipBuilder.addFile("system/test1234", "test1234");
  1036. File importZip = zipBuilder.writeZip();
  1037. importZip.deleteOnExit();
  1038. CmsShellReport report = new CmsShellReport(Locale.ENGLISH);
  1039. CmsReplaceModuleInfo info = OpenCms.getModuleManager().replaceModule(
  1040. cms,
  1041. importZip.getCanonicalPath(),
  1042. report);
  1043. if (i == 1) {
  1044. assertFalse("Should have not used new module update", info.usedUpdater());
  1045. }
  1046. }
  1047. }
  1048. /**
  1049. * Test case.<p>
  1050. * @throws Exception if an error happens
  1051. */
  1052. public void testUseOldModuleReplaceWhenIdsCollide() throws Exception {
  1053. CmsObject cms = cms();
  1054. removeTestModuleIfExists(cms);
  1055. File export = null;
  1056. // use custom resource storage so there is no interference from other tests
  1057. newStorage();
  1058. CmsUUID a = new CmsUUID();
  1059. CmsUUID b = new CmsUUID();
  1060. // use blocks so we don't accidentally use wrong object
  1061. {
  1062. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  1063. builder.addModule();
  1064. builder.addFolder("");
  1065. builder.setNextStructureId(a);
  1066. builder.addTextFile("a.txt", "a");
  1067. builder.setNextStructureId(b);
  1068. builder.addTextFile("b.txt", "b");
  1069. builder.publish();
  1070. export = tempExport();
  1071. builder.export(export.getAbsolutePath());
  1072. builder.delete();
  1073. }
  1074. {
  1075. CmsTestModuleBuilder builder = new CmsTestModuleBuilder(cms, MODULE);
  1076. builder.addModule();
  1077. builder.addFolder("");
  1078. builder.setNextStructureId(b);
  1079. builder.addTextFile("a.txt", "a");
  1080. builder.setNextStructureId(a);
  1081. builder.addTextFile("b.txt", "b");
  1082. builder.publish();
  1083. }
  1084. OpenCmsTestResourceConfigurableFilter filter = new OpenCmsTestResourceConfigurableFilter();
  1085. filter.disableProjectLastModifiedTest();
  1086. filter.disableDateContentTest();
  1087. filter.disableDateLastModifiedTest();
  1088. filter.disableResourceIdTest();
  1089. CmsReplaceModuleInfo replaceInfo = OpenCms.getModuleManager().replaceModule(
  1090. cms,
  1091. export.getAbsolutePath(),

Large files files are truncated, but you can click here to view the full file