summaryrefslogtreecommitdiff
path: root/spec/unit/chef_fs/file_system_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/unit/chef_fs/file_system_spec.rb')
-rw-r--r--spec/unit/chef_fs/file_system_spec.rb136
1 files changed, 136 insertions, 0 deletions
diff --git a/spec/unit/chef_fs/file_system_spec.rb b/spec/unit/chef_fs/file_system_spec.rb
new file mode 100644
index 0000000000..40d85e8a53
--- /dev/null
+++ b/spec/unit/chef_fs/file_system_spec.rb
@@ -0,0 +1,136 @@
+#
+# Author:: John Keiser (<jkeiser@opscode.com>)
+# Copyright:: Copyright (c) 2012 Opscode, Inc.
+# License:: Apache License, Version 2.0
+#
+# Licensed 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 'spec_helper'
+require 'support/shared/unit/file_system_support'
+require 'chef/chef_fs/file_system'
+require 'chef/chef_fs/file_pattern'
+
+describe Chef::ChefFS::FileSystem do
+ include FileSystemSupport
+
+ context 'with empty filesystem' do
+ let(:fs) { memory_fs('', {}) }
+
+ context 'list' do
+ it '/' do
+ list_should_yield_paths(fs, '/', '/')
+ end
+ it '/a' do
+ list_should_yield_paths(fs, '/a', '/a')
+ end
+ it '/a/b' do
+ list_should_yield_paths(fs, '/a/b')
+ end
+ it '/*' do
+ list_should_yield_paths(fs, '/*', '/')
+ end
+ end
+
+ context 'resolve_path' do
+ it '/' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/').path.should == '/'
+ end
+ it 'nonexistent /a' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/a').path.should == '/a'
+ end
+ it 'nonexistent /a/b' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/a/b').path.should == '/a/b'
+ end
+ end
+ end
+
+ context 'with a populated filesystem' do
+ let(:fs) {
+ memory_fs('', {
+ :a => {
+ :aa => {
+ :c => '',
+ :zz => ''
+ },
+ :ab => {
+ :c => '',
+ }
+ },
+ :x => ''
+ })
+ }
+ context 'list' do
+ it '/**' do
+ list_should_yield_paths(fs, '/**', '/', '/a', '/x', '/a/aa', '/a/aa/c', '/a/aa/zz', '/a/ab', '/a/ab/c')
+ end
+ it '/' do
+ list_should_yield_paths(fs, '/', '/')
+ end
+ it '/*' do
+ list_should_yield_paths(fs, '/*', '/', '/a', '/x')
+ end
+ it '/*/*' do
+ list_should_yield_paths(fs, '/*/*', '/a/aa', '/a/ab')
+ end
+ it '/*/*/*' do
+ list_should_yield_paths(fs, '/*/*/*', '/a/aa/c', '/a/aa/zz', '/a/ab/c')
+ end
+ it '/*/*/?' do
+ list_should_yield_paths(fs, '/*/*/?', '/a/aa/c', '/a/ab/c')
+ end
+ it '/a/*/c' do
+ list_should_yield_paths(fs, '/a/*/c', '/a/aa/c', '/a/ab/c')
+ end
+ it '/**b/c' do
+ list_should_yield_paths(fs, '/**b/c', '/a/ab/c')
+ end
+ it '/a/ab/c' do
+ no_blocking_calls_allowed
+ list_should_yield_paths(fs, '/a/ab/c', '/a/ab/c')
+ end
+ it 'nonexistent /a/ab/blah' do
+ no_blocking_calls_allowed
+ list_should_yield_paths(fs, '/a/ab/blah', '/a/ab/blah')
+ end
+ it 'nonexistent /a/ab/blah/bjork' do
+ no_blocking_calls_allowed
+ list_should_yield_paths(fs, '/a/ab/blah/bjork')
+ end
+ end
+
+ context 'resolve_path' do
+ before(:each) do
+ no_blocking_calls_allowed
+ end
+ it 'resolves /' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/').path.should == '/'
+ end
+ it 'resolves /x' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/x').path.should == '/x'
+ end
+ it 'resolves /a' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/a').path.should == '/a'
+ end
+ it 'resolves /a/aa' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/a/aa').path.should == '/a/aa'
+ end
+ it 'resolves /a/aa/zz' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/a/aa/zz').path.should == '/a/aa/zz'
+ end
+ it 'resolves nonexistent /y/x/w' do
+ Chef::ChefFS::FileSystem.resolve_path(fs, '/y/x/w').path.should == '/y/x/w'
+ end
+ end
+ end
+end