ruby-pwsh 0.10.1 → 0.10.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require 'ruby-pwsh'
5
+
6
+ # Needs to be declared here so it is usable in before and it blocks alike
7
+ test_manifest = File.expand_path('../../fixtures/test.pp', File.dirname(__FILE__))
8
+ fixtures_path = File.expand_path('../../fixtures', File.dirname(__FILE__))
9
+
10
+ def execute_reset_command(reset_command)
11
+ manager = Pwsh::Manager.instance(Pwsh::Manager.powershell_path, Pwsh::Manager.powershell_args)
12
+ result = manager.execute(reset_command)
13
+ raise result[:errormessage] unless result[:errormessage].nil?
14
+ end
15
+
16
+ RSpec.describe 'DSC Acceptance: Complex' do
17
+ let(:powershell) { Pwsh::Manager.instance(Pwsh::Manager.powershell_path, Pwsh::Manager.powershell_args) }
18
+ let(:module_path) { File.expand_path('../../fixtures/modules', File.dirname(__FILE__)) }
19
+ let(:puppet_apply) do
20
+ "bundle exec puppet apply #{test_manifest} --modulepath #{module_path} --detailed-exitcodes --trace"
21
+ end
22
+
23
+ context 'Adding a new website' do
24
+ before(:each) do
25
+ reset_command = <<~RESET_COMMAND
26
+ # Ensure IIS is not installed
27
+ $Feature = Get-WindowsFeature -Name 'Web-Asp-Net45'
28
+ If ($Feature.Installed) {
29
+ Remove-WindowsFeature -Name $Feature.Name -ErrorAction Stop
30
+ }
31
+ $DefaultSite = Get-Website 'Default Web Site' -ErrorAction Continue
32
+ $ExampleSite = Get-Website 'Puppet DSC Site' -ErrorAction Continue
33
+ If ($DefaultSite.State -eq 'Stopped') {
34
+ Start-Website -Name $DefaultSite.Name
35
+ }
36
+ If ($ExampleSite) {
37
+ Stop-Website -Name $ExampleSite.Name
38
+ Remove-Website -Name $ExampleSite.Name
39
+ Remove-Item -Path '#{fixtures_path}/website' -Recurse -Force -ErrorAction SilentlyContinue
40
+ }
41
+ RESET_COMMAND
42
+ execute_reset_command(reset_command)
43
+ end
44
+
45
+ it 'applies idempotently' do
46
+ content = <<~MANIFEST.strip
47
+ $destination_path = '#{fixtures_path}/website'
48
+ $website_name = 'Puppet DSC Site'
49
+ $site_id = 7
50
+ $index_html = @(INDEXHTML)
51
+ <!doctype html>
52
+ <html lang=en>
53
+
54
+ <head>
55
+ <meta charset=utf-8>
56
+ <title>blah</title>
57
+ </head>
58
+
59
+ <body>
60
+ <p>I'm the content</p>
61
+ </body>
62
+
63
+ </html>
64
+ | INDEXHTML
65
+ # Install the IIS role
66
+ dsc_xwindowsfeature { 'IIS':
67
+ dsc_ensure => 'Present',
68
+ dsc_name => 'Web-Server',
69
+ }
70
+
71
+ # Stop the default website
72
+ dsc_xwebsite { 'DefaultSite':
73
+ dsc_ensure => 'Present',
74
+ dsc_name => 'Default Web Site',
75
+ dsc_state => 'Stopped',
76
+ dsc_serverautostart => false,
77
+ dsc_physicalpath => 'C:\inetpub\wwwroot',
78
+ require => Dsc_xwindowsfeature['IIS'],
79
+ }
80
+
81
+ # Install the ASP .NET 4.5 role
82
+ dsc_xwindowsfeature { 'AspNet45':
83
+ dsc_ensure => 'Present',
84
+ dsc_name => 'Web-Asp-Net45',
85
+ }
86
+
87
+ file { 'WebContentFolder':
88
+ ensure => directory,
89
+ path => $destination_path,
90
+ require => Dsc_xwindowsfeature['AspNet45'],
91
+ }
92
+
93
+ # Copy the website content
94
+ file { 'WebContentIndex':
95
+ path => "${destination_path}/index.html",
96
+ content => $index_html,
97
+ require => File['WebContentFolder'],
98
+ }
99
+
100
+ # Create the new Website
101
+ dsc_xwebsite { 'NewWebsite':
102
+ dsc_ensure => 'Present',
103
+ dsc_name => $website_name,
104
+ dsc_siteid => $site_id,
105
+ dsc_state => 'Started',
106
+ dsc_serverautostart => true,
107
+ dsc_physicalpath => $destination_path,
108
+ require => File['WebContentIndex'],
109
+ }
110
+ MANIFEST
111
+ File.open(test_manifest, 'w') { |file| file.write(content) }
112
+ # Puppet apply the test manifest
113
+ first_run_result = powershell.execute(puppet_apply)
114
+ expect(first_run_result[:exitcode]).to be(2)
115
+ # The Default Site is stopped
116
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwebsite\[DefaultSite\]/dsc_state: dsc_state changed 'Started' to 'Stopped'})
117
+ expect(first_run_result[:native_stdout]).to match(/dsc_xwebsite\[{:name=>"DefaultSite", :dsc_name=>"Default Web Site"}\]: Updating: Finished/)
118
+ # AspNet45 is installed
119
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwindowsfeature\[AspNet45\]/dsc_ensure: dsc_ensure changed 'Absent' to 'Present'})
120
+ expect(first_run_result[:native_stdout]).to match(/dsc_xwindowsfeature\[{:name=>"AspNet45", :dsc_name=>"Web-Asp-Net45"}\]: Creating: Finished/)
121
+ # Web content folder created
122
+ expect(first_run_result[:native_stdout]).to match(%r{File\[WebContentFolder\]/ensure: created})
123
+ # Web content index created
124
+ expect(first_run_result[:native_stdout]).to match(%r{File\[WebContentIndex\]/ensure: defined content as '.+'})
125
+ # Web site created
126
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwebsite\[NewWebsite\]/dsc_siteid: dsc_siteid changed to 7})
127
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwebsite\[NewWebsite\]/dsc_ensure: dsc_ensure changed 'Absent' to 'Present'})
128
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwebsite\[NewWebsite\]/dsc_physicalpath: dsc_physicalpath changed to '.+fixtures/website'})
129
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwebsite\[NewWebsite\]/dsc_state: dsc_state changed to 'Started'})
130
+ expect(first_run_result[:native_stdout]).to match(%r{Dsc_xwebsite\[NewWebsite\]/dsc_serverautostart: dsc_serverautostart changed to 'true'})
131
+ expect(first_run_result[:native_stdout]).to match(/dsc_xwebsite\[{:name=>"NewWebsite", :dsc_name=>"Puppet DSC Site"}\]: Creating: Finished/)
132
+ # Run finished
133
+ expect(first_run_result[:native_stdout]).to match(/Applied catalog/)
134
+ # Second run is idempotent
135
+ second_run_result = powershell.execute(puppet_apply)
136
+ expect(second_run_result[:exitcode]).to be(0)
137
+ end
138
+ end
139
+ end
data/spec/exit-27.ps1 ADDED
@@ -0,0 +1 @@
1
+ exit 27
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/setup'
4
+ require 'ruby-pwsh'
5
+
6
+ RSpec.configure do |config|
7
+ # Enable flags like --only-failures and --next-failure
8
+ config.example_status_persistence_file_path = '.rspec_status'
9
+
10
+ # Disable RSpec exposing methods globally on `Module` and `main`
11
+ config.disable_monkey_patching!
12
+
13
+ config.expect_with :rspec do |c|
14
+ c.syntax = :expect
15
+ end
16
+ end