Revision 23509 branches/v2_0_0_prep/libraries/libFMap_dataFile/src-test/org/gvsig/fmap/data/feature/file/ResourceManagerTest.java

View differences:

ResourceManagerTest.java
35 35

  
36 36
import junit.framework.TestCase;
37 37

  
38
import org.gvsig.tools.exception.BaseException;
39 38
import org.gvsig.fmap.data.CloseException;
40 39
import org.gvsig.fmap.data.DataCollection;
41 40
import org.gvsig.fmap.data.DataException;
......
45 44
import org.gvsig.fmap.data.ResourceManager;
46 45
import org.gvsig.fmap.data.ResourceNotification;
47 46
import org.gvsig.fmap.data.feature.file.shp.SHPTest;
47
import org.gvsig.tools.exception.BaseException;
48 48
import org.gvsig.tools.observer.Observable;
49 49
import org.gvsig.tools.observer.Observer;
50 50

  
......
87 87
					System.out.println("** closed: " + name + "(" + key + ")");
88 88
				}
89 89

  
90
				rManager.remove(res);
91
				System.out.println("** removed: " + name + "(" + key + ")");
90
				rManager.forceRemove(res);
91
				System.out.println("** removed (forced): " + name + "(" + key
92
						+ ")");
92 93

  
93 94
				iter = rManager.iterator();
94 95
			}
......
447 448
		assertEquals(2, closer.getOpenedResources());
448 449

  
449 450
	}
451

  
452
	public void test_deadResources() {
453
		ResourceCloser closer = new ResourceCloser();
454

  
455
		//Nos aseguramos que no hay recursos abiertos
456
		try {
457
			closer.closeAndDisposeAll();
458
		} catch (Exception e1) {
459
			e1.printStackTrace();
460
			fail();
461
		}
462
		org.gvsig.fmap.data.feature.file.dbf.Register.selfRegister();
463
		org.gvsig.fmap.data.feature.file.shp.Register.selfRegister();
464
		org.gvsig.fmap.data.feature.file.dxf.Register.selfRegister();
465
		org.gvsig.fmap.data.feature.file.dgn.Register.selfRegister();
466

  
467
		DataStore shp = null;
468

  
469
		ResourceManager rManager = ResourceManager.getResourceManager();
470

  
471
		try {
472
			shp = dataManager.createDataStore(SHPTest
473
					.getParams(SHPTest.fileNormal));
474
			shp.getMetadata();
475
		} catch (BaseException e) {
476
			e.printStackTrace();
477
			fail();
478
		}
479
		assertEquals(2, closer.getOpenedResources());
480

  
481
		// Eliminamos la referencia al Store para que se quede 'colgado' el recurso
482
		shp = null;
483
		assertEquals(2, closer.getOpenedResources());
484

  
485
		// lanzamos el garbageCollector para que se muera la referencia
486
		System.gc();
487
		System.gc();
488
		System.gc();
489

  
490
		// Cogemos el primer recuros y pedimos su cantidad de referencias
491
		// esto deber?a de dejar la referencias a 0.
492
		Iterator iter = rManager.iterator();
493

  
494
		assertEquals(0, ((Resource) iter.next()).getRefencesCount());
495

  
496
		//lanzamos la 'recoleccion' y deber?a de dejar todas las referencia limpias
497
		// y el manager vacio
498
		try {
499
			rManager.collectDeadResources();
500
		} catch (DataException e) {
501
			e.printStackTrace();
502
			fail();
503
			return;
504
		}
505

  
506
		assertEquals(0, closer.getOpenedResources());
507

  
508
		assertEquals(0, closer.getResourcesOrdered().size());
509

  
510

  
511
	}
512

  
513
	public void test_deadResourcesThread() {
514
		ResourceCloser closer = new ResourceCloser();
515

  
516
		//Nos aseguramos que no hay recursos abiertos
517
		try {
518
			closer.closeAndDisposeAll();
519
		} catch (Exception e1) {
520
			e1.printStackTrace();
521
			fail();
522
		}
523
		org.gvsig.fmap.data.feature.file.dbf.Register.selfRegister();
524
		org.gvsig.fmap.data.feature.file.shp.Register.selfRegister();
525
		org.gvsig.fmap.data.feature.file.dxf.Register.selfRegister();
526
		org.gvsig.fmap.data.feature.file.dgn.Register.selfRegister();
527

  
528
		DataStore shp = null;
529

  
530
		ResourceManager rManager = ResourceManager.getResourceManager();
531

  
532
		//Lanzamos el thread
533

  
534
		rManager.startDeadResourceCollectorThread(10); // 1/100 seg
535

  
536
		try {
537
			shp = dataManager.createDataStore(SHPTest
538
					.getParams(SHPTest.fileNormal));
539
			shp.getMetadata();
540
		} catch (BaseException e) {
541
			e.printStackTrace();
542
			fail();
543
		}
544
		assertEquals(2, closer.getOpenedResources());
545

  
546
		// Eliminamos la referencia al Store para que se quede 'colgado' el recurso
547
		shp = null;
548
		assertEquals(2, closer.getOpenedResources());
549

  
550
		long t = System.currentTimeMillis();
551
		while (System.currentTimeMillis() - t < 50) {
552
			// lanzamos el garbageCollector para que se muera la referencia
553
			System.gc();
554
		}
555

  
556

  
557
		// Comprobamos que los recursos ya no existen
558
		assertEquals(0, closer.getOpenedResources());
559

  
560
		assertEquals(0, closer.getResourcesOrdered().size());
561

  
562
		rManager.stopDeadResourceCollectorThread();
563

  
564
	}
565

  
450 566
}

Also available in: Unified diff