blob: fd5f288e2462efc4ddd3d9a118bf08a4adb17c74 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
require 'minitest/autorun'
require "securerandom"
require "qpid_proton"
# in Ruby 1.8 there is no SecureRandom module
if RUBY_VERSION < "1.9"
module SecureRandom
class << self
def method_missing(method_sym, *arguments, &block)
case method_sym
when :urlsafe_base64
r19_urlsafe_base64(*arguments)
when :uuid
r19_uuid(*arguments)
else
super
end
end
private
def r19_urlsafe_base64(n=nil, padding=false)
s = [random_bytes(n)].pack("m*")
s.delete!("\n")
s.tr!("+/", "-_")
s.delete!("=") if !padding
s
end
def r19_uuid
ary = random_bytes(16).unpack("NnnnnN")
ary[2] = (ary[2] & 0x0fff) | 0x4000
ary[3] = (ary[3] & 0x3fff) | 0x8000
"%08x-%04x-%04x-%04x-%04x%08x" % ary
end
end
end
end
# Generates a random string of the specified length
def random_string(length = 8)
(0...length).map{65.+(rand(25)).chr}.join
end
# Generates a random list of the specified length.
def random_list(length)
result = []
(0...length).each do |element|
low = rand(512)
high = rand(8192)
case
when element == 0 then result << rand(128)
when element == 1 then result << random_string(rand(128))
when element == 2 then result << rand * (low - high).abs + low
when element == 3 then result << SecureRandom.uuid
end
end
return result
end
# Generates a random array of a random type.
# Returns both the array and the type.
def random_array(length, described = false, description = nil)
choice = rand(128) % 4
type = [Qpid::Proton::Types::INT,
Qpid::Proton::Types::STRING,
Qpid::Proton::Types::DOUBLE,
Qpid::Proton::Types::UUID][choice]
result = Qpid::Proton::Types::UniformArray.new(type)
low = rand(512)
high = rand(8192)
(0...length).each do |element|
case
when choice == 0 then result << rand(1024)
when choice == 1 then result << random_string(rand(128))
when choice == 2 then result << rand * (low - high).abs + low
when choice == 3 then result << SecureRandom.uuid
end
end
return result
end
# Generates a random hash of values.
def random_hash(length)
result = {}
values = random_list(length)
values.each do |value|
result[random_string(64)] = value
end
return result
end