bwkfanboy 1.4.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/Gemfile +7 -0
- data/Gemfile.lock +51 -0
- data/Procfile +1 -0
- data/README.rdoc +40 -77
- data/Rakefile +13 -48
- data/bin/bwkfanboy +47 -166
- data/bin/bwkfanboy_generate +7 -19
- data/bin/bwkfanboy_parse +21 -17
- data/bwkfanboy.gemspec +40 -0
- data/config.ru +3 -0
- data/doc/NEWS.rdoc +21 -79
- data/doc/plugin.rdoc +63 -79
- data/etc/bwkfanboy.yaml +2 -0
- data/etc/sinatra.rb +34 -0
- data/lib/bwkfanboy/cliconfig.rb +141 -0
- data/lib/bwkfanboy/cliutils.rb +114 -0
- data/lib/bwkfanboy/fetch.rb +22 -24
- data/lib/bwkfanboy/generator.rb +78 -0
- data/lib/bwkfanboy/home.rb +53 -0
- data/lib/bwkfanboy/meta.rb +5 -2
- data/lib/bwkfanboy/plugin.rb +247 -0
- data/lib/bwkfanboy/plugin_skeleton.erb +19 -23
- data/lib/bwkfanboy/server.rb +73 -0
- data/lib/bwkfanboy/utils.rb +39 -129
- data/plugins/bwk.rb +25 -0
- data/plugins/econlib.rb +22 -0
- data/plugins/freebsd-ports-update.rb +73 -0
- data/plugins/inc.rb +29 -0
- data/plugins/test.rb +29 -0
- data/public/.gitattributes +1 -0
- data/public/favicon.ico +0 -0
- data/public/jquery-1.7.2.min.js +0 -0
- data/public/list.js +111 -0
- data/public/loading.gif +0 -0
- data/public/style.css +54 -0
- data/shotgun.rb +20 -0
- data/test/example/.gitattributes +1 -0
- data/test/example/.gitignore +1 -0
- data/test/example/02/plugins/bwk.html +0 -0
- data/test/{plugins → example/02/plugins}/empty.rb +0 -0
- data/test/example/02/plugins/garbage.rb +1 -0
- data/test/example/02/plugins/inc.html +0 -0
- data/test/helper.rb +30 -27
- data/test/helper_cliutils.rb +34 -0
- data/test/test_cli.rb +86 -0
- data/test/test_fetch.rb +49 -18
- data/test/test_generate.rb +43 -16
- data/test/test_home.rb +33 -0
- data/test/test_plugin.rb +141 -0
- data/test/test_server.rb +21 -32
- data/views/list.haml +38 -0
- metadata +223 -110
- data/bin/bwkfanboy_fetch +0 -13
- data/bin/bwkfanboy_server +0 -126
- data/doc/README.erb +0 -114
- data/doc/README.rdoc +0 -141
- data/doc/TODO +0 -7
- data/doc/bwkfanboy_fetch.rdoc +0 -4
- data/doc/bwkfanboy_generate.rdoc +0 -7
- data/doc/bwkfanboy_parse.rdoc +0 -7
- data/doc/bwkfanboy_server.rdoc +0 -35
- data/doc/rakefile.rb +0 -59
- data/lib/bwkfanboy/generate.rb +0 -63
- data/lib/bwkfanboy/parser.rb +0 -156
- data/lib/bwkfanboy/plugins/bwk.rb +0 -33
- data/lib/bwkfanboy/plugins/econlib.rb +0 -34
- data/lib/bwkfanboy/plugins/freebsd-ports-update.rb +0 -76
- data/lib/bwkfanboy/plugins/inc.rb +0 -37
- data/lib/bwkfanboy/schema.js +0 -39
- data/test/popen4.sh +0 -4
- data/test/rake_git.rb +0 -36
- data/test/semis/Rakefile +0 -35
- data/test/semis/bwk.html +0 -393
- data/test/semis/bwk.json +0 -82
- data/test/semis/econlib.html +0 -21
- data/test/semis/inc.html +0 -1067
- data/test/semis/links.txt +0 -4
- data/test/test_parse.rb +0 -27
- data/test/xml-clean.sh +0 -8
- data/web/bwkfanboy.cgi +0 -36
@@ -0,0 +1,34 @@
|
|
1
|
+
# :erb: ruby-cli
|
2
|
+
# Various staff for minitest. Include this file into your 'helper.rb'.
|
3
|
+
|
4
|
+
require 'fileutils'
|
5
|
+
include FileUtils
|
6
|
+
|
7
|
+
require_relative '../lib/bwkfanboy/cliutils'
|
8
|
+
include Bwkfanboy
|
9
|
+
|
10
|
+
require 'minitest/autorun'
|
11
|
+
|
12
|
+
# Return an absolute path of a _c_.
|
13
|
+
def cmd(c)
|
14
|
+
case File.basename(Dir.pwd)
|
15
|
+
when Meta::NAME.downcase
|
16
|
+
# test probably is executed from the Rakefile
|
17
|
+
Dir.chdir('test')
|
18
|
+
$stderr.puts('*** chdir to ' + Dir.pwd)
|
19
|
+
when 'test'
|
20
|
+
# we are in the test directory, there is nothing special to do
|
21
|
+
else
|
22
|
+
# tests were invoked by 'gem check -t bwkfanboy'
|
23
|
+
# (for a classic rubygems 1.3.7)
|
24
|
+
begin
|
25
|
+
Dir.chdir(CliUtils::DIR_LIB_SRC.parent.parent + test)
|
26
|
+
rescue
|
27
|
+
raise "running tests from '#{Dir.pwd}' isn't supported: #{$!}"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
File.absolute_path('../bin/' + c)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Don't remove this: falsework/2.0.0/ruby-cli/2012-03-05T05:04:11+02:00
|
data/test/test_cli.rb
ADDED
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'msgpack'
|
2
|
+
require 'fakefs/safe'
|
3
|
+
require 'digest/md5'
|
4
|
+
|
5
|
+
require_relative '../lib/bwkfanboy/utils'
|
6
|
+
require_relative 'helper'
|
7
|
+
|
8
|
+
class TestCLI < MiniTest::Unit::TestCase
|
9
|
+
def setup
|
10
|
+
# this runs every time before test_*
|
11
|
+
@cmd = cmd('bwkfanboy') # get path to the exe & cd to tests directory
|
12
|
+
|
13
|
+
@bwkfanboy_parse = File.dirname(@cmd) + '/bwkfanboy_parse'
|
14
|
+
@bwkfanboy_generate = File.dirname(@cmd) + '/bwkfanboy_generate'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_bwkfanboy_parse_fail
|
18
|
+
r = CliUtils.exec "echo '' | #{@bwkfanboy_parse}"
|
19
|
+
assert_equal EX_USAGE, r[0]
|
20
|
+
assert_match /bwkfanboy_parse \[options\] plugin/, r[1]
|
21
|
+
|
22
|
+
r = CliUtils.exec "echo '' | #{@bwkfanboy_parse} BUGUS-PLUGIN"
|
23
|
+
assert_equal EX_DATAERR, r[0]
|
24
|
+
assert_match /'BUGUS-PLUGIN' not found/, r[1]
|
25
|
+
|
26
|
+
r = CliUtils.exec "echo '' | #{@bwkfanboy_parse} bwk"
|
27
|
+
assert_equal EX_DATAERR, r[0]
|
28
|
+
assert_match /it ain\'t grab anything/, r[1]
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_bwkfanboy_parse
|
32
|
+
r = CliUtils.exec "#{@bwkfanboy_parse} bwk < example/02/plugins/bwk.html"
|
33
|
+
assert_equal EX_OK, r[0]
|
34
|
+
|
35
|
+
raw = MessagePack.unpack r[2]
|
36
|
+
assert raw
|
37
|
+
assert_equal raw['channel']['title'], "Brian Kernighan's articles from Daily Princetonian"
|
38
|
+
assert_operator 4, :<=, raw['x_entries'].size
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_bwkfanboy_generate_fail
|
42
|
+
r = CliUtils.exec "echo '' | #{@bwkfanboy_generate}"
|
43
|
+
assert_equal EX_DATAERR, r[0]
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_bwkfanboy_fail
|
47
|
+
r = CliUtils.exec "#{@cmd}"
|
48
|
+
assert_equal EX_USAGE, r[0]
|
49
|
+
|
50
|
+
r = CliUtils.exec "#{@cmd} BOGUS-PLUGIN"
|
51
|
+
assert_equal EX_DATAERR, r[0]
|
52
|
+
assert_match /not found/, r[1]
|
53
|
+
|
54
|
+
r = CliUtils.exec "#{@cmd} test"
|
55
|
+
assert_equal EX_DATAERR, r[0]
|
56
|
+
assert_match /forget about additional options/, r[1]
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_bwkfanboy
|
60
|
+
r = CliUtils.exec "#{@cmd} test foo bar"
|
61
|
+
assert_equal EX_OK, r[0]
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_skeleton
|
65
|
+
skel = File.read '../lib/bwkfanboy/plugin_skeleton.erb'
|
66
|
+
FakeFS do
|
67
|
+
File.open('skel.erb', 'w+') {|fp| fp.write skel }
|
68
|
+
|
69
|
+
Utils.skeletonCreate 'skel.erb', '1'
|
70
|
+
m1 = Digest::MD5.file('1').hexdigest
|
71
|
+
Utils.skeletonCreate 'skel.erb', '1'
|
72
|
+
m2 = Digest::MD5.file('1').hexdigest
|
73
|
+
assert_equal m1, m2
|
74
|
+
|
75
|
+
File.open('1', 'w+') {|fp| fp.write 'fffffuuuu' }
|
76
|
+
m3 = Digest::MD5.file('1').hexdigest
|
77
|
+
out, err = capture_io { Utils.skeletonCreate 'skel.erb', '1' }
|
78
|
+
assert_match /1 already exists/, err
|
79
|
+
m4 = Digest::MD5.file('1').hexdigest
|
80
|
+
assert_equal m3, m4
|
81
|
+
|
82
|
+
refute_equal m1, m4
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
end
|
data/test/test_fetch.rb
CHANGED
@@ -1,28 +1,59 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
1
3
|
require_relative 'helper'
|
4
|
+
require_relative '../lib/bwkfanboy/plugin'
|
5
|
+
require_relative '../lib/bwkfanboy/fetch'
|
2
6
|
|
3
|
-
# TODO add HTTP 404 check; drop connection from server during HTTP 200
|
4
|
-
# replay...
|
5
7
|
class TestFetch < MiniTest::Unit::TestCase
|
6
|
-
|
8
|
+
|
9
|
+
def setup
|
10
|
+
# this runs every time before test_*
|
11
|
+
@cmd = cmd('bwkfanboy') # get path to the exe & cd to tests directory
|
7
12
|
|
8
|
-
|
9
|
-
|
10
|
-
assert_equal(1, r[0])
|
11
|
-
assert_match(/No such file or directory/, r[1])
|
13
|
+
ENV['BWKFANBOY_CONF'] = ''
|
14
|
+
@h = Home.new('example/02')
|
12
15
|
end
|
13
16
|
|
14
|
-
def
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
def test_fetch
|
18
|
+
url1 = @h.root + Home::PLUGINS + 'bwk.html'
|
19
|
+
|
20
|
+
streams = Fetch.openStreams [url1, url1]
|
21
|
+
assert_equal 2, streams.size
|
22
|
+
assert streams.sample.is_a?(File)
|
23
|
+
|
24
|
+
# stream in an array is readale
|
25
|
+
rs = streams.sample
|
26
|
+
assert_operator 500, :<, rs.read.size
|
27
|
+
rs.rewind
|
28
|
+
|
29
|
+
# open plugin with 1 stream only
|
30
|
+
p0 = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
31
|
+
assert p0
|
32
|
+
p0.run_parser [streams.sample]
|
33
|
+
|
34
|
+
# open the same plugin with 2 streams
|
35
|
+
streams_other = Fetch.openStreams [url1, url1]
|
36
|
+
all = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
37
|
+
assert all
|
38
|
+
all.run_parser streams_other
|
39
|
+
|
40
|
+
assert_operator p0.size, :<, all.size
|
41
|
+
|
42
|
+
Fetch.closeStreams streams
|
18
43
|
end
|
19
44
|
|
20
|
-
def
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
45
|
+
def test_fetch_fail
|
46
|
+
refute Fetch.openStreams(nil)
|
47
|
+
|
48
|
+
e = assert_raises(FetchException) { Fetch.openStreams [] }
|
49
|
+
assert_match /failed to open at least 1/, e.message
|
50
|
+
|
51
|
+
e = assert_raises(FetchException) { Fetch.openStreams [nil] }
|
52
|
+
assert_match /can\'t convert nil into String/, e.message
|
53
|
+
|
54
|
+
e = assert_raises(FetchException) {
|
55
|
+
Fetch.openStreams ["/FILE/DOESN'T/EXIST"]
|
56
|
+
}
|
57
|
+
assert_match /No such file or directory/, e.message
|
26
58
|
end
|
27
|
-
|
28
59
|
end
|
data/test/test_generate.rb
CHANGED
@@ -1,24 +1,51 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
1
3
|
require_relative 'helper'
|
4
|
+
require_relative '../lib/bwkfanboy/plugin'
|
5
|
+
require_relative '../lib/bwkfanboy/generator'
|
2
6
|
|
3
7
|
class TestGenerate < MiniTest::Unit::TestCase
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def setup
|
9
|
+
# this runs every time before test_*
|
10
|
+
@cmd = cmd('bwkfanboy') # get path to the exe & cd to tests directory
|
11
|
+
|
12
|
+
ENV['BWKFANBOY_CONF'] = ''
|
13
|
+
@h = Home.new('example/02')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_atom
|
17
|
+
stream = [StringIO.new(File.read(@h.root + Home::PLUGINS + 'bwk.html'))]
|
18
|
+
p = Plugin.new @h.conf[:plugins_path], 'bwk', {}
|
19
|
+
p.run_parser stream
|
20
|
+
|
21
|
+
raw = StringIO.new ''
|
22
|
+
p.pack raw
|
23
|
+
raw.rewind
|
24
|
+
|
25
|
+
data = Generator.unpack raw
|
26
|
+
# pp data
|
27
|
+
r = Generator.atom data
|
28
|
+
# pp r
|
29
|
+
doc = Nokogiri::HTML r.to_s
|
30
|
+
assert_equal("Brian Kernighan's articles from Daily Princetonian",
|
31
|
+
doc.xpath('//feed/title').text)
|
10
32
|
end
|
11
|
-
|
12
|
-
def
|
13
|
-
|
14
|
-
|
15
|
-
|
33
|
+
|
34
|
+
def test_atom_fail
|
35
|
+
e = assert_raises(GeneratorException) { Generator.atom nil }
|
36
|
+
assert_match /input is nil/, e.message
|
37
|
+
|
38
|
+
e = assert_raises(GeneratorException) { Generator.atom [1,2] }
|
39
|
+
assert_match /can\'t convert String into Integer/, e.message
|
16
40
|
end
|
17
41
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
42
|
+
def test_unpack
|
43
|
+
refute Generator.unpack(nil)
|
44
|
+
|
45
|
+
raw = StringIO.new ''
|
46
|
+
refute Generator.unpack(raw)
|
47
|
+
|
48
|
+
raw = StringIO.new MessagePack.pack([1,2,3])
|
49
|
+
assert_equal [1,2,3], Generator.unpack(raw)
|
23
50
|
end
|
24
51
|
end
|
data/test/test_home.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
require_relative '../lib/bwkfanboy/home'
|
4
|
+
|
5
|
+
class TestHome < MiniTest::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
# this runs every time before test_*
|
8
|
+
@cmd = cmd('bwkfanboy') # get path to the exe & cd to tests directory
|
9
|
+
|
10
|
+
rm_rf 'example/01'
|
11
|
+
ENV['BWKFANBOY_CONF'] = ''
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_home_dirs
|
15
|
+
h = Home.new 'example/01'
|
16
|
+
assert_equal 'example/01/log', h.logs.to_s
|
17
|
+
assert_equal 'example/01/plugins', h.conf[:plugins_path].first.to_s
|
18
|
+
assert_equal 2, h.conf[:plugins_path].size
|
19
|
+
assert File.readable?(h.root)
|
20
|
+
assert File.readable?(h.conf[:plugins_path].first.to_s)
|
21
|
+
assert File.readable?(h.logs)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_home_opts
|
25
|
+
ENV['BWKFANBOY_CONF'] = '-I /tmp -I /bin -I /INVALID-DIR --zzz "later on"'
|
26
|
+
h = Home.new('example/01') {|loader, o|
|
27
|
+
o.on('--zzz ARG', 'zzz') {|i| loader.conf[:zzz] = i }
|
28
|
+
}
|
29
|
+
assert_equal(['example/01/plugins', Home::SYSTEM_PLUGINS.to_s, '/tmp', '/bin'],
|
30
|
+
h.conf[:plugins_path].map(&:to_s) )
|
31
|
+
assert_equal 'later on', h.conf[:zzz]
|
32
|
+
end
|
33
|
+
end
|
data/test/test_plugin.rb
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
require_relative 'helper'
|
4
|
+
require_relative '../lib/bwkfanboy/home'
|
5
|
+
require_relative '../lib/bwkfanboy/plugin'
|
6
|
+
|
7
|
+
class TestPlugin < MiniTest::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
# this runs every time before test_*
|
10
|
+
@cmd = cmd('bwkfanboy') # get path to the exe & cd to tests directory
|
11
|
+
|
12
|
+
ENV['BWKFANBOY_CONF'] = ''
|
13
|
+
@h = Home.new('example/02')
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_allset
|
17
|
+
assert_equal false, BH.all_set?([])
|
18
|
+
assert_equal false, BH.all_set?(nil)
|
19
|
+
assert_equal false, BH.all_set?('')
|
20
|
+
assert_equal false, BH.all_set?(' ')
|
21
|
+
assert_equal false, BH.all_set?([1,2, ''])
|
22
|
+
assert_equal false, BH.all_set?([1,2, nil])
|
23
|
+
assert_equal true, BH.all_set?(1)
|
24
|
+
assert_equal true, BH.all_set?('1')
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_entryMostRecent
|
28
|
+
stream = [StringIO.new(File.read(@h.root + Home::PLUGINS + 'bwk.html'))]
|
29
|
+
p = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
30
|
+
p.run_parser stream
|
31
|
+
|
32
|
+
# p.each {|i| puts i[:updated]}
|
33
|
+
assert_equal '2012-03-12T00:00:00+00:00', p.entryMostRecent
|
34
|
+
|
35
|
+
p[rand(0..3)]['updated'] = '2042-03-12T00:00:00+00:00'
|
36
|
+
assert_equal '2042-03-12T00:00:00+00:00', p.entryMostRecent
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_load_ok
|
40
|
+
stream = [StringIO.new(File.read(@h.root + Home::PLUGINS + 'bwk.html'))]
|
41
|
+
p1 = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
42
|
+
assert(p1)
|
43
|
+
p1.run_parser stream
|
44
|
+
|
45
|
+
assert_match /^http:\/\/\S+/, p1[2]['link']
|
46
|
+
assert DateTime.parse(p1[2]['updated'])
|
47
|
+
|
48
|
+
['title', 'author', 'content'].each {|i|
|
49
|
+
assert_operator 0, :<, p1[2][i].size
|
50
|
+
}
|
51
|
+
|
52
|
+
assert_operator 4, :<=, p1.size
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_load_failed
|
56
|
+
e = assert_raises(PluginException) { Plugin.new nil, 'foo', [] }
|
57
|
+
assert_match /invalid search path/, e.message
|
58
|
+
|
59
|
+
e = assert_raises(PluginInvalidName) { Plugin.new nil, 'BOGUS PLUGIN', [] }
|
60
|
+
assert_match /name doesn\'t match/, e.message
|
61
|
+
|
62
|
+
e = assert_raises(PluginNotFound) {
|
63
|
+
Plugin.new @h.conf[:plugins_path], 'BOGUS-PLUGIN', []
|
64
|
+
}
|
65
|
+
assert_match /not found/, e.message
|
66
|
+
|
67
|
+
e = assert_raises(PluginException) {
|
68
|
+
p = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
69
|
+
p.run_parser nil
|
70
|
+
}
|
71
|
+
assert_match /parser expects a valid array of IO objects/, e.message
|
72
|
+
|
73
|
+
stream = [StringIO.new("")]
|
74
|
+
p = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
75
|
+
assert(p)
|
76
|
+
e = assert_raises(PluginException) { p.run_parser stream }
|
77
|
+
assert_match /it ain\'t grab anything/, e.message
|
78
|
+
|
79
|
+
stream = [StringIO.new("fffffuuuuuuu")]
|
80
|
+
p = Plugin.new @h.conf[:plugins_path], 'bwk', []
|
81
|
+
assert(p)
|
82
|
+
e = assert_raises(PluginException) { p.run_parser stream }
|
83
|
+
assert_match /it ain\'t grab anything/, e.message
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_broken_plugins
|
87
|
+
streams = [StringIO.new(File.read(@h.root + Home::PLUGINS + 'bwk.html'))]
|
88
|
+
e = assert_raises(PluginNoOptions) {
|
89
|
+
Plugin.new @h.conf[:plugins_path], 'empty', []
|
90
|
+
}
|
91
|
+
assert_match /forget about additional options/, e.message
|
92
|
+
|
93
|
+
e = assert_raises(PluginException) {
|
94
|
+
Plugin.new @h.conf[:plugins_path], 'empty', [1,2,3]
|
95
|
+
}
|
96
|
+
assert_match /uri must be an array of strings/, e.message
|
97
|
+
|
98
|
+
e = assert_raises(PluginException) {
|
99
|
+
p = Plugin.new @h.conf[:plugins_path], 'garbage', []
|
100
|
+
}
|
101
|
+
assert_match /failed to parse/, e.message
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_plugin_with_opt
|
105
|
+
streams = [StringIO.new(File.read(@h.root + Home::PLUGINS + 'inc.html')),
|
106
|
+
StringIO.new(File.read(@h.root + Home::PLUGINS + 'inc.html'))]
|
107
|
+
|
108
|
+
e = assert_raises(PluginNoOptions) {
|
109
|
+
Plugin.new @h.conf[:plugins_path], 'inc', []
|
110
|
+
}
|
111
|
+
assert_match /forget about additional options/, e.message
|
112
|
+
|
113
|
+
rs = streams.sample
|
114
|
+
p1 = Plugin.new @h.conf[:plugins_path], 'inc', [1]
|
115
|
+
p1.run_parser [rs]
|
116
|
+
rs.rewind
|
117
|
+
|
118
|
+
p2 = Plugin.new @h.conf[:plugins_path], 'inc', [1,2]
|
119
|
+
p2.run_parser streams
|
120
|
+
|
121
|
+
assert_operator p1.size, :<, p2.size
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_PluginInfo_about
|
125
|
+
e = assert_raises(PluginException) { PluginInfo.about nil, 'foo', nil }
|
126
|
+
assert_match /invalid search path/, e.message
|
127
|
+
|
128
|
+
e = assert_raises(PluginNotFound) {
|
129
|
+
PluginInfo.about @h.conf[:plugins_path], 'BOGUS-PLUGIN', nil
|
130
|
+
}
|
131
|
+
assert_match /not found/, e.message
|
132
|
+
|
133
|
+
out, err = capture_io {
|
134
|
+
PluginInfo.about @h.conf[:plugins_path], 'bwk', nil
|
135
|
+
}
|
136
|
+
out.split("\n")[0..3].each {|i|
|
137
|
+
assert_match /^[A-Z]+ *: .+/, i
|
138
|
+
}
|
139
|
+
|
140
|
+
end
|
141
|
+
end
|
data/test/test_server.rb
CHANGED
@@ -1,44 +1,33 @@
|
|
1
|
-
require '
|
1
|
+
require 'rack/test'
|
2
2
|
|
3
3
|
require_relative 'helper'
|
4
|
+
require_relative '../lib/bwkfanboy/server'
|
4
5
|
|
5
|
-
$count = 1
|
6
|
-
|
7
|
-
# this tests will mess up logs and the pid file
|
8
6
|
class TestServer < MiniTest::Unit::TestCase
|
9
|
-
|
10
|
-
PORT = 9042
|
11
|
-
ADDR = '127.0.0.1'
|
7
|
+
include Rack::Test::Methods
|
12
8
|
|
13
|
-
def
|
14
|
-
|
15
|
-
@pid = spawn("#{CMD} -D -p #{@port}")
|
16
|
-
$count += 1
|
17
|
-
sleep(2) # wait for the server's loading
|
9
|
+
def app
|
10
|
+
MyApp
|
18
11
|
end
|
12
|
+
|
13
|
+
def setup
|
14
|
+
# this runs every time before test_*
|
15
|
+
@cmd = cmd('bwkfanboy') # get path to the exe & cd to tests directory
|
19
16
|
|
20
|
-
|
21
|
-
Process.kill("TERM", @pid)
|
17
|
+
ENV['BWKFANBOY_CONF'] = ''
|
22
18
|
end
|
23
|
-
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
assert_raises(OpenURI::HTTPError) { open("http://#{ADDR}:#{@port}/?p=inc") }
|
19
|
+
|
20
|
+
def test_list
|
21
|
+
get '/'
|
22
|
+
assert last_response.ok?
|
23
|
+
assert_match /Plugins List/, last_response.body
|
29
24
|
end
|
30
25
|
|
31
|
-
def
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
}
|
37
|
-
plugins.each {|k,v|
|
38
|
-
r = ''
|
39
|
-
open("http://#{ADDR}:#{@port}/?p=#{k}&o=foo") { |f| r = f.read }
|
40
|
-
# wget -q -O - '127.0.0.1:9042/?p=inc&o=foo' | md5
|
41
|
-
assert_equal(v, Digest::MD5.hexdigest(r))
|
42
|
-
}
|
26
|
+
def test_plugin_test
|
27
|
+
get '/test?o=foo&o=bar'
|
28
|
+
assert last_response.ok?
|
29
|
+
assert_operator 100, :<, last_response.header['Content-Length'].to_i
|
30
|
+
assert_equal 'application/atom+xml; charset=UTF-8', last_response.header['Content-Type']
|
43
31
|
end
|
32
|
+
|
44
33
|
end
|