couchbase-jruby-client 0.1.0-java → 0.1.5-java

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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.jrubyrc +722 -0
  3. data/.ruby-version +1 -1
  4. data/README.md +12 -90
  5. data/couchbase-jruby-client.gemspec +6 -6
  6. data/lib/couchbase/async.rb +18 -0
  7. data/lib/couchbase/bucket.rb +90 -180
  8. data/lib/couchbase/constants.rb +17 -0
  9. data/lib/couchbase/design_doc.rb +83 -0
  10. data/lib/couchbase/error.rb +31 -0
  11. data/lib/couchbase/operations/arithmetic.rb +17 -0
  12. data/lib/couchbase/operations/delete.rb +17 -0
  13. data/lib/couchbase/operations/design_docs.rb +99 -0
  14. data/lib/couchbase/operations/get.rb +73 -67
  15. data/lib/couchbase/operations/stats.rb +28 -1
  16. data/lib/couchbase/operations/store.rb +114 -97
  17. data/lib/couchbase/operations/touch.rb +49 -19
  18. data/lib/couchbase/operations/unlock.rb +209 -0
  19. data/lib/couchbase/operations/utils.rb +22 -10
  20. data/lib/couchbase/operations.rb +21 -0
  21. data/lib/couchbase/query.rb +92 -0
  22. data/lib/couchbase/result.rb +18 -1
  23. data/lib/couchbase/transcoder.rb +36 -42
  24. data/lib/couchbase/version.rb +18 -1
  25. data/lib/couchbase/view.rb +30 -172
  26. data/lib/couchbase/view_row.rb +38 -98
  27. data/lib/couchbase.rb +74 -72
  28. data/test/profile/.jrubyrc +722 -0
  29. data/test/profile/Gemfile +5 -5
  30. data/test/profile/benchmark.rb +106 -124
  31. data/test/profile/profile.rb +59 -0
  32. data/test/setup.rb +10 -145
  33. data/test/test_arithmetic.rb +54 -77
  34. data/test/test_async.rb +74 -102
  35. data/test/test_bucket.rb +74 -60
  36. data/test/test_cas.rb +10 -23
  37. data/test/test_couchbase.rb +11 -3
  38. data/test/test_delete.rb +41 -43
  39. data/test/test_design_docs.rb +62 -0
  40. data/test/test_errors.rb +9 -18
  41. data/test/test_format.rb +21 -31
  42. data/test/test_get.rb +107 -151
  43. data/test/test_query.rb +23 -0
  44. data/test/test_stats.rb +9 -24
  45. data/test/test_store.rb +52 -65
  46. data/test/test_timer.rb +4 -12
  47. data/test/test_touch.rb +26 -33
  48. data/test/test_unlock.rb +47 -78
  49. data/test/test_utils.rb +2 -11
  50. data/test/test_version.rb +5 -14
  51. data/test/test_view.rb +87 -0
  52. metadata +27 -14
  53. data/lib/couchbase/jruby/couchbase_client.rb +0 -22
  54. data/lib/couchbase/jruby/future.rb +0 -8
data/test/test_bucket.rb CHANGED
@@ -20,31 +20,32 @@ require File.join(File.dirname(__FILE__), 'setup')
20
20
  class TestBucket < MiniTest::Test
21
21
 
22
22
  def test_it_substitute_default_parts_to_url
23
-
24
- with_mock(:host => 'localhost') do |mock| # pick first free port
23
+ with_configs(:host => 'localhost') do |configs| # pick first free port
25
24
  connections = [
26
- Couchbase.new("http://#{mock.host}:#{mock.port}"),
27
- Couchbase.new(:port => mock.port),
28
- Couchbase.new("http://#{mock.host}:8091", :port => mock.port)
25
+ Couchbase.new("http://#{configs.host}:#{configs.port}"),
26
+ Couchbase.new(:port => configs.port),
27
+ Couchbase.new("http://#{configs.host}:8091", :port => configs.port)
29
28
  ]
30
29
  connections.each do |connection|
31
- assert_equal mock.port, connection.port
32
- assert_equal "#{mock.host}:#{mock.port}", connection.authority
33
- assert_equal "http://#{mock.host}:#{mock.port}/pools/default/buckets/default/", connection.url
30
+ assert_equal configs.port, connection.port
31
+ assert_equal "#{configs.host}:#{configs.port}", connection.authority
32
+ assert_equal "http://#{configs.host}:#{configs.port}/pools/default/buckets/default/", connection.url
34
33
  end
34
+ connections.each(&:disconnect)
35
35
  end
36
36
 
37
- with_mock(:host => '127.0.0.1') do |mock|
37
+ with_configs(:host => '127.0.0.1') do |configs|
38
38
  connections = [
39
- Couchbase.new("http://#{mock.host}:#{mock.port}"),
40
- Couchbase.new(:hostname => mock.host, :port => mock.port),
41
- Couchbase.new('http://example.com:8091', :hostname => mock.host, :port => mock.port)
39
+ Couchbase.new("http://#{configs.host}:#{configs.port}"),
40
+ Couchbase.new(:hostname => configs.host, :port => configs.port),
41
+ Couchbase.new('http://example.com:8091', :hostname => configs.host, :port => configs.port)
42
42
  ]
43
43
  connections.each do |connection|
44
- assert_equal mock.host, connection.hostname
45
- assert_equal "#{mock.host}:#{mock.port}", connection.authority
46
- assert_equal "http://#{mock.host}:#{mock.port}/pools/default/buckets/default/", connection.url
44
+ assert_equal configs.host, connection.hostname
45
+ assert_equal "#{configs.host}:#{configs.port}", connection.authority
46
+ assert_equal "http://#{configs.host}:#{configs.port}/pools/default/buckets/default/", connection.url
47
47
  end
48
+ connections.each(&:disconnect)
48
49
  end
49
50
  end
50
51
 
@@ -70,32 +71,36 @@ class TestBucket < MiniTest::Test
70
71
  end
71
72
 
72
73
  def test_it_able_to_connect_to_protected_buckets
73
- with_mock(:buckets_spec => 'protected:secret') do |mock|
74
- connection = Couchbase.new(:hostname => mock.host,
75
- :port => mock.port,
74
+ skip
75
+ with_configs(:buckets_spec => 'protected:secret') do |configs|
76
+ connection = Couchbase.new(:hostname => configs.host,
77
+ :port => configs.port,
76
78
  :bucket => 'protected',
77
79
  :username => 'protected',
78
80
  :password => 'secret')
79
81
  assert_equal "protected", connection.bucket
80
82
  assert_equal "protected", connection.username
81
83
  assert_equal "secret", connection.password
84
+ connection.disconnect
82
85
  end
83
86
  end
84
87
 
85
88
  def test_it_allows_to_specify_credentials_in_url
86
- with_mock(:buckets_spec => 'protected:secret') do |mock|
87
- connection = Couchbase.new("http://protected:secret@#{mock.host}:#{mock.port}/pools/default/buckets/protected/")
89
+ skip
90
+ with_configs(:buckets_spec => 'protected:secret') do |configs|
91
+ connection = Couchbase.new("http://protected:secret@#{configs.host}:#{configs.port}/pools/default/buckets/protected/")
88
92
  assert_equal "protected", connection.bucket
89
93
  assert_equal "protected", connection.username
90
94
  assert_equal "secret", connection.password
95
+ connection.disconnect
91
96
  end
92
97
  end
93
98
 
94
99
  def test_it_raises_error_with_wrong_credentials
95
- with_mock do |mock|
100
+ with_configs do |configs|
96
101
  assert_raises Couchbase::Error::Auth do
97
- Couchbase.new(:hostname => mock.host,
98
- :port => mock.port,
102
+ Couchbase.new(:hostname => configs.host,
103
+ :port => configs.port,
99
104
  :bucket => 'default',
100
105
  :username => 'wrong.username',
101
106
  :password => 'wrong_password')
@@ -104,17 +109,18 @@ class TestBucket < MiniTest::Test
104
109
  end
105
110
 
106
111
  def test_it_unable_to_connect_to_protected_buckets_with_wrong_credentials
107
- with_mock(:buckets_spec => 'protected:secret') do |mock|
112
+ skip
113
+ with_configs(:buckets_spec => 'protected:secret') do |configs|
108
114
  assert_raises Couchbase::Error::Auth do
109
- Couchbase.new(:hostname => mock.host,
110
- :port => mock.port,
115
+ Couchbase.new(:hostname => configs.host,
116
+ :port => configs.port,
111
117
  :bucket => 'protected',
112
118
  :username => 'wrong',
113
119
  :password => 'secret')
114
120
  end
115
121
  assert_raises Couchbase::Error::Auth do
116
- Couchbase.new(:hostname => mock.host,
117
- :port => mock.port,
122
+ Couchbase.new(:hostname => configs.host,
123
+ :port => configs.port,
118
124
  :bucket => 'protected',
119
125
  :username => 'protected',
120
126
  :password => 'wrong')
@@ -123,14 +129,15 @@ class TestBucket < MiniTest::Test
123
129
  end
124
130
 
125
131
  def test_it_allows_change_quiet_flag
126
- with_mock do |mock|
127
- connection = Couchbase.new(:hostname => mock.host,
128
- :port => mock.port)
132
+ with_configs do |configs|
133
+ connection = Couchbase.new(:hostname => configs.host,
134
+ :port => configs.port)
129
135
 
130
136
  refute connection.quiet?
131
137
 
132
- connection = Couchbase.new(:hostname => mock.host,
133
- :port => mock.port,
138
+ connection.disconnect
139
+ connection = Couchbase.new(:hostname => configs.host,
140
+ :port => configs.port,
134
141
  :quiet => true)
135
142
  assert connection.quiet?
136
143
 
@@ -139,30 +146,32 @@ class TestBucket < MiniTest::Test
139
146
 
140
147
  connection.quiet = :foo
141
148
  assert_equal true, connection.quiet?
149
+ connection.disconnect
142
150
  end
143
151
  end
144
152
 
145
153
  def test_it_is_connected
146
- with_mock do |mock|
147
- connection = Couchbase.new(:hostname => mock.host,
148
- :port => mock.port)
154
+ with_configs do |configs|
155
+ connection = Couchbase.new(:hostname => configs.host,
156
+ :port => configs.port)
149
157
  assert connection.connected?
158
+ connection.disconnect
150
159
  end
151
160
  end
152
161
 
153
162
  def test_it_is_possible_to_disconnect_instance
154
- with_mock do |mock|
155
- connection = Couchbase.new(:hostname => mock.host,
156
- :port => mock.port)
163
+ with_configs do |configs|
164
+ connection = Couchbase.new(:hostname => configs.host,
165
+ :port => configs.port)
157
166
  connection.disconnect
158
167
  refute connection.connected?
159
168
  end
160
169
  end
161
170
 
162
171
  def test_it_raises_error_on_double_disconnect
163
- with_mock do |mock|
164
- connection = Couchbase.new(:hostname => mock.host,
165
- :port => mock.port)
172
+ with_configs do |configs|
173
+ connection = Couchbase.new(:hostname => configs.host,
174
+ :port => configs.port)
166
175
  connection.disconnect
167
176
  assert_raises Couchbase::Error::Connect do
168
177
  connection.disconnect
@@ -171,43 +180,48 @@ class TestBucket < MiniTest::Test
171
180
  end
172
181
 
173
182
  def test_it_allows_to_reconnect_the_instance
174
- with_mock do |mock|
175
- connection = Couchbase.new(:hostname => mock.host,
176
- :port => mock.port)
183
+ with_configs do |configs|
184
+ connection = Couchbase.new(:hostname => configs.host,
185
+ :port => configs.port)
177
186
  connection.disconnect
178
187
  refute connection.connected?
179
188
  connection.reconnect
180
189
  assert connection.connected?
181
190
  assert connection.set(uniq_id, "foo")
191
+ connection.disconnect
182
192
  end
183
193
  end
184
194
 
185
195
  def test_it_allows_to_change_configuration_during_reconnect
186
- with_mock(:buckets_spec => 'protected:secret') do |mock|
187
- connection = Couchbase.new(:hostname => mock.host,
188
- :port => mock.port,
189
- :bucket => 'protected',
190
- :username => 'protected',
191
- :password => 'secret')
196
+ skip
197
+ with_configs do |configs|
198
+ connection = Couchbase.new(:quiet => true)
199
+ assert connection.quiet?
192
200
  connection.disconnect
193
- assert_raises Couchbase::Error::Auth do
194
- connection.reconnect(:password => 'incorrect')
195
- end
196
- refute connection.connected?
197
201
 
198
- connection.reconnect(:password => 'secret')
199
- assert connection.connected?
202
+ connection.reconnect(:quiet => false)
203
+ refute connection.quiet?
204
+ connection.disconnect
200
205
  end
201
206
  end
202
207
 
203
208
  def test_it_uses_bucket_name_as_username_if_username_is_empty
204
- with_mock(:buckets_spec => 'protected:secret') do |mock|
205
- connection = Couchbase.new(:hostname => mock.host,
206
- :port => mock.port,
209
+ skip
210
+ with_configs(:buckets_spec => 'protected:secret') do |configs|
211
+ connection = Couchbase.new(:hostname => configs.host,
212
+ :port => configs.port,
207
213
  :bucket => 'protected',
208
214
  :password => 'secret')
209
215
  assert connection.connected?
216
+ connection.disconnect
210
217
  end
211
218
  end
212
219
 
220
+ def test_it_converts_options_keys_to_symbols
221
+ bucket = Couchbase::Bucket.new('quiet' => true, 'default_ttl' => 10)
222
+ assert bucket.quiet?
223
+ assert_equal 10, bucket.default_ttl
224
+ bucket.disconnect
225
+ end
226
+
213
227
  end
data/test/test_cas.rb CHANGED
@@ -19,33 +19,22 @@ require File.join(File.dirname(__FILE__), 'setup')
19
19
 
20
20
  class TestCas < MiniTest::Test
21
21
 
22
- def setup
23
- @mock = start_mock
24
- end
25
-
26
- def teardown
27
- stop_mock(@mock)
28
- end
29
-
30
22
  def test_compare_and_swap
31
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port,
32
- :default_format => :document)
33
- connection.set(uniq_id, {"bar" => 1})
34
- connection.cas(uniq_id) do |val|
23
+ cb.set(uniq_id, {"bar" => 1})
24
+ cb.cas(uniq_id) do |val|
35
25
  val["baz"] = 2
36
26
  val
37
27
  end
38
- val = connection.get(uniq_id)
28
+ val = cb.get(uniq_id)
39
29
  expected = {"bar" => 1, "baz" => 2}
40
30
  assert_equal expected, val
41
31
  end
42
32
 
43
33
  def test_compare_and_swap_async
44
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port,
45
- :default_format => :document)
46
- connection.set(uniq_id, {"bar" => 1})
34
+ skip
35
+ cb.set(uniq_id, {"bar" => 1})
47
36
  calls = 0
48
- connection.run do |conn|
37
+ cb.run do |conn|
49
38
  conn.cas(uniq_id) do |ret|
50
39
  calls += 1
51
40
  case ret.operation
@@ -61,18 +50,16 @@ class TestCas < MiniTest::Test
61
50
  end
62
51
  end
63
52
  assert_equal 2, calls
64
- val = connection.get(uniq_id)
53
+ val = cb.get(uniq_id)
65
54
  expected = {"bar" => 1, "baz" => 2}
66
55
  assert_equal expected, val
67
56
  end
68
57
 
69
58
  def test_flags_replication
70
59
  skip
71
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port,
72
- :default_format => :document)
73
- connection.set(uniq_id, "bar", :flags => 0x100)
74
- connection.cas(uniq_id) { "baz" }
75
- _, flags, _ = connection.get(uniq_id, :extended => true)
60
+ cb.set(uniq_id, "bar", :flags => 0x100)
61
+ cb.cas(uniq_id) { "baz" }
62
+ _, flags, _ = cb.get(uniq_id, :extended => true)
76
63
  assert_equal 0x100, flags
77
64
  end
78
65
  end
@@ -16,13 +16,21 @@
16
16
  #
17
17
 
18
18
  require File.join(File.dirname(__FILE__), 'setup')
19
- require 'minitest/mock'
20
19
 
21
20
  class TestCouchbase < MiniTest::Test
22
21
 
23
22
  def test_that_it_create_instance_of_bucket
24
- with_mock do |mock|
25
- assert_instance_of Couchbase::Bucket, Couchbase.new("http://#{mock.host}:#{mock.port}")
23
+ with_configs do |configs|
24
+ connection = Couchbase.new("http://#{configs.host}:#{configs.port}")
25
+ assert_instance_of Couchbase::Bucket, connection
26
+ connection.disconnect
27
+ end
28
+ end
29
+
30
+ def test_global_bucket_access
31
+ with_configs do |configs|
32
+ assert_instance_of Couchbase::Bucket, Couchbase.bucket
33
+ assert_equal Couchbase.bucket, Couchbase.bucket
26
34
  end
27
35
  end
28
36
 
data/test/test_delete.rb CHANGED
@@ -19,107 +19,105 @@ require File.join(File.dirname(__FILE__), 'setup')
19
19
 
20
20
  class TestStore < MiniTest::Test
21
21
 
22
- def setup
23
- @mock = start_mock
24
- end
25
-
26
- def teardown
27
- stop_mock(@mock)
28
- end
29
-
30
22
  def test_trivial_delete
31
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
32
- connection.set(uniq_id, "bar")
33
- assert connection.delete(uniq_id)
23
+ cb.set(uniq_id, "bar")
24
+ assert cb.delete(uniq_id)
34
25
  assert_raises(Couchbase::Error::NotFound) do
35
- connection.delete(uniq_id)
26
+ cb.delete(uniq_id)
36
27
  end
37
28
  end
38
29
 
39
30
  def test_delete_missing
40
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
41
31
  assert_raises(Couchbase::Error::NotFound) do
42
- connection.delete(uniq_id(:missing))
32
+ cb.delete(uniq_id(:missing))
43
33
  end
44
- refute connection.delete(uniq_id(:missing), :quiet => true)
45
- refute connection.quiet?
46
- connection.quiet = true
47
- refute connection.delete(uniq_id(:missing))
34
+ refute cb.delete(uniq_id(:missing), :quiet => true)
35
+ refute cb.quiet?
36
+ cb.quiet = true
37
+ refute cb.delete(uniq_id(:missing))
48
38
  end
49
39
 
50
40
  def test_delete_with_cas
51
41
  skip
52
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
53
- cas = connection.set(uniq_id, "bar")
42
+ cas = cb.set(uniq_id, "bar")
54
43
  missing_cas = cas - 1
55
44
  assert_raises(Couchbase::Error::KeyExists) do
56
- connection.delete(uniq_id, :cas => missing_cas)
45
+ cb.delete(uniq_id, :cas => missing_cas)
57
46
  end
58
- assert connection.delete(uniq_id, :cas => cas)
47
+ assert cb.delete(uniq_id, :cas => cas)
59
48
  end
60
49
 
61
50
  def test_allow_fixnum_as_cas_parameter
62
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
63
- cas = connection.set(uniq_id, "bar")
64
- assert connection.delete(uniq_id, cas)
51
+ cas = cb.set(uniq_id, "bar")
52
+ assert cb.delete(uniq_id, cas)
65
53
  end
66
54
 
67
55
  def test_delete_with_prefix
68
56
  skip
69
57
  connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port, :key_prefix => "prefix:")
70
- connection.set(uniq_id(:foo), "bar")
71
- assert connection.delete(uniq_id(:foo))
58
+ cb.set(uniq_id(:foo), "bar")
59
+ assert cb.delete(uniq_id(:foo))
72
60
  assert_raises(Couchbase::Error::NotFound) do
73
- connection.get(uniq_id(:foo))
61
+ cb.get(uniq_id(:foo))
74
62
  end
75
63
  end
76
64
 
77
65
  def test_simple_multi_delete
78
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port, :quiet => true)
79
- connection.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
80
- res = connection.delete(uniq_id(1), uniq_id(2))
66
+ cb.quiet = true
67
+ cb.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
68
+ res = cb.delete(uniq_id(1), uniq_id(2))
81
69
  assert res.is_a?(Hash)
82
70
  assert res[uniq_id(1)]
83
71
  assert res[uniq_id(2)]
72
+ ensure
73
+ cb.quiet = false
84
74
  end
85
75
 
86
76
  def test_simple_multi_delete_missing
87
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port, :quiet => true)
88
- connection.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
89
- res = connection.delete(uniq_id(1), uniq_id(:missing), :quiet => true)
77
+ cb.quiet = true
78
+ cb.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
79
+ res = cb.delete(uniq_id(1), uniq_id(:missing), :quiet => true)
90
80
  assert res.is_a?(Hash)
91
81
  assert res[uniq_id(1)]
92
82
  refute res[uniq_id(:missing)]
83
+ ensure
84
+ cb.quiet = false
93
85
  end
94
86
 
95
87
  def test_multi_delete_with_cas_check
96
88
  skip
97
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port, :quiet => true)
98
- cas = connection.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
99
- res = connection.delete(uniq_id(1) => cas[uniq_id(1)], uniq_id(2) => cas[uniq_id(2)])
89
+ cb.quiet = true
90
+ cas = cb.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
91
+ res = cb.delete(uniq_id(1) => cas[uniq_id(1)], uniq_id(2) => cas[uniq_id(2)])
100
92
  assert res.is_a?(Hash)
101
93
  assert res[uniq_id(1)]
102
94
  assert res[uniq_id(2)]
95
+ ensure
96
+ cb.quiet = false
103
97
  end
104
98
 
105
99
  def test_multi_delete_missing_with_cas_check
106
100
  skip
107
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port, :quiet => true)
108
- cas = connection.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
109
- res = connection.delete(uniq_id(1) => cas[uniq_id(1)], uniq_id(:missing) => cas[uniq_id(2)])
101
+ cb.quiet = true
102
+ cas = cb.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
103
+ res = cb.delete(uniq_id(1) => cas[uniq_id(1)], uniq_id(:missing) => cas[uniq_id(2)])
110
104
  assert res.is_a?(Hash)
111
105
  assert res[uniq_id(1)]
112
106
  refute res[uniq_id(:missing)]
107
+ ensure
108
+ cb.quiet = false
113
109
  end
114
110
 
115
111
  def test_multi_delete_with_cas_check_mismatch
116
112
  skip
117
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port, :quiet => true)
118
- cas = connection.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
113
+ cb.quiet = true
114
+ cas = cb.set(uniq_id(1) => "bar", uniq_id(2) => "foo")
119
115
 
120
116
  assert_raises(Couchbase::Error::KeyExists) do
121
- connection.delete(uniq_id(1) => cas[uniq_id(1)] + 1,
117
+ cb.delete(uniq_id(1) => cas[uniq_id(1)] + 1,
122
118
  uniq_id(2) => cas[uniq_id(2)])
123
119
  end
120
+ ensure
121
+ cb.quiet = false
124
122
  end
125
123
  end
@@ -0,0 +1,62 @@
1
+ # Author:: Mike Evans <mike@urlgonomics.com>
2
+ # Copyright:: 2013 Urlgonomics LLC.
3
+ # License:: Apache License, Version 2.0
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the 'License');
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an 'AS IS' BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+ #
17
+
18
+ require File.join(File.dirname(__FILE__), 'setup')
19
+
20
+ class TestDesignDocs < MiniTest::Test
21
+
22
+ def test_save_design_doc
23
+ assert cb.save_design_doc(design_doc)
24
+ end
25
+
26
+ def test_save_design_doc_with_bad_data
27
+ assert_raises ArgumentError do
28
+ cb.save_design_doc(123)
29
+ end
30
+ end
31
+
32
+ def test_delete_design_doc
33
+ cb.save_design_doc(design_doc)
34
+ assert cb.delete_design_doc('blog')
35
+ end
36
+
37
+ def test_design_doc_access
38
+ cb.save_design_doc(design_doc)
39
+ assert cb.design_docs['blog']
40
+ end
41
+
42
+ def test_design_doc_missing_access
43
+ refute cb.design_docs['missing']
44
+ end
45
+
46
+ def design_doc
47
+ {
48
+ '_id' => '_design/blog',
49
+ 'language' => 'javascript',
50
+ 'views' => {
51
+ 'recent_posts' => {
52
+ 'map' => <<-JS
53
+ function (doc, meta) {
54
+ emit(doc.name);
55
+ }
56
+ JS
57
+ }
58
+ }
59
+ }
60
+ end
61
+
62
+ end
data/test/test_errors.rb CHANGED
@@ -20,63 +20,54 @@ require 'digest/md5'
20
20
 
21
21
  class TestErrors < MiniTest::Test
22
22
 
23
- def setup
24
- @mock = start_mock
25
- end
26
-
27
- def teardown
28
- stop_mock(@mock)
29
- end
30
-
31
23
  def genkey(item)
32
24
  tuple = [item["author"], item["message"]]
33
25
  Digest::MD5.hexdigest(tuple.join('-'))
34
26
  end
35
27
 
36
28
  def test_graceful_add_with_collision
37
- connection = Couchbase.new(:hostname => @mock.host, :port => @mock.port)
38
29
  msg1 = {"author" => "foo", "message" => "hi all", "time" => "2012-01-12 11:29:09"}
39
30
  key1 = uniq_id(genkey(msg1))
40
31
  msg2 = {"author" => "foo", "message" => "hi all", "time" => "2012-01-12 11:29:30"}
41
32
  key2 = uniq_id(genkey(msg2))
42
33
 
43
- connection.add(key1, msg1)
34
+ cb.add(key1, msg1)
44
35
  begin
45
- connection.add(key2, msg2)
36
+ cb.add(key2, msg2)
46
37
  rescue Couchbase::Error::KeyExists => ex
47
38
  # using info from exception
48
39
  # it could be done with cas operation, but we can save one request
49
40
  # here (in real world cas operation will be more consistent because it
50
41
  # fetch fresh version from the cluster)
51
42
  #
52
- # connection.cas(key2) do |msg|
43
+ # cb.cas(key2) do |msg|
53
44
  # msg.merge("time" => [msg["time"], msg2["time"]])
54
45
  # end
55
46
  msg2 = msg1.merge("time" => [msg1["time"], msg2["time"]])
56
- connection.set(key2, msg2, :cas => ex.cas)
47
+ cb.set(key2, msg2, :cas => ex.cas)
57
48
  end
58
49
 
59
50
  msg3 = {"author" => "foo", "message" => "hi all",
60
51
  "time" => ["2012-01-12 11:29:09", "2012-01-12 11:29:30"]}
61
52
  key3 = uniq_id(genkey(msg3))
62
- assert_equal msg3, connection.get(key3)
53
+ assert_equal msg3, cb.get(key3)
63
54
 
64
- connection.run do |conn|
55
+ cb.run do |conn|
65
56
  msg4 = {"author" => "foo", "message" => "hi all", "time" => "2012-01-12 11:45:34"}
66
57
  key4 = uniq_id(genkey(msg4))
67
58
 
68
- connection.add(key4, msg4) do |ret|
59
+ cb.add(key4, msg4) do |ret|
69
60
  assert_equal :add, ret.operation
70
61
  assert_equal key4, ret.key
71
62
  msg4 = msg3.merge("time" => msg3["time"] + [msg4["time"]])
72
- connection.set(ret.key, msg4, :cas => ret.cas)
63
+ cb.set(ret.key, msg4, :cas => ret.cas)
73
64
  end
74
65
  end
75
66
 
76
67
  msg5 = {"author" => "foo", "message" => "hi all",
77
68
  "time" => ["2012-01-12 11:29:09", "2012-01-12 11:29:30", "2012-01-12 11:45:34"]}
78
69
  key5 = uniq_id(genkey(msg5))
79
- assert_equal msg5, connection.get(key5)
70
+ assert_equal msg5, cb.get(key5)
80
71
  end
81
72
 
82
73
  end