ronin-support 0.5.1 → 0.5.2
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.
- checksums.yaml +7 -0
- data/.editorconfig +11 -0
- data/.github/workflows/ruby.yml +28 -0
- data/.ruby-version +1 -0
- data/.yardopts +1 -1
- data/ChangeLog.md +28 -0
- data/Gemfile +6 -7
- data/README.md +53 -32
- data/Rakefile +1 -2
- data/gemspec.yml +16 -7
- data/lib/ronin/binary.rb +5 -5
- data/lib/ronin/binary/hexdump.rb +5 -5
- data/lib/ronin/binary/hexdump/parser.rb +5 -5
- data/lib/ronin/binary/struct.rb +5 -5
- data/lib/ronin/binary/template.rb +7 -7
- data/lib/ronin/extensions.rb +5 -5
- data/lib/ronin/extensions/enumerable.rb +5 -5
- data/lib/ronin/extensions/file.rb +37 -31
- data/lib/ronin/extensions/ip_addr.rb +6 -7
- data/lib/ronin/extensions/kernel.rb +5 -5
- data/lib/ronin/extensions/meta.rb +5 -5
- data/lib/ronin/extensions/regexp.rb +5 -5
- data/lib/ronin/extensions/resolv.rb +5 -5
- data/lib/ronin/extensions/string.rb +5 -5
- data/lib/ronin/formatting.rb +5 -5
- data/lib/ronin/formatting/binary.rb +5 -5
- data/lib/ronin/formatting/digest.rb +5 -5
- data/lib/ronin/formatting/extensions.rb +5 -5
- data/lib/ronin/formatting/extensions/binary.rb +5 -5
- data/lib/ronin/formatting/extensions/binary/array.rb +6 -6
- data/lib/ronin/formatting/extensions/binary/base64.rb +5 -5
- data/lib/ronin/formatting/extensions/binary/file.rb +5 -5
- data/lib/ronin/formatting/extensions/binary/float.rb +6 -6
- data/lib/ronin/formatting/extensions/binary/integer.rb +6 -6
- data/lib/ronin/formatting/extensions/binary/string.rb +6 -6
- data/lib/ronin/formatting/extensions/digest.rb +5 -5
- data/lib/ronin/formatting/extensions/digest/file.rb +5 -5
- data/lib/ronin/formatting/extensions/digest/string.rb +5 -5
- data/lib/ronin/formatting/extensions/html.rb +5 -5
- data/lib/ronin/formatting/extensions/html/integer.rb +5 -5
- data/lib/ronin/formatting/extensions/html/string.rb +7 -7
- data/lib/ronin/formatting/extensions/http.rb +5 -5
- data/lib/ronin/formatting/extensions/http/integer.rb +6 -6
- data/lib/ronin/formatting/extensions/http/string.rb +7 -7
- data/lib/ronin/formatting/extensions/sql.rb +5 -5
- data/lib/ronin/formatting/extensions/sql/string.rb +15 -13
- data/lib/ronin/formatting/extensions/text.rb +5 -5
- data/lib/ronin/formatting/extensions/text/array.rb +5 -5
- data/lib/ronin/formatting/extensions/text/string.rb +5 -5
- data/lib/ronin/formatting/html.rb +5 -5
- data/lib/ronin/formatting/http.rb +5 -5
- data/lib/ronin/formatting/sql.rb +5 -5
- data/lib/ronin/formatting/text.rb +5 -5
- data/lib/ronin/fuzzing.rb +5 -5
- data/lib/ronin/fuzzing/extensions.rb +5 -5
- data/lib/ronin/fuzzing/extensions/string.rb +5 -5
- data/lib/ronin/fuzzing/fuzzer.rb +5 -5
- data/lib/ronin/fuzzing/fuzzing.rb +7 -7
- data/lib/ronin/fuzzing/mutator.rb +5 -5
- data/lib/ronin/fuzzing/repeater.rb +5 -5
- data/lib/ronin/fuzzing/template.rb +5 -5
- data/lib/ronin/mixin.rb +2 -2
- data/lib/ronin/network.rb +5 -5
- data/lib/ronin/network/dns.rb +5 -5
- data/lib/ronin/network/esmtp.rb +5 -5
- data/lib/ronin/network/extensions.rb +5 -5
- data/lib/ronin/network/extensions/dns.rb +5 -5
- data/lib/ronin/network/extensions/dns/net.rb +5 -5
- data/lib/ronin/network/extensions/esmtp.rb +5 -5
- data/lib/ronin/network/extensions/esmtp/net.rb +5 -5
- data/lib/ronin/network/extensions/http.rb +5 -5
- data/lib/ronin/network/extensions/http/net.rb +5 -5
- data/lib/ronin/network/extensions/http/uri/http.rb +5 -5
- data/lib/ronin/network/extensions/imap.rb +5 -5
- data/lib/ronin/network/extensions/imap/net.rb +5 -5
- data/lib/ronin/network/extensions/pop3.rb +5 -5
- data/lib/ronin/network/extensions/pop3/net.rb +5 -5
- data/lib/ronin/network/extensions/smtp.rb +5 -5
- data/lib/ronin/network/extensions/smtp/net.rb +5 -5
- data/lib/ronin/network/extensions/ssl.rb +5 -5
- data/lib/ronin/network/extensions/ssl/net.rb +5 -5
- data/lib/ronin/network/extensions/tcp.rb +5 -5
- data/lib/ronin/network/extensions/tcp/net.rb +5 -5
- data/lib/ronin/network/extensions/telnet.rb +5 -5
- data/lib/ronin/network/extensions/telnet/net.rb +5 -5
- data/lib/ronin/network/extensions/udp.rb +5 -5
- data/lib/ronin/network/extensions/udp/net.rb +5 -5
- data/lib/ronin/network/ftp.rb +5 -5
- data/lib/ronin/network/http.rb +5 -5
- data/lib/ronin/network/http/exceptions.rb +5 -5
- data/lib/ronin/network/http/exceptions/unknown_request.rb +5 -5
- data/lib/ronin/network/http/http.rb +52 -57
- data/lib/ronin/network/http/proxy.rb +5 -5
- data/lib/ronin/network/imap.rb +5 -5
- data/lib/ronin/network/mixins.rb +5 -5
- data/lib/ronin/network/mixins/dns.rb +5 -5
- data/lib/ronin/network/mixins/esmtp.rb +5 -5
- data/lib/ronin/network/mixins/ftp.rb +5 -5
- data/lib/ronin/network/mixins/http.rb +7 -7
- data/lib/ronin/network/mixins/imap.rb +5 -5
- data/lib/ronin/network/mixins/mixin.rb +5 -5
- data/lib/ronin/network/mixins/pop3.rb +5 -5
- data/lib/ronin/network/mixins/smtp.rb +5 -5
- data/lib/ronin/network/mixins/ssl.rb +5 -5
- data/lib/ronin/network/mixins/tcp.rb +5 -5
- data/lib/ronin/network/mixins/telnet.rb +5 -5
- data/lib/ronin/network/mixins/udp.rb +5 -5
- data/lib/ronin/network/mixins/unix.rb +5 -5
- data/lib/ronin/network/network.rb +5 -5
- data/lib/ronin/network/pop3.rb +5 -5
- data/lib/ronin/network/proxy.rb +5 -5
- data/lib/ronin/network/smtp.rb +5 -5
- data/lib/ronin/network/smtp/email.rb +6 -6
- data/lib/ronin/network/smtp/smtp.rb +5 -5
- data/lib/ronin/network/ssl.rb +7 -7
- data/lib/ronin/network/tcp.rb +5 -5
- data/lib/ronin/network/tcp/proxy.rb +5 -5
- data/lib/ronin/network/tcp/tcp.rb +32 -23
- data/lib/ronin/network/telnet.rb +7 -5
- data/lib/ronin/network/udp.rb +5 -5
- data/lib/ronin/network/udp/proxy.rb +5 -5
- data/lib/ronin/network/udp/udp.rb +28 -26
- data/lib/ronin/network/unix.rb +7 -7
- data/lib/ronin/path.rb +32 -36
- data/lib/ronin/spec/ui/output.rb +5 -5
- data/lib/ronin/support.rb +5 -5
- data/lib/ronin/support/inflector.rb +5 -5
- data/lib/ronin/support/support.rb +5 -5
- data/lib/ronin/support/version.rb +6 -6
- data/lib/ronin/templates.rb +5 -5
- data/lib/ronin/templates/erb.rb +5 -5
- data/lib/ronin/templates/template.rb +5 -5
- data/lib/ronin/ui/output.rb +5 -5
- data/lib/ronin/ui/output/helpers.rb +5 -5
- data/lib/ronin/ui/output/output.rb +17 -21
- data/lib/ronin/ui/output/terminal.rb +5 -5
- data/lib/ronin/ui/output/terminal/color.rb +5 -5
- data/lib/ronin/ui/output/terminal/raw.rb +5 -5
- data/lib/ronin/ui/shell.rb +5 -5
- data/lib/ronin/wordlist.rb +7 -7
- data/ronin-support.gemspec +1 -0
- data/spec/binary/hexdump/parser_spec.rb +22 -22
- data/spec/binary/struct_spec.rb +56 -56
- data/spec/binary/template_spec.rb +106 -104
- data/spec/extensions/enumerable_spec.rb +4 -4
- data/spec/extensions/file_spec.rb +12 -14
- data/spec/extensions/ip_addr_spec.rb +30 -30
- data/spec/extensions/kernel_spec.rb +7 -7
- data/spec/extensions/regexp_spec.rb +69 -69
- data/spec/extensions/resolv_spec.rb +2 -2
- data/spec/extensions/string_spec.rb +30 -29
- data/spec/formatting/binary/array_spec.rb +2 -2
- data/spec/formatting/binary/base64_spec.rb +8 -8
- data/spec/formatting/binary/float_spec.rb +6 -4
- data/spec/formatting/binary/integer_spec.rb +25 -25
- data/spec/formatting/binary/string_spec.rb +32 -30
- data/spec/formatting/digest/string_spec.rb +5 -5
- data/spec/formatting/html/integer_spec.rb +6 -6
- data/spec/formatting/html/string_spec.rb +10 -10
- data/spec/formatting/http/integer_spec.rb +3 -3
- data/spec/formatting/http/string_spec.rb +5 -5
- data/spec/formatting/sql/string_spec.rb +21 -19
- data/spec/formatting/text/array_spec.rb +15 -15
- data/spec/formatting/text/string_spec.rb +33 -33
- data/spec/fuzzing/extensions/string_spec.rb +11 -11
- data/spec/fuzzing/fuzzer_spec.rb +15 -15
- data/spec/fuzzing/fuzzing_spec.rb +5 -5
- data/spec/fuzzing/mutator_spec.rb +15 -15
- data/spec/fuzzing/repeater_spec.rb +7 -7
- data/spec/fuzzing/template_spec.rb +11 -11
- data/spec/mixin_spec.rb +10 -12
- data/spec/network/dns_spec.rb +34 -32
- data/spec/network/ftp_spec.rb +9 -9
- data/spec/network/http/http_spec.rb +237 -144
- data/spec/network/http/proxy_spec.rb +37 -37
- data/spec/network/network_spec.rb +1 -1
- data/spec/network/proxy_spec.rb +19 -19
- data/spec/network/smtp/email_spec.rb +14 -14
- data/spec/network/ssl_spec.rb +9 -9
- data/spec/network/tcp/proxy_spec.rb +9 -7
- data/spec/network/tcp/tcp_spec.rb +161 -118
- data/spec/network/telnet_spec.rb +5 -5
- data/spec/network/udp/udp_spec.rb +123 -96
- data/spec/network/unix_spec.rb +24 -25
- data/spec/path_spec.rb +43 -18
- data/spec/spec_helper.rb +0 -1
- data/spec/support/inflector_spec.rb +4 -4
- data/spec/support_spec.rb +1 -1
- data/spec/templates/erb_spec.rb +3 -3
- data/spec/templates/template_spec.rb +10 -10
- data/spec/ui/shell_spec.rb +15 -15
- data/spec/wordlist_spec.rb +19 -19
- metadata +408 -366
- data/.gemtest +0 -0
data/spec/path_spec.rb
CHANGED
@@ -7,45 +7,52 @@ describe Path do
|
|
7
7
|
let(:n) { 7 }
|
8
8
|
|
9
9
|
it "should inherit from Pathname" do
|
10
|
-
subject.superclass.
|
10
|
+
expect(subject.superclass).to eq(Pathname)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
describe "#initialize" do
|
14
|
+
it "should accept a separator argument" do
|
15
|
+
path = described_class.new('foo',"\\")
|
15
16
|
|
16
|
-
|
17
|
-
|
17
|
+
expect(path.separator).to eq("\\")
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should default the separator to File::SEPARATOR" do
|
21
|
+
path = described_class.new('foo')
|
22
|
+
|
23
|
+
expect(path.separator).to eq(File::SEPARATOR)
|
24
|
+
end
|
18
25
|
end
|
19
26
|
|
20
27
|
describe "up" do
|
21
28
|
it "should be able to traverse up 0 directories" do
|
22
|
-
subject.up(0).
|
29
|
+
expect(subject.up(0)).to eq(File::SEPARATOR)
|
23
30
|
end
|
24
31
|
|
25
32
|
it "should raise an ArgumentError when not passed an Integer or Enumerable" do
|
26
|
-
|
33
|
+
expect {
|
27
34
|
subject.up(1.5)
|
28
|
-
}.
|
35
|
+
}.to raise_error(ArgumentError)
|
29
36
|
end
|
30
37
|
|
31
38
|
it "should raise an ArgumentError on negative number of directories" do
|
32
|
-
|
39
|
+
expect {
|
33
40
|
subject.up(-1)
|
34
|
-
}.
|
41
|
+
}.to raise_error(ArgumentError)
|
35
42
|
end
|
36
43
|
|
37
44
|
it "should create directory-escaping paths" do
|
38
|
-
subject.up(n).to_s.
|
45
|
+
expect(subject.up(n).to_s).to eq((['..'] * n).join(File::SEPARATOR))
|
39
46
|
end
|
40
47
|
|
41
48
|
it "should create a range of directory-escaping paths" do
|
42
49
|
range = 7..10
|
43
50
|
|
44
|
-
subject.up(range).
|
51
|
+
expect(subject.up(range)).to eq(range.map { |i| Path.up(i) })
|
45
52
|
end
|
46
53
|
|
47
54
|
it "should allow using custom path separators" do
|
48
|
-
subject.up(n,'\\').to_s.
|
55
|
+
expect(subject.up(n,'\\').to_s).to eq((['..'] * n).join("\\"))
|
49
56
|
end
|
50
57
|
end
|
51
58
|
|
@@ -56,31 +63,49 @@ describe Path do
|
|
56
63
|
sub_path = File.join('one','two')
|
57
64
|
expected = [subject, sub_path].join(File::SEPARATOR)
|
58
65
|
|
59
|
-
subject.join(sub_path).to_s.
|
66
|
+
expect(subject.join(sub_path).to_s).to eq(expected)
|
60
67
|
end
|
61
68
|
|
62
69
|
it "should join with a sub-directory" do
|
63
70
|
sub_directory = 'three'
|
64
71
|
expected = [subject, sub_directory].join(File::SEPARATOR)
|
65
72
|
|
66
|
-
subject.join(sub_directory).to_s.
|
73
|
+
expect(subject.join(sub_directory).to_s).to eq(expected)
|
67
74
|
end
|
68
75
|
|
69
76
|
it "should not collapse directory traversals" do
|
70
77
|
traversal = Path.up(n)
|
71
78
|
expected = [subject, traversal].join(File::SEPARATOR)
|
72
79
|
|
73
|
-
subject.join(traversal).to_s.
|
80
|
+
expect(subject.join(traversal).to_s).to eq(expected)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should filter out leading directory separators" do
|
84
|
+
expected = [subject, 'sub'].join(File::SEPARATOR)
|
85
|
+
|
86
|
+
expect(subject.join('/','sub','/').to_s).to eq(expected)
|
74
87
|
end
|
75
88
|
|
76
89
|
it "should filter out extra directory separators" do
|
77
90
|
expected = [subject, 'sub'].join(File::SEPARATOR)
|
78
91
|
|
79
|
-
subject.join('/
|
92
|
+
expect(subject.join('/sub').to_s).to eq(expected)
|
80
93
|
end
|
81
94
|
|
82
95
|
it "should join with the root path" do
|
83
|
-
Path.root.join('etc','passwd').to_s.
|
96
|
+
expect(Path.root.join('etc','passwd').to_s).to eq('/etc/passwd')
|
97
|
+
end
|
98
|
+
|
99
|
+
context "with a custom path seperator" do
|
100
|
+
let(:separator) { "\\" }
|
101
|
+
|
102
|
+
subject { described_class.new('foo',separator) }
|
103
|
+
|
104
|
+
it "should pass the path separator to the new path" do
|
105
|
+
new_path = subject.join('bar','baz')
|
106
|
+
|
107
|
+
expect(new_path.separator).to eq(separator)
|
108
|
+
end
|
84
109
|
end
|
85
110
|
end
|
86
111
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -5,18 +5,18 @@ describe "Ronin::Support::Inflector" do
|
|
5
5
|
subject { Ronin::Support::Inflector }
|
6
6
|
|
7
7
|
it "should not be nil" do
|
8
|
-
subject.
|
8
|
+
expect(subject).not_to be_nil
|
9
9
|
end
|
10
10
|
|
11
11
|
it "should support pluralizing words" do
|
12
|
-
subject.pluralize('word').
|
12
|
+
expect(subject.pluralize('word')).to eq('words')
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should support singularizing words" do
|
16
|
-
subject.singularize('words').
|
16
|
+
expect(subject.singularize('words')).to eq('word')
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should support humanizing words" do
|
20
|
-
subject.humanize('word_id').
|
20
|
+
expect(subject.humanize('word_id')).to eq('Word')
|
21
21
|
end
|
22
22
|
end
|
data/spec/support_spec.rb
CHANGED
data/spec/templates/erb_spec.rb
CHANGED
@@ -6,16 +6,16 @@ require 'templates/classes/example_erb'
|
|
6
6
|
describe Templates::Erb do
|
7
7
|
subject { ExampleErb.new }
|
8
8
|
|
9
|
-
before
|
9
|
+
before do
|
10
10
|
subject.x = 2
|
11
11
|
subject.y = 3
|
12
12
|
end
|
13
13
|
|
14
14
|
it "should render inline ERB templates" do
|
15
|
-
subject.erb(%{<%= 'hello' %>}).
|
15
|
+
expect(subject.erb(%{<%= 'hello' %>})).to eq('hello')
|
16
16
|
end
|
17
17
|
|
18
18
|
it "should render ERB templates using the binding of the object" do
|
19
|
-
subject.erb(%{<%= @x %> <%= @y %>}).
|
19
|
+
expect(subject.erb(%{<%= @x %> <%= @y %>})).to eq('2 3')
|
20
20
|
end
|
21
21
|
end
|
@@ -11,44 +11,44 @@ describe Templates::Template do
|
|
11
11
|
subject { ExampleTemplate.new }
|
12
12
|
|
13
13
|
it "should return the result of the block when entering a template" do
|
14
|
-
subject.enter_example_template { |path|
|
14
|
+
expect(subject.enter_example_template { |path|
|
15
15
|
'result'
|
16
|
-
}.
|
16
|
+
}).to eq('result')
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should be able to find templates relative to the current one" do
|
20
20
|
subject.enter_example_template do |path|
|
21
|
-
path.
|
21
|
+
expect(path).to eq(example_template)
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
it "should be able to find static templates" do
|
26
26
|
subject.enter_relative_template do |path|
|
27
|
-
path.
|
27
|
+
expect(path).to eq(relative_template)
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
it "should raise a RuntimeError when entering an unknown template" do
|
32
|
-
|
32
|
+
expect {
|
33
33
|
subject.enter_missing_template { |path| }
|
34
|
-
}.
|
34
|
+
}.to raise_error(RuntimeError)
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should be able to read templates relative to the current one" do
|
38
38
|
subject.read_example_template do |contents|
|
39
|
-
contents.
|
39
|
+
expect(contents).to eq(File.read(example_template))
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
43
|
it "should be able to find static templates" do
|
44
44
|
subject.read_relative_template do |contents|
|
45
|
-
contents.
|
45
|
+
expect(contents).to eq(File.read(relative_template))
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should raise a RuntimeError when entering an unknown template" do
|
50
|
-
|
50
|
+
expect {
|
51
51
|
subject.read_missing_template { |path| }
|
52
|
-
}.
|
52
|
+
}.to raise_error(RuntimeError)
|
53
53
|
end
|
54
54
|
end
|
data/spec/ui/shell_spec.rb
CHANGED
@@ -13,7 +13,7 @@ describe UI::Shell do
|
|
13
13
|
|
14
14
|
shell.call(line)
|
15
15
|
|
16
|
-
lines.
|
16
|
+
expect(lines).to eq([line])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -22,11 +22,11 @@ describe UI::Shell do
|
|
22
22
|
|
23
23
|
describe "#commands" do
|
24
24
|
it "should include builtin methods" do
|
25
|
-
subject.commands.
|
25
|
+
expect(subject.commands).to include('help', 'exit')
|
26
26
|
end
|
27
27
|
|
28
28
|
it "should include protected methods" do
|
29
|
-
subject.commands.
|
29
|
+
expect(subject.commands).to include(
|
30
30
|
'command1',
|
31
31
|
'command_with_arg',
|
32
32
|
'command_with_args'
|
@@ -34,49 +34,49 @@ describe UI::Shell do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should not include public methods" do
|
37
|
-
subject.commands.
|
37
|
+
expect(subject.commands).not_to include('a_public_method')
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
describe "#call" do
|
42
42
|
it "should ignore empty lines" do
|
43
|
-
subject.call('').
|
43
|
+
expect(subject.call('')).to be(false)
|
44
44
|
end
|
45
45
|
|
46
46
|
it "should ignore white-space lines" do
|
47
|
-
subject.call(" \t ").
|
47
|
+
expect(subject.call(" \t ")).to be(false)
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should not allow calling the handler method" do
|
51
|
-
subject.call('handler').
|
51
|
+
expect(subject.call('handler')).to be(false)
|
52
52
|
end
|
53
53
|
|
54
54
|
it "should not allow calling unknown commands" do
|
55
|
-
subject.call('an_unknown_command').
|
55
|
+
expect(subject.call('an_unknown_command')).to be(false)
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should not allow calling unknown commands" do
|
59
|
-
subject.call('an_unknown_command').
|
59
|
+
expect(subject.call('an_unknown_command')).to be(false)
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should not allow calling public methods" do
|
63
|
-
subject.call('a_public_method').
|
63
|
+
expect(subject.call('a_public_method')).to be(false)
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should allow calling protected methods" do
|
67
|
-
subject.call('command1').
|
67
|
+
expect(subject.call('command1')).to eq(:command1)
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should raise an exception when passing invalid number of arguments" do
|
71
|
-
|
71
|
+
expect {
|
72
72
|
subject.call('command_with_arg too many args')
|
73
|
-
}.
|
73
|
+
}.to raise_error(ArgumentError)
|
74
74
|
end
|
75
75
|
|
76
76
|
it "should splat the command arguments to the command method" do
|
77
|
-
subject.call('command_with_args one two three').
|
77
|
+
expect(subject.call('command_with_args one two three')).to eq([
|
78
78
|
'one', 'two', 'three'
|
79
|
-
]
|
79
|
+
])
|
80
80
|
end
|
81
81
|
end
|
82
82
|
end
|
data/spec/wordlist_spec.rb
CHANGED
@@ -7,7 +7,7 @@ describe Wordlist do
|
|
7
7
|
let(:words) { %w[foo bar baz] }
|
8
8
|
let(:path) { File.join(Dir.tmpdir,'ronin-support-wordlist') }
|
9
9
|
|
10
|
-
before
|
10
|
+
before do
|
11
11
|
File.open(path,'w') do |file|
|
12
12
|
file.puts(*words)
|
13
13
|
end
|
@@ -36,7 +36,7 @@ describe Wordlist do
|
|
36
36
|
|
37
37
|
subject.parse(text) { |word| seen << word }
|
38
38
|
|
39
|
-
seen.
|
39
|
+
expect(seen).to match_array(words)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
@@ -47,7 +47,7 @@ describe Wordlist do
|
|
47
47
|
it "should return the new Wordlist object" do
|
48
48
|
wordlist = described_class.create(created_path,text)
|
49
49
|
|
50
|
-
wordlist.to_a.
|
50
|
+
expect(wordlist.to_a).to match_array(words)
|
51
51
|
end
|
52
52
|
|
53
53
|
it "should create a wordlist file from text" do
|
@@ -55,7 +55,7 @@ describe Wordlist do
|
|
55
55
|
|
56
56
|
saved_words = File.open(created_path).each_line.map(&:chomp)
|
57
57
|
|
58
|
-
saved_words.
|
58
|
+
expect(saved_words).to match_array(words)
|
59
59
|
end
|
60
60
|
|
61
61
|
it "should apply mutations to the created wordlist" do
|
@@ -63,29 +63,29 @@ describe Wordlist do
|
|
63
63
|
|
64
64
|
saved_words = File.open(created_path).each_line.map(&:chomp)
|
65
65
|
|
66
|
-
saved_words.
|
66
|
+
expect(saved_words).to match_array(%w[foo f0o fo0 f00 bar baz])
|
67
67
|
end
|
68
68
|
|
69
|
-
after
|
69
|
+
after { FileUtils.rm(created_path) }
|
70
70
|
end
|
71
71
|
|
72
72
|
describe "#initialize" do
|
73
73
|
it "should accept a list of words" do
|
74
74
|
wordlist = described_class.new(path)
|
75
75
|
|
76
|
-
wordlist.to_a.
|
76
|
+
expect(wordlist.to_a).to eq(words)
|
77
77
|
end
|
78
78
|
|
79
79
|
it "should accept a path to a wordlist file" do
|
80
80
|
wordlist = described_class.new(path)
|
81
81
|
|
82
|
-
wordlist.to_a.
|
82
|
+
expect(wordlist.to_a).to eq(words)
|
83
83
|
end
|
84
84
|
|
85
85
|
it "should raise a TypeError for non-String / non-Enumerable objects" do
|
86
|
-
|
86
|
+
expect {
|
87
87
|
described_class.new(Object.new)
|
88
|
-
}.
|
88
|
+
}.to raise_error(TypeError)
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
@@ -94,7 +94,7 @@ describe Wordlist do
|
|
94
94
|
subject { described_class.new(path) }
|
95
95
|
|
96
96
|
it "should enumerate over the words" do
|
97
|
-
subject.each_word.to_a.
|
97
|
+
expect(subject.each_word.to_a).to eq(words)
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -102,7 +102,7 @@ describe Wordlist do
|
|
102
102
|
subject { described_class.new(words) }
|
103
103
|
|
104
104
|
it "should enumerate over the words" do
|
105
|
-
subject.each_word.to_a.
|
105
|
+
expect(subject.each_word.to_a).to eq(words)
|
106
106
|
end
|
107
107
|
end
|
108
108
|
end
|
@@ -111,24 +111,24 @@ describe Wordlist do
|
|
111
111
|
it "should rewind file lists" do
|
112
112
|
subject.each { |word| }
|
113
113
|
|
114
|
-
subject.to_a.
|
114
|
+
expect(subject.to_a).to eq(words)
|
115
115
|
end
|
116
116
|
|
117
117
|
it "should apply additional mutation rules" do
|
118
118
|
wordlist = described_class.new(words)
|
119
119
|
wordlist.mutations['o'] = ['0']
|
120
120
|
|
121
|
-
wordlist.to_a.
|
121
|
+
expect(wordlist.to_a).to match_array(%w[foo f0o fo0 f00 bar baz])
|
122
122
|
end
|
123
123
|
end
|
124
124
|
|
125
125
|
describe "#each_n_words" do
|
126
126
|
it "should enumerate over every combination of N words" do
|
127
|
-
subject.each_n_words(2).to_a.
|
127
|
+
expect(subject.each_n_words(2).to_a).to eq(%w[
|
128
128
|
foofoo foobar foobaz
|
129
129
|
barfoo barbar barbaz
|
130
130
|
bazfoo bazbar bazbaz
|
131
|
-
]
|
131
|
+
])
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
@@ -141,11 +141,11 @@ describe Wordlist do
|
|
141
141
|
saved_words = File.open(saved_path).each_line.map(&:chomp)
|
142
142
|
expected_words = subject.to_a
|
143
143
|
|
144
|
-
saved_words.
|
144
|
+
expect(saved_words).to eq(expected_words)
|
145
145
|
end
|
146
146
|
|
147
|
-
after
|
147
|
+
after { FileUtils.rm(saved_path) }
|
148
148
|
end
|
149
149
|
|
150
|
-
after
|
150
|
+
after { FileUtils.rm(path) }
|
151
151
|
end
|