98ff3abd09
This patch is the same approach as the one that want into 2.2.x. It covers the functions in 2.3.x that do not exist in 2.2.x. Without this patch all of the spec tests for parser functions in stdlib would instantiate their own scope instances. This is a problem because the standard library is tightly coupled with the internal behavior of Puppet. Tight coupling like this creates failures when we change the internal behavior of Puppet. This is exactly what happened recently when we changed the method signature for the initializer of Puppet::Parser::Scope instances. This patch fixes the problem by creating scope instances using the puppet labs spec helper. The specific method that provides scope instances in Puppet-version-independent way is something like this: let(:scope) { PuppetlabsSpec::PuppetInternals.scope } This patch simply implements this across the board.
45 lines
1.7 KiB
Ruby
45 lines
1.7 KiB
Ruby
#! /usr/bin/env ruby -S rspec
|
|
require 'spec_helper'
|
|
|
|
describe "the str2saltedsha512 function" do
|
|
let(:scope) { PuppetlabsSpec::PuppetInternals.scope }
|
|
|
|
it "should exist" do
|
|
Puppet::Parser::Functions.function("str2saltedsha512").should == "function_str2saltedsha512"
|
|
end
|
|
|
|
it "should raise a ParseError if there is less than 1 argument" do
|
|
expect { scope.function_str2saltedsha512([]) }.should( raise_error(Puppet::ParseError) )
|
|
end
|
|
|
|
it "should raise a ParseError if there is more than 1 argument" do
|
|
expect { scope.function_str2saltedsha512(['foo', 'bar', 'baz']) }.should( raise_error(Puppet::ParseError) )
|
|
end
|
|
|
|
it "should return a salted-sha512 password hash 136 characters in length" do
|
|
result = scope.function_str2saltedsha512(["password"])
|
|
result.length.should(eq(136))
|
|
end
|
|
|
|
it "should raise an error if you pass a non-string password" do
|
|
expect { scope.function_str2saltedsha512([1234]) }.should( raise_error(Puppet::ParseError) )
|
|
end
|
|
|
|
it "should generate a valid password" do
|
|
# Allow the function to generate a password based on the string 'password'
|
|
password_hash = scope.function_str2saltedsha512(["password"])
|
|
|
|
# Separate the Salt and Password from the Password Hash
|
|
salt = password_hash[0..7]
|
|
password = password_hash[8..-1]
|
|
|
|
# Convert the Salt and Password from Hex to Binary Data
|
|
str_salt = Array(salt.lines).pack('H*')
|
|
str_password = Array(password.lines).pack('H*')
|
|
|
|
# Combine the Binary Salt with 'password' and compare the end result
|
|
saltedpass = Digest::SHA512.digest(str_salt + 'password')
|
|
result = (str_salt + saltedpass).unpack('H*')[0]
|
|
result.should == password_hash
|
|
end
|
|
end
|