Update puppetlabs/stdlib module
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / spec / functions / fqdn_rand_string_spec.rb
index 949d930..d5d3fbf 100644 (file)
@@ -1,73 +1,49 @@
-#! /usr/bin/env ruby -S rspec
 require 'spec_helper'
 
-describe "the fqdn_rand_string function" do
-  let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
-
-  it "should exist" do
-    expect(Puppet::Parser::Functions.function("fqdn_rand_string")).to eq("function_fqdn_rand_string")
-  end
-
-  it "should raise an ArgumentError if there is less than 1 argument" do
-    expect { fqdn_rand_string() }.to( raise_error(ArgumentError, /wrong number of arguments/))
-  end
-
-  it "should raise an ArgumentError if argument 1 isn't a positive integer" do
-    expect { fqdn_rand_string(0) }.to( raise_error(ArgumentError, /first argument must be a positive integer/))
-    expect { fqdn_rand_string(-1) }.to( raise_error(ArgumentError, /first argument must be a positive integer/))
-    expect { fqdn_rand_string(0.5) }.to( raise_error(ArgumentError, /first argument must be a positive integer/))
-  end
-
-  it "provides a valid alphanumeric string when no character set is provided" do
-    length = 100
-    string = %r{\A[a-zA-Z0-9]{#{length}}\z}
-    expect(fqdn_rand_string(length).match(string)).not_to eq(nil)
-  end
-
-  it "provides a valid alphanumeric string when an undef character set is provided" do
-    length = 100
-    string = %r{\A[a-zA-Z0-9]{#{length}}\z}
-    expect(fqdn_rand_string(length, :charset => nil).match(string)).not_to eq(nil)
-  end
-
-  it "provides a valid alphanumeric string when an empty character set is provided" do
-    length = 100
-    string = %r{\A[a-zA-Z0-9]{#{length}}\z}
-    expect(fqdn_rand_string(length, :charset => '').match(string)).not_to eq(nil)
-  end
-
-  it "uses a provided character set" do
-    length = 100
-    charset = '!@#$%^&*()-_=+'
-    string = %r{\A[#{charset}]{#{length}}\z}
-    expect(fqdn_rand_string(length, :charset => charset).match(string)).not_to eq(nil)
-  end
-
-  it "provides a random string exactly as long as the given length" do
-    expect(fqdn_rand_string(10).size).to eql(10)
-  end
+describe 'fqdn_rand_string' do
+  let(:default_charset) { %r{\A[a-zA-Z0-9]{100}\z} }
+
+  it { is_expected.not_to eq(nil) }
+  it { is_expected.to run.with_params.and_raise_error(ArgumentError, %r{wrong number of arguments}i) }
+  it { is_expected.to run.with_params(0).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params(1.5).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params(-10).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params('-10').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params('string').and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params([]).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params({}).and_raise_error(ArgumentError, %r{first argument must be a positive integer}) }
+  it { is_expected.to run.with_params(1, 1).and_raise_error(ArgumentError, %r{second argument must be undef or a string}) }
+  it { is_expected.to run.with_params(1, []).and_raise_error(ArgumentError, %r{second argument must be undef or a string}) }
+  it { is_expected.to run.with_params(1, {}).and_raise_error(ArgumentError, %r{second argument must be undef or a string}) }
+  it { is_expected.to run.with_params(100).and_return(default_charset) }
+  it { is_expected.to run.with_params('100').and_return(default_charset) }
+  it { is_expected.to run.with_params(100, nil).and_return(default_charset) }
+  it { is_expected.to run.with_params(100, '').and_return(default_charset) }
+  it { is_expected.to run.with_params(100, 'a').and_return(%r{\Aa{100}\z}) }
+  it { is_expected.to run.with_params(100, 'ab').and_return(%r{\A[ab]{100}\z}) }
+  it { is_expected.to run.with_params(100, 'ãβ').and_return(%r{\A[ãβ]{100}\z}) }
 
   it "provides the same 'random' value on subsequent calls for the same host" do
     expect(fqdn_rand_string(10)).to eql(fqdn_rand_string(10))
   end
 
-  it "considers the same host and same extra arguments to have the same random sequence" do
-    first_random = fqdn_rand_string(10, :extra_identifier => [1, "same", "host"])
-    second_random = fqdn_rand_string(10, :extra_identifier => [1, "same", "host"])
+  it 'considers the same host and same extra arguments to have the same random sequence' do
+    first_random = fqdn_rand_string(10, :extra_identifier => [1, 'same', 'host'])
+    second_random = fqdn_rand_string(10, :extra_identifier => [1, 'same', 'host'])
 
     expect(first_random).to eql(second_random)
   end
 
-  it "allows extra arguments to control the random value on a single host" do
-    first_random = fqdn_rand_string(10, :extra_identifier => [1, "different", "host"])
-    second_different_random = fqdn_rand_string(10, :extra_identifier => [2, "different", "host"])
+  it 'allows extra arguments to control the random value on a single host' do
+    first_random = fqdn_rand_string(10, :extra_identifier => [1, 'different', 'host'])
+    second_different_random = fqdn_rand_string(10, :extra_identifier => [2, 'different', 'host'])
 
     expect(first_random).not_to eql(second_different_random)
   end
 
-  it "should return different strings for different hosts" do
-    val1 = fqdn_rand_string(10, :host => "first.host.com")
-    val2 = fqdn_rand_string(10, :host => "second.host.com")
+  it 'returns different strings for different hosts' do
+    val1 = fqdn_rand_string(10, :host => 'first.host.com')
+    val2 = fqdn_rand_string(10, :host => 'second.host.com')
 
     expect(val1).not_to eql(val2)
   end
@@ -77,12 +53,12 @@ describe "the fqdn_rand_string function" do
     charset = args[:charset]
     extra = args[:extra_identifier] || []
 
-    scope = PuppetlabsSpec::PuppetInternals.scope
-    scope.stubs(:[]).with("::fqdn").returns(host)
-    scope.stubs(:lookupvar).with("::fqdn").returns(host)
+    # workaround not being able to use let(:facts) because some tests need
+    # multiple different hostnames in one context
+    allow(scope).to receive(:lookupvar).with('::fqdn', {}).and_return(host)
 
     function_args = [max]
-    if args.has_key?(:charset) or !extra.empty?
+    if args.key?(:charset) || !extra.empty?
       function_args << charset
     end
     function_args += extra