1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package fr.paris.lutece.portal.service.datastore;
35
36 import fr.paris.lutece.portal.service.cache.CacheService;
37 import fr.paris.lutece.portal.service.cache.CacheableService;
38 import fr.paris.lutece.test.LuteceTestCase;
39 import fr.paris.lutece.util.ReferenceList;
40
41 public abstract class DatastoreServiceCacheTest extends LuteceTestCase
42 {
43
44 private static final String PREFIX_A = "a.";
45 private static final String PREFIX_B = "b.";
46 private static final int NUM_VALUES = 5;
47 private static final String CACHE_SERVICE_NAME = "Datastore Cache Service";
48 private boolean _bStatus;
49
50 @Override
51 protected void setUp( ) throws Exception
52 {
53 super.setUp( );
54 setDatastoreCacheStatus( );
55 for ( int i = 1; i <= NUM_VALUES; i++ )
56 {
57 DatastoreService.setDataValue( PREFIX_A + i, PREFIX_A + i );
58 DatastoreService.setDataValue( PREFIX_B + i, PREFIX_B + i );
59 }
60
61 }
62
63 private void setDatastoreCacheStatus( )
64 {
65 CacheableService dataStoreCache = CacheService.getCacheableServicesList( ).stream( )
66 .filter( c -> CACHE_SERVICE_NAME.equals( c.getName( ) ) ).findFirst( ).get( );
67 _bStatus = dataStoreCache.isCacheEnable( );
68 dataStoreCache.enableCache( getTargetDatastoreCacheStatus( ) );
69 }
70
71 protected abstract boolean getTargetDatastoreCacheStatus( );
72
73 public void testGetDataByPrefix( )
74 {
75 ReferenceList entities = DatastoreService.getDataByPrefix( PREFIX_A );
76 assertEquals( NUM_VALUES, entities.size( ) );
77 for ( int i = 1; i <= NUM_VALUES; i++ )
78 {
79 final int idx = i;
80 assertEquals( 1, entities.stream( ).filter( e -> ( PREFIX_A + idx ).equals( e.getCode( ) ) ).count( ) );
81 }
82 assertFalse( entities.stream( ).anyMatch( e -> e.getCode( ).startsWith( PREFIX_B ) ) );
83
84 for ( String newEntity : new String[ ] { PREFIX_A, PREFIX_A + "new" } )
85 {
86 DatastoreService.setDataValue( newEntity, newEntity );
87 entities = DatastoreService.getDataByPrefix( PREFIX_A );
88 assertEquals( "New value not found when searching by prefix", 1,
89 entities.stream( ).filter( e -> ( newEntity ).equals( e.getCode( ) ) ).count( ) );
90 DatastoreService.removeData( newEntity );
91 entities = DatastoreService.getDataByPrefix( PREFIX_A );
92 assertEquals( "Old value still present when searching by prefix", 0,
93 entities.stream( ).filter( e -> ( newEntity ).equals( e.getCode( ) ) ).count( ) );
94 }
95 }
96
97 @Override
98 protected void tearDown( ) throws Exception
99 {
100 DatastoreService.removeDataByPrefix( PREFIX_A );
101 DatastoreService.removeDataByPrefix( PREFIX_B );
102 restoreDatastoreCacheStatus( );
103 super.tearDown( );
104 }
105
106 private void restoreDatastoreCacheStatus( )
107 {
108 CacheService.getCacheableServicesList( ).stream( ).filter( c -> CACHE_SERVICE_NAME.equals( c.getName( ) ) )
109 .findFirst( ).get( ).enableCache( _bStatus );
110 }
111
112 }