tools 0.4.5 → 0.4.6
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 +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
|