File: shellquote_spec.rb

package info (click to toggle)
puppet 5.5.22-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 21,316 kB
  • sloc: ruby: 254,925; sh: 1,608; xml: 219; makefile: 153; sql: 103
file content (66 lines) | stat: -rw-r--r-- 2,281 bytes parent folder | download | duplicates (3)
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
require 'spec_helper'

describe "the shellquote function" do
  let :node     do Puppet::Node.new('localhost') end
  let :compiler do Puppet::Parser::Compiler.new(node) end
  let :scope    do Puppet::Parser::Scope.new(compiler) end

  it "should exist" do
    expect(Puppet::Parser::Functions.function("shellquote")).to eq("function_shellquote")
  end

  it "should handle no arguments" do
    expect(scope.function_shellquote([])).to eq("")
  end

  it "should handle several simple arguments" do
    expect(scope.function_shellquote(
      ['foo', 'bar@example.com', 'localhost:/dev/null', 'xyzzy+-4711,23']
    )).to eq('foo bar@example.com localhost:/dev/null xyzzy+-4711,23')
  end

  it "should handle array arguments" do
    expect(scope.function_shellquote(
      ['foo', ['bar@example.com', 'localhost:/dev/null'],
      'xyzzy+-4711,23']
    )).to eq('foo bar@example.com localhost:/dev/null xyzzy+-4711,23')
  end

  it "should quote unsafe characters" do
    expect(scope.function_shellquote(['/etc/passwd ', '(ls)', '*', '[?]', "'&'"])).
      to eq('"/etc/passwd " "(ls)" "*" "[?]" "\'&\'"')
  end

  it "should deal with double quotes" do
    expect(scope.function_shellquote(['"foo"bar"'])).to eq('\'"foo"bar"\'')
  end

  it "should cope with dollar signs" do
    expect(scope.function_shellquote(['$PATH', 'foo$bar', '"x$"'])).
      to eq("'$PATH' 'foo$bar' '\"x$\"'")
  end

  it "should deal with apostrophes (single quotes)" do
    expect(scope.function_shellquote(["'foo'bar'", "`$'EDITOR'`"])).
      to eq('"\'foo\'bar\'" "\\`\\$\'EDITOR\'\\`"')
  end

  it "should cope with grave accents (backquotes)" do
    expect(scope.function_shellquote(['`echo *`', '`ls "$MAILPATH"`'])).
      to eq("'`echo *`' '`ls \"$MAILPATH\"`'")
  end

  it "should deal with both single and double quotes" do
    expect(scope.function_shellquote(['\'foo"bar"xyzzy\'', '"foo\'bar\'xyzzy"'])).
      to eq('"\'foo\\"bar\\"xyzzy\'" "\\"foo\'bar\'xyzzy\\""')
  end

  it "should handle multiple quotes *and* dollars and backquotes" do
    expect(scope.function_shellquote(['\'foo"$x`bar`"xyzzy\''])).
      to eq('"\'foo\\"\\$x\\`bar\\`\\"xyzzy\'"')
  end

  it "should handle linefeeds" do
    expect(scope.function_shellquote(["foo \n bar"])).to eq("\"foo \n bar\"")
  end
end