tools 0.4.5 → 0.4.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +11 -0
- data/Gemfile +1 -1
- data/Rakefile +9 -15
- data/aux2 +1 -5
- data/bin/tools +29 -37
- data/lib/files/requireds.rb +0 -2
- data/lib/lib/array.rb +45 -65
- data/lib/lib/cache.rb +11 -18
- data/lib/lib/config.rb +47 -76
- data/lib/lib/console.rb +92 -108
- data/lib/lib/display.rb +10 -29
- data/lib/lib/files.rb +26 -44
- data/lib/lib/hash.rb +21 -22
- data/lib/lib/log.rb +28 -32
- data/lib/lib/net.rb +58 -80
- data/lib/lib/object.rb +8 -7
- data/lib/lib/prompt.rb +24 -26
- data/lib/lib/string.rb +15 -15
- data/lib/lib/utils.rb +90 -66
- data/lib/tools.rb +3 -8
- data/lib/tools/version.rb +2 -2
- data/test/mini_array.rb +7 -12
- data/test/mini_cache.rb +9 -12
- data/test/mini_config.rb +21 -12
- data/test/mini_console.rb +6 -8
- data/test/mini_display.rb +6 -9
- data/test/mini_file.rb +20 -24
- data/test/mini_hash.rb +27 -38
- data/test/mini_log.rb +2 -4
- data/test/mini_net.rb +167 -185
- data/test/mini_object.rb +16 -21
- data/test/mini_prompt.rb +28 -16
- data/test/mini_string.rb +11 -14
- data/test/mini_utils.rb +13 -16
- data/test/run +9 -9
- data/tools.gemspec +12 -14
- metadata +35 -20
data/lib/tools/version.rb
CHANGED
data/test/mini_array.rb
CHANGED
@@ -1,19 +1,18 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
6
5
|
|
7
6
|
def test_hash_A_extract_first
|
8
|
-
assert_equal [
|
7
|
+
assert_equal %w[a b c].extract_first, 'a'
|
9
8
|
end
|
10
9
|
|
11
10
|
def test_hash_B_extract_first
|
12
|
-
assert_equal
|
11
|
+
assert_equal (['a', :color, 'c'].extract_symbol :color), true
|
13
12
|
end
|
14
13
|
|
15
14
|
def test_hash_C_extract_color
|
16
|
-
args = ['xxx', '-x', '-vvv', :yellow, '-c', '-vcv', '-v2', '-vvvvv', '-s', :json,
|
15
|
+
args = ['xxx', '-x', '-vvv', :yellow, '-c', '-vcv', '-v2', '-vvvvv', '-s', :json, :red, :json]
|
17
16
|
yellow = args.extract_color
|
18
17
|
color = args.extract_color
|
19
18
|
assert_equal yellow, :yellow
|
@@ -21,7 +20,7 @@ class ToolsModuleTest < Minitest::Test
|
|
21
20
|
end
|
22
21
|
|
23
22
|
def test_hash_D_extract_option
|
24
|
-
args = ['xxx', '-x', '-vvv', :yellow, ':red','-c', '-vcv', '-v2', '-vvvvv', '-s', :json,
|
23
|
+
args = ['xxx', '-x', '-vvv', :yellow, ':red', '-c', '-vcv', '-v2', '-vvvvv', '-s', :json, :red, :json]
|
25
24
|
yellow = args.extract_color
|
26
25
|
red1 = args.extract_color
|
27
26
|
red2 = args.extract_color
|
@@ -38,16 +37,12 @@ class ToolsModuleTest < Minitest::Test
|
|
38
37
|
end
|
39
38
|
|
40
39
|
def test_hash_D_extract_option_value
|
41
|
-
args
|
40
|
+
args = ['-o', 'um', '-o', 'dois', '--desc', 'description', '-v', '-v', '-o', 'tres', '-s', :json, :red, :json]
|
42
41
|
desc_status, desc = args.extract_option_value '--desc'
|
43
|
-
status, origin = args.extract_option_value '-o',
|
42
|
+
status, origin = args.extract_option_value '-o', multiple: true
|
44
43
|
assert_equal desc_status, true
|
45
44
|
assert_equal desc, 'description'
|
46
45
|
assert_equal status, true
|
47
|
-
assert_equal origin, [
|
46
|
+
assert_equal origin, %w[um um dois dois tres tres]
|
48
47
|
end
|
49
|
-
|
50
|
-
|
51
48
|
end
|
52
|
-
|
53
|
-
|
data/test/mini_cache.rb
CHANGED
@@ -1,28 +1,25 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
6
5
|
|
7
6
|
def test_cache_A_all_operators
|
8
7
|
ToolsFiles.remove_file '/home/francisco/2018/xykotools/tools/teste-persistent.cache'
|
9
|
-
ToolsCache.create_cache_file 'tools',
|
8
|
+
ToolsCache.create_cache_file 'tools', (File.dirname __dir__) + '/teste-persistent.cache', 60
|
10
9
|
assert_equal ToolsCache.tools_list, {}
|
11
10
|
ToolsCache.tools_set :k1, 100
|
12
|
-
assert_equal ToolsCache.tools_list,
|
11
|
+
assert_equal ToolsCache.tools_list, k1: 100
|
13
12
|
ToolsCache.tools_unset :k1
|
14
13
|
assert_equal ToolsCache.tools_list, {}
|
15
|
-
ToolsCache.tools_set :k2,
|
16
|
-
ToolsCache.tools_set :k2,
|
14
|
+
ToolsCache.tools_set :k2, i: 100, j: 200
|
15
|
+
ToolsCache.tools_set :k2, l: 100, m: 200
|
17
16
|
ToolsCache.tools_set :k3, []
|
18
|
-
ToolsCache.tools_set :k3, [1,2,3]
|
19
|
-
ToolsCache.tools_set :k3, [4, [
|
20
|
-
assert_equal (ToolsCache.tools_get :k3), [1,2,3,4,[
|
21
|
-
assert_equal (ToolsCache.tools_get :k2),
|
17
|
+
ToolsCache.tools_set :k3, [1, 2, 3]
|
18
|
+
ToolsCache.tools_set :k3, [4, %w[a b]]
|
19
|
+
assert_equal (ToolsCache.tools_get :k3), [1, 2, 3, 4, %w[a b]]
|
20
|
+
assert_equal (ToolsCache.tools_get :k2), i: 100, j: 200, l: 100, m: 200
|
22
21
|
ToolsCache.tools_clear
|
23
22
|
assert_equal ToolsCache.tools_list, {}
|
24
23
|
ToolsFiles.remove_file '/home/francisco/2018/xykotools/tools/teste-persistent.cache'
|
25
24
|
end
|
26
|
-
|
27
|
-
|
28
|
-
end
|
25
|
+
end
|
data/test/mini_config.rb
CHANGED
@@ -1,28 +1,37 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
6
5
|
|
7
|
-
def
|
8
|
-
|
6
|
+
def test_config_A_before
|
9
7
|
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_yaml.config'
|
10
8
|
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_json.config'
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_config_B_create
|
12
|
+
ToolsConfig.create_config_file 'tools_yaml', (File.dirname __dir__) + '/tools_yaml.config', :yaml, first_time: true
|
13
|
+
ToolsConfig.create_config_file 'tools_json', (File.dirname __dir__) + '/tools_json.config', :json, first_time: true
|
14
|
+
ToolsConfig.create_config_file 'tools_json', (File.dirname __dir__) + '/tools_json.config', :json, first_time: true
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_config_C_load
|
14
18
|
ToolsConfig.load_config (File.dirname __dir__) + '/tools_yaml.config'
|
15
19
|
ToolsConfig.load_config (File.dirname __dir__) + '/tools_json.config'
|
20
|
+
end
|
16
21
|
|
17
|
-
|
18
|
-
ToolsConfig.insert_in_config (File.dirname __dir__) +'/
|
22
|
+
def test_config_D_insert
|
23
|
+
ToolsConfig.insert_in_config (File.dirname __dir__) + '/tools_yaml.config', first_time: false
|
24
|
+
ToolsConfig.insert_in_config (File.dirname __dir__) + '/tools_json.config', first_time: false
|
25
|
+
end
|
19
26
|
|
20
|
-
|
21
|
-
ToolsConfig.change_value_in_config (File.dirname __dir__) +'/
|
27
|
+
def test_config_E_change
|
28
|
+
ToolsConfig.change_value_in_config (File.dirname __dir__) + '/tools_yaml.config', true, :first_time
|
29
|
+
ToolsConfig.change_value_in_config (File.dirname __dir__) + '/tools_json.config', true, :first_time
|
30
|
+
end
|
22
31
|
|
32
|
+
def test_config_F_after
|
23
33
|
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_yaml.config'
|
24
34
|
ToolsFiles.remove_file (File.dirname __dir__) + '/tools_json.config'
|
25
|
-
|
26
35
|
end
|
27
36
|
|
28
|
-
end
|
37
|
+
end
|
data/test/mini_console.rb
CHANGED
@@ -1,20 +1,18 @@
|
|
1
|
-
|
2
1
|
class ToolsModuleTest < Minitest::Test
|
3
|
-
|
4
2
|
def self.test_order
|
5
3
|
:sorted
|
6
4
|
end
|
7
5
|
|
8
|
-
|
9
6
|
def test_console_A_run_console
|
10
|
-
|
11
|
-
def mock.start
|
7
|
+
mock = MiniTest::Mock.new
|
8
|
+
def mock.start(*_args)
|
9
|
+
true
|
10
|
+
end
|
12
11
|
Prompt::Console.stub :start, mock do
|
13
12
|
assert_equal ToolsConsole.create_console.class, Array
|
14
13
|
assert_equal (ToolsConsole.exec_console ['test']), true
|
15
14
|
assert_equal (ToolsConsole.exec_console ['tes']), false
|
16
|
-
|
15
|
+
ToolsConsole.run_console
|
17
16
|
end
|
18
17
|
end
|
19
|
-
|
20
|
-
end
|
18
|
+
end
|
data/test/mini_display.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
@@ -9,7 +8,7 @@ class ToolsModuleTest < Minitest::Test
|
|
9
8
|
old_stdout = $stdout
|
10
9
|
captured_stdio = StringIO.new('', 'w')
|
11
10
|
$stdout = captured_stdio
|
12
|
-
ToolsDisplay.show
|
11
|
+
ToolsDisplay.show 'TEXTO VERDE', :green
|
13
12
|
$stdout = old_stdout
|
14
13
|
assert_equal "\e[0;32;49mTEXTO VERDE\n\e[0m", captured_stdio.string
|
15
14
|
end
|
@@ -19,7 +18,7 @@ class ToolsModuleTest < Minitest::Test
|
|
19
18
|
old_stdout = $stdout
|
20
19
|
captured_stdio = StringIO.new('', 'w')
|
21
20
|
$stdout = captured_stdio
|
22
|
-
ToolsDisplay.show
|
21
|
+
ToolsDisplay.show 'TEXTO SAMELINE', :sameline
|
23
22
|
$stdout = old_stdout
|
24
23
|
assert_equal "\e[0;39;49mTEXTO SAMELINE\e[0m", captured_stdio.string
|
25
24
|
end
|
@@ -29,7 +28,7 @@ class ToolsModuleTest < Minitest::Test
|
|
29
28
|
old_stdout = $stdout
|
30
29
|
captured_stdio = StringIO.new('', 'w')
|
31
30
|
$stdout = captured_stdio
|
32
|
-
ToolsDisplay.show_colorize
|
31
|
+
ToolsDisplay.show_colorize 'red'.red + ' ' + 'white'.white
|
33
32
|
$stdout = old_stdout
|
34
33
|
assert_equal "\e[0;31;49mred\e[0m \e[0;37;49mwhite\e[0m\n", captured_stdio.string
|
35
34
|
end
|
@@ -39,15 +38,13 @@ class ToolsModuleTest < Minitest::Test
|
|
39
38
|
old_stdout = $stdout
|
40
39
|
captured_stdio = StringIO.new('', 'w')
|
41
40
|
$stdout = captured_stdio
|
42
|
-
ToolsDisplay.show
|
41
|
+
ToolsDisplay.show 'red'.red + ' ' + 'white'.white, :colorized
|
43
42
|
$stdout = old_stdout
|
44
43
|
assert_equal "\e[0;31;49mred\e[0m \e[0;37;49mwhite\e[0m\n", captured_stdio.string
|
45
44
|
end
|
46
45
|
|
47
46
|
def test_dislay_E_error
|
48
47
|
result = ToolsDisplay.show []
|
49
|
-
assert_equal
|
48
|
+
assert_equal 'Array', result
|
50
49
|
end
|
51
|
-
|
52
|
-
|
53
|
-
end
|
50
|
+
end
|
data/test/mini_file.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
6
5
|
|
7
6
|
def test_file_A_purge
|
8
7
|
mock = MiniTest::Mock.new
|
9
|
-
def mock.delete
|
8
|
+
def mock.delete(*_args)
|
9
|
+
Array
|
10
|
+
end
|
10
11
|
File.stub :delete, mock do
|
11
|
-
assert_equal (ToolsFiles.purge_files (File.dirname __dir__)+'/pkg', '*.gem', 1).class, Array
|
12
|
+
assert_equal (ToolsFiles.purge_files (File.dirname __dir__) + '/pkg', '*.gem', 1).class, Array
|
12
13
|
end
|
13
14
|
end
|
14
15
|
|
15
16
|
def test_file_B_create_dir
|
16
17
|
mock = MiniTest::Mock.new
|
17
|
-
def mock.mkdir
|
18
|
+
def mock.mkdir(*_args)
|
19
|
+
String
|
20
|
+
end
|
18
21
|
Dir.stub :mkdir, mock do
|
19
|
-
assert_equal (ToolsFiles.create_dir (File.dirname __dir__)+'/pkg', 'minitest').class, String
|
20
|
-
assert_equal (ToolsFiles.create_dir (File.dirname __dir__)+'/pkg2', 'minitest').class, String
|
22
|
+
assert_equal (ToolsFiles.create_dir (File.dirname __dir__) + '/pkg', 'minitest').class, String
|
23
|
+
assert_equal (ToolsFiles.create_dir (File.dirname __dir__) + '/pkg2', 'minitest').class, String
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
24
|
-
def
|
25
|
-
|
26
|
-
|
27
|
-
File.stub :open, mock do
|
28
|
-
assert_equal (ToolsFiles.create_file (File.dirname __dir__)+'/pkg', 'minitest', 'minitest').class, String
|
29
|
-
end
|
27
|
+
def test_file_C_create_delete_file
|
28
|
+
ToolsFiles.create_file (File.dirname __dir__), '/create_file', 'teste'
|
29
|
+
ToolsFiles.remove_file (File.dirname __dir__) + '/create_file'
|
30
30
|
end
|
31
31
|
|
32
32
|
def test_file_D_load_file
|
@@ -44,21 +44,17 @@ class ToolsModuleTest < Minitest::Test
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def test_file_G_open_file
|
47
|
+
|
47
48
|
mock = MiniTest::Mock.new
|
48
|
-
def mock.open
|
49
|
+
def mock.open(*_args)
|
50
|
+
true
|
51
|
+
end
|
49
52
|
TTY::Editor.stub :open, mock do
|
50
|
-
|
51
|
-
|
53
|
+
file = (File.dirname __dir__) + '/TODO.txt'
|
54
|
+
ToolsFiles.open_file file, :vi
|
55
|
+
ToolsFiles.open_file file
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
59
|
|
56
|
-
|
57
|
-
mock = MiniTest::Mock.new
|
58
|
-
def mock.remove_file *args; String; end
|
59
|
-
FileUtils.stub :remove_file, mock do
|
60
|
-
assert_equal (ToolsFiles.remove_file (File.dirname __dir__)+'/pkg').class, Minitest::Mock
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
60
|
+
end
|
data/test/mini_hash.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
@@ -8,60 +7,51 @@ class ToolsModuleTest < Minitest::Test
|
|
8
7
|
data = {
|
9
8
|
'k1' => 100,
|
10
9
|
'k2' => 'v2',
|
11
|
-
:k3
|
12
|
-
:
|
13
|
-
}
|
10
|
+
:k3 => {
|
11
|
+
a: 100
|
12
|
+
}
|
14
13
|
}
|
15
14
|
result = {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
'k1' => 100,
|
16
|
+
'k2' => 'v2',
|
17
|
+
:k3 => {
|
18
|
+
a: 100,
|
19
|
+
k2: 200
|
21
20
|
},
|
22
|
-
|
21
|
+
:k1 => 100
|
23
22
|
}
|
24
|
-
data.rmerge!(
|
25
|
-
data.rmerge!( {
|
23
|
+
data.rmerge!(k1: 100)
|
24
|
+
data.rmerge!(k3: { k2: 200 })
|
26
25
|
assert_equal data, result
|
27
26
|
|
28
27
|
result_merge = {
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
28
|
+
'k1' => 100,
|
29
|
+
'k2' => 'v2',
|
30
|
+
:k3 => {
|
31
|
+
a: 100,
|
32
|
+
k2: 200
|
33
|
+
},
|
34
|
+
:k1 => 100
|
36
35
|
}
|
37
36
|
|
38
|
-
hash = data.rmerge(
|
37
|
+
hash = data.rmerge(k1: 100)
|
39
38
|
assert_equal hash, result_merge
|
40
39
|
|
41
|
-
x = {:
|
42
|
-
assert_equal x.rblank,
|
43
|
-
assert_equal x.rblank!,
|
40
|
+
x = { k1: 100, k2: { k3: { a: 100 } } }
|
41
|
+
assert_equal x.rblank, k2: { k3: {} }
|
42
|
+
assert_equal x.rblank!, k2: { k3: {} }
|
44
43
|
|
45
|
-
x = {:
|
44
|
+
x = { k1: 100, k2: { k3: { a: 100 } } }
|
46
45
|
y = x.rblank
|
47
46
|
diff = x.diff y
|
48
|
-
assert_equal diff,
|
49
|
-
|
50
|
-
|
51
|
-
x = {:k1 => 100 , :k2 => { :k3 => {:a => 100}}}
|
52
|
-
y = x.nested_set [:k2,:k3,:a], 200
|
53
|
-
assert_equal x, {:k1 => 100 , :k2 => { :k3 => {:a => 200}}}
|
47
|
+
assert_equal diff, k1: [100, nil], k2: { k3: { a: [100, nil] } }
|
54
48
|
|
49
|
+
x = { k1: 100, k2: { k3: { a: 100 } } }
|
50
|
+
y = x.nested_set %i[k2 k3 a], 200
|
51
|
+
assert_equal x, k1: 100, k2: { k3: { a: 200 } }
|
55
52
|
end
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
53
|
end
|
62
54
|
|
63
|
-
|
64
|
-
|
65
55
|
# module HashRecursiveBlank
|
66
56
|
# def rblank
|
67
57
|
# r = {}
|
@@ -124,7 +114,6 @@ end
|
|
124
114
|
# end
|
125
115
|
# end
|
126
116
|
|
127
|
-
|
128
117
|
# class Hash
|
129
118
|
|
130
119
|
# # ensures nested hash from keys, and sets final key to value
|
data/test/mini_log.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
@@ -8,7 +7,7 @@ class ToolsModuleTest < Minitest::Test
|
|
8
7
|
ToolsFiles.remove_file (File.dirname __dir__) + '/teste.log'
|
9
8
|
ToolsLog.create_log_file 'test', (File.dirname __dir__) + '/teste.log'
|
10
9
|
ToolsLog.create_log_file 'test', (File.dirname __dir__) + '/teste.log'
|
11
|
-
FileUtils.touch (File.dirname __dir__) + '/teste.log', :
|
10
|
+
FileUtils.touch (File.dirname __dir__) + '/teste.log', mtime: (Time.now - 86_400)
|
12
11
|
ToolsLog.test_info 'Minitest.: test_log'
|
13
12
|
ToolsLog.test_warn 'Minitest.: test_log'
|
14
13
|
ToolsLog.test_error 'Minitest.: test_log'
|
@@ -17,5 +16,4 @@ class ToolsModuleTest < Minitest::Test
|
|
17
16
|
ToolsLog.test_ucolorx 'Minitest.: test_log'
|
18
17
|
ToolsFiles.remove_file (File.dirname __dir__) + '/teste.log'
|
19
18
|
end
|
20
|
-
|
21
|
-
end
|
19
|
+
end
|
data/test/mini_net.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
class ToolsModuleTest < Minitest::Test
|
2
|
-
|
3
2
|
def self.test_order
|
4
3
|
:sorted
|
5
4
|
end
|
@@ -15,209 +14,192 @@ class ToolsModuleTest < Minitest::Test
|
|
15
14
|
assert_equal (ToolsNet.validate_ipaddress ip)[:type], 'ip'
|
16
15
|
assert_equal (ToolsNet.validate_ipaddress '100.0.0.0/28')[:status], true
|
17
16
|
assert_equal (ToolsNet.validate_ipaddress '100.0.0.0/28')[:type], 'mask'
|
18
|
-
assert_equal (ToolsNet.validate_ipaddress ip+'x')[:status], false
|
17
|
+
assert_equal (ToolsNet.validate_ipaddress ip + 'x')[:status], false
|
19
18
|
assert_equal (ToolsNet.validate_ipaddress '100.0.0.0/28x')[:status], false
|
20
19
|
assert_equal (ToolsNet.is_backend? '10.1.2.3'), true
|
21
20
|
assert_equal (ToolsNet.is_backend? '201.0.0.1'), false
|
22
21
|
assert_equal (ToolsNet.valid_network? ip), false
|
23
22
|
assert_equal (ToolsNet.valid_network? '110.0.0.0/28'), true
|
24
|
-
assert_equal (ToolsNet.resolv_dns 'www.wikipedia.org'),
|
23
|
+
assert_equal (ToolsNet.resolv_dns 'www.wikipedia.org'), '208.80.154.224'
|
25
24
|
assert_nil (ToolsNet.resolv_dns 'www.wikipedia.orgx')
|
26
|
-
assert_equal (ToolsNet.resolv_ip_name
|
27
|
-
assert_equal (ToolsNet.resolv_ip_name
|
25
|
+
assert_equal (ToolsNet.resolv_ip_name '208.80.154.224'), 'text-lb.eqiad.wikimedia.org'
|
26
|
+
assert_equal (ToolsNet.resolv_ip_name '208.80.154.224x'), 'cannot interpret as address: 208.80.154.224x'
|
28
27
|
end
|
29
28
|
|
30
29
|
def test_net_C_valid_port
|
31
30
|
assert_equal (ToolsNet.valid_port? 8888), true
|
32
31
|
assert_equal (ToolsNet.valid_port? -1), false
|
33
32
|
assert_equal (ToolsNet.valid_port? 0), false
|
34
|
-
assert_equal (ToolsNet.valid_port?
|
33
|
+
assert_equal (ToolsNet.valid_port? 100_000), false
|
35
34
|
end
|
36
35
|
|
37
|
-
|
38
36
|
def test_net_D_doreq
|
39
37
|
resource = RestClient::Resource.new('www.google.com')
|
40
|
-
validate_opts = {quit_on_error: false}
|
38
|
+
validate_opts = { quit_on_error: false }
|
41
39
|
method_opts = {}
|
42
|
-
params={:
|
40
|
+
params = { method: :get }
|
43
41
|
uri = ''
|
44
|
-
if params.
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
attempts: 1,
|
58
|
-
when_res: [nil, [], {}, ''],
|
59
|
-
when_code: []}
|
42
|
+
validate_opts[:expected] = params[:expected] if params.key? :expected
|
43
|
+
method_opts = { data: params[:data].to_json } if params.key? :data
|
44
|
+
result = ToolsNet.doreq resource,
|
45
|
+
uri,
|
46
|
+
params[:method],
|
47
|
+
show_progress: true,
|
48
|
+
method_opts: method_opts,
|
49
|
+
validate_opts: validate_opts,
|
50
|
+
retry_opts: {
|
51
|
+
attempts: 1,
|
52
|
+
when_res: [nil, [], {}, ''],
|
53
|
+
when_code: []
|
54
|
+
}
|
60
55
|
assert_equal result.code, 200
|
61
56
|
end
|
62
|
-
|
63
|
-
|
64
57
|
end
|
65
58
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
# end
|
214
|
-
# unless port.to_i.between?(1, 65535)
|
215
|
-
# return false
|
216
|
-
# end
|
217
|
-
# return true
|
218
|
-
# end
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
59
|
+
# # Resolv a ip to a dns.
|
60
|
+
# #
|
61
|
+
# # @param ip variable ip to resolv
|
62
|
+
# # @return [String] Dns name resolved
|
63
|
+
# def self.resolv_ip_name ip
|
64
|
+
# s = ''
|
65
|
+
# begin
|
66
|
+
# ret = Resolv.new.getname(ip)
|
67
|
+
# return ret.instance_variable_get('@labels').join('.')
|
68
|
+
# rescue Exception => e
|
69
|
+
# case e.message
|
70
|
+
# when "Dnsruby::NXDomain"
|
71
|
+
# return nil
|
72
|
+
# else
|
73
|
+
# return e.message
|
74
|
+
# end
|
75
|
+
# end
|
76
|
+
# return s.strip
|
77
|
+
# end
|
78
|
+
|
79
|
+
# # Resolv a dns to a ip.
|
80
|
+
# #
|
81
|
+
# # @param domain variable ip to resolv
|
82
|
+
# # @return [String] Dns address resolved
|
83
|
+
# def self.resolv_dns domain
|
84
|
+
# begin
|
85
|
+
# dns = Dnsruby::DNS.new()
|
86
|
+
# ret = dns.getaddress(domain).to_s
|
87
|
+
# rescue Exception => e
|
88
|
+
# case e.message
|
89
|
+
# when "Dnsruby::NXDomain"
|
90
|
+
# return nil
|
91
|
+
# else
|
92
|
+
# return e.message
|
93
|
+
# end
|
94
|
+
# end
|
95
|
+
# return ret
|
96
|
+
# end
|
97
|
+
|
98
|
+
# # Do the request, validate and decode response and do the retries if needed
|
99
|
+
# #
|
100
|
+
# # - restclient_obj: initialized RestClient object
|
101
|
+
# # - path: URL path to request
|
102
|
+
# # - method: symbol for HTTP Method to request
|
103
|
+
# # - method_opts: options as passed to a RestClient call
|
104
|
+
# # - validate_opts: options for response validation as used with
|
105
|
+
# # validate_decode_response()
|
106
|
+
# # - retry_opts: when_res: [nil, [], {}, 'str'], when_code: [404, 500],
|
107
|
+
# # conditionals to retry even if no exceptions were catched
|
108
|
+
# # @param restclient_obj Rest Object
|
109
|
+
# # @param path path
|
110
|
+
# # @param method method
|
111
|
+
# # @param method_opts method opts
|
112
|
+
# # @param validate_opts validate opts
|
113
|
+
# # @param retry_opts retry opts
|
114
|
+
# # @param show_progress default false
|
115
|
+
# def self.doreq( restclient_obj, path, method, method_opts: {},validate_opts: {}, retry_opts: {}, show_progress: false)
|
116
|
+
# res = nil
|
117
|
+
# code = nil
|
118
|
+
# data = method_opts.fetch(:data, nil)
|
119
|
+
# method_opts.delete(:data)
|
120
|
+
|
121
|
+
# # Retry loop due to:
|
122
|
+
# # - 404 from Router API right after applying patch over a target
|
123
|
+
# # - Intermittent connection reset from Manager API (HTTPS)
|
124
|
+
# retries = retry_opts.fetch(:attempts, 10)
|
125
|
+
# 1.upto(retries) do |try|
|
126
|
+
# flag_error = false
|
127
|
+
# # The request
|
128
|
+
# begin
|
129
|
+
# restclient_obj[path].send(method, *data, **method_opts) do |response, request, result|
|
130
|
+
# res = validate_decode_response(response, request, result, validate_opts)
|
131
|
+
# code = result.code.to_i
|
132
|
+
# end
|
133
|
+
# rescue Exception => error
|
134
|
+
# flag_error = true
|
135
|
+
# end
|
136
|
+
# # Other conditionals to retry
|
137
|
+
# unless retry_opts.empty?
|
138
|
+
# if retry_opts.has_key?(:when_res)
|
139
|
+
# flag_error = true if retry_opts[:when_res].include?(res)
|
140
|
+
# end
|
141
|
+
# if retry_opts.has_key?(:when_code)
|
142
|
+
# flag_error = true if retry_opts[:when_code].include?(code)
|
143
|
+
# end
|
144
|
+
# end
|
145
|
+
# return res unless flag_error # got response, break the loop
|
146
|
+
# doReqMSG = sprintf "%d/%d", try, retries
|
147
|
+
# if show_progress
|
148
|
+
# ap doReqMSG
|
149
|
+
# end
|
150
|
+
# if try >= retries
|
151
|
+
# ap doreq_code
|
152
|
+
# return nil
|
153
|
+
# else
|
154
|
+
# sleep 1 # wait before next
|
155
|
+
# end
|
156
|
+
# end
|
157
|
+
# end
|
158
|
+
|
159
|
+
# # Return a valid decode response.
|
160
|
+
# #
|
161
|
+
# # @param response
|
162
|
+
# # @param request
|
163
|
+
# # @param result
|
164
|
+
# # @param validate_opts
|
165
|
+
# # @return [Object type] Array or Proc or String or Error
|
166
|
+
# def self.validate_decode_response response, request, result, validate_opts
|
167
|
+
# if validate_opts.has_key? :expected
|
168
|
+
# expected = validate_opts[:expected]
|
169
|
+
# case expected.class.name
|
170
|
+
# when 'Array'
|
171
|
+
# if validate_opts[:expected].include? response
|
172
|
+
# return true
|
173
|
+
# else
|
174
|
+
# return false
|
175
|
+
# end
|
176
|
+
# when 'Proc'
|
177
|
+
# response = expected.call(response, request, result)
|
178
|
+
# return response
|
179
|
+
# when 'String'
|
180
|
+
# return result if validate_opts[:expected].eql? 'result'
|
181
|
+
# return request if validate_opts[:expected].eql? 'request'
|
182
|
+
# return response if validate_opts[:expected].eql? 'response'
|
183
|
+
# else
|
184
|
+
# ap expected.class.name
|
185
|
+
# return response
|
186
|
+
# end
|
187
|
+
# else
|
188
|
+
# return response
|
189
|
+
# end
|
190
|
+
# return true
|
191
|
+
# end
|
192
|
+
|
193
|
+
# # Validate.: port number between valid range?.
|
194
|
+
# #
|
195
|
+
# # @param port number to be validate.
|
196
|
+
# # @return [Boolean]
|
197
|
+
# def self.valid_port? port
|
198
|
+
# if port.to_s.strip.match(/^\d{1,5}(?!\d)$/).nil?
|
199
|
+
# return false
|
200
|
+
# end
|
201
|
+
# unless port.to_i.between?(1, 65535)
|
202
|
+
# return false
|
203
|
+
# end
|
204
|
+
# return true
|
205
|
+
# end
|