win32-service 0.5.2 → 0.6.0
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.
- data/CHANGES +37 -1
- data/MANIFEST +18 -16
- data/README +26 -28
- data/doc/daemon.txt +54 -55
- data/doc/service.txt +123 -134
- data/ext/extconf.rb +5 -0
- data/ext/win32/daemon.c +592 -0
- data/lib/win32/service.rb +1539 -0
- data/test/tc_daemon.rb +14 -18
- data/test/tc_service.rb +221 -367
- data/test/tc_service_create.rb +83 -0
- data/test/tc_service_info.rb +170 -0
- data/test/tc_service_status.rb +108 -0
- metadata +63 -40
- data/extconf.rb +0 -18
- data/lib/win32/service.c +0 -2131
- data/lib/win32/service.h +0 -416
@@ -0,0 +1,83 @@
|
|
1
|
+
########################################################################
|
2
|
+
# tc_service_create.rb
|
3
|
+
#
|
4
|
+
# Test case for the Service.create method. This test case will create
|
5
|
+
# a dummy (notepad) service. It won't actually run of course.
|
6
|
+
########################################################################
|
7
|
+
require 'win32/service'
|
8
|
+
require 'test/unit'
|
9
|
+
|
10
|
+
class TC_Service_Create < Test::Unit::TestCase
|
11
|
+
def setup
|
12
|
+
@notepad = "C:\\windows\\system32\\notepad.exe"
|
13
|
+
@service = 'notepad'
|
14
|
+
@info = nil
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_create_basic
|
18
|
+
assert_respond_to(Win32::Service, :new)
|
19
|
+
assert_respond_to(Win32::Service, :create)
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_create_with_minimal_options
|
23
|
+
assert_nothing_raised{
|
24
|
+
Win32::Service.new(@service, nil, :binary_path_name => @notepad)
|
25
|
+
}
|
26
|
+
|
27
|
+
assert_equal(true, Win32::Service.exists?(@service))
|
28
|
+
assert_nothing_raised{ @info = Win32::Service.config_info(@service) }
|
29
|
+
|
30
|
+
assert_equal('own process, interactive', @info.service_type)
|
31
|
+
assert_equal('demand start', @info.start_type)
|
32
|
+
assert_equal('normal', @info.error_control)
|
33
|
+
assert_equal(@notepad, @info.binary_path_name)
|
34
|
+
assert_equal('', @info.load_order_group)
|
35
|
+
assert_equal(0, @info.tag_id)
|
36
|
+
assert_equal([], @info.dependencies)
|
37
|
+
assert_equal('LocalSystem', @info.service_start_name)
|
38
|
+
assert_equal('notepad', @info.display_name)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_create_with_most_options
|
42
|
+
assert_nothing_raised{
|
43
|
+
Win32::Service.new(@service, nil,
|
44
|
+
:display_name => 'Notepad Test',
|
45
|
+
:desired_access => Win32::Service::ALL_ACCESS,
|
46
|
+
:service_type => Win32::Service::WIN32_OWN_PROCESS,
|
47
|
+
:start_type => Win32::Service::DISABLED,
|
48
|
+
:error_control => Win32::Service::ERROR_IGNORE,
|
49
|
+
:binary_path_name => @notepad,
|
50
|
+
:load_order_group => 'Network',
|
51
|
+
:dependencies => 'W32Time',
|
52
|
+
:description => 'Test service. Please delete me'
|
53
|
+
)
|
54
|
+
}
|
55
|
+
assert_equal(true, Win32::Service.exists?(@service))
|
56
|
+
assert_nothing_raised{ @info = Win32::Service.config_info(@service) }
|
57
|
+
|
58
|
+
assert_equal('own process', @info.service_type)
|
59
|
+
assert_equal('disabled', @info.start_type)
|
60
|
+
assert_equal('ignore', @info.error_control)
|
61
|
+
assert_equal(@notepad, @info.binary_path_name)
|
62
|
+
assert_equal('Network', @info.load_order_group)
|
63
|
+
assert_equal(0, @info.tag_id)
|
64
|
+
assert_equal(['W32Time'], @info.dependencies)
|
65
|
+
assert_equal('LocalSystem', @info.service_start_name)
|
66
|
+
assert_equal('Notepad Test', @info.display_name)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_create_expected_errors
|
70
|
+
assert_raise(ArgumentError){ Win32::Service.new }
|
71
|
+
assert_raise(ArgumentError){ Win32::Service.new(@service) }
|
72
|
+
assert_raise(ArgumentError){ Win32::Service.new(@service, 'bogus') }
|
73
|
+
end
|
74
|
+
|
75
|
+
def teardown
|
76
|
+
Win32::Service.delete(@service) if Win32::Service.exists?(@service)
|
77
|
+
sleep 1 while Win32::Service.exists?(@service)
|
78
|
+
|
79
|
+
@notepad = nil
|
80
|
+
@service = nil
|
81
|
+
@status = nil
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
########################################################################
|
2
|
+
# tc_service_info.rb
|
3
|
+
#
|
4
|
+
# Test case for the Struct::ServiceInfo structure.
|
5
|
+
########################################################################
|
6
|
+
require 'win32/service'
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class TC_Struct_ServiceInfo < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
@services = Win32::Service.services
|
12
|
+
@service_info = @services[0]
|
13
|
+
|
14
|
+
@error_controls = [
|
15
|
+
'critical',
|
16
|
+
'ignore',
|
17
|
+
'normal',
|
18
|
+
'severe',
|
19
|
+
nil
|
20
|
+
]
|
21
|
+
|
22
|
+
@start_types = [
|
23
|
+
'auto start',
|
24
|
+
'boot start',
|
25
|
+
'demand start',
|
26
|
+
'disabled',
|
27
|
+
'system start',
|
28
|
+
nil
|
29
|
+
]
|
30
|
+
|
31
|
+
@types = [
|
32
|
+
'file system driver',
|
33
|
+
'kernel driver',
|
34
|
+
'own process',
|
35
|
+
'share process',
|
36
|
+
'recognizer token',
|
37
|
+
'driver',
|
38
|
+
'win32',
|
39
|
+
'all',
|
40
|
+
'own process, interactive',
|
41
|
+
'share process, interactive',
|
42
|
+
nil
|
43
|
+
]
|
44
|
+
|
45
|
+
@states = [
|
46
|
+
'continue pending',
|
47
|
+
'pause pending',
|
48
|
+
'paused',
|
49
|
+
'running',
|
50
|
+
'start pending',
|
51
|
+
'stop pending',
|
52
|
+
'stopped',
|
53
|
+
nil
|
54
|
+
]
|
55
|
+
|
56
|
+
@controls = [
|
57
|
+
'netbind change',
|
58
|
+
'param change',
|
59
|
+
'pause continue',
|
60
|
+
'shutdown',
|
61
|
+
'stop',
|
62
|
+
'hardware profile change',
|
63
|
+
'power event',
|
64
|
+
'session change',
|
65
|
+
nil
|
66
|
+
]
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_service_info_info_service_name
|
70
|
+
assert_respond_to(@service_info, :service_name)
|
71
|
+
assert_kind_of(String, @service_info.service_name)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_service_info_info_display_name
|
75
|
+
assert_respond_to(@service_info, :display_name)
|
76
|
+
assert_kind_of(String, @service_info.display_name)
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_service_info_info_service_type
|
80
|
+
assert_respond_to(@service_info, :service_type)
|
81
|
+
assert(@types.include?(@service_info.service_type))
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_service_info_current_state
|
85
|
+
assert_respond_to(@service_info, :current_state)
|
86
|
+
assert(@states.include?(@service_info.current_state))
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_service_info_controls_accepted
|
90
|
+
assert_respond_to(@service_info, :controls_accepted)
|
91
|
+
assert(@controls.include?(@service_info.controls_accepted))
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_service_info_win32_exit_code
|
95
|
+
assert_respond_to(@service_info, :win32_exit_code)
|
96
|
+
assert_kind_of(Fixnum, @service_info.win32_exit_code)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_service_info_service_specific_exit_code
|
100
|
+
assert_respond_to(@service_info, :service_specific_exit_code)
|
101
|
+
assert_kind_of(Fixnum, @service_info.service_specific_exit_code)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_service_info_check_point
|
105
|
+
assert_respond_to(@service_info, :check_point)
|
106
|
+
assert_kind_of(Fixnum, @service_info.check_point)
|
107
|
+
end
|
108
|
+
|
109
|
+
def test_service_info_wait_hint
|
110
|
+
assert_respond_to(@service_info, :wait_hint)
|
111
|
+
assert_kind_of(Fixnum, @service_info.wait_hint)
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_service_info_binary_path_name
|
115
|
+
assert_respond_to(@service_info, :binary_path_name)
|
116
|
+
assert_kind_of(String, @service_info.binary_path_name)
|
117
|
+
end
|
118
|
+
|
119
|
+
def test_service_info_start_type
|
120
|
+
assert_respond_to(@service_info, :start_type)
|
121
|
+
assert(@start_types.include?(@service_info.start_type))
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_service_info_error_control
|
125
|
+
assert_respond_to(@service_info, :error_control)
|
126
|
+
assert(@error_controls.include?(@service_info.error_control))
|
127
|
+
end
|
128
|
+
|
129
|
+
def test_service_info_load_order_group
|
130
|
+
assert_respond_to(@service_info, :load_order_group)
|
131
|
+
assert_kind_of(String, @service_info.load_order_group)
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_service_info_tag_id
|
135
|
+
assert_respond_to(@service_info, :tag_id)
|
136
|
+
assert_kind_of(Fixnum, @service_info.tag_id)
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_service_info_start_name
|
140
|
+
assert_respond_to(@service_info, :start_name)
|
141
|
+
assert_kind_of(String, @service_info.start_name)
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_service_info_dependencies
|
145
|
+
assert_respond_to(@service_info, :dependencies)
|
146
|
+
assert_kind_of(Array, @service_info.dependencies)
|
147
|
+
end
|
148
|
+
|
149
|
+
def test_service_info_description
|
150
|
+
assert_respond_to(@service_info, :description)
|
151
|
+
assert_kind_of(String, @service_info.description)
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_service_info_interactive
|
155
|
+
assert_respond_to(@service_info, :interactive)
|
156
|
+
assert([true, false].include?(@service_info.interactive))
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_service_info_service_flags
|
160
|
+
assert_respond_to(@service_info, :service_flags)
|
161
|
+
assert([0,1].include?(@service_info.service_flags))
|
162
|
+
end
|
163
|
+
|
164
|
+
def teardown
|
165
|
+
@services = nil
|
166
|
+
@types = nil
|
167
|
+
@states = nil
|
168
|
+
@controls = nil
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
########################################################################
|
2
|
+
# tc_service_status.rb
|
3
|
+
#
|
4
|
+
# Test case for the Struct::ServiceStatus struct.
|
5
|
+
########################################################################
|
6
|
+
require 'win32/service'
|
7
|
+
require 'test/unit'
|
8
|
+
|
9
|
+
class TC_Struct_ServiceStatus < Test::Unit::TestCase
|
10
|
+
def setup
|
11
|
+
@service_name = 'Schedule'
|
12
|
+
@service_stat = Win32::Service.status(@service_name)
|
13
|
+
|
14
|
+
@types = [
|
15
|
+
'file system driver',
|
16
|
+
'kernel driver',
|
17
|
+
'own process',
|
18
|
+
'share process',
|
19
|
+
'recognizer token',
|
20
|
+
'driver',
|
21
|
+
'win32',
|
22
|
+
'all',
|
23
|
+
'own process, interactive',
|
24
|
+
'share process, interactive',
|
25
|
+
nil
|
26
|
+
]
|
27
|
+
|
28
|
+
@states = [
|
29
|
+
'continue pending',
|
30
|
+
'pause pending',
|
31
|
+
'paused',
|
32
|
+
'running',
|
33
|
+
'start pending',
|
34
|
+
'stop pending',
|
35
|
+
'stopped',
|
36
|
+
nil
|
37
|
+
]
|
38
|
+
|
39
|
+
@controls = [
|
40
|
+
'netbind change',
|
41
|
+
'param change',
|
42
|
+
'pause continue',
|
43
|
+
'shutdown',
|
44
|
+
'stop',
|
45
|
+
'hardware profile change',
|
46
|
+
'power event',
|
47
|
+
'session change',
|
48
|
+
nil
|
49
|
+
]
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_service_status_service_type
|
53
|
+
assert_respond_to(@service_stat, :service_type)
|
54
|
+
assert(@types.include?(@service_stat.service_type))
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_service_status_current_state
|
58
|
+
assert_respond_to(@service_stat, :current_state)
|
59
|
+
assert(@states.include?(@service_stat.current_state))
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_service_status_controls_accepted
|
63
|
+
assert_respond_to(@service_stat, :controls_accepted)
|
64
|
+
assert(@controls.include?(@service_stat.controls_accepted))
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_service_status_win32_exit_code
|
68
|
+
assert_respond_to(@service_stat, :win32_exit_code)
|
69
|
+
assert_kind_of(Fixnum, @service_stat.win32_exit_code)
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_service_status_service_specific_exit_code
|
73
|
+
assert_respond_to(@service_stat, :service_specific_exit_code)
|
74
|
+
assert_kind_of(Fixnum, @service_stat.service_specific_exit_code)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_service_status_check_point
|
78
|
+
assert_respond_to(@service_stat, :check_point)
|
79
|
+
assert_kind_of(Fixnum, @service_stat.check_point)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_service_status_wait_hint
|
83
|
+
assert_respond_to(@service_stat, :wait_hint)
|
84
|
+
assert_kind_of(Fixnum, @service_stat.wait_hint)
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_service_status_interactive
|
88
|
+
assert_respond_to(@service_stat, :interactive)
|
89
|
+
assert([true, false].include?(@service_stat.interactive))
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_service_status_pid
|
93
|
+
assert_respond_to(@service_stat, :pid)
|
94
|
+
assert_kind_of(Fixnum, @service_stat.pid)
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_service_status_service_flags
|
98
|
+
assert_respond_to(@service_stat, :service_flags)
|
99
|
+
assert_kind_of(Fixnum, @service_stat.service_flags)
|
100
|
+
end
|
101
|
+
|
102
|
+
def teardown
|
103
|
+
@service_stat = nil
|
104
|
+
@types = nil
|
105
|
+
@states = nil
|
106
|
+
@controls = nil
|
107
|
+
end
|
108
|
+
end
|
metadata
CHANGED
@@ -1,58 +1,81 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: win32-service
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2006-11-25 00:00:00 -07:00
|
8
|
-
summary: An interface for MS Windows services
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: djberg96@gmail.com
|
12
|
-
homepage: http://www.rubyforge.org/projects/win32utils
|
13
|
-
rubyforge_project: win32utils
|
14
|
-
description: An interface for MS Windows services
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.8.2
|
24
|
-
version:
|
4
|
+
version: 0.6.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Daniel J. Berger
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
-
|
36
|
-
|
37
|
-
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2007-11-25 00:00:00 -07:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: windows-pr
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.7.3
|
23
|
+
version:
|
24
|
+
description: An library for controlling and creating MS Windows services
|
25
|
+
email: djberg96@gmail.com
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions:
|
29
|
+
- ext/extconf.rb
|
30
|
+
extra_rdoc_files:
|
38
31
|
- CHANGES
|
39
32
|
- README
|
40
33
|
- MANIFEST
|
41
|
-
|
34
|
+
- ext/win32/daemon.c
|
35
|
+
- doc/service.txt
|
36
|
+
- doc/daemon.txt
|
37
|
+
files:
|
38
|
+
- test/tc_daemon.rb
|
42
39
|
- test/tc_service.rb
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
- test/tc_service_create.rb
|
41
|
+
- test/tc_service_info.rb
|
42
|
+
- test/tc_service_status.rb
|
43
|
+
- lib/win32/service.rb
|
46
44
|
- CHANGES
|
47
45
|
- README
|
48
46
|
- MANIFEST
|
47
|
+
- ext/win32/daemon.c
|
49
48
|
- doc/service.txt
|
50
49
|
- doc/daemon.txt
|
51
|
-
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: http://www.rubyforge.org/projects/win32utils
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
52
54
|
|
53
|
-
|
54
|
-
-
|
55
|
+
require_paths:
|
56
|
+
- lib
|
57
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.8.2
|
62
|
+
version:
|
63
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - ">="
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: "0"
|
68
|
+
version:
|
55
69
|
requirements: []
|
56
70
|
|
57
|
-
|
58
|
-
|
71
|
+
rubyforge_project: win32utils
|
72
|
+
rubygems_version: 0.9.5
|
73
|
+
signing_key:
|
74
|
+
specification_version: 2
|
75
|
+
summary: An library for controlling and creating MS Windows services
|
76
|
+
test_files:
|
77
|
+
- test/tc_daemon.rb
|
78
|
+
- test/tc_service.rb
|
79
|
+
- test/tc_service_create.rb
|
80
|
+
- test/tc_service_info.rb
|
81
|
+
- test/tc_service_status.rb
|