tikh-klarlack 0.0.8 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/klarlack.rb +1 -0
- data/lib/varnish/client.rb +5 -3
- data/spec/klarlack_spec.rb +32 -25
- data/spec/spec_helper.rb +1 -1
- metadata +4 -4
data/lib/klarlack.rb
CHANGED
data/lib/varnish/client.rb
CHANGED
@@ -127,7 +127,6 @@ module Varnish
|
|
127
127
|
#
|
128
128
|
# 1.
|
129
129
|
# .purge :url, <regexp>
|
130
|
-
# .purge :hash, <regexp>
|
131
130
|
#
|
132
131
|
# <regexp> is a string containing a varnish compatible regexp
|
133
132
|
#
|
@@ -149,7 +148,7 @@ module Varnish
|
|
149
148
|
#
|
150
149
|
def purge(*args)
|
151
150
|
c = 'purge'
|
152
|
-
c << ".#{args.shift}" if [:url, :
|
151
|
+
c << ".#{args.shift}" if [:url, :list].include?(args.first)
|
153
152
|
response = cmd(c, *args)
|
154
153
|
case c
|
155
154
|
when 'purge.list'
|
@@ -249,6 +248,10 @@ module Varnish
|
|
249
248
|
content = conn_read(length.to_i + 1) # +1 = \n
|
250
249
|
if status.to_i == 107
|
251
250
|
@conn.write "auth #{auth_response(content[0,32])}\n"
|
251
|
+
status, length = conn_gets.split # <status> <content_length>\n
|
252
|
+
content = conn_read(length.to_i + 1) # +1 = \n
|
253
|
+
content.chomp!
|
254
|
+
raise CommandFailed, "Command #{name} returned with status #{status}: #{content}" if status.to_i != 200
|
252
255
|
end
|
253
256
|
end
|
254
257
|
|
@@ -289,7 +292,6 @@ module Varnish
|
|
289
292
|
ctx << File.read(secret_file)
|
290
293
|
ctx << challenge
|
291
294
|
ctx << "\n"
|
292
|
-
puts "#{ctx.to_s}"
|
293
295
|
ctx.to_s
|
294
296
|
end
|
295
297
|
|
data/spec/klarlack_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec/spec_helper'
|
2
2
|
|
3
3
|
describe Varnish::Client do
|
4
|
-
|
4
|
+
|
5
5
|
before(:each) do
|
6
6
|
@varnish = Varnish::Client.new "127.0.0.1:6082"
|
7
7
|
end
|
@@ -22,7 +22,7 @@ describe Varnish::Client do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'should use timeouts when sending commands' do
|
25
|
-
Varnish::SocketFactory::Timer.should_receive(:timeout).and_return("200 0")
|
25
|
+
Varnish::SocketFactory::Timer.should_receive(:timeout).exactly(2).times.and_return("200 0")
|
26
26
|
@varnish.timeout = 10
|
27
27
|
@varnish.ping
|
28
28
|
end
|
@@ -80,7 +80,6 @@ describe Varnish::Client do
|
|
80
80
|
|
81
81
|
it '#purge should allow purging by url, hash and custom fields' do
|
82
82
|
@varnish.purge(:url, '^/articles/.*').should be_true
|
83
|
-
@varnish.purge(:hash, 12345).should be_true
|
84
83
|
@varnish.purge("req.http.host", "~", "www.example.com").should be_true
|
85
84
|
@varnish.purge("req.http.host ~ www.example.com").should be_true
|
86
85
|
end
|
@@ -119,23 +118,13 @@ describe Varnish::Client do
|
|
119
118
|
|
120
119
|
end
|
121
120
|
|
122
|
-
describe '(regression)' do
|
123
|
-
|
124
|
-
it '#purge.hash with regex containing backslashes should be escaped properly' do
|
125
|
-
test_regex = '/home\?x=1'
|
126
|
-
@varnish.purge :hash, test_regex
|
127
|
-
list = @varnish.purge :list
|
128
|
-
list.flatten.join.should include(test_regex)
|
129
|
-
end
|
130
|
-
|
131
|
-
end
|
132
121
|
|
133
122
|
describe '(broken connection)' do
|
134
123
|
|
135
124
|
before(:each) do
|
136
125
|
fake_connection!(:connected => true, :return => "200 1\n")
|
137
126
|
end
|
138
|
-
|
127
|
+
|
139
128
|
it 'should fail with a Varnish::Error when the connection does return nil for gets' do
|
140
129
|
@conn.stub!(:gets).and_return(nil)
|
141
130
|
lambda { @varnish.ping }.should raise_error(Varnish::BrokenConnection)
|
@@ -147,9 +136,9 @@ describe Varnish::Client do
|
|
147
136
|
end
|
148
137
|
|
149
138
|
end
|
150
|
-
|
139
|
+
|
151
140
|
describe '(daemon lifecycle)' do
|
152
|
-
|
141
|
+
|
153
142
|
it '#start, #stop, #running?, #stopped? should bahave as advertised' do
|
154
143
|
ensure_stopped # issues #stop
|
155
144
|
@varnish.stopped?.should be_true
|
@@ -158,41 +147,59 @@ describe Varnish::Client do
|
|
158
147
|
@varnish.stopped?.should be_false
|
159
148
|
@varnish.running?.should be_true
|
160
149
|
end
|
161
|
-
|
150
|
+
|
162
151
|
it 'starting an already started daemon should raise an error' do
|
163
152
|
ensure_started
|
164
153
|
lambda { @varnish.start }.should raise_error(Varnish::CommandFailed)
|
165
154
|
end
|
166
|
-
|
155
|
+
|
167
156
|
it 'stopping an already stopped daemon should raise an error' do
|
168
157
|
ensure_stopped
|
169
158
|
lambda { @varnish.stop }.should raise_error(Varnish::CommandFailed)
|
170
159
|
end
|
171
|
-
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
describe '(authentication)' do
|
164
|
+
before(:each) do
|
165
|
+
fake_connection!(:connected => false, :return => ["107 59\n", "xbhewxtfvjtxivucjwlajklgguylsehr\nAuthentication required.\n"])
|
166
|
+
@varnish.secret_file = "path/to/secret"
|
167
|
+
end
|
168
|
+
|
169
|
+
it 'send response on challenge request' do
|
170
|
+
File.should_receive(:read).with("path/to/secret").and_return("secret\n")
|
171
|
+
Varnish::SocketFactory.should_receive(:tcp_socket).and_return(@conn)
|
172
|
+
@conn.should_receive(:write).with("auth df7fd4ad1b16ffd6cc6af0730530a462ee2a365cc19a1d83cf3dc1bd1d5cd547\n")
|
173
|
+
@varnish.send(:connect)
|
174
|
+
end
|
172
175
|
end
|
173
|
-
|
176
|
+
|
174
177
|
def ensure_started
|
175
178
|
@varnish.start if @varnish.stopped?
|
176
179
|
while(!@varnish.running?) do sleep 0.1 end
|
177
180
|
end
|
178
|
-
|
181
|
+
|
179
182
|
def ensure_stopped
|
180
183
|
@varnish.stop if @varnish.running?
|
181
184
|
while(!@varnish.stopped?) do sleep 0.1 end
|
182
185
|
end
|
183
|
-
|
186
|
+
|
184
187
|
class FakeConn
|
185
188
|
attr_accessor :retval
|
186
|
-
def read(*args) @retval end
|
187
|
-
def gets(*args) @retval end
|
189
|
+
def read(*args) @retval.shift end
|
190
|
+
def gets(*args) @retval.shift end
|
188
191
|
def write(str) str.to_s.size end
|
189
192
|
end
|
190
193
|
|
191
194
|
def fake_connection!(opts = {})
|
192
195
|
@conn = FakeConn.new
|
193
|
-
@conn.retval = opts[:return] || ''
|
196
|
+
@conn.retval = wrap(opts[:return] || '')
|
194
197
|
@varnish.stub!(:connected?).and_return(opts[:connected] || false)
|
195
198
|
@varnish.instance_variable_set('@conn', @conn)
|
196
199
|
end
|
197
200
|
|
201
|
+
def wrap(value)
|
202
|
+
value.is_a?(Array) ? value : [value]
|
203
|
+
end
|
204
|
+
|
198
205
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tikh-klarlack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 13
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 9
|
10
|
+
version: 0.0.9
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Max Sch\xC3\xB6fmann"
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2010-11-
|
19
|
+
date: 2010-11-24 00:00:00 +03:00
|
20
20
|
default_executable:
|
21
21
|
dependencies: []
|
22
22
|
|