ronin-support 0.5.1 → 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|