Skip to content

Commit a15932f

Browse files
Merge pull request #8608 from luchihoratiu/PUP-11062
(PUP-11062) Add required feature for delayed service setting
2 parents 8d21da1 + 16181a5 commit a15932f

File tree

2 files changed

+57
-43
lines changed

2 files changed

+57
-43
lines changed

lib/puppet/type/service.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ module Puppet
3838
feature :enableable, "The provider can enable and disable the service.",
3939
:methods => [:disable, :enable, :enabled?]
4040

41+
feature :delayed_startable, "The provider can set service to delayed start",
42+
:methods => [:delayed_start]
43+
44+
feature :manual_startable, "The provider can set service to manual start",
45+
:methods => [:manual_start]
46+
4147
feature :controllable, "The provider uses a control variable."
4248

4349
feature :flaggable, "The provider can pass flags to the service."
@@ -67,7 +73,7 @@ module Puppet
6773
provider.disable
6874
end
6975

70-
newvalue(:manual, :event => :service_manual_start) do
76+
newvalue(:manual, :event => :service_manual_start, :required_features => :manual_startable) do
7177
provider.manual_start
7278
end
7379

@@ -81,21 +87,14 @@ def retrieve
8187
provider.enabled?
8288
end
8389

84-
# This only works on Windows systems.
85-
newvalue(:delayed, :event => :service_delayed_start) do
90+
newvalue(:delayed, :event => :service_delayed_start, :required_features => :delayed_startable) do
8691
provider.delayed_start
8792
end
8893

8994
def insync?(current)
9095
return provider.enabled_insync?(current) if provider.respond_to?(:enabled_insync?)
9196
super(current)
9297
end
93-
94-
validate do |value|
95-
if (value == :manual || value == :delayed) && !Puppet::Util::Platform.windows?
96-
raise Puppet::Error.new(_("Setting enable to %{value} is only supported on Microsoft Windows.") % { value: value.to_s} )
97-
end
98-
end
9998
end
10099

101100
# Handle whether the service should actually be running right now.

spec/unit/type/service_spec.rb

Lines changed: 49 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -72,50 +72,65 @@ def safely_load_service_type
7272
allow(@provider.class).to receive(:supports_parameter?).and_return(true)
7373
end
7474

75-
it "should support :true as a value" do
76-
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :true)
77-
expect(srv.should(:enable)).to eq(:true)
78-
end
75+
describe "for value without required features" do
76+
before :each do
77+
allow(@provider).to receive(:satisfies?)
78+
end
7979

80-
it "should support :false as a value" do
81-
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :false)
82-
expect(srv.should(:enable)).to eq(:false)
83-
end
80+
it "should not support :mask as a value" do
81+
expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :mask) }.to raise_error(
82+
Puppet::ResourceError,
83+
/Provider .+ must have features 'maskable' to set 'enable' to 'mask'/
84+
)
85+
end
8486

85-
it "should support :mask as a value" do
86-
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :mask)
87-
expect(srv.should(:enable)).to eq(:mask)
88-
end
87+
it "should not support :manual as a value" do
88+
expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :manual) }.to raise_error(
89+
Puppet::ResourceError,
90+
/Provider .+ must have features 'manual_startable' to set 'enable' to 'manual'/
91+
)
92+
end
8993

90-
it "should support :manual as a value on Windows" do
91-
allow(Puppet::Util::Platform).to receive(:windows?).and_return(true)
92-
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :manual)
93-
expect(srv.should(:enable)).to eq(:manual)
94+
it "should not support :mask as a value" do
95+
expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :delayed) }.to raise_error(
96+
Puppet::ResourceError,
97+
/Provider .+ must have features 'delayed_startable' to set 'enable' to 'delayed'/
98+
)
99+
end
94100
end
95101

96-
it "should support :delayed as a value on Windows" do
97-
allow(Puppet::Util::Platform).to receive(:windows?).and_return(true)
102+
describe "for value with required features" do
103+
before :each do
104+
allow(@provider).to receive(:satisfies?).and_return(:true)
105+
end
106+
107+
it "should support :true as a value" do
108+
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :true)
109+
expect(srv.should(:enable)).to eq(:true)
110+
end
98111

99-
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :delayed)
100-
expect(srv.should(:enable)).to eq(:delayed)
101-
end
112+
it "should support :false as a value" do
113+
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :false)
114+
expect(srv.should(:enable)).to eq(:false)
115+
end
102116

103-
it "should not support :manual as a value when not on Windows" do
104-
allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
117+
it "should support :mask as a value" do
118+
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :mask)
119+
expect(srv.should(:enable)).to eq(:mask)
120+
end
105121

106-
expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :manual) }.to raise_error(
107-
Puppet::Error,
108-
/Setting enable to manual is only supported on Microsoft Windows\./
109-
)
110-
end
122+
it "should support :manual as a value on Windows" do
123+
allow(Puppet::Util::Platform).to receive(:windows?).and_return(true)
124+
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :manual)
125+
expect(srv.should(:enable)).to eq(:manual)
126+
end
111127

112-
it "should not support :delayed as a value when not on Windows" do
113-
allow(Puppet::Util::Platform).to receive(:windows?).and_return(false)
128+
it "should support :delayed as a value on Windows" do
129+
allow(Puppet::Util::Platform).to receive(:windows?).and_return(true)
114130

115-
expect { Puppet::Type.type(:service).new(:name => "yay", :enable => :delayed) }.to raise_error(
116-
Puppet::Error,
117-
/Setting enable to delayed is only supported on Microsoft Windows\./
118-
)
131+
srv = Puppet::Type.type(:service).new(:name => "yay", :enable => :delayed)
132+
expect(srv.should(:enable)).to eq(:delayed)
133+
end
119134
end
120135
end
121136

0 commit comments

Comments
 (0)