| 1 31 32 package org.opencms.file; 33 34 import org.opencms.db.CmsPublishList; 35 import org.opencms.file.types.CmsResourceTypeFolder; 36 import org.opencms.file.types.CmsResourceTypePlain; 37 import org.opencms.lock.CmsLock; 38 import org.opencms.main.CmsException; 39 import org.opencms.main.OpenCms; 40 import org.opencms.report.CmsShellReport; 41 import org.opencms.test.OpenCmsTestCase; 42 import org.opencms.test.OpenCmsTestProperties; 43 import org.opencms.util.CmsUUID; 44 45 import java.util.Collections ; 46 import java.util.List ; 47 48 import junit.extensions.TestSetup; 49 import junit.framework.Test; 50 import junit.framework.TestSuite; 51 52 59 62 public class TestPublishIssues extends OpenCmsTestCase { 63 64 69 public TestPublishIssues(String arg0) { 70 super(arg0); 71 } 72 73 78 public static Test suite() { 79 OpenCmsTestProperties.initialize(org.opencms.test.AllTests.TEST_PROPERTIES_PATH); 80 81 TestSuite suite = new TestSuite(); 82 suite.setName(TestPublishIssues.class.getName()); 83 84 suite.addTest(new TestPublishIssues("testPublishScenarioA")); 85 suite.addTest(new TestPublishIssues("testPublishScenarioB")); 86 suite.addTest(new TestPublishIssues("testPublishScenarioC")); 87 suite.addTest(new TestPublishIssues("testMultipleProjectCreation")); 88 suite.addTest(new TestPublishIssues("testDirectPublishWithSiblings")); 89 suite.addTest(new TestPublishIssues("testPublishScenarioD")); 90 suite.addTest(new TestPublishIssues("testPublishScenarioE")); 91 92 TestSetup wrapper = new TestSetup(suite) { 93 94 protected void setUp() { 95 setupOpenCms("simpletest", "/sites/default/"); 96 } 97 98 protected void tearDown() { 99 removeOpenCms(); 100 } 101 }; 102 103 return wrapper; 104 } 105 106 128 public void testPublishScenarioA() throws Throwable { 129 130 CmsObject cms = getCmsObject(); 131 echo("Testing publish scenario A"); 132 String projectRes1 = "/folder1/subfolder11/"; 133 String resource1 = projectRes1 + "index.html"; 134 String resource2 = "/folder1/"; 135 long timestamp = System.currentTimeMillis(); 136 137 CmsProject project1 = cms.readProject("Offline"); 139 140 cms.createProject( 142 "project2", 143 "Test project 2 for scenario A", 144 OpenCms.getDefaultUsers().getGroupUsers(), 145 OpenCms.getDefaultUsers().getGroupUsers()); 146 147 CmsProject project2 = cms.readProject("project2"); 148 cms.getRequestContext().setCurrentProject(project2); 149 cms.copyResourceToProject(projectRes1); 150 151 List resources = cms.readProjectResources(project2); 153 assertEquals(1, resources.size()); 154 assertEquals("/sites/default" + projectRes1, (String )resources.get(0)); 155 156 cms.loginUser("test2", "test2"); 158 cms.getRequestContext().setCurrentProject(project2); 159 160 cms.lockResource(resource1); 162 cms.setDateLastModified(resource1, System.currentTimeMillis(), false); 163 164 assertDateLastModifiedAfter(cms, resource1, timestamp); 166 assertProject(cms, resource1, project2); 167 assertLock(cms, resource1, CmsLock.TYPE_EXCLUSIVE); 168 assertState(cms, resource1, CmsResource.STATE_CHANGED); 169 170 cms.loginUser("test1", "test1"); 172 cms.getRequestContext().setCurrentProject(project1); 173 174 cms.lockResource(resource2); 176 177 assertProject(cms, resource1, project2); 179 assertLock(cms, resource1, CmsLock.TYPE_INHERITED); 180 181 cms.unlockResource(resource2); 183 184 cms.loginUser("test2", "test2"); 186 cms.getRequestContext().setCurrentProject(project2); 187 188 CmsPublishList publishList = cms.getPublishList(); 190 assertEquals(1, publishList.getFileList().size()); 191 192 int resourceProjectCount = cms.countLockedResources(project2.getId()); 194 assertEquals(0, resourceProjectCount); 195 196 cms.publishProject(); 198 199 assertState(cms, resource1, CmsResource.STATE_UNCHANGED); 201 } 202 203 218 public void testPublishScenarioB() throws Throwable { 219 220 CmsObject cms = getCmsObject(); 221 echo("Testing publish scenario B"); 222 223 String folderA = "/foldera/"; 225 String folderB = "/folderb/"; 226 String resourceA = folderA + "test.txt"; 227 String resourceB = folderB + "test.txt"; 228 229 cms.createResource(folderA, CmsResourceTypeFolder.getStaticTypeId()); 231 cms.createResource(folderB, CmsResourceTypeFolder.getStaticTypeId()); 232 cms.createResource(resourceA, CmsResourceTypePlain.getStaticTypeId()); 233 cms.createSibling(resourceA, resourceB, Collections.EMPTY_LIST); 234 CmsFile cmsFile = cms.readFile(resourceA); 235 cmsFile.setContents("Hello, this is a test!".getBytes()); 236 cms.writeFile(cmsFile); 237 238 cms.unlockProject(cms.getRequestContext().currentProject().getId()); 240 cms.publishProject(); 241 242 cmsFile = cms.readFile(resourceA); 244 assertEquals(2, cmsFile.getSiblingCount()); 245 assertState(cms, resourceA, CmsResource.STATE_UNCHANGED); 246 cmsFile = cms.readFile(resourceB); 247 assertEquals(2, cmsFile.getSiblingCount()); 248 assertState(cms, resourceB, CmsResource.STATE_UNCHANGED); 249 250 253 cms.createProject( 255 "projectB", 256 "Test project 2 for scenario B", 257 OpenCms.getDefaultUsers().getGroupUsers(), 258 OpenCms.getDefaultUsers().getGroupUsers()); 259 260 CmsProject projectB = cms.readProject("projectB"); 261 cms.getRequestContext().setCurrentProject(projectB); 262 cms.copyResourceToProject("/"); 263 264 List resources = cms.readProjectResources(projectB); 266 assertEquals(1, resources.size()); 267 assertEquals("/sites/default/", (String )resources.get(0)); 268 269 } 271 272 277 public void testMultipleProjectCreation() throws Throwable { 278 279 CmsObject cms = getCmsObject(); 280 echo("Testing multiple creation of a project with the same name"); 281 282 String projectName = "projectX"; 283 boolean gotException; 284 285 gotException = false; 287 try { 288 cms.readProject(projectName); 289 } catch (CmsException e) { 290 gotException = true; 291 } 292 if (! gotException) { 293 fail("Required exception was not thrown!"); 294 } 295 296 cms.createProject( 298 projectName, 299 "Test project", 300 OpenCms.getDefaultUsers().getGroupUsers(), 301 OpenCms.getDefaultUsers().getGroupUsers()); 302 303 CmsProject project = cms.readProject(projectName); 304 cms.getRequestContext().setCurrentProject(project); 305 cms.copyResourceToProject("/folder1/"); 306 307 List resources = cms.readProjectResources(project); 309 assertEquals(1, resources.size()); 310 assertEquals("/sites/default/folder1/", (String )resources.get(0)); 311 312 cms.copyResourceToProject("/"); 314 resources = cms.readProjectResources(project); 315 assertEquals(1, resources.size()); 316 assertEquals("/sites/default/", (String )resources.get(0)); 317 318 gotException = false; 320 CmsProject newProject = cms.createProject( 321 projectName, 322 "Test project 2nd time", 323 OpenCms.getDefaultUsers().getGroupUsers(), 324 OpenCms.getDefaultUsers().getGroupUsers()); 325 326 328 int id1 = project.getId(); 330 int id2 = newProject.getId(); 331 if (id1 == id2) { 332 fail("Two different projects created with same name have the same id!"); 333 } 334 335 project = cms.readProject(id1); 337 newProject = cms.readProject(id2); 338 assertEquals(project.getName(), newProject.getName()); 339 if (project.getDescription().equals(newProject.getDescription())) { 340 fail("Projects should have differnet descriptions!"); 341 } 342 } 343 344 353 public void testPublishScenarioC() throws Throwable { 354 355 CmsObject cms = getCmsObject(); 356 echo("Testing publish scenario C"); 357 358 long touchTime = System.currentTimeMillis(); 359 360 cms.lockResource("/folder1/"); 361 cms.setDateLastModified("/folder1/", touchTime, false); 362 cms.setDateLastModified("/folder1/index.html", touchTime, false); 363 cms.setDateLastModified("/folder1/subfolder11/", touchTime, false); 364 cms.setDateLastModified("/folder1/subfolder11/index.html", touchTime, false); 365 366 cms.unlockResource("/folder1/"); 367 cms.publishResource("/folder1/"); 368 369 assertState(cms, "/folder1/", CmsResource.STATE_UNCHANGED); 370 assertState(cms, "/folder1/index.html", CmsResource.STATE_UNCHANGED); 371 assertState(cms, "/folder1/subfolder11/", CmsResource.STATE_UNCHANGED); 372 assertState(cms, "/folder1/subfolder11/index.html", CmsResource.STATE_UNCHANGED); 373 374 cms.createResource("/folder_a/", CmsResourceTypeFolder.getStaticTypeId()); 375 cms.createResource("/folder_a/file_a.txt", CmsResourceTypePlain.getStaticTypeId()); 376 cms.createResource("/folder_a/folder_b/", CmsResourceTypeFolder.getStaticTypeId()); 377 cms.createResource("/folder_a/folder_b/file_b.txt", CmsResourceTypePlain.getStaticTypeId()); 378 379 cms.unlockResource("/folder_a/"); 380 cms.publishResource("/folder_a/"); 381 382 assertState(cms, "/folder_a/", CmsResource.STATE_UNCHANGED); 383 assertState(cms, "/folder_a/file_a.txt", CmsResource.STATE_UNCHANGED); 384 assertState(cms, "/folder_a/folder_b/", CmsResource.STATE_UNCHANGED); 385 assertState(cms, "/folder_a/folder_b/file_b.txt", CmsResource.STATE_UNCHANGED); 386 387 } 388 389 401 public void testPublishScenarioD() throws Throwable { 402 403 CmsObject cms = getCmsObject(); 404 echo("Testing publish scenario D"); 405 406 CmsProject project = cms.readProject("Offline"); 408 cms.getRequestContext().setCurrentProject(project); 409 410 411 cms.lockResource("/folder1/"); 412 cms.copyResource("/folder1/", "/folder2/folder1", CmsResource.COPY_AS_SIBLING); 414 cms.unlockResource("/folder1/"); 415 416 cms.unlockResource("/folder2/folder1/"); 418 cms.publishResource("/folder2/folder1/"); 419 420 assertState(cms, "/folder2/folder1/", CmsResource.STATE_UNCHANGED); 421 assertState(cms, "/folder2/folder1/index.html", CmsResource.STATE_UNCHANGED); 422 assertState(cms, "/folder2/folder1/subfolder11/", CmsResource.STATE_UNCHANGED); 423 assertState(cms, "/folder2/folder1/subfolder11/index.html", CmsResource.STATE_UNCHANGED); 424 assertState(cms, "/folder2/folder1/subfolder11/subsubfolder111/", CmsResource.STATE_UNCHANGED); 425 assertState(cms, "/folder2/folder1/subfolder11/subsubfolder111/jsp.jsp", CmsResource.STATE_UNCHANGED); 426 assertState(cms, "/folder2/folder1/subfolder12/", CmsResource.STATE_UNCHANGED); 427 assertState(cms, "/folder2/folder1/subfolder12/index.html", CmsResource.STATE_UNCHANGED); 428 assertState(cms, "/folder2/folder1/subfolder12/subsubfolder121/", CmsResource.STATE_UNCHANGED); 429 assertState(cms, "/folder2/folder1/subfolder12/subsubfolder121/index.html", CmsResource.STATE_UNCHANGED); 430 431 } 432 433 442 public void testPublishScenarioE() throws Throwable { 443 444 CmsObject cms = getCmsObject(); 445 echo("Testing publish scenario E"); 446 447 CmsProject project = cms.readProject("Offline"); 449 cms.getRequestContext().setCurrentProject(project); 450 451 cms.createResource("/test", CmsResourceTypeFolder.getStaticTypeId()); 453 454 cms.copyResource("/folder1/subfolder12/subsubfolder121", "/test/subtest", CmsResource.COPY_AS_SIBLING); 456 cms.unlockResource("/test"); 457 458 cms.publishResource("/test"); 460 461 cms.lockResource("/folder1/subfolder12/subsubfolder121/image1.gif"); 463 464 cms.addUserToGroup("test2", "Projectmanagers"); 466 cms.loginUser("test2", "test2"); 467 cms.getRequestContext().setCurrentProject(project); 468 469 assertEquals(cms.getLock("/test/subtest/image1.gif").getType(), CmsLock.TYPE_SHARED_EXCLUSIVE); 471 472 cms.lockResource("/test/subtest"); 474 cms.deleteResource("/test/subtest", CmsResource.DELETE_PRESERVE_SIBLINGS); 475 cms.unlockResource("/test/subtest"); 476 477 cms.publishResource("/test"); 479 480 } 481 482 492 public void testDirectPublishWithSiblings() throws Throwable { 493 494 CmsObject cms = getCmsObject(); 495 echo("Testing publish scenario using 'publish all Siblings'"); 496 497 cms.lockResource("/folder1/"); 498 cms.setDateLastModified("/folder1/", System.currentTimeMillis(), true); 499 cms.unlockResource("/folder1/"); 500 501 CmsUUID publishId = cms.publishResource("/folder1/", true, new CmsShellReport(cms.getRequestContext().getLocale())); 503 504 List publishedResources = cms.readPublishedResources(publishId); 506 507 assertEquals(35, publishedResources.size()); 509 } 510 } 511 | Popular Tags |