blob: 168ef929220a8cda7bf8d138ed0b4d198159d8b7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
#! /usr/bin/env ruby
require 'spec_helper'
require 'puppet/file_serving/content'
describe Puppet::FileServing::Content do
let(:path) { File.expand_path('/path') }
it "should be a subclass of Base" do
Puppet::FileServing::Content.superclass.should equal(Puppet::FileServing::Base)
end
it "should indirect file_content" do
Puppet::FileServing::Content.indirection.name.should == :file_content
end
it "should only support the raw format" do
Puppet::FileServing::Content.supported_formats.should == [:raw]
end
it "should have a method for collecting its attributes" do
Puppet::FileServing::Content.new(path).should respond_to(:collect)
end
it "should not retrieve and store its contents when its attributes are collected if the file is a normal file" do
content = Puppet::FileServing::Content.new(path)
result = "foo"
Puppet::FileSystem.expects(:lstat).with(path).returns stub('stat', :ftype => "file")
File.expects(:read).with(path).never
content.collect
content.instance_variable_get("@content").should be_nil
end
it "should not attempt to retrieve its contents if the file is a directory" do
content = Puppet::FileServing::Content.new(path)
result = "foo"
Puppet::FileSystem.expects(:lstat).with(path).returns stub('stat', :ftype => "directory")
File.expects(:read).with(path).never
content.collect
content.instance_variable_get("@content").should be_nil
end
it "should have a method for setting its content" do
content = Puppet::FileServing::Content.new(path)
content.should respond_to(:content=)
end
it "should make content available when set externally" do
content = Puppet::FileServing::Content.new(path)
content.content = "foo/bar"
content.content.should == "foo/bar"
end
it "should be able to create a content instance from raw file contents" do
Puppet::FileServing::Content.should respond_to(:from_raw)
end
it "should create an instance with a fake file name and correct content when converting from raw" do
instance = mock 'instance'
Puppet::FileServing::Content.expects(:new).with("/this/is/a/fake/path").returns instance
instance.expects(:content=).with "foo/bar"
Puppet::FileServing::Content.from_raw("foo/bar").should equal(instance)
end
it "should return an opened File when converted to raw" do
content = Puppet::FileServing::Content.new(path)
File.expects(:new).with(path, "rb").returns :file
content.to_raw.should == :file
end
end
describe Puppet::FileServing::Content, "when returning the contents" do
let(:path) { File.expand_path('/my/path') }
let(:content) { Puppet::FileServing::Content.new(path, :links => :follow) }
it "should fail if the file is a symlink and links are set to :manage" do
content.links = :manage
Puppet::FileSystem.expects(:lstat).with(path).returns stub("stat", :ftype => "symlink")
proc { content.content }.should raise_error(ArgumentError)
end
it "should fail if a path is not set" do
proc { content.content }.should raise_error(Errno::ENOENT)
end
it "should raise Errno::ENOENT if the file is absent" do
content.path = File.expand_path("/there/is/absolutely/no/chance/that/this/path/exists")
proc { content.content }.should raise_error(Errno::ENOENT)
end
it "should return the contents of the path if the file exists" do
Puppet::FileSystem.expects(:stat).with(path).returns(stub('stat', :ftype => 'file'))
Puppet::FileSystem.expects(:binread).with(path).returns(:mycontent)
content.content.should == :mycontent
end
it "should cache the returned contents" do
Puppet::FileSystem.expects(:stat).with(path).returns(stub('stat', :ftype => 'file'))
Puppet::FileSystem.expects(:binread).with(path).returns(:mycontent)
content.content
# The second run would throw a failure if the content weren't being cached.
content.content
end
end
|