ipaddress_2 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,70 @@
1
+ require 'test_helper'
2
+ require 'ipaddress_2/mongoid'
3
+
4
+ class MongoidTest < Minitest::Test
5
+
6
+ def setup
7
+ @valid_host4 = "172.16.10.1"
8
+ @valid_host6 = "2001:0db8:0000:0000:0008:0800:200c:417a"
9
+ @valid_host6_compressed = IPAddress::IPv6.compress(@valid_host6)
10
+ @valid_network4 = "#{@valid_host4}/24"
11
+ @valid_network6 = "#{@valid_host6}/96"
12
+ @valid_network6_compressed = "#{@valid_host6_compressed}/96"
13
+ @host4 = IPAddress.parse(@valid_host4)
14
+ @host6 = IPAddress.parse(@valid_host6)
15
+ @network4 = IPAddress.parse(@valid_network4)
16
+ @network6 = IPAddress.parse(@valid_network6)
17
+ @invalid_values = [nil, "", "invalid"]
18
+ end
19
+
20
+ def test_mongoize
21
+ # Instance method should be delegated to class method
22
+ assert_equal @host4.mongoize, IPAddress.mongoize(@host4)
23
+ assert_equal @network4.mongoize, IPAddress.mongoize(@network4)
24
+
25
+ # Hosts addresses should be stored without prefix
26
+ assert_equal @valid_host4, IPAddress.mongoize(@host4)
27
+ assert_equal @valid_host6, IPAddress.mongoize(@host6)
28
+ assert_equal @valid_host4, IPAddress.mongoize("#{@host4}/32")
29
+ assert_equal @valid_host6, IPAddress.mongoize("#{@host6}/128")
30
+
31
+ # Network addresses should be stored with their prefix
32
+ assert_equal @valid_network4, IPAddress.mongoize(@network4)
33
+ assert_equal @valid_network6, IPAddress.mongoize(@network6)
34
+
35
+ # IPv6 addresses should always be stored uncompressed
36
+ assert_equal @valid_host6, IPAddress.mongoize(@valid_host6_compressed)
37
+ assert_equal @valid_network6, IPAddress.mongoize(@valid_network6_compressed)
38
+
39
+ @invalid_values.each do |invalid_value|
40
+ # Invalid addresses should serialize to nil
41
+ assert_nil IPAddress.mongoize(invalid_value)
42
+ end
43
+ end
44
+
45
+ def test_demongoize
46
+ # Valid stored values should be loaded with expected IPAddress type
47
+ assert_instance_of IPAddress::IPv4, IPAddress.demongoize(@valid_host4)
48
+ assert_instance_of IPAddress::IPv6, IPAddress.demongoize(@valid_host6)
49
+ assert_instance_of IPAddress::IPv4, IPAddress.demongoize(@valid_network4)
50
+ assert_instance_of IPAddress::IPv6, IPAddress.demongoize(@valid_network6)
51
+
52
+ # Valid stored values should be loaded as the original IPAddress object
53
+ assert_equal @host4, IPAddress.demongoize(@valid_host4)
54
+ assert_equal @host6, IPAddress.demongoize(@valid_host6)
55
+ assert_equal @network4, IPAddress.demongoize(@valid_network4)
56
+ assert_equal @network6, IPAddress.demongoize(@valid_network6)
57
+
58
+ @invalid_values.each do |invalid_value|
59
+ # Invalid stored value should be loaded as nil
60
+ assert_nil IPAddress.demongoize(invalid_value)
61
+ end
62
+ end
63
+
64
+ def test_evolve
65
+ # evolve should delegate to mongoize
66
+ assert_equal IPAddress.mongoize(@valid_host4), IPAddress.evolve(@valid_host4)
67
+ assert_equal IPAddress.mongoize(@valid_network4), IPAddress.evolve(@valid_network4)
68
+ end
69
+
70
+ end
@@ -0,0 +1,171 @@
1
+ require 'test_helper'
2
+
3
+ class Prefix32Test < Minitest::Test
4
+
5
+ def setup
6
+ @netmask0 = "0.0.0.0"
7
+ @netmask8 = "255.0.0.0"
8
+ @netmask16 = "255.255.0.0"
9
+ @netmask24 = "255.255.255.0"
10
+ @netmask30 = "255.255.255.252"
11
+ @netmasks = [@netmask0,@netmask8,@netmask16,@netmask24,@netmask30]
12
+
13
+ @prefix_hash = {
14
+ "0.0.0.0" => 0,
15
+ "255.0.0.0" => 8,
16
+ "255.255.0.0" => 16,
17
+ "255.255.255.0" => 24,
18
+ "255.255.255.252" => 30}
19
+
20
+ @octets_hash = {
21
+ [0,0,0,0] => 0,
22
+ [255,0,0,0] => 8,
23
+ [255,255,0,0] => 16,
24
+ [255,255,255,0] => 24,
25
+ [255,255,255,252] => 30}
26
+
27
+ @u32_hash = {
28
+ 0 => 0,
29
+ 8 => 4278190080,
30
+ 16 => 4294901760,
31
+ 24 => 4294967040,
32
+ 30 => 4294967292}
33
+
34
+ @klass = IPAddress::Prefix32
35
+ end
36
+
37
+ def test_attributes
38
+ @prefix_hash.values.each do |num|
39
+ prefix = @klass.new(num)
40
+ assert_equal num, prefix.prefix
41
+ end
42
+ end
43
+
44
+ def test_parse_netmask
45
+ @prefix_hash.each do |netmask, num|
46
+ prefix = @klass.parse_netmask(netmask)
47
+ assert_equal num, prefix.prefix
48
+ assert_instance_of @klass, prefix
49
+ end
50
+ end
51
+
52
+ def test_method_to_ip
53
+ @prefix_hash.each do |netmask, num|
54
+ prefix = @klass.new(num)
55
+ assert_equal netmask, prefix.to_ip
56
+ end
57
+ end
58
+
59
+ def test_method_to_s
60
+ prefix = @klass.new(8)
61
+ assert_equal "8", prefix.to_s
62
+ end
63
+
64
+ def test_method_bits
65
+ prefix = @klass.new(16)
66
+ str = "1"*16 + "0"*16
67
+ assert_equal str, prefix.bits
68
+ end
69
+
70
+ def test_method_to_u32
71
+ @u32_hash.each do |num,u32|
72
+ assert_equal u32, @klass.new(num).to_u32
73
+ end
74
+ end
75
+
76
+ def test_method_cmp
77
+ p1 = @klass.new 8
78
+ p2 = @klass.new 24
79
+ assert_equal false, (p1 > 16)
80
+ assert_equal true, (p2 > 16)
81
+ assert_equal true, (16 >= p1)
82
+ assert_equal false, (16 >= p2)
83
+ assert_equal true, (p1 < p2)
84
+ assert_equal true, (p1 == 8r)
85
+ assert_equal true, (24r == p2)
86
+ end
87
+
88
+ def test_method_plus
89
+ p1 = @klass.new 8
90
+ p2 = @klass.new 10
91
+ assert_equal 18, p1+p2
92
+ assert_equal 12, p1+4
93
+ assert_equal 14r, p2+4r
94
+ assert_equal 12r, 4r+p1
95
+ end
96
+
97
+ def test_method_minus
98
+ p1 = @klass.new 8
99
+ p2 = @klass.new 24
100
+ assert_equal (-16), p1-p2
101
+ assert_equal 16, p2-p1
102
+ assert_equal 20, p2-4
103
+ assert_equal 20r, p2-4r
104
+ assert_equal 24, 32-p1
105
+ assert_equal 8, 32-p2
106
+ assert_equal 8r, 32r-p2
107
+ end
108
+
109
+ def test_initialize
110
+ assert_raises (ArgumentError) do
111
+ @klass.new 33
112
+ end
113
+ assert_instance_of @klass, @klass.new(8)
114
+ end
115
+
116
+ def test_method_octets
117
+ @octets_hash.each do |arr,pref|
118
+ prefix = @klass.new(pref)
119
+ assert_equal prefix.octets, arr
120
+ end
121
+ end
122
+
123
+ def test_method_brackets
124
+ @octets_hash.each do |arr,pref|
125
+ prefix = @klass.new(pref)
126
+ arr.each_with_index do |oct,index|
127
+ assert_equal prefix[index], oct
128
+ end
129
+ end
130
+ end
131
+
132
+ def test_method_hostmask
133
+ prefix = @klass.new(8)
134
+ assert_equal "0.255.255.255", prefix.hostmask
135
+ end
136
+
137
+ end # class Prefix32Test
138
+
139
+
140
+ class Prefix128Test < Minitest::Test
141
+
142
+ def setup
143
+ @u128_hash = {
144
+ 32 => 340282366841710300949110269838224261120,
145
+ 64 => 340282366920938463444927863358058659840,
146
+ 96 => 340282366920938463463374607427473244160,
147
+ 126 => 340282366920938463463374607431768211452}
148
+
149
+ @klass = IPAddress::Prefix128
150
+ end
151
+
152
+ def test_initialize
153
+ assert_raises(ArgumentError) do
154
+ @klass.new 129
155
+ end
156
+ assert_instance_of @klass, @klass.new(64)
157
+ end
158
+
159
+ def test_method_bits
160
+ prefix = @klass.new(64)
161
+ str = "1"*64 + "0"*64
162
+ assert_equal str, prefix.bits
163
+ end
164
+
165
+ def test_method_to_u32
166
+ @u128_hash.each do |num,u128|
167
+ assert_equal u128, @klass.new(num).to_u128
168
+ end
169
+ end
170
+
171
+ end # class Prefix128Test
@@ -0,0 +1,109 @@
1
+ require 'test_helper'
2
+
3
+ class IPAddressTest < Minitest::Test
4
+
5
+ def setup
6
+ @valid_ipv4 = "172.16.10.1/24"
7
+ @valid_ipv6 = "2001:db8::8:800:200c:417a/64"
8
+ @valid_mapped = "::13.1.68.3"
9
+
10
+ @invalid_ipv4 = "10.0.0.256"
11
+ @invalid_ipv6 = ":1:2:3:4:5:6:7"
12
+ @invalid_mapped = "::1:2.3.4"
13
+
14
+ @valid_ipv4_uint32 = [4294967295, # 255.255.255.255
15
+ 167772160, # 10.0.0.0
16
+ 3232235520, # 192.168.0.0
17
+ 0]
18
+
19
+ @invalid_ipv4_uint32 = [4294967296, # 256.0.0.0
20
+ "A294967295", # Invalid uINT
21
+ -1] # Invalid
22
+
23
+
24
+ @ipv4class = IPAddress::IPv4
25
+ @ipv6class = IPAddress::IPv6
26
+ @mappedclass = IPAddress::IPv6::Mapped
27
+
28
+ @invalid_ipv4 = ["10.0.0.256",
29
+ "10.0.0.0.0",
30
+ "10.0.0",
31
+ "10.0"]
32
+
33
+ @valid_ipv4_range = ["10.0.0.1-254",
34
+ "10.0.1-254.0",
35
+ "10.1-254.0.0"]
36
+
37
+ @method = Module.method("IPAddress")
38
+ end
39
+
40
+ def test_method_IPAddress
41
+
42
+ assert_instance_of @ipv4class, @method.call(@valid_ipv4)
43
+ assert_instance_of @ipv6class, @method.call(@valid_ipv6)
44
+ assert_instance_of @mappedclass, @method.call(@valid_mapped)
45
+
46
+ assert_raises(ArgumentError) {@method.call(@invalid_ipv4)}
47
+ assert_raises(ArgumentError) {@method.call(@invalid_ipv6)}
48
+ assert_raises(ArgumentError) {@method.call(@invalid_mapped)}
49
+
50
+ assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[0])
51
+ assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[1])
52
+ assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[2])
53
+ assert_instance_of @ipv4class, @method.call(@valid_ipv4_uint32[3])
54
+
55
+ assert_raises(ArgumentError) {@method.call(@invalid_ipv4_uint32[0])}
56
+ assert_raises(ArgumentError) {@method.call(@invalid_ipv4_uint32[1])}
57
+ assert_raises(ArgumentError) {@method.call(@invalid_ipv4_uint32[2])}
58
+
59
+ end
60
+
61
+ def test_module_method_valid?
62
+ assert_equal true, IPAddress::valid?("10.0.0.0/24")
63
+ assert_equal true, IPAddress::valid?("10.0.0.0/255.255.255.0")
64
+ assert_equal false, IPAddress::valid?("10.0.0.0/64")
65
+ assert_equal false, IPAddress::valid?("10.0.0.0/255.255.255.256")
66
+ assert_equal true, IPAddress::valid?("::/0")
67
+ assert_equal true, IPAddress::valid?("2002::1/128")
68
+ assert_equal true, IPAddress::valid?("dead:beef:cafe:babe::/64")
69
+ assert_equal false, IPAddress::valid?("2002::1/129")
70
+ end
71
+
72
+ def test_module_method_valid_ip?
73
+ assert_equal true, IPAddress::valid?("10.0.0.1")
74
+ assert_equal true, IPAddress::valid?("10.0.0.0")
75
+ assert_equal true, IPAddress::valid?("2002::1")
76
+ assert_equal true, IPAddress::valid?("dead:beef:cafe:babe::f0ad")
77
+ assert_equal false, IPAddress::valid?("10.0.0.256")
78
+ assert_equal false, IPAddress::valid?("10.0.0.0.0")
79
+ assert_equal false, IPAddress::valid?("10.0.0")
80
+ assert_equal false, IPAddress::valid?("10.0")
81
+ assert_equal false, IPAddress::valid?("2002:::1")
82
+ assert_equal false, IPAddress::valid?("2002:516:2:200")
83
+ end
84
+
85
+ def test_module_method_valid_ipv4_netmask?
86
+ assert_equal true, IPAddress::valid_ipv4_netmask?("255.255.255.0")
87
+ assert_equal false, IPAddress::valid_ipv4_netmask?("10.0.0.1")
88
+ end
89
+
90
+ def test_module_method_valid_ipv4_subnet?
91
+ assert_equal true, IPAddress::valid_ipv4_subnet?("10.0.0.0/255.255.255.0")
92
+ assert_equal true, IPAddress::valid_ipv4_subnet?("10.0.0.0/0")
93
+ assert_equal true, IPAddress::valid_ipv4_subnet?("10.0.0.0/32")
94
+ assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/ABC")
95
+ assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.1")
96
+ assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/33")
97
+ assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.256/24")
98
+ assert_equal false, IPAddress::valid_ipv4_subnet?("10.0.0.0/255.255.255.256")
99
+ end
100
+
101
+ def test_module_method_valid_ipv6_subnet?
102
+ assert_equal true, IPAddress::valid_ipv6_subnet?("::/0")
103
+ assert_equal true, IPAddress::valid_ipv6_subnet?("2002::1/128")
104
+ assert_equal true, IPAddress::valid_ipv6_subnet?("dead:beef:cafe:babe::/64")
105
+ assert_equal false, IPAddress::valid_ipv6_subnet?("2002::1/129")
106
+ end
107
+ end
108
+
109
+
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'minitest/autorun'
3
+ require 'simplecov'
4
+ SimpleCov.start
5
+
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
+ require 'ipaddress_2'
9
+
10
+ if Minitest.const_defined?('Test')
11
+ # We're on Minitest 5+. Nothing to do here.
12
+ else
13
+ # Minitest 4 doesn't have Minitest::Test yet.
14
+ Minitest::Test = MiniTest::Unit::TestCase
15
+ end
16
+
17
+ module Minitest
18
+
19
+ class Test
20
+
21
+ def self.must(name, &block)
22
+ test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
23
+ defined = instance_method(test_name) rescue false
24
+ raise "#{test_name} is already defined in #{self}" if defined
25
+ if block_given?
26
+ define_method(test_name, &block)
27
+ else
28
+ define_method(test_name) do
29
+ flunk "No implementation provided for #{name}"
30
+ end
31
+ end
32
+ end
33
+
34
+ end
35
+ end
36
+
37
+
metadata ADDED
@@ -0,0 +1,195 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ipaddress_2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.11.0
5
+ platform: ruby
6
+ authors:
7
+ - bluemonk
8
+ - mikemackintosh
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2019-01-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: minitest
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '5.8'
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 5.8.4
52
+ type: :development
53
+ prerelease: false
54
+ version_requirements: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - "~>"
57
+ - !ruby/object:Gem::Version
58
+ version: '5.8'
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 5.8.4
62
+ - !ruby/object:Gem::Dependency
63
+ name: pry
64
+ requirement: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.1
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.10.1
76
+ - !ruby/object:Gem::Dependency
77
+ name: travis
78
+ requirement: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 1.8.2
83
+ type: :development
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: 1.8.2
90
+ - !ruby/object:Gem::Dependency
91
+ name: jeweler
92
+ requirement: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: 2.0.1
97
+ type: :development
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 2.0.1
104
+ - !ruby/object:Gem::Dependency
105
+ name: codeclimate-test-reporter
106
+ requirement: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ type: :development
112
+ prerelease: false
113
+ version_requirements: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ - !ruby/object:Gem::Dependency
119
+ name: simplecov
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ type: :development
126
+ prerelease: false
127
+ version_requirements: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ description: |-
133
+ IPAddress2 is a Ruby library designed to make manipulation
134
+ of IPv4 and IPv6 addresses both powerful and simple. It mantains
135
+ a layer of compatibility with Ruby's own IPAddr, while
136
+ addressing many of its issues.
137
+ email: adam@21eleven.com
138
+ executables: []
139
+ extensions: []
140
+ extra_rdoc_files:
141
+ - CHANGELOG.rdoc
142
+ - LICENSE.txt
143
+ - README.rdoc
144
+ files:
145
+ - ".byebug_history"
146
+ - ".document"
147
+ - ".gitignore"
148
+ - ".rock.yml"
149
+ - ".travis.yml"
150
+ - CHANGELOG.md
151
+ - CHANGELOG.rdoc
152
+ - CONTRIBUTING.md
153
+ - Gemfile
154
+ - LICENSE.txt
155
+ - README.rdoc
156
+ - Rakefile
157
+ - VERSION
158
+ - ipaddress_2.gemspec
159
+ - lib/ipaddress_2.rb
160
+ - lib/ipaddress_2/ipv4.rb
161
+ - lib/ipaddress_2/ipv6.rb
162
+ - lib/ipaddress_2/mongoid.rb
163
+ - lib/ipaddress_2/prefix.rb
164
+ - lib/ipaddress_2/version.rb
165
+ - test/ipaddress_2/ipv4_test.rb
166
+ - test/ipaddress_2/ipv6_test.rb
167
+ - test/ipaddress_2/mongoid_test.rb
168
+ - test/ipaddress_2/prefix_test.rb
169
+ - test/ipaddress_2_test.rb
170
+ - test/test_helper.rb
171
+ homepage: https://github.com/ipaddress2-gem/ipaddress2
172
+ licenses:
173
+ - MIT
174
+ metadata: {}
175
+ post_install_message:
176
+ rdoc_options: []
177
+ require_paths:
178
+ - lib
179
+ required_ruby_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ required_rubygems_version: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ requirements: []
190
+ rubyforge_project:
191
+ rubygems_version: 2.7.8
192
+ signing_key:
193
+ specification_version: 4
194
+ summary: IPv4/IPv6 address manipulation library
195
+ test_files: []