win32-service 0.6.1-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
data/test/tc_daemon.rb ADDED
@@ -0,0 +1,55 @@
1
+ #########################################################################
2
+ # tc_daemon.rb
3
+ #
4
+ # Test suite for the Win32::Daemon class. You should run this test via
5
+ # the 'rake test' or 'rake test_daemon' tasks.
6
+ #
7
+ # These tests are rather limited, since the acid test is to install
8
+ # your daemon as a service and see how it behaves.
9
+ #########################################################################
10
+ require 'win32/daemon'
11
+ require 'test/unit'
12
+ include Win32
13
+
14
+ class TC_Daemon < Test::Unit::TestCase
15
+ def setup
16
+ @daemon = Daemon.new
17
+ end
18
+
19
+ def test_version
20
+ assert_equal('0.6.1', Daemon::VERSION)
21
+ end
22
+
23
+ def test_constructor
24
+ assert_respond_to(Daemon, :new)
25
+ assert_nothing_raised{ Daemon.new }
26
+ assert_raises(ArgumentError){ Daemon.new(1) } # No arguments by default
27
+ end
28
+
29
+ def test_mainloop
30
+ assert_respond_to(@daemon, :mainloop)
31
+ end
32
+
33
+ def test_state
34
+ assert_respond_to(@daemon, :state)
35
+ end
36
+
37
+ def test_running
38
+ assert_respond_to(@daemon, :running?)
39
+ end
40
+
41
+ def test_constants
42
+ assert_not_nil(Daemon::CONTINUE_PENDING)
43
+ assert_not_nil(Daemon::PAUSE_PENDING)
44
+ assert_not_nil(Daemon::PAUSED)
45
+ assert_not_nil(Daemon::RUNNING)
46
+ assert_not_nil(Daemon::START_PENDING)
47
+ assert_not_nil(Daemon::STOP_PENDING)
48
+ assert_not_nil(Daemon::STOPPED)
49
+ assert_not_nil(Daemon::IDLE)
50
+ end
51
+
52
+ def teardown
53
+ @daemon = nil
54
+ end
55
+ end
@@ -0,0 +1,260 @@
1
+ ##########################################################################
2
+ # tc_service.rb
3
+ #
4
+ # Test case for the Win32::Service class.
5
+ ##########################################################################
6
+ require 'win32/service'
7
+ require 'socket'
8
+ require 'test/unit'
9
+
10
+ class TC_Win32_Service < Test::Unit::TestCase
11
+ def setup
12
+ @display_name = "Task Scheduler"
13
+ @service_name = "Schedule"
14
+ @service_stat = nil
15
+ @services = []
16
+ end
17
+
18
+ def wait_for_status(status)
19
+ sleep 0.1 while Win32::Service.status(@service_name).current_state != status
20
+ end
21
+
22
+ def test_version
23
+ assert_equal('0.6.1', Win32::Service::VERSION)
24
+ end
25
+
26
+ def test_service_configure
27
+ assert_respond_to(Win32::Service, :configure)
28
+ end
29
+
30
+ def test_service_configure_expected_errors
31
+ assert_raise(ArgumentError){ Win32::Service.configure }
32
+ assert_raise(ArgumentError){ Win32::Service.configure('bogus') }
33
+ assert_raise(ArgumentError){ Win32::Service.configure('bogus', 'bogus') }
34
+ assert_raise(Win32::Service::Error){ Win32::Service.configure('x', nil, :description => 'Test') }
35
+ assert_raise(Win32::Service::Error){ Win32::Service.configure('x', 'y', :description => 'Test') }
36
+ end
37
+
38
+ def test_services_basic
39
+ assert_respond_to(Win32::Service, :services)
40
+ assert_nothing_raised{ Win32::Service.services }
41
+ assert_nothing_raised{ Win32::Service.services(nil) }
42
+ assert_nothing_raised{ Win32::Service.services(nil, 'network') }
43
+ end
44
+
45
+ def test_services_non_block_form
46
+ assert_nothing_raised{ @services = Win32::Service.services }
47
+ assert_kind_of(Array, @services)
48
+ assert_kind_of(Struct::ServiceInfo, @services[0])
49
+ end
50
+
51
+ def test_services_block_form
52
+ assert_nothing_raised{ Win32::Service.services{ |s| @services << s } }
53
+ assert_kind_of(Array, @services)
54
+ assert_kind_of(Struct::ServiceInfo, @services[0])
55
+ end
56
+
57
+ def test_services_expected_errors
58
+ assert_raise(TypeError){ Win32::Service.services(1) }
59
+ assert_raise(TypeError){ Win32::Service.services(nil, 1) }
60
+ assert_raise(ArgumentError){ Win32::Service.services(nil, 'network', 1) }
61
+ assert_raise(Win32::Service::Error){ Win32::Service.services('bogus') }
62
+ end
63
+
64
+ def test_delete
65
+ assert_respond_to(Win32::Service, :delete)
66
+ end
67
+
68
+ def test_delete_expected_errors
69
+ assert_raise(ArgumentError){ Win32::Service.delete }
70
+ assert_raise(Win32::Service::Error){ Win32::Service.delete('bogus') }
71
+ assert_raise(Win32::Service::Error){ Win32::Service.delete('bogus', 'bogus') }
72
+ assert_raise(ArgumentError){ Win32::Service.delete('x', 'y', 'z') }
73
+ end
74
+
75
+ def test_service_pause_and_resume
76
+ assert_respond_to(Win32::Service, :pause)
77
+ assert_respond_to(Win32::Service, :resume)
78
+ assert_nothing_raised{ Win32::Service.pause(@service_name) }
79
+ assert_nothing_raised{ wait_for_status('paused') }
80
+ assert_nothing_raised{ Win32::Service.pause(@service_name) }
81
+ assert_nothing_raised{ Win32::Service.resume(@service_name) }
82
+ assert_nothing_raised{ wait_for_status('running') }
83
+ end
84
+
85
+ def test_pause_expected_errors
86
+ assert_raise(ArgumentError){ Win32::Service.pause }
87
+ assert_raise(Win32::Service::Error){ Win32::Service.pause('bogus') }
88
+ assert_raise(Win32::Service::Error){ Win32::Service.pause('bogus', 'bogus') }
89
+ assert_raise(ArgumentError){ Win32::Service.pause('x', 'y', 'z') }
90
+ end
91
+
92
+ def test_resume_expected_errors
93
+ assert_raise(ArgumentError){ Win32::Service.resume }
94
+ assert_raise(Win32::Service::Error){ Win32::Service.resume('bogus') }
95
+ assert_raise(Win32::Service::Error){ Win32::Service.resume('bogus', 'bogus') }
96
+ assert_raise(ArgumentError){ Win32::Service.resume('bogus', 'bogus', 'a') }
97
+ end
98
+
99
+ def test_service_stop_and_start
100
+ assert_respond_to(Win32::Service, :stop)
101
+ assert_respond_to(Win32::Service, :start)
102
+ assert_nothing_raised{ Win32::Service.stop(@service_name) }
103
+ assert_nothing_raised{ wait_for_status('stopped') }
104
+ assert_raise(Win32::Service::Error){ Win32::Service.stop(@service_name) }
105
+ assert_nothing_raised{ Win32::Service.start(@service_name) }
106
+ assert_nothing_raised{ wait_for_status('running') }
107
+ end
108
+
109
+ def test_stop_expected_errors
110
+ assert_raise(ArgumentError){ Win32::Service.stop }
111
+ assert_raise(Win32::Service::Error){ Win32::Service.stop('bogus') }
112
+ assert_raise(Win32::Service::Error){ Win32::Service.stop('bogus', 'bogus') }
113
+ assert_raise(ArgumentError){ Win32::Service.stop('x', 'y', 'z') }
114
+ end
115
+
116
+ def test_start_expected_errors
117
+ assert_raise(ArgumentError){ Win32::Service.start }
118
+ assert_raise(Win32::Service::Error){ Win32::Service.start(@service_name) } # Started
119
+ assert_raise(Win32::Service::Error){ Win32::Service.start('bogus') }
120
+ assert_raise(Win32::Service::Error){ Win32::Service.start('bogus', 'bogus') }
121
+ assert_raise(Win32::Service::Error){ Win32::Service.start('bogus', 'bogus', 'a') }
122
+ assert_raise(Win32::Service::Error){ Win32::Service.start('a', 'b', 'c', 'd') }
123
+ end
124
+
125
+ def test_service_stop_expected_errors
126
+ assert_raise(ArgumentError){ Win32::Service.stop }
127
+ assert_raise(Win32::Service::Error){ Win32::Service.stop('bogus') }
128
+ assert_raise(Win32::Service::Error){ Win32::Service.stop('bogus', 'bogus') }
129
+ assert_raise(ArgumentError){ Win32::Service.stop('a', 'b', 'c') }
130
+ end
131
+
132
+ def test_service_status_basic
133
+ assert_respond_to(Win32::Service, :status)
134
+ assert_nothing_raised{ Win32::Service.status(@service_name) }
135
+ assert_kind_of(Struct::ServiceStatus, Win32::Service.status(@service_name))
136
+ end
137
+
138
+ def test_service_get_service_name_basic
139
+ assert_respond_to(Win32::Service, :get_service_name)
140
+ assert_nothing_raised{ Win32::Service.get_service_name(@display_name) }
141
+ assert_kind_of(String, Win32::Service.get_service_name(@display_name))
142
+ end
143
+
144
+ def test_service_getservicename_alias_basic
145
+ assert_respond_to(Win32::Service, :getservicename)
146
+ assert_nothing_raised{ Win32::Service.getservicename(@display_name) }
147
+ assert_kind_of(String, Win32::Service.getservicename(@display_name))
148
+ end
149
+
150
+ def test_service_get_service_name
151
+ assert_equal(@service_name, Win32::Service.get_service_name(@display_name))
152
+ assert_equal(@service_name, Win32::Service.getservicename(@display_name))
153
+ end
154
+
155
+ def test_service_get_service_name_expected_errors
156
+ assert_raise(ArgumentError){ Win32::Service.get_service_name }
157
+ assert_raise(Win32::Service::Error){ Win32::Service.get_service_name('bogus') }
158
+ assert_raise(Win32::Service::Error){ Win32::Service.get_service_name('foo','bogus') }
159
+ assert_raise(ArgumentError){ Win32::Service.get_service_name('x', 'y', 'z') }
160
+ end
161
+
162
+ def test_service_get_display_name_basic
163
+ assert_respond_to(Win32::Service, :get_display_name)
164
+ assert_nothing_raised{ Win32::Service.get_display_name(@service_name) }
165
+ assert_kind_of(String, Win32::Service.get_display_name(@service_name))
166
+ end
167
+
168
+ def test_service_getdisplayname_alias_basic
169
+ assert_respond_to(Win32::Service, :getdisplayname)
170
+ assert_nothing_raised{ Win32::Service.getdisplayname(@service_name) }
171
+ assert_kind_of(String, Win32::Service.getdisplayname(@service_name))
172
+ end
173
+
174
+ def test_service_get_display_name
175
+ assert_equal(@display_name, Win32::Service.get_display_name(@service_name))
176
+ assert_equal(@display_name, Win32::Service.getdisplayname(@service_name))
177
+ end
178
+
179
+ def test_service_get_display_name_expected_errors
180
+ assert_raise(ArgumentError){ Win32::Service.get_display_name }
181
+ assert_raise(Win32::Service::Error){ Win32::Service.get_display_name('bogus') }
182
+ assert_raise(Win32::Service::Error){ Win32::Service.get_display_name('foo','bogus') }
183
+ assert_raise(ArgumentError){ Win32::Service.get_display_name('x', 'y', 'z') }
184
+ end
185
+
186
+ def test_service_exists
187
+ assert_respond_to(Win32::Service, :exists?)
188
+ assert_nothing_raised{ Win32::Service.exists?('W32Time') }
189
+ assert_equal(true, Win32::Service.exists?('W32Time'))
190
+ assert_equal(false, Win32::Service.exists?('foobar'))
191
+ end
192
+
193
+ def test_service_exists_expected_errors
194
+ assert_raises(ArgumentError){ Win32::Service.exists? }
195
+ assert_raises(Win32::Service::Error){Win32::Service.exists?('foo', 'bogushost') }
196
+ assert_raises(ArgumentError){ Win32::Service.exists?('foo', 'bar', 'baz') }
197
+ end
198
+
199
+ def test_scm_security_constants
200
+ assert_not_nil(Win32::Service::MANAGER_ALL_ACCESS)
201
+ assert_not_nil(Win32::Service::MANAGER_CREATE_SERVICE)
202
+ assert_not_nil(Win32::Service::MANAGER_CONNECT)
203
+ assert_not_nil(Win32::Service::MANAGER_ENUMERATE_SERVICE)
204
+ assert_not_nil(Win32::Service::MANAGER_LOCK)
205
+ assert_not_nil(Win32::Service::MANAGER_QUERY_LOCK_STATUS)
206
+ end
207
+
208
+ def test_service_specific_constants
209
+ assert_not_nil(Win32::Service::ALL_ACCESS)
210
+ assert_not_nil(Win32::Service::CHANGE_CONFIG)
211
+ assert_not_nil(Win32::Service::ENUMERATE_DEPENDENTS)
212
+ assert_not_nil(Win32::Service::INTERROGATE)
213
+ assert_not_nil(Win32::Service::PAUSE_CONTINUE)
214
+ assert_not_nil(Win32::Service::QUERY_CONFIG)
215
+ assert_not_nil(Win32::Service::QUERY_STATUS)
216
+ assert_not_nil(Win32::Service::STOP)
217
+ assert_not_nil(Win32::Service::START)
218
+ assert_not_nil(Win32::Service::USER_DEFINED_CONTROL)
219
+ end
220
+
221
+ def test_service_type_constants
222
+ assert_not_nil(Win32::Service::FILE_SYSTEM_DRIVER)
223
+ assert_not_nil(Win32::Service::KERNEL_DRIVER)
224
+ assert_not_nil(Win32::Service::WIN32_OWN_PROCESS)
225
+ assert_not_nil(Win32::Service::WIN32_SHARE_PROCESS)
226
+ assert_not_nil(Win32::Service::INTERACTIVE_PROCESS)
227
+ end
228
+
229
+ def test_service_start_option_constants
230
+ assert_not_nil(Win32::Service::AUTO_START)
231
+ assert_not_nil(Win32::Service::BOOT_START)
232
+ assert_not_nil(Win32::Service::DEMAND_START)
233
+ assert_not_nil(Win32::Service::DISABLED)
234
+ assert_not_nil(Win32::Service::SYSTEM_START)
235
+ end
236
+
237
+ def test_service_error_control_constants
238
+ assert_not_nil(Win32::Service::ERROR_IGNORE)
239
+ assert_not_nil(Win32::Service::ERROR_NORMAL)
240
+ assert_not_nil(Win32::Service::ERROR_SEVERE)
241
+ assert_not_nil(Win32::Service::ERROR_CRITICAL)
242
+ end
243
+
244
+ def test_service_state_constants
245
+ assert_not_nil(Win32::Service::CONTINUE_PENDING)
246
+ assert_not_nil(Win32::Service::PAUSE_PENDING)
247
+ assert_not_nil(Win32::Service::PAUSED)
248
+ assert_not_nil(Win32::Service::RUNNING)
249
+ assert_not_nil(Win32::Service::START_PENDING)
250
+ assert_not_nil(Win32::Service::STOP_PENDING)
251
+ assert_not_nil(Win32::Service::STOPPED)
252
+ end
253
+
254
+ def teardown
255
+ @display_name = nil
256
+ @service_name = nil
257
+ @service_stat = nil
258
+ @services = nil
259
+ end
260
+ end
@@ -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