Page Menu
Home
Software Heritage
Search
Configure Global Search
Log In
Files
F8394014
ruby_spec.rb
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Subscribers
None
ruby_spec.rb
View Options
#! /usr/bin/env ruby -S rspec
require
'spec_helper'
require
'tempfile'
provider_class
=
Puppet
::
Type
.
type
(
:file_line
)
.
provider
(
:ruby
)
describe
provider_class
do
context
"when adding"
do
let
:tmpfile
do
tmp
=
Tempfile
.
new
(
'tmp'
)
path
=
tmp
.
path
tmp
.
close!
path
end
let
:resource
do
Puppet
::
Type
::
File_line
.
new
(
{
:name
=>
'foo'
,
:path
=>
tmpfile
,
:line
=>
'foo'
}
)
end
let
:provider
do
provider_class
.
new
(
resource
)
end
it
'should detect if the line exists in the file'
do
File
.
open
(
tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
'foo'
)
end
expect
(
provider
.
exists?
)
.
to
be_truthy
end
it
'should detect if the line does not exist in the file'
do
File
.
open
(
tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
'foo1'
)
end
expect
(
provider
.
exists?
)
.
to
be_nil
end
it
'should append to an existing file when creating'
do
provider
.
create
expect
(
File
.
read
(
tmpfile
)
.
chomp
)
.
to
eq
(
'foo'
)
end
end
context
"when matching"
do
before
:each
do
# TODO: these should be ported over to use the PuppetLabs spec_helper
# file fixtures once the following pull request has been merged:
# https://github.com/puppetlabs/puppetlabs-stdlib/pull/73/files
tmp
=
Tempfile
.
new
(
'tmp'
)
@tmpfile
=
tmp
.
path
tmp
.
close!
@resource
=
Puppet
::
Type
::
File_line
.
new
(
{
:name
=>
'foo'
,
:path
=>
@tmpfile
,
:line
=>
'foo = bar'
,
:match
=>
'^foo
\s
*=.*$'
,
}
)
@provider
=
provider_class
.
new
(
@resource
)
end
describe
'using match'
do
it
'should raise an error if more than one line matches, and should not have modified the file'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo=blah
\n
foo2
\n
foo=baz"
)
end
expect
(
@provider
.
exists?
)
.
to
be_nil
expect
{
@provider
.
create
}
.
to
raise_error
(
Puppet
::
Error
,
/More than one line.*matches/
)
expect
(
File
.
read
(
@tmpfile
))
.
to
eql
(
"foo1
\n
foo=blah
\n
foo2
\n
foo=baz"
)
end
it
'should replace all lines that matches'
do
@resource
=
Puppet
::
Type
::
File_line
.
new
(
{
:name
=>
'foo'
,
:path
=>
@tmpfile
,
:line
=>
'foo = bar'
,
:match
=>
'^foo
\s
*=.*$'
,
:multiple
=>
true
}
)
@provider
=
provider_class
.
new
(
@resource
)
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo=blah
\n
foo2
\n
foo=baz"
)
end
expect
(
@provider
.
exists?
)
.
to
be_nil
@provider
.
create
expect
(
File
.
read
(
@tmpfile
)
.
chomp
)
.
to
eql
(
"foo1
\n
foo = bar
\n
foo2
\n
foo = bar"
)
end
it
'should raise an error with invalid values'
do
expect
{
@resource
=
Puppet
::
Type
::
File_line
.
new
(
{
:name
=>
'foo'
,
:path
=>
@tmpfile
,
:line
=>
'foo = bar'
,
:match
=>
'^foo
\s
*=.*$'
,
:multiple
=>
'asgadga'
}
)
}
.
to
raise_error
(
Puppet
::
Error
,
/Invalid value "asgadga"\. Valid values are true, false\./
)
end
it
'should replace a line that matches'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo=blah
\n
foo2"
)
end
expect
(
@provider
.
exists?
)
.
to
be_nil
@provider
.
create
expect
(
File
.
read
(
@tmpfile
)
.
chomp
)
.
to
eql
(
"foo1
\n
foo = bar
\n
foo2"
)
end
it
'should add a new line if no lines match'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo2"
)
end
expect
(
@provider
.
exists?
)
.
to
be_nil
@provider
.
create
expect
(
File
.
read
(
@tmpfile
))
.
to
eql
(
"foo1
\n
foo2
\n
foo = bar
\n
"
)
end
it
'should do nothing if the exact line already exists'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo = bar
\n
foo2"
)
end
expect
(
@provider
.
exists?
)
.
to
be_truthy
@provider
.
create
expect
(
File
.
read
(
@tmpfile
)
.
chomp
)
.
to
eql
(
"foo1
\n
foo = bar
\n
foo2"
)
end
end
describe
'using after'
do
let
:resource
do
Puppet
::
Type
::
File_line
.
new
(
{
:name
=>
'foo'
,
:path
=>
@tmpfile
,
:line
=>
'inserted = line'
,
:after
=>
'^foo1'
,
}
)
end
let
:provider
do
provider_class
.
new
(
resource
)
end
context
'with one line matching the after expression'
do
before
:each
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo = blah
\n
foo2
\n
foo = baz"
)
end
end
it
'inserts the specified line after the line matching the "after" expression'
do
provider
.
create
expect
(
File
.
read
(
@tmpfile
)
.
chomp
)
.
to
eql
(
"foo1
\n
inserted = line
\n
foo = blah
\n
foo2
\n
foo = baz"
)
end
end
context
'with two lines matching the after expression'
do
before
:each
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo = blah
\n
foo2
\n
foo1
\n
foo = baz"
)
end
end
it
'errors out stating "One or no line must match the pattern"'
do
expect
{
provider
.
create
}
.
to
raise_error
(
Puppet
::
Error
,
/One or no line must match the pattern/
)
end
end
context
'with no lines matching the after expression'
do
let
:content
do
"foo3
\n
foo = blah
\n
foo2
\n
foo = baz
\n
"
end
before
:each
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
content
)
end
end
it
'appends the specified line to the file'
do
provider
.
create
expect
(
File
.
read
(
@tmpfile
))
.
to
eq
(
content
<<
resource
[
:line
]
<<
"
\n
"
)
end
end
end
end
context
"when removing"
do
before
:each
do
# TODO: these should be ported over to use the PuppetLabs spec_helper
# file fixtures once the following pull request has been merged:
# https://github.com/puppetlabs/puppetlabs-stdlib/pull/73/files
tmp
=
Tempfile
.
new
(
'tmp'
)
@tmpfile
=
tmp
.
path
tmp
.
close!
@resource
=
Puppet
::
Type
::
File_line
.
new
(
{
:name
=>
'foo'
,
:path
=>
@tmpfile
,
:line
=>
'foo'
,
:ensure
=>
'absent'
}
)
@provider
=
provider_class
.
new
(
@resource
)
end
it
'should remove the line if it exists'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo
\n
foo2"
)
end
@provider
.
destroy
expect
(
File
.
read
(
@tmpfile
))
.
to
eql
(
"foo1
\n
foo2"
)
end
it
'should remove the line without touching the last new line'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo
\n
foo2
\n
"
)
end
@provider
.
destroy
expect
(
File
.
read
(
@tmpfile
))
.
to
eql
(
"foo1
\n
foo2
\n
"
)
end
it
'should remove any occurence of the line'
do
File
.
open
(
@tmpfile
,
'w'
)
do
|
fh
|
fh
.
write
(
"foo1
\n
foo
\n
foo2
\n
foo
\n
foo"
)
end
@provider
.
destroy
expect
(
File
.
read
(
@tmpfile
))
.
to
eql
(
"foo1
\n
foo2
\n
"
)
end
end
end
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Jun 4, 7:20 PM (1 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3399092
Attached To
rSPSTD puppet-puppetlabs-stdlib
Event Timeline
Log In to Comment