jruby-ehcache 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/test/ehcache.xml ADDED
@@ -0,0 +1,44 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:noNamespaceSchemaLocation="../../main/config/ehcache.xsd">
5
+
6
+ <!-- Disable for test ehcache.xml. Should go to the same place. -->
7
+ <diskStore path="java.io.tmpdir"/>
8
+
9
+ <cacheManagerPeerProviderFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
10
+ properties="peerDiscovery=automatic, multicastGroupAddress=230.0.0.1, multicastGroupPort=4446, timeToLive=0"/>
11
+
12
+
13
+ <cacheManagerPeerListenerFactory class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
14
+ properties="hostName=, port=, socketTimeoutMillis="/>
15
+
16
+
17
+ <defaultCache
18
+ name="default"
19
+ maxElementsInMemory="10"
20
+ eternal="false"
21
+ timeToIdleSeconds="5"
22
+ timeToLiveSeconds="10"
23
+ overflowToDisk="true"
24
+ />
25
+
26
+
27
+ <!-- Sample cache named sampleCache1 -->
28
+ <cache name="sampleCache1"
29
+ maxElementsInMemory="10000"
30
+ maxElementsOnDisk="1000"
31
+ eternal="false"
32
+ timeToIdleSeconds="360"
33
+ timeToLiveSeconds="1000"
34
+ overflowToDisk="true">
35
+ </cache>
36
+
37
+ <!-- Sample cache named sampleCache2. Is eternal. Is diskPersistent but does not overflow to disk -->
38
+ <cache name="sampleCache2"
39
+ maxElementsInMemory="1000"
40
+ eternal="true"
41
+ overflowToDisk="false"
42
+ diskPersistent="true"
43
+ />
44
+ </ehcache>
data/test/ehcache.yml ADDED
@@ -0,0 +1,67 @@
1
+ name: testing
2
+ update_check: false
3
+ monitoring: autodetect
4
+ dynamic_config: true
5
+
6
+ disk_store:
7
+ path: java.io.tmpdir
8
+
9
+ transaction_manager:
10
+ class: net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup
11
+ properties: jndiName=java:/TransactionManager
12
+ property_separator: ";"
13
+
14
+ peer_providers:
15
+ - class: net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory
16
+ properties: peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446,timeToLive=1
17
+ property_separator: ","
18
+
19
+ peer_listeners:
20
+ - class: net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory
21
+
22
+ default_cache:
23
+ max_elements_in_memory: 10000
24
+ time_to_live_seconds: 0
25
+ time_to_idle_seconds: 0
26
+ overflow_to_disk: true
27
+ eternal: false
28
+ disk_spool_buffer_size_mb: 30
29
+ disk_persistent: false
30
+ disk_expiry_thread_interval_seconds: 120
31
+ memory_store_eviction_policy: LRU
32
+
33
+ caches:
34
+ # Sample cache named sampleCache1
35
+ - name: sampleCache1
36
+ max_elements_in_memory: 10000
37
+ max_elements_on_disk: 1000
38
+ eternal: false
39
+ time_to_idle_seconds: 360
40
+ time_to_live_seconds: 1000
41
+ overflow_to_disk: true
42
+
43
+ #Sample cache named sampleCache2. Is eternal. Is diskPersistent but does not overflow to disk
44
+ - name: sampleCache2
45
+ max_elements_in_memory: 1000
46
+ eternal: true
47
+ overflow_to_disk: false
48
+ disk_persistent: true
49
+
50
+ - name: sampleCacheWithCacheConfigurations
51
+ max_elements_in_memory: 10
52
+ eternal: false
53
+ time_to_idle_seconds: 100
54
+ time_to_live_seconds: 100
55
+ overflow_to_disk: false
56
+ bootstrap_loader:
57
+ class: net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory
58
+ properties: "bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000"
59
+ property_separator: ","
60
+ event_listeners:
61
+ - class: net.sf.ehcache.distribution.RMICacheReplicatorFactory
62
+ properties: "replicateAsynchronously=false, replicatePuts=false, replicatePutsViaCopy=false, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=false"
63
+ - class: net.sf.ehcache.distribution.RMICacheReplicatorFactory
64
+ properties: "replicateAsynchronously=false, replicatePuts=false, replicatePutsViaCopy=false, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=false"
65
+ # extensions:
66
+ # - class: com.example.FileWatchingCacheRefresherExtensionFactory
67
+ # properties: "refreshIntervalMillis=18000, loaderTimeout=3000, flushPeriod=whatever, someOtherProperty=someValue"
@@ -0,0 +1,36 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestCache < Test::Unit::TestCase
4
+
5
+ def setup
6
+ @manager = Ehcache::CacheManager.new
7
+ @cache = @manager.cache
8
+ end
9
+
10
+ def teardown
11
+ @manager.shutdown if @manager
12
+ end
13
+
14
+ must 'correctly implement compare and swap' do
15
+ @cache.put('number', 42, {:ttl => 120})
16
+ assert_equal(42, @cache['number'])
17
+ @cache.compare_and_swap('number') {|n| n - 31}
18
+ assert_equal(11, @cache['number'])
19
+ end
20
+
21
+ must 'have aliases for isKeyInCache called include and member' do
22
+ @cache.put('something', 'no matter')
23
+ for key in %w[something nothing]
24
+ assert_equal(@cache.isKeyInCache(key), @cache.include?(key))
25
+ assert_equal(@cache.isKeyInCache(key), @cache.member?(key))
26
+ end
27
+ end
28
+
29
+ must 'implement each and include Enumerable' do
30
+ assert_kind_of(Enumerable, @cache)
31
+ assert_respond_to(@cache, :each)
32
+ @cache.put('1', 1)
33
+ @cache.put('2', 2)
34
+ assert @cache.all? {|e| e.is_a?(Java::NetSfEhcache::Element)}
35
+ end
36
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestCacheManager < Test::Unit::TestCase
4
+ def setup
5
+ @cache_manager = Ehcache::CacheManager.new
6
+ end
7
+
8
+ def teardown
9
+ @cache_manager.shutdown if @cache_manager
10
+ end
11
+
12
+ must 'be the real Ehcache Java CacheManager' do
13
+ assert_kind_of(Java::NetSfEhcache::CacheManager, @cache_manager)
14
+ end
15
+
16
+ must 'use the ehcache.xml file in the test directory' do
17
+ @cache_manager.cache_names.each do |name|
18
+ puts "Cache: #{name}"
19
+ end
20
+ end
21
+
22
+ must 'implement each and include Enumerable' do
23
+ assert_kind_of(Enumerable, @cache_manager)
24
+ assert_respond_to(@cache_manager, :each)
25
+ assert @cache_manager.all? {|cache| cache.is_a?(Java::NetSfEhcache::Ehcache)}
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestConfiguration < Test::Unit::TestCase
4
+ def setup
5
+ create_config
6
+ end
7
+
8
+ def test_is_a_real_ehcache_java_configuration_object
9
+ assert_valid_configuration(@config)
10
+ end
11
+
12
+ must 'initialize with ehcache.xml' do
13
+ create_config(File.join(File.dirname(__FILE__), 'ehcache.xml'))
14
+ assert_valid_configuration(@config)
15
+ assert_not_nil(@config.configuration_source)
16
+ cache_configs = @config.cache_configurations
17
+ assert_equal(2, cache_configs.size)
18
+ end
19
+
20
+ private
21
+
22
+ def create_config(*args)
23
+ @config = Ehcache::Config::Configuration.create(*args)
24
+ end
25
+
26
+ def assert_valid_configuration(config)
27
+ assert_kind_of(Java::NetSfEhcacheConfig::Configuration, config)
28
+ end
29
+ end
data/test/test_ehcache.rb CHANGED
@@ -3,9 +3,20 @@ require File.dirname(__FILE__) + '/test_helper.rb'
3
3
  class TestEhcache < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
+ @manager = Ehcache::CacheManager.new
7
+ @cache = @manager.cache
8
+ end
9
+
10
+ def teardown
11
+ @manager.shutdown if @manager
6
12
  end
7
13
 
8
- def test_truth
9
- assert true
14
+ def test_demo_usage
15
+ @cache.put("answer", "42", {:ttl => 120})
16
+ answer = @cache.get("answer")
17
+ assert_equal("42", answer.value)
18
+ assert_equal(120, answer.ttl)
19
+ question = @cache["question"] || 'unknown'
20
+ assert_equal('unknown', question)
10
21
  end
11
22
  end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestElement < Test::Unit::TestCase
4
+ ALIASES = {
5
+ :tti => :time_to_idle,
6
+ :ttl => :time_to_live
7
+ }
8
+
9
+ ALIASES.each do |short, long|
10
+ must "have reader alias named #{short} referring to #{long}" do
11
+ element = Ehcache::Element.new('', '')
12
+ assert_respond_to(element, long)
13
+ assert_respond_to(element, short)
14
+ assert_equal(element.send(long), element.send(long))
15
+ end
16
+
17
+ must "have writer alias named #{short} referring to #{long}" do
18
+ element = Ehcache::Element.new('', '')
19
+ long_writer = "#{long}=".to_sym
20
+ short_writer = "#{short}=".to_sym
21
+ assert_respond_to(element, long_writer)
22
+ assert_respond_to(element, short_writer)
23
+
24
+ element.send(long_writer, 1)
25
+ assert_equal(1, element.send(long))
26
+ assert_equal(1, element.send(short))
27
+ element.send(short_writer, 2)
28
+ assert_equal(2, element.send(long))
29
+ assert_equal(2, element.send(short))
30
+ end
31
+ end
32
+
33
+ must 'process ttl option on create' do
34
+ element = Ehcache::Element.create('k', 'v', :ttl => 42)
35
+ assert_equal(element.ttl, 42)
36
+ end
37
+ end
data/test/test_helper.rb CHANGED
@@ -1,2 +1,22 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+
1
3
  require 'test/unit'
2
- require File.dirname(__FILE__) + '/../lib/ehcache'
4
+ require 'ehcache'
5
+ require 'java'
6
+
7
+ module Test::Unit
8
+ class TestCase
9
+ def self.must(name, &block)
10
+ test_name = "test_#{name.gsub(/[\s.]+/, '_')}".to_sym
11
+ defined = instance_method(test_name) rescue false
12
+ raise "#{test_name} is already defined in #{self}" if defined
13
+ if block_given?
14
+ define_method(test_name, &block)
15
+ else
16
+ define_method(test_name) do
17
+ flunk "No implementation provided for #{name}"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,159 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestConfiguration < Test::Unit::TestCase
4
+ def setup
5
+ @yaml_file = File.join(File.dirname(__FILE__), 'ehcache.yml')
6
+ @config = Ehcache::Config::Configuration.create(@yaml_file)
7
+ end
8
+
9
+ must 'have valid top level attributes' do
10
+ assert_equal('testing', @config.getName)
11
+ assert_equal(false, @config.getUpdateCheck)
12
+ assert_equal(Ehcache::Config::Configuration::Monitoring::AUTODETECT, @config.getMonitoring)
13
+ assert_equal(true, @config.getDynamicConfig)
14
+ end
15
+
16
+ must 'have valid disk store configuration' do
17
+ disk_store = @config.getDiskStoreConfiguration
18
+ assert_not_nil(disk_store)
19
+ assert_equal(java.lang.System.getProperty('java.io.tmpdir'),
20
+ disk_store.getPath)
21
+ end
22
+
23
+ must 'have valid transaction manager' do
24
+ tx_mgr = @config.getTransactionManagerLookupConfiguration
25
+ assert_factory_configuration_equals(tx_mgr,
26
+ :class => 'net.sf.ehcache.transaction.manager.DefaultTransactionManagerLookup',
27
+ :properties => 'jndiName=java:/TransactionManager',
28
+ :property_separator => ';')
29
+ end
30
+
31
+ must 'have valid peer provider' do
32
+ peer_providers = @config.getCacheManagerPeerProviderFactoryConfiguration
33
+ assert_equal(1, peer_providers.size)
34
+ peer_provider = peer_providers.first
35
+ assert_factory_configuration_equals(peer_provider,
36
+ :class => 'net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory',
37
+ :properties => 'peerDiscovery=automatic,multicastGroupAddress=230.0.0.1,multicastGroupPort=4446,timeToLive=1',
38
+ :property_separator => ',')
39
+ end
40
+
41
+ must 'have valid peer listener' do
42
+ peer_listeners = @config.getCacheManagerPeerListenerFactoryConfigurations
43
+ assert_equal(1, peer_listeners.size)
44
+ peer_listener = peer_listeners.first
45
+ assert_factory_configuration_equals(peer_listener,
46
+ :class => 'net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory')
47
+ end
48
+
49
+ must 'have valid default cache' do
50
+ default_cache = @config.getDefaultCacheConfiguration
51
+ expected = {
52
+ :getMaxElementsInMemory => 10000,
53
+ :getTimeToLiveSeconds => 0,
54
+ :getTimeToIdleSeconds => 0,
55
+ :isOverflowToDisk => true,
56
+ :isEternal => false,
57
+ :getDiskSpoolBufferSizeMB => 30,
58
+ :isDiskPersistent => false,
59
+ :getDiskExpiryThreadIntervalSeconds => 120,
60
+ :getMemoryStoreEvictionPolicy => Java::NetSfEhcacheStore::MemoryStoreEvictionPolicy::LRU
61
+ }
62
+ expected.each do |key, value|
63
+ assert_equal(value, default_cache.send(key))
64
+ end
65
+ end
66
+
67
+ must 'have two cache configurations' do
68
+ caches = @config.getCacheConfigurations
69
+ assert_equal(3, caches.size)
70
+ assert(caches.containsKey("sampleCache1"), "Should have sampleCache1")
71
+ assert(caches.containsKey("sampleCache2"), "Should have sampleCache2")
72
+ end
73
+
74
+ must 'have valid sampleCache1 configuration' do
75
+ cache = @config.getCacheConfigurations['sampleCache1']
76
+ expected = {
77
+ :getMaxElementsInMemory => 10000,
78
+ :getMaxElementsOnDisk => 1000,
79
+ :getTimeToLiveSeconds => 1000,
80
+ :getTimeToIdleSeconds => 360,
81
+ :isOverflowToDisk => true,
82
+ :isEternal => false
83
+ }
84
+ expected.each do |key, value|
85
+ assert_equal(value, cache.send(key))
86
+ end
87
+ end
88
+
89
+ must 'have valid sampleCache2 configuration' do
90
+ cache = @config.getCacheConfigurations['sampleCache2']
91
+ expected = {
92
+ :getMaxElementsInMemory => 1000,
93
+ :isOverflowToDisk => false,
94
+ :isEternal => true,
95
+ :isDiskPersistent => true
96
+ }
97
+ expected.each do |key, value|
98
+ assert_equal(value, cache.send(key))
99
+ end
100
+ end
101
+
102
+ must 'have valid sampleCacheWithCacheConfigurations configuration' do
103
+ cache = @config.getCacheConfigurations['sampleCacheWithCacheConfigurations']
104
+ expected = {
105
+ :getMaxElementsInMemory => 10,
106
+ :isEternal => false,
107
+ :getTimeToIdleSeconds => 100,
108
+ :getTimeToLiveSeconds => 100,
109
+ :isOverflowToDisk => false
110
+ }
111
+ expected.each do |key, value|
112
+ assert_equal(value, cache.send(key))
113
+ end
114
+ end
115
+
116
+ must 'have 2 event listeners in sampleCacheWithCacheConfigurations' do
117
+ cache = @config.getCacheConfigurations['sampleCacheWithCacheConfigurations']
118
+ assert_equal(2, cache.getCacheEventListenerConfigurations.size)
119
+ expected = {
120
+ :getFullyQualifiedClassPath => 'net.sf.ehcache.distribution.RMICacheReplicatorFactory',
121
+ :getProperties => "replicateAsynchronously=false, replicatePuts=false, replicatePutsViaCopy=false, replicateUpdates=true, replicateUpdatesViaCopy=true, replicateRemovals=false"
122
+ }
123
+ cache.getCacheEventListenerConfigurations.each do |event_listener|
124
+ expected.each do |key, value|
125
+ assert_equal(value, event_listener.send(key))
126
+ end
127
+ end
128
+ end
129
+
130
+ must 'have valid bootstrap loader in sampleCacheWithCacheConfigurations' do
131
+ cache = @config.getCacheConfigurations['sampleCacheWithCacheConfigurations']
132
+ assert_not_nil(cache.getBootstrapCacheLoaderFactoryConfiguration)
133
+ expected = {
134
+ :getFullyQualifiedClassPath => "net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory",
135
+ :getProperties => "bootstrapAsynchronously=true, maximumChunkSizeBytes=5000000",
136
+ :getPropertySeparator => ","
137
+ }
138
+ bootstrap_loader = cache.getBootstrapCacheLoaderFactoryConfiguration
139
+ expected.each do |key, value|
140
+ assert_equal(value, bootstrap_loader.send(key))
141
+ end
142
+ end
143
+
144
+ private
145
+
146
+ def assert_factory_configuration_equals(factory, values)
147
+ assert_not_nil(factory)
148
+ assert_kind_of(Hash, values)
149
+ if values.has_key?(:class)
150
+ assert_equal(values[:class], factory.getFullyQualifiedClassPath)
151
+ end
152
+ if values.has_key?(:properties)
153
+ assert_equal(values[:properties], factory.getProperties)
154
+ end
155
+ if values.has_key?(:property_separator)
156
+ assert_equal(values[:property_separator], factory.getPropertySeparator)
157
+ end
158
+ end
159
+ end