emonti-rbkb 0.6.2.1 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. data/History.txt +32 -0
  2. data/README.rdoc +10 -7
  3. data/Rakefile +47 -0
  4. data/bin/feed +5 -0
  5. data/bin/plugsrv +3 -3
  6. data/cli_usage.rdoc +44 -9
  7. data/doctor-bag.jpg +0 -0
  8. data/lib/rbkb.rb +47 -2
  9. data/lib/rbkb/cli.rb +8 -6
  10. data/lib/rbkb/cli/b64.rb +5 -0
  11. data/lib/rbkb/cli/bgrep.rb +14 -9
  12. data/lib/rbkb/cli/chars.rb +2 -1
  13. data/lib/rbkb/cli/crc32.rb +4 -1
  14. data/lib/rbkb/cli/d64.rb +3 -0
  15. data/lib/rbkb/cli/dedump.rb +5 -3
  16. data/lib/rbkb/cli/feed.rb +223 -0
  17. data/lib/rbkb/cli/hexify.rb +3 -3
  18. data/lib/rbkb/cli/len.rb +12 -9
  19. data/lib/rbkb/cli/rstrings.rb +13 -10
  20. data/lib/rbkb/cli/slice.rb +1 -0
  21. data/lib/rbkb/cli/telson.rb +21 -57
  22. data/lib/rbkb/cli/unhexify.rb +2 -6
  23. data/lib/rbkb/cli/urldec.rb +1 -0
  24. data/lib/rbkb/cli/urlenc.rb +1 -0
  25. data/lib/rbkb/extends.rb +41 -6
  26. data/lib/rbkb/http.rb +20 -0
  27. data/lib/rbkb/http/base.rb +172 -0
  28. data/lib/rbkb/http/body.rb +214 -0
  29. data/lib/rbkb/http/common.rb +74 -0
  30. data/lib/rbkb/http/headers.rb +356 -0
  31. data/lib/rbkb/http/parameters.rb +101 -0
  32. data/lib/rbkb/http/request.rb +58 -0
  33. data/lib/rbkb/http/response.rb +86 -0
  34. data/lib/rbkb/plug.rb +3 -3
  35. data/lib/rbkb/plug/cli.rb +83 -0
  36. data/lib/rbkb/plug/feed_import.rb +74 -0
  37. data/lib/rbkb/plug/plug.rb +36 -19
  38. data/lib/rbkb/plug/unix_domain.rb +75 -0
  39. data/rbkb.gemspec +38 -0
  40. data/spec/rbkb_spec.rb +7 -0
  41. data/spec/spec_helper.rb +16 -0
  42. data/tasks/ann.rake +80 -0
  43. data/tasks/bones.rake +20 -0
  44. data/tasks/gem.rake +201 -0
  45. data/tasks/git.rake +40 -0
  46. data/tasks/notes.rake +27 -0
  47. data/tasks/post_load.rake +34 -0
  48. data/tasks/rdoc.rake +51 -0
  49. data/tasks/rubyforge.rake +55 -0
  50. data/tasks/setup.rb +292 -0
  51. data/tasks/spec.rake +54 -0
  52. data/tasks/svn.rake +47 -0
  53. data/tasks/test.rake +40 -0
  54. data/test/test_cli_b64.rb +35 -0
  55. data/test/test_cli_bgrep.rb +137 -0
  56. data/test/test_cli_blit.rb +11 -0
  57. data/test/test_cli_chars.rb +21 -0
  58. data/test/test_cli_crc32.rb +108 -0
  59. data/test/test_cli_d64.rb +22 -0
  60. data/test/test_cli_dedump.rb +118 -0
  61. data/test/test_cli_feed.rb +11 -0
  62. data/test/test_cli_helper.rb +96 -0
  63. data/test/test_cli_hexify.rb +63 -0
  64. data/test/test_cli_len.rb +96 -0
  65. data/test/test_cli_rstrings.rb +15 -0
  66. data/test/test_cli_slice.rb +73 -0
  67. data/test/test_cli_telson.rb +11 -0
  68. data/test/test_cli_unhexify.rb +43 -0
  69. data/test/test_cli_urldec.rb +50 -0
  70. data/test/test_cli_urlenc.rb +44 -0
  71. data/test/test_cli_xor.rb +71 -0
  72. data/test/test_helper.rb +5 -0
  73. data/test/test_http.rb +27 -0
  74. data/test/test_http_helper.rb +60 -0
  75. data/test/test_http_request.rb +136 -0
  76. data/test/test_http_response.rb +222 -0
  77. data/test/test_rbkb.rb +19 -0
  78. metadata +127 -21
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+
3
+ class TestCliFeed < Test::Unit::TestCase
4
+ include CliTest
5
+
6
+ def setup
7
+ @cli_class = Rbkb::Cli::Feed
8
+ super()
9
+ end
10
+
11
+ end
@@ -0,0 +1,96 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper.rb')
2
+ require 'rbkb/cli.rb'
3
+
4
+ Rbkb.require_all_libs_relative_to(File.dirname(__FILE__) + "/../lib/rbkb/cli.rb")
5
+
6
+ Rbkb::Cli::TESTING = true unless defined? Rbkb::Cli::TESTING
7
+
8
+ module CliTest
9
+ def setup
10
+ @stdout_io = StringIO.new
11
+ @stderr_io = StringIO.new
12
+ @stdin_io = StringIO.new
13
+ @cli_obj = @cli_class.new(
14
+ :stdout => @stdout_io,
15
+ :stderr => @stderr_io,
16
+ :stdin => @stdin_io
17
+ )
18
+ end
19
+
20
+ ## several variations on running a cli command, shouldn't matter which
21
+ ## is used, but we want to test all of them out
22
+ def go_with_args(argv=[])
23
+ catch(:exit_err) { catch(:exit_zero) { @cli_obj.go(argv) } }
24
+ end
25
+
26
+ def go_set_args(argv=[])
27
+ @cli_obj.argv = argv
28
+ catch(:exit_err) { catch(:exit_zero) { @cli_obj.go } }
29
+ end
30
+
31
+ def run_with_args(argv=[])
32
+ param = {
33
+ :stdout => @stdout_io,
34
+ :stderr => @stderr_io,
35
+ :stdin => @stdin_io,
36
+ :argv => argv
37
+ }
38
+ catch(:exit_err){ catch(:exit_zero) { @cli_class.run(param) } }
39
+ end
40
+
41
+
42
+ def with_testfile
43
+ fname = ".cli_tst_#{rand(0xffffffffffffffff).to_s(16).rjust(16,'0')}.tmp"
44
+ f=File.open(fname,"w")
45
+ begin
46
+ yield(fname.dup, f)
47
+ ensure
48
+ f.close unless f.closed?
49
+ File.delete(fname)
50
+ end
51
+ end
52
+
53
+ ### These are all basic CLI tests which every derived class should be able
54
+ ### to pass.
55
+ ### They'll be imported into individual TestCli.... suites
56
+ ### along with the standard set up convenience methods above
57
+
58
+ # Every command should print usage when -h supplied
59
+ def test_usage
60
+ assert_equal 1, go_with_args(%w(-h))
61
+ assert_match(/^Usage: /, @stderr_io.string )
62
+ end
63
+
64
+ # Every command should exit cleanly when bad arguments are specified
65
+ def test_bad_argument
66
+ assert_equal 1, go_with_args(%w(--this_is_really_redonculouslywrong))
67
+ assert_match(/Error: bad arguments/, @stderr_io.string )
68
+ end
69
+
70
+ # Every command should display version information with -v
71
+ def test_version_arg
72
+ assert_equal 0, go_with_args(%w(-v))
73
+ assert_match(/Ruby BlackBag version #{Rbkb::VERSION}/, @stdout_io.string)
74
+ end
75
+
76
+ # Every command should exit cleanly with a numeric 0/non-zero exit code
77
+ # when called without arguments.
78
+ # (and nothing on STDIN for cases when it is expected)
79
+ def test_clean_exit_with_no_arguments
80
+ @stdin_io = StringIO.new
81
+ assert( Numeric === go_with_args() )
82
+ end
83
+
84
+ # Every cli object should support the go() method with obj.argv = [...]
85
+ def test_vers_go_set_variant
86
+ assert_equal 0, go_set_args(%w(-v))
87
+ assert_match(/Ruby BlackBag version #{Rbkb::VERSION}/, @stdout_io.string)
88
+ end
89
+
90
+ # Every cli class should support the 'run([...])' method
91
+ def test_vers_class_run_variant
92
+ assert_equal 0, run_with_args(%w(-v))
93
+ assert_match(/Ruby BlackBag version #{Rbkb::VERSION}/, @stdout_io.string)
94
+ end
95
+
96
+ end
@@ -0,0 +1,63 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+ require 'rbkb/cli/hexify'
3
+
4
+ class TestCliHexify < Test::Unit::TestCase
5
+ include CliTest
6
+
7
+ def setup
8
+ @cli_class = Rbkb::Cli::Hexify
9
+ super()
10
+ end
11
+
12
+ def test_string_arg
13
+ assert_equal 0, go_with_args(%w(foo))
14
+ assert_equal("666f6f\n", @stdout_io.string)
15
+ end
16
+
17
+ def test_length_argument
18
+ assert_equal 0, go_with_args(%w(-l 1 foo))
19
+ assert_equal("66\n6f\n6f\n", @stdout_io.string)
20
+ end
21
+
22
+ def test_bad_length_arguments
23
+ assert_equal 1, go_with_args(%w(-l 0 foo))
24
+ assert_match(/must be greater than zero/, @stderr_io.string)
25
+ assert_equal 1, go_with_args(%w(-l -1 foo))
26
+ assert_match(/must be greater than zero/, @stderr_io.string)
27
+ end
28
+
29
+ def test_string_arg_with_plus
30
+ assert_equal 0, go_with_args(%w(+ foo))
31
+ assert_equal("66 6f 6f\n", @stdout_io.string)
32
+ end
33
+
34
+ def test_string_arg_with_delim
35
+ assert_equal 0, go_with_args(%w(-d : foo))
36
+ assert_equal("66:6f:6f\n", @stdout_io.string)
37
+ end
38
+
39
+ def test_string_arg_with_prefix
40
+ assert_equal 0, go_with_args(%w(-p : foo))
41
+ assert_equal(":66:6f:6f\n", @stdout_io.string)
42
+ end
43
+
44
+ def test_string_arg_with_suffix
45
+ assert_equal 0, go_with_args(%w(-s : foo))
46
+ assert_equal("66:6f:6f:\n", @stdout_io.string)
47
+ end
48
+
49
+ def test_stdin
50
+ @stdin_io.write("foo") ; @stdin_io.rewind
51
+ assert_equal 0, go_with_args
52
+ assert_equal("666f6f\n", @stdout_io.string)
53
+ end
54
+
55
+ def test_file_input
56
+ with_testfile do |fname, tf|
57
+ tf.write "hex_test_foo"; tf.close
58
+ assert_equal 0, go_with_args(["-f", fname])
59
+ assert_equal("6865785f746573745f666f6f\n", @stdout_io.string)
60
+ end
61
+ end
62
+
63
+ end
@@ -0,0 +1,96 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+ require 'rbkb/cli/len'
3
+
4
+ class TestCliLen < Test::Unit::TestCase
5
+ include CliTest
6
+
7
+ def setup
8
+ @cli_class = Rbkb::Cli::Len
9
+ super()
10
+
11
+ @tst_in = "helu world"
12
+ @bigtst_in = "A"*65536
13
+ end
14
+
15
+ def test_string_arg
16
+ assert_equal 0, go_with_args([@tst_in])
17
+ assert_equal("\x00\x00\x00\x0a" + @tst_in, @stdout_io.string)
18
+ end
19
+
20
+ def test_big_string_arg
21
+ assert_equal 0, go_with_args([@bigtst_in])
22
+ assert_equal("\x00\x01\x00\x00" + @bigtst_in, @stdout_io.string)
23
+ end
24
+
25
+ def test_stdin
26
+ @stdin_io.write(@tst_in) ; @stdin_io.rewind
27
+ assert_equal 0, go_with_args()
28
+ assert_equal("\x00\x00\x00\x0a" + @tst_in, @stdout_io.string)
29
+ end
30
+
31
+ def test_file_input_flag
32
+ with_testfile do |fname, tf|
33
+ tf.write @tst_in; tf.close
34
+ assert_equal 0, go_with_args(["-f", fname])
35
+ assert_equal("\x00\x00\x00\x0a" + @tst_in, @stdout_io.string)
36
+ end
37
+ end
38
+
39
+ def test_string_arg_swap
40
+ assert_equal 0, go_with_args(["-x", @tst_in])
41
+ assert_equal("\x0a\x00\x00\x00" + @tst_in, @stdout_io.string)
42
+ end
43
+
44
+
45
+ def test_big_string_arg_swap
46
+ assert_equal 0, go_with_args(["-x", @bigtst_in])
47
+ assert_equal("\x00\x00\x01\x00" + @bigtst_in, @stdout_io.string)
48
+ end
49
+
50
+ def test_big_string_arg_total
51
+ assert_equal 0, go_with_args(["-t", @bigtst_in])
52
+ assert_equal("\x00\x01\x00\x04" + @bigtst_in, @stdout_io.string)
53
+ end
54
+
55
+ def test_big_string_arg_static_len
56
+ assert_equal 0, go_with_args(["-l3", @bigtst_in])
57
+ assert_equal("\x00\x00\x00\x03" + @bigtst_in, @stdout_io.string)
58
+ end
59
+
60
+ def test_big_string_arg_static_len_negative
61
+ assert_equal 0, go_with_args(["-l", "-3", @bigtst_in])
62
+ assert_equal("\xff\xff\xff\xfd" + @bigtst_in, @stdout_io.string)
63
+ end
64
+
65
+ def test_big_string_arg_static_len_negative_short
66
+ assert_equal 0, go_with_args(["-l", "-3", "-s2", @bigtst_in])
67
+ assert_equal("\xff\xfd" + @bigtst_in, @stdout_io.string)
68
+ end
69
+
70
+ def test_big_string_arg_nudge
71
+ assert_equal 0, go_with_args(["-n5", @bigtst_in])
72
+ assert_equal("\x00\x01\x00\x05" + @bigtst_in, @stdout_io.string)
73
+ end
74
+
75
+ def test_big_string_arg_byte
76
+ assert_equal 0, go_with_args(["-s1", @tst_in])
77
+ assert_equal("\x0a" + @tst_in, @stdout_io.string)
78
+ end
79
+
80
+ def test_big_string_arg_byte_wrap
81
+ assert_equal 0, go_with_args(["-s1", @bigtst_in])
82
+ assert_equal("\x00" + @bigtst_in, @stdout_io.string)
83
+ end
84
+
85
+
86
+ def test_big_string_arg_short
87
+ assert_equal 0, go_with_args(["-s2", @tst_in])
88
+ assert_equal("\x00\x0a" + @tst_in, @stdout_io.string)
89
+ end
90
+
91
+ def test_big_string_arg_short_wrap
92
+ assert_equal 0, go_with_args(["-s2", @bigtst_in])
93
+ assert_equal("\x00\x00" + @bigtst_in, @stdout_io.string)
94
+ end
95
+
96
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+
3
+ # FIXME Finish test cases for rstrings cli
4
+
5
+ class TestCliRstrings < Test::Unit::TestCase
6
+ include CliTest
7
+
8
+ def setup
9
+ @cli_class = Rbkb::Cli::Rstrings
10
+ super()
11
+
12
+ @test_dat = "a\000bc\001def\002gehi\003jklmn\004string 1\005string 2\020\370\f string 3\314string4\221string 5\n\000string 6\r\n\000\000\000\000string 7\000\000w\000i\000d\000e\000s\000t\000r\000i\000n\000g\000\000\000last string\000"
13
+ end
14
+
15
+ end
@@ -0,0 +1,73 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+ require 'rbkb/cli/slice'
3
+
4
+ class TestCliSlice < Test::Unit::TestCase
5
+ include CliTest
6
+
7
+ def setup
8
+ @cli_class = Rbkb::Cli::Slice
9
+ super()
10
+ @rawdat = (0..255).map {|x| x.chr}.join
11
+ @stdin_io.write(@rawdat) ; @stdin_io.rewind
12
+ end
13
+
14
+ def test_stdin
15
+ assert_equal 0, go_with_args(%w{0})
16
+ assert_equal @rawdat, @stdout_io.string
17
+ end
18
+
19
+ def test_start_from_end_negative_size
20
+ assert_equal 0, go_with_args(%w(-- -10))
21
+ assert_equal(@rawdat[-10..-1], @stdout_io.string)
22
+ end
23
+
24
+ def test_file_input_opt
25
+ with_testfile do |fname, tf|
26
+ tf.write @rawdat; tf.close
27
+ assert_equal 0, go_with_args(["-f", fname, "0"])
28
+ assert_equal(@rawdat, @stdout_io.string)
29
+ end
30
+ end
31
+
32
+ def test_bad_start
33
+ assert_equal 1, go_with_args(%w{foo})
34
+ assert_match(/invalid start length/i, @stderr_io.string)
35
+ end
36
+
37
+ def test_start_from_end_zero
38
+ assert_equal 0, go_with_args(%w(-r 256))
39
+ assert_equal("", @stdout_io.string)
40
+ end
41
+
42
+ def test_start_from_end_one
43
+ assert_equal 0, go_with_args(%w(-r 255))
44
+ assert_equal("\xff", @stdout_io.string)
45
+ end
46
+
47
+ def test_start_from_overflow
48
+ assert_equal 0, go_with_args(%w(-r 2000))
49
+ assert_equal("", @stdout_io.string)
50
+ end
51
+
52
+ def test_range_start_end
53
+ assert_equal 0, go_with_args(%w(-r 10:20))
54
+ assert_equal(@rawdat[10..20], @stdout_io.string)
55
+ end
56
+
57
+ def test_range_start_and_end
58
+ assert_equal 0, go_with_args(%w(-r 10:20))
59
+ assert_equal(@rawdat[10..20], @stdout_io.string)
60
+ end
61
+
62
+ def test_range_start_and_end_with_negative_end
63
+ assert_equal 0, go_with_args(%w(-r 0:-20))
64
+ assert_equal(@rawdat[0..-20], @stdout_io.string)
65
+ end
66
+
67
+
68
+ def test_range_start_and_end_hex
69
+ assert_equal 0, go_with_args(%w(-x 0a:14))
70
+ assert_equal(@rawdat[10..20], @stdout_io.string)
71
+ end
72
+
73
+ end
@@ -0,0 +1,11 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+
3
+ class TestCliTelson < Test::Unit::TestCase
4
+ include CliTest
5
+
6
+ def setup
7
+ @cli_class = Rbkb::Cli::Telson
8
+ super()
9
+ end
10
+
11
+ end
@@ -0,0 +1,43 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+ require 'rbkb/cli/unhexify'
3
+
4
+ class TestCliUnhexify < Test::Unit::TestCase
5
+ include CliTest
6
+
7
+ def setup
8
+ @cli_class = Rbkb::Cli::Unhexify
9
+ super()
10
+ end
11
+
12
+ def test_string_arg
13
+ assert_equal 0, go_with_args(%w(666f6f))
14
+ assert_equal("foo", @stdout_io.string)
15
+ end
16
+
17
+ def test_string_arg_with_delim_arg
18
+ assert_equal 0, go_with_args(%w(-d : 66:6f:6f))
19
+ assert_equal("foo", @stdout_io.string)
20
+ end
21
+
22
+ def test_stdin
23
+ @stdin_io.write("666f6f") ; @stdin_io.rewind
24
+ assert_equal 0, go_with_args
25
+ assert_equal("foo", @stdout_io.string)
26
+ end
27
+
28
+ def test_stdin_with_delim_default_allchars
29
+ @stdin_io.write((0..255).map {|x| x.to_s(16)}.join(' ')); @stdin_io.rewind
30
+ assert_equal 0, go_with_args
31
+ assert_equal((0..255).map {|x| x.chr}.join, @stdout_io.string)
32
+ end
33
+
34
+
35
+ def test_file_input
36
+ with_testfile do |fname, tf|
37
+ tf.write "6865785f746573745f666f6f"; tf.close
38
+ assert_equal 0, go_with_args(["-f", fname])
39
+ assert_equal("hex_test_foo", @stdout_io.string)
40
+ end
41
+ end
42
+
43
+ end
@@ -0,0 +1,50 @@
1
+ require File.join(File.dirname(__FILE__), "test_cli_helper.rb")
2
+ require 'rbkb/cli/urldec'
3
+
4
+ class TestCliUrldec < Test::Unit::TestCase
5
+ include CliTest
6
+
7
+ def setup
8
+ @cli_class = Rbkb::Cli::Urldec
9
+ super()
10
+ end
11
+
12
+ def test_basic_string_arg
13
+ assert_equal 0, run_with_args(["foo"])
14
+ assert_equal "foo", @stdout_io.string
15
+ end
16
+
17
+ def test_basic_string_arg_with_space
18
+ assert_equal 0, run_with_args(["f%20oo"])
19
+ assert_equal "f oo", @stdout_io.string
20
+ end
21
+
22
+ def test_basic_string_arg_with_space_plus
23
+ assert_equal 0, run_with_args(["f+oo"])
24
+ assert_equal "f oo", @stdout_io.string
25
+ end
26
+
27
+ def test_basic_string_arg_with_space_plus_p_arg
28
+ assert_equal 0, run_with_args(["-p", "f+oo"])
29
+ assert_equal "f oo", @stdout_io.string
30
+ end
31
+
32
+ def test_basic_string_arg_with_space_plus_plus_arg
33
+ assert_equal 0, run_with_args(["--plus", "f+oo"])
34
+ assert_equal "f oo", @stdout_io.string
35
+ end
36
+
37
+ def test_basic_string_arg_with_space_plus_noplus_arg
38
+ assert_equal 0, run_with_args(["--no-plus", "f+oo"])
39
+ assert_equal "f+oo", @stdout_io.string
40
+ end
41
+
42
+ def test_allchars
43
+ allchars_dec = (0..255).map {|c| c.chr}.join
44
+ allchars_enc = "%00%01%02%03%04%05%06%07%08%09%0a%0b%0c%0d%0e%0f%10%11%12%13%14%15%16%17%18%19%1a%1b%1c%1d%1e%1f%20%21%22%23%24%25%26%27%28%29%2a%2b%2c-.%2f0123456789%3a%3b%3c%3d%3e%3f%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5b%5c%5d%5e_%60abcdefghijklmnopqrstuvwxyz%7b%7c%7d~%7f%80%81%82%83%84%85%86%87%88%89%8a%8b%8c%8d%8e%8f%90%91%92%93%94%95%96%97%98%99%9a%9b%9c%9d%9e%9f%a0%a1%a2%a3%a4%a5%a6%a7%a8%a9%aa%ab%ac%ad%ae%af%b0%b1%b2%b3%b4%b5%b6%b7%b8%b9%ba%bb%bc%bd%be%bf%c0%c1%c2%c3%c4%c5%c6%c7%c8%c9%ca%cb%cc%cd%ce%cf%d0%d1%d2%d3%d4%d5%d6%d7%d8%d9%da%db%dc%dd%de%df%e0%e1%e2%e3%e4%e5%e6%e7%e8%e9%ea%eb%ec%ed%ee%ef%f0%f1%f2%f3%f4%f5%f6%f7%f8%f9%fa%fb%fc%fd%fe%ff"
45
+ assert_equal 0, run_with_args([allchars_enc])
46
+ assert_equal allchars_dec, @stdout_io.string
47
+ end
48
+
49
+
50
+ end