Permalink
Fetching contributors…
Cannot retrieve contributors at this time
158 lines (125 sloc) 4.13 KB
# encoding: UTF-8
# Author:: Assaf Arkin assaf@labnotes.org
# Eric Hodel drbrain@segment7.net
# Copyright:: Copyright (c) 2005-2008 Assaf Arkin, Eric Hodel
# License:: MIT and/or Creative Commons Attribution-ShareAlike
require 'test/unit'
require 'rubygems'
require 'uuid'
require 'mocha'
class TestUUID < Test::Unit::TestCase
def test_state_file_creation
path = UUID.state_file
File.delete path if File.exist?(path)
UUID.new.generate
File.exist?(path)
end
def test_state_file_creation_mode
UUID.class_eval{ @state_file = nil; @mode = nil }
UUID.state_file 0666
path = UUID.state_file
File.delete path if File.exist?(path)
old_umask = File.umask(0022)
UUID.new.generate
File.umask(old_umask)
assert_equal '0666', sprintf('%04o', File.stat(path).mode & 0777)
end
def test_state_file_specify
path = File.join("path", "to", "ruby-uuid")
UUID.state_file = path
assert_equal path, UUID.state_file
end
def test_mode_is_set_on_state_file_specify
UUID.class_eval{ @state_file = nil; @mode = nil }
path = File.join(Dir.tmpdir, "ruby-uuid-test")
File.delete path if File.exist?(path)
UUID.state_file = path
old_umask = File.umask(0022)
UUID.new.generate
File.umask(old_umask)
UUID.class_eval{ @state_file = nil; @mode = nil }
assert_equal '0644', sprintf('%04o', File.stat(path).mode & 0777)
end
def test_with_no_state_file
UUID.state_file = false
assert !UUID.state_file
uuid = UUID.new
assert_match(/\A[\da-f]{32}\z/i, uuid.generate(:compact))
seq = uuid.next_sequence
assert_equal seq + 1, uuid.next_sequence
assert !UUID.state_file
end
def validate_uuid_generator(uuid)
assert_match(/\A[\da-f]{32}\z/i, uuid.generate(:compact))
assert_match(/\A[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\z/i,
uuid.generate(:default))
assert_match(/^urn:uuid:[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\z/i,
uuid.generate(:urn))
e = assert_raise ArgumentError do
uuid.generate :unknown
end
assert_equal 'invalid UUID format :unknown', e.message
end
def test_instance_generate
uuid = UUID.new
validate_uuid_generator(uuid)
end
def test_class_generate
assert_match(/\A[\da-f]{32}\z/i, UUID.generate(:compact))
assert_match(/\A[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\z/i,
UUID.generate(:default))
assert_match(/^urn:uuid:[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}\z/i,
UUID.generate(:urn))
e = assert_raise ArgumentError do
UUID.generate :unknown
end
assert_equal 'invalid UUID format :unknown', e.message
end
def test_class_validate
assert !UUID.validate('')
assert UUID.validate('01234567abcd8901efab234567890123'), 'compact'
assert UUID.validate('01234567-abcd-8901-efab-234567890123'), 'default'
assert UUID.validate('urn:uuid:01234567-abcd-8901-efab-234567890123'),
'urn'
assert UUID.validate('01234567ABCD8901EFAB234567890123'), 'compact'
assert UUID.validate('01234567-ABCD-8901-EFAB-234567890123'), 'default'
assert UUID.validate('urn:uuid:01234567-ABCD-8901-EFAB-234567890123'),
'urn'
end
def test_monotonic
seen = {}
uuid_gen = UUID.new
20_000.times do
uuid = uuid_gen.generate
assert !seen.has_key?(uuid), "UUID repeated"
seen[uuid] = true
end
end
def test_same_mac
class << foo = UUID.new
attr_reader :mac
end
class << bar = UUID.new
attr_reader :mac
end
assert_equal foo.mac, bar.mac
end
def test_increasing_sequence
class << foo = UUID.new
attr_reader :sequence
end
class << bar = UUID.new
attr_reader :sequence
end
assert_equal foo.sequence + 1, bar.sequence
end
def test_pseudo_random_mac_address
uuid_gen = UUID.new
Mac.stubs(:addr).returns "00:00:00:00:00:00"
assert uuid_gen.iee_mac_address == 0
[:compact, :default, :urn].each do |format|
assert UUID.validate(uuid_gen.generate(format)), format.to_s
end
validate_uuid_generator(uuid_gen)
end
end