1 31 32 package org.opencms.synchronize; 33 34 import org.opencms.db.CmsUserSettings; 35 import org.opencms.file.CmsObject; 36 import org.opencms.file.CmsResource; 37 import org.opencms.file.CmsResourceFilter; 38 import org.opencms.file.types.CmsResourceTypeJsp; 39 import org.opencms.file.types.CmsResourceTypePlain; 40 import org.opencms.file.types.CmsResourceTypeXmlPage; 41 import org.opencms.main.OpenCms; 42 import org.opencms.report.CmsShellReport; 43 import org.opencms.test.OpenCmsTestCase; 44 import org.opencms.test.OpenCmsTestProperties; 45 import org.opencms.util.CmsFileUtil; 46 47 import java.io.File ; 48 import java.util.ArrayList ; 49 import java.util.Iterator ; 50 import java.util.List ; 51 52 import junit.extensions.TestSetup; 53 import junit.framework.Test; 54 import junit.framework.TestSuite; 55 56 65 public class TestSynchronize extends OpenCmsTestCase { 66 67 72 public TestSynchronize(String arg0) { 73 74 super(arg0); 75 } 76 77 82 public static Test suite() { 83 84 OpenCmsTestProperties.initialize(org.opencms.test.AllTests.TEST_PROPERTIES_PATH); 85 86 TestSuite suite = new TestSuite(); 87 suite.setName(TestSynchronize.class.getName()); 88 89 suite.addTest(new TestSynchronize("testSynchronize")); 90 suite.addTest(new TestSynchronize("testLoadSaveSynchronizeSettings")); 91 suite.addTest(new TestSynchronize("testSynchronizeSeveralFolders")); 92 93 TestSetup wrapper = new TestSetup(suite) { 94 95 protected void setUp() { 96 97 setupOpenCms("simpletest", "/sites/default/"); 98 } 99 100 protected void tearDown() { 101 102 removeOpenCms(); 103 } 104 105 }; 106 107 return wrapper; 108 } 109 110 115 public void testLoadSaveSynchronizeSettings() throws Exception { 116 117 CmsObject cms = getCmsObject(); 118 echo("Testing loading and saving the synchronization settings of a user"); 119 120 CmsUserSettings userSettings = new CmsUserSettings(cms); 121 assertNull(userSettings.getSynchronizeSettings()); 123 124 String source = "/folder1/"; 125 String dest = getTestDataPath(""); 126 if (dest.endsWith(File.separator)) { 127 dest = dest.substring(0, dest.length() - 1); 128 } 129 130 CmsSynchronizeSettings syncSettings = new CmsSynchronizeSettings(); 131 syncSettings.setEnabled(true); 132 ArrayList sourceList = new ArrayList (); 133 sourceList.add(source); 134 syncSettings.setSourceListInVfs(sourceList); 135 syncSettings.setDestinationPathInRfs(dest); 136 137 userSettings.setSynchronizeSettings(syncSettings); 139 userSettings.save(cms); 140 141 cms.loginUser("test1", "test1"); 143 144 userSettings = new CmsUserSettings(cms); 145 assertNull(userSettings.getSynchronizeSettings()); 147 148 cms.loginUser(OpenCms.getDefaultUsers().getUserAdmin(), "admin"); 150 151 userSettings = new CmsUserSettings(cms); 152 syncSettings = userSettings.getSynchronizeSettings(); 153 assertNotNull(syncSettings); 154 155 assertTrue(syncSettings.isEnabled()); 156 assertEquals(source, syncSettings.getSourceListInVfs().get(0)); 157 assertEquals(dest, syncSettings.getDestinationPathInRfs()); 158 } 159 160 168 public void testSynchronize() throws Exception { 169 170 String source = "/sites/default/"; 171 172 CmsSynchronizeSettings syncSettings = new CmsSynchronizeSettings(); 174 175 String dest = getTestDataPath("") + "sync1" + File.separator; 176 File destFolder = new File (dest); 177 if (!destFolder.exists()) { 178 destFolder.mkdirs(); 179 } 180 181 syncSettings.setDestinationPathInRfs(dest); 182 ArrayList sourceList = new ArrayList (); 183 sourceList.add(source); 184 syncSettings.setSourceListInVfs(sourceList); 185 syncSettings.setEnabled(true); 186 187 try { 188 CmsObject cms = getCmsObject(); 189 echo("Testing synchronization of files and folders"); 190 191 cms.getRequestContext().setSiteRoot("/"); 192 storeResources(cms, source); 193 194 echo("Synchronizing " 195 + syncSettings.getSourceListInVfs() 196 + " with " 197 + syncSettings.getDestinationPathInRfs()); 198 199 new CmsSynchronize(cms, syncSettings, new CmsShellReport(cms.getRequestContext().getLocale())); 201 202 List tree = cms.readResources(source, CmsResourceFilter.ALL); 204 for (int i = 0, n = tree.size(); i < n; i++) { 205 CmsResource resource = (CmsResource)tree.get(i); 206 207 int type = resource.getTypeId(); 208 if (((type == CmsResourceTypePlain.getStaticTypeId())) 209 || (type == CmsResourceTypeJsp.getStaticTypeId()) 210 || (type == CmsResourceTypeXmlPage.getStaticTypeId())) { 211 touchResourceInRfs(cms, resource, syncSettings); 213 } 214 } 215 216 Thread.sleep(2000); 218 219 new CmsSynchronize(cms, syncSettings, new CmsShellReport(cms.getRequestContext().getLocale())); 221 222 for (int i = 0, n = tree.size(); i < n; i++) { 224 CmsResource vfsResource = (CmsResource)tree.get(i); 225 int type = vfsResource.getTypeId(); 226 String vfsname = cms.getSitePath(vfsResource); 227 228 System.out.println("( " + i + " / " + (n - 1) + " ) Checking " + vfsname); 229 if (((type == CmsResourceTypePlain.getStaticTypeId())) 230 || (type == CmsResourceTypeJsp.getStaticTypeId()) 231 || (type == CmsResourceTypeXmlPage.getStaticTypeId())) { 232 assertState(cms, vfsname, CmsResource.STATE_CHANGED); 234 File rfsResource = new File (getRfsPath(cms, vfsResource, syncSettings)); 236 assertDateLastModifiedAfter(cms, vfsname, rfsResource.lastModified()); 237 } else { 238 assertState(cms, vfsname, CmsResource.STATE_UNCHANGED); 239 } 240 } 241 242 } finally { 243 244 echo("Purging directory " + dest); 246 CmsFileUtil.purgeDirectory(new File (dest)); 247 } 248 } 249 250 255 public void testSynchronizeSeveralFolders() throws Exception { 256 257 CmsSynchronizeSettings syncSettings = new CmsSynchronizeSettings(); 259 260 String dest = getTestDataPath("") + "sync2" + File.separator; 261 File destFolder = new File (dest); 262 if (!destFolder.exists()) { 263 destFolder.mkdirs(); 264 } 265 266 syncSettings.setDestinationPathInRfs(dest); 267 ArrayList sourceList = new ArrayList (); 268 sourceList.add("/sites/default/folder1/subfolder11/"); 269 sourceList.add("/sites/default/folder1/subfolder12/"); 270 sourceList.add("/sites/default/folder2/subfolder21/"); 271 syncSettings.setSourceListInVfs(sourceList); 272 syncSettings.setEnabled(true); 273 274 try { 275 CmsObject cms = getCmsObject(); 276 echo("Testing synchronization of several folders"); 277 278 cms.getRequestContext().setSiteRoot("/"); 279 storeResources(cms, "/"); 280 281 new CmsSynchronize(cms, syncSettings, new CmsShellReport(cms.getRequestContext().getLocale())); 283 284 Iterator it = syncSettings.getSourceListInVfs().iterator(); 285 List tree = new ArrayList (); 286 287 while (it.hasNext()) { 289 String source = (String )it.next(); 290 List subTree = cms.readResources(source, CmsResourceFilter.ALL); 291 tree.addAll(subTree); 292 for (int i = 0, n = subTree.size(); i < n; i++) { 293 CmsResource resource = (CmsResource)subTree.get(i); 294 295 int type = resource.getTypeId(); 296 if (((type == CmsResourceTypePlain.getStaticTypeId())) 297 || (type == CmsResourceTypeJsp.getStaticTypeId()) 298 || (type == CmsResourceTypeXmlPage.getStaticTypeId())) { 299 touchResourceInRfs(cms, resource, syncSettings); 301 } 302 } 303 } 304 305 Thread.sleep(2000); 307 308 new CmsSynchronize(cms, syncSettings, new CmsShellReport(cms.getRequestContext().getLocale())); 310 311 for (int i = 0, n = tree.size(); i < n; i++) { 313 CmsResource vfsResource = (CmsResource)tree.get(i); 314 int type = vfsResource.getTypeId(); 315 String vfsname = cms.getSitePath(vfsResource); 316 317 System.out.println("( " + i + " / " + (n - 1) + " ) Checking " + vfsname); 318 if (((type == CmsResourceTypePlain.getStaticTypeId())) 319 || (type == CmsResourceTypeJsp.getStaticTypeId()) 320 || (type == CmsResourceTypeXmlPage.getStaticTypeId())) { 321 assertState(cms, vfsname, CmsResource.STATE_CHANGED); 323 File rfsResource = new File (getRfsPath(cms, vfsResource, syncSettings)); 325 assertDateLastModifiedAfter(cms, vfsname, rfsResource.lastModified()); 326 } else { 327 assertState(cms, vfsname, CmsResource.STATE_UNCHANGED); 328 } 329 } 330 331 } finally { 332 333 echo("Purging directory " + dest); 335 CmsFileUtil.purgeDirectory(new File (dest)); 336 } 337 } 338 339 348 private String getRfsPath(CmsObject cms, CmsResource resource, CmsSynchronizeSettings syncSettings) { 349 350 String path = syncSettings.getDestinationPathInRfs() + cms.getSitePath(resource); 351 return CmsFileUtil.normalizePath(path); 352 } 353 354 362 private void touchResourceInRfs(CmsObject cms, CmsResource resource, CmsSynchronizeSettings syncSettings) { 363 364 String path = getRfsPath(cms, resource, syncSettings); 366 System.out.println("Touching: " + path); 367 File file = new File (path); 368 file.setLastModified(file.lastModified() + 2000); 369 } 370 } | Popular Tags |