# # 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