diff options
author | Adam Edwards <adamed@opscode.com> | 2016-03-31 13:28:47 -0700 |
---|---|---|
committer | John Keiser <john@johnkeiser.com> | 2016-08-16 09:38:09 -0700 |
commit | 8bf1d71f97200e3516006c6c4852ba2809c40e46 (patch) | |
tree | a8d90f24a90c83a222e205831cff819c596a95e8 | |
parent | 5134cdc5c4b855e088eedac28cc0567a9233e1e4 (diff) | |
download | chef-8bf1d71f97200e3516006c6c4852ba2809c40e46.tar.gz |
Spec break on Windows due to temp dir and short path names
-rw-r--r-- | spec/support/chef_helpers.rb | 22 | ||||
-rw-r--r-- | spec/unit/knife/data_bag_from_file_spec.rb | 2 | ||||
-rw-r--r-- | spec/unit/provider/remote_directory_spec.rb | 2 |
3 files changed, 24 insertions, 2 deletions
diff --git a/spec/support/chef_helpers.rb b/spec/support/chef_helpers.rb index f64c14da4d..d0b5ad0bfd 100644 --- a/spec/support/chef_helpers.rb +++ b/spec/support/chef_helpers.rb @@ -84,6 +84,28 @@ def canonicalize_path(path) windows? ? path.tr("/", '\\') : path end +# Makes a temp directory with a canonical path on any platform. +# Only really needed to work around an issue on Windows where +# Ruby's temp library generates paths with short names. +def make_canonical_temp_directory + temp_directory = Dir.mktmpdir + if windows? + # On Windows, temporary file / directory path names may have shortened + # subdirectory names due to reliance on the TMP and TEMP environment variables + # in some Windows APIs and duplicated logic in Ruby's temp file implementation. + # To work around this in the unit test context, we obtain the long (canonical) + # path name via a Windows system call so that this path name can be used + # in expectations that assume the ability to canonically name paths in comparisons. + # Note that this was not an issue prior to Ruby 2.2 -- with Ruby 2.2, + # some Chef code started to use long file names, while Ruby's temp file implementation + # continued to return the shortened names -- this would cause these particular tests to + # fail if the username happened to be longer than 8 characters. + Chef::ReservedNames::Win32::File.get_long_path_name(temp_directory) + else + temp_directory + end +end + # Check if a cmd exists on the PATH def which(cmd) paths = ENV["PATH"].split(File::PATH_SEPARATOR) + [ "/bin", "/usr/bin", "/sbin", "/usr/sbin" ] diff --git a/spec/unit/knife/data_bag_from_file_spec.rb b/spec/unit/knife/data_bag_from_file_spec.rb index 0b6f389e87..bf6bd82a68 100644 --- a/spec/unit/knife/data_bag_from_file_spec.rb +++ b/spec/unit/knife/data_bag_from_file_spec.rb @@ -52,7 +52,7 @@ describe Chef::Knife::DataBagFromFile do k end - let(:tmp_dir) { Dir.mktmpdir } + let(:tmp_dir) { make_canonical_temp_directory } let(:db_folder) { File.join(tmp_dir, data_bags_path, bag_name) } let(:db_file) { Tempfile.new(["data_bag_from_file_test", ".json"], db_folder) } let(:db_file2) { Tempfile.new(["data_bag_from_file_test2", ".json"], db_folder) } diff --git a/spec/unit/provider/remote_directory_spec.rb b/spec/unit/provider/remote_directory_spec.rb index b6fd4cfc8e..cb1b6e3cd8 100644 --- a/spec/unit/provider/remote_directory_spec.rb +++ b/spec/unit/provider/remote_directory_spec.rb @@ -121,7 +121,7 @@ describe Chef::Provider::RemoteDirectory do @node.automatic_attrs[:platform] = :just_testing @node.automatic_attrs[:platform_version] = :just_testing - @destination_dir = Dir.mktmpdir << "/remote_directory_test" + @destination_dir = make_canonical_temp_directory << "/remote_directory_test" @resource.path(@destination_dir) end |