ipaddress_2 0.11.0

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.
@@ -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: []