hammer_cli_foreman 3.5.0 → 3.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 006d4b4eed7a0555a9094223fcbf0310fbf45787fa879f96426b7420a3fd8207
4
- data.tar.gz: 78bb6049eae38f6793a420461c5ee8772eac699d538e33d331d01f12ab236178
3
+ metadata.gz: dc16859a1c7009f413c77229f58397aba4b0030da06342777e48a71175c63830
4
+ data.tar.gz: 595d6c7713563d97dea1cceb7d046c5f665d5e07fa2c6a133931959a4b1c0246
5
5
  SHA512:
6
- metadata.gz: 1a66faf43bc97309b2e98ddbf9aeb9dc9f5bd6a768326d305692819ac4c76bcb4d9def107795823b5df9192993f691ea608a31c9af003c0fcad4cbb57e8c09a1
7
- data.tar.gz: a873297a23beb5e95f8bd1a232e836a5b914af82836f90e33722ab8a7162f55396c17c93955d50929bbed95b3fe7c1b0cc48907b918c465a247d7ab22d511b90
6
+ metadata.gz: cb12b697b14fc4abc05c05363e16ff77d07a98b11584af354007397aeaf26c6cebdf7086e8d84828f711ef1814cb7307febe269bbb32920e8240ad0b79e714a2
7
+ data.tar.gz: 9e21177108564c9e0bd394fdd2603e06b4d2f3a50c9936d00ca800da2ec8ce28c1ee295f28434da5e011f12332dea7eaaf9ccd4104bf05734adbbec27027479f
data/config/foreman.yml CHANGED
@@ -13,6 +13,11 @@
13
13
  :username: 'admin'
14
14
  #:password: 'example'
15
15
 
16
+ # Basic Auth External:
17
+ #:default_auth_type: 'Basic_Auth_External'
18
+ #:username: 'admin'
19
+ #:password: 'example'
20
+
16
21
  # Oauth using the Password Grant Flow:
17
22
  # This authentication method requires sessions to be enabled, uncomment the following
18
23
  # lines to use this authentication method.
data/doc/release_notes.md CHANGED
@@ -1,5 +1,8 @@
1
1
  Release notes
2
2
  =============
3
+ ### 3.5.1 (2023-02-28)
4
+ * Support basic auth for external sources, [#11317](http://projects.theforeman.org/issues/11317)
5
+
3
6
  ### 3.5.0 (2022-10-31)
4
7
  * Extract gce related info ([PR #606](https://github.com/theforeman/hammer-cli-foreman/pull/606)), [#35659](http://projects.theforeman.org/issues/35659)
5
8
  * Change auth endpoint for negotiation, [#35473](http://projects.theforeman.org/issues/35473)
@@ -13,6 +13,8 @@ module HammerCLIForeman
13
13
  void_auth
14
14
  elsif auth_type == AUTH_TYPES[:basic_auth]
15
15
  basic_auth
16
+ elsif auth_type == AUTH_TYPES[:basic_auth_external]
17
+ basic_auth_external
16
18
  elsif auth_type == AUTH_TYPES[:negotiate]
17
19
  negotiate_auth
18
20
  elsif auth_type == AUTH_TYPES[:oauth_password_grant]
@@ -45,6 +47,24 @@ module HammerCLIForeman
45
47
  end
46
48
  end
47
49
 
50
+ def basic_auth_external
51
+ if HammerCLIForeman::Sessions.enabled?
52
+ authenticator = InteractiveBasicAuthExternal.new(
53
+ settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'],
54
+ settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD'],
55
+ uri
56
+ )
57
+ SessionAuthenticatorWrapper.new(authenticator, uri, auth_type)
58
+ else
59
+ username = settings.get(:_params, :username) || ENV['FOREMAN_USERNAME'] || settings.get(:foreman, :username)
60
+ password = settings.get(:_params, :password) || ENV['FOREMAN_PASSWORD']
61
+ if password.nil? && (username == settings.get(:foreman, :username))
62
+ password = settings.get(:foreman, :password)
63
+ end
64
+ InteractiveBasicAuthExternal.new(username, password, uri)
65
+ end
66
+ end
67
+
48
68
  def negotiate_auth
49
69
  return unless HammerCLIForeman::Sessions.enabled?
50
70
 
@@ -0,0 +1,71 @@
1
+ module HammerCLIForeman
2
+ module Api
3
+ module BasicAuth
4
+ def authenticate(request, args)
5
+ if HammerCLI.interactive?
6
+ get_user
7
+ get_password
8
+ end
9
+ super
10
+ end
11
+
12
+ def error(ex)
13
+ return unless ex.is_a?(RestClient::Unauthorized)
14
+
15
+ clear
16
+ default_message = _('Invalid username or password.')
17
+ message = begin
18
+ response_msg = JSON.parse(ex.response.body)['error']
19
+ response_msg.is_a?(Hash) ? response_msg['message'] : response_msg
20
+ rescue
21
+ end
22
+ return UnauthorizedError.new(default_message) unless message
23
+
24
+ UnauthorizedError.new("#{message}\n#{default_message}")
25
+ end
26
+
27
+ def status
28
+ unless @user.nil? || @password.nil?
29
+ _("Using configured credentials for user '%s'.") % @user
30
+ else
31
+ _('Credentials are not configured.')
32
+ end
33
+ end
34
+
35
+ def user(ask = nil)
36
+ @user ||= ask && get_user
37
+ end
38
+
39
+ def password(ask = nil)
40
+ @password ||= ask && get_password
41
+ end
42
+
43
+ def set_credentials(user, password)
44
+ @user = user
45
+ @password = password
46
+ end
47
+
48
+ def clear
49
+ set_credentials(nil, nil)
50
+ end
51
+
52
+ private
53
+
54
+ def get_user
55
+ @user ||= ask_user(_('[Foreman] Username:%s') % ' ')
56
+ end
57
+
58
+ def get_password
59
+ @password ||= ask_user(_("[Foreman] Password for %{user}:%{wsp}") % { user: @user, wsp: ' ' }, true)
60
+ end
61
+
62
+ def ask_user(prompt, silent = false)
63
+ if silent
64
+ HammerCLI.interactive_output.ask(prompt) { |q| q.echo = false }
65
+ else
66
+ HammerCLI.interactive_output.ask(prompt)
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -1,6 +1,7 @@
1
1
  require 'hammer_cli_foreman/api/session_authenticator_wrapper'
2
2
  require 'hammer_cli_foreman/api/authenticator'
3
3
  require 'hammer_cli_foreman/api/interactive_basic_auth'
4
+ require 'hammer_cli_foreman/api/interactive_basic_auth_external'
4
5
  require 'hammer_cli_foreman/api/negotiate_auth'
5
6
  require 'hammer_cli_foreman/api/oauth/authentication_code_grant'
6
7
  require 'hammer_cli_foreman/api/oauth/password_grant'
@@ -11,6 +12,7 @@ module HammerCLIForeman
11
12
  CONNECTION_NAME = 'foreman'
12
13
  AUTH_TYPES = {
13
14
  basic_auth: 'Basic_Auth',
15
+ basic_auth_external: 'Basic_Auth_External',
14
16
  negotiate: 'Negotiate_Auth',
15
17
  oauth_authentication_code_grant: 'Oauth_Authentication_Code_Grant',
16
18
  oauth_password_grant: 'Oauth_Password_Grant'
@@ -44,8 +46,7 @@ module HammerCLIForeman
44
46
 
45
47
  protected
46
48
 
47
- def default_auth_type(settings)
48
- return AUTH_TYPES[:basic_auth] unless HammerCLIForeman::Sessions.enabled?
49
+ def default_auth_type(_settings)
49
50
  HammerCLI::Settings.get(:foreman, :default_auth_type) || AUTH_TYPES[:basic_auth]
50
51
  end
51
52
 
@@ -1,68 +1,9 @@
1
+ require 'hammer_cli_foreman/api/basic_auth'
2
+
1
3
  module HammerCLIForeman
2
4
  module Api
3
5
  class InteractiveBasicAuth < ApipieBindings::Authenticators::BasicAuth
4
- def authenticate(request, args)
5
- if HammerCLI.interactive?
6
- get_user
7
- get_password
8
- end
9
- super
10
- end
11
-
12
- def error(ex)
13
- if ex.is_a?(RestClient::Unauthorized)
14
- self.clear
15
- message = _('Invalid username or password.')
16
- begin
17
- message = JSON.parse(ex.response.body)['error']['message']
18
- rescue
19
- end
20
- UnauthorizedError.new(message)
21
- end
22
- end
23
-
24
- def status
25
- unless @user.nil? || @password.nil?
26
- _("Using configured credentials for user '%s'.") % @user
27
- else
28
- _("Credentials are not configured.")
29
- end
30
- end
31
-
32
- def user(ask=nil)
33
- @user ||= ask && get_user
34
- end
35
-
36
- def password(ask=nil)
37
- @password ||= ask && get_password
38
- end
39
-
40
- def set_credentials(user, password)
41
- @user = user
42
- @password = password
43
- end
44
-
45
- def clear
46
- set_credentials(nil, nil)
47
- end
48
-
49
- private
50
-
51
- def get_user
52
- @user ||= ask_user(_("[Foreman] Username:%s") % " ")
53
- end
54
-
55
- def get_password
56
- @password ||= ask_user(_("[Foreman] Password for %{user}:%{wsp}") % {:user => @user, :wsp => " "}, true)
57
- end
58
-
59
- def ask_user(prompt, silent=false)
60
- if silent
61
- HammerCLI.interactive_output.ask(prompt) { |q| q.echo = false }
62
- else
63
- HammerCLI.interactive_output.ask(prompt)
64
- end
65
- end
6
+ include HammerCLIForeman::Api::BasicAuth
66
7
  end
67
8
  end
68
9
  end
@@ -0,0 +1,17 @@
1
+ require 'hammer_cli_foreman/api/basic_auth'
2
+
3
+ module HammerCLIForeman
4
+ module Api
5
+ class InteractiveBasicAuthExternal < ApipieBindings::Authenticators::BasicAuthExternal
6
+ include HammerCLIForeman::Api::BasicAuth
7
+
8
+ def initialize(user, password, foreman_url)
9
+ super(user, password, "#{foreman_url}/api/users/extlogin", HammerCLI::SSLOptions.new.get_options(foreman_url))
10
+ end
11
+
12
+ def session_id
13
+ auth_cookie&.delete_prefix('_session_id=')
14
+ end
15
+ end
16
+ end
17
+ end
@@ -80,7 +80,7 @@ module HammerCLIForeman
80
80
 
81
81
  def user(ask=nil)
82
82
  return unless @authenticator.respond_to?(:user)
83
- if @auth_type == AUTH_TYPES[:basic_auth]
83
+ if [AUTH_TYPES[:basic_auth], AUTH_TYPES[:basic_auth_external]].include?(@auth_type)
84
84
  @authenticator.user(ask)
85
85
  elsif @auth_type == AUTH_TYPES[:oauth_authentication_code_grant] ||
86
86
  @auth_type = AUTH_TYPES[:oauth_password_grant]
@@ -93,7 +93,7 @@ module HammerCLIForeman
93
93
  end
94
94
 
95
95
  def set_auth_params(*args)
96
- if @auth_type == AUTH_TYPES[:basic_auth]
96
+ if [AUTH_TYPES[:basic_auth], AUTH_TYPES[:basic_auth_external]].include?(@auth_type)
97
97
  @authenticator.set_credentials(*args)
98
98
  elsif @auth_type == AUTH_TYPES[:oauth_authentication_code_grant] ||
99
99
  @auth_type == AUTH_TYPES[:oauth_password_grant]
@@ -28,6 +28,27 @@ module HammerCLIForeman
28
28
  end
29
29
  end
30
30
 
31
+ class BasicExternal < HammerCLI::AbstractCommand
32
+ extend HammerCLIForeman::Authenticate::Login
33
+
34
+ command_name 'basic-external'
35
+ desc _('Authenticate against external source (IPA/PAM) with credentials')
36
+
37
+ option ['-u', '--username'], 'USERNAME', _('Username to access the remote system')
38
+ option ['-p', '--password'], 'PASSWORD', _('Password to access the remote system')
39
+
40
+ def execute
41
+ Basic.execute_with_params(
42
+ AUTH_TYPES[:basic_auth_external],
43
+ option_username || HammerCLI::Settings.get('_params', 'username'),
44
+ option_password || HammerCLI::Settings.get('_params', 'password')
45
+ )
46
+ logged_user = HammerCLIForeman.foreman_api_connection.authenticator.user
47
+ print_message(_("Successfully logged in as '%s'.") % logged_user)
48
+ HammerCLI::EX_OK
49
+ end
50
+ end
51
+
31
52
  class Negotiate < HammerCLI::AbstractCommand
32
53
  extend HammerCLIForeman::Authenticate::Login
33
54
 
@@ -1,5 +1,5 @@
1
1
  module HammerCLIForeman
2
2
  def self.version
3
- @version ||= Gem::Version.new "3.5.0"
3
+ @version ||= Gem::Version.new "3.5.1"
4
4
  end
5
5
  end
@@ -105,8 +105,9 @@ describe HammerCLIForeman::Api::InteractiveBasicAuth do
105
105
  response.stubs(:body).returns('{"error": {"message": "Unable to authenticate user admin"}}')
106
106
  ex.response = response
107
107
  new_ex = auth.error(ex)
108
+ expected = "Unable to authenticate user admin\nInvalid username or password."
108
109
 
109
- assert_equal 'Unable to authenticate user admin', new_ex.message
110
+ assert_equal expected, new_ex.message
110
111
  end
111
112
  end
112
113
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hammer_cli_foreman
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.5.0
4
+ version: 3.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomáš Strachota
8
8
  - Martin Bačovský
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-10-31 00:00:00.000000000 Z
12
+ date: 2023-02-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hammer_cli
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 3.3.0
20
+ version: 3.5.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 3.3.0
27
+ version: 3.5.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: apipie-bindings
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -75,19 +75,19 @@ dependencies:
75
75
  version: 2.2.1
76
76
  description: 'Foreman commands for Hammer CLI
77
77
 
78
- '
78
+ '
79
79
  email: tstracho@redhat.com
80
80
  executables: []
81
81
  extensions: []
82
82
  extra_rdoc_files:
83
+ - doc/configuration.md
84
+ - doc/developer_docs.md
85
+ - doc/host_create.md
83
86
  - doc/name_id_resolution.md
84
87
  - doc/option_builder.md
85
- - doc/using_hammer_cli_foreman_command.md
86
- - doc/developer_docs.md
87
88
  - doc/plugin.md
88
89
  - doc/testing.md
89
- - doc/configuration.md
90
- - doc/host_create.md
90
+ - doc/using_hammer_cli_foreman_command.md
91
91
  - doc/release_notes.md
92
92
  - README.md
93
93
  files:
@@ -106,8 +106,10 @@ files:
106
106
  - lib/hammer_cli_foreman.rb
107
107
  - lib/hammer_cli_foreman/api.rb
108
108
  - lib/hammer_cli_foreman/api/authenticator.rb
109
+ - lib/hammer_cli_foreman/api/basic_auth.rb
109
110
  - lib/hammer_cli_foreman/api/connection.rb
110
111
  - lib/hammer_cli_foreman/api/interactive_basic_auth.rb
112
+ - lib/hammer_cli_foreman/api/interactive_basic_auth_external.rb
111
113
  - lib/hammer_cli_foreman/api/negotiate_auth.rb
112
114
  - lib/hammer_cli_foreman/api/oauth/authentication_code_grant.rb
113
115
  - lib/hammer_cli_foreman/api/oauth/password_grant.rb
@@ -350,7 +352,7 @@ homepage: https://github.com/theforeman/hammer-cli-foreman
350
352
  licenses:
351
353
  - GPL-3.0+
352
354
  metadata: {}
353
- post_install_message:
355
+ post_install_message:
354
356
  rdoc_options: []
355
357
  require_paths:
356
358
  - lib
@@ -365,8 +367,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
365
367
  - !ruby/object:Gem::Version
366
368
  version: '0'
367
369
  requirements: []
368
- rubygems_version: 3.1.2
369
- signing_key:
370
+ rubygems_version: 3.1.6
371
+ signing_key:
370
372
  specification_version: 4
371
373
  summary: Foreman commands for Hammer
372
374
  test_files:
@@ -384,106 +386,106 @@ test_files:
384
386
  - test/data/1.24/foreman_api.json
385
387
  - test/data/2.0/foreman_api.json
386
388
  - test/data/2.1/foreman_api.json
387
- - test/data/README.md
388
389
  - test/data/2.4/foreman_api.json
389
390
  - test/data/2.5/foreman_api.json
390
391
  - test/data/3.1/foreman_api.json
391
392
  - test/data/3.4/foreman_api.json
393
+ - test/data/README.md
394
+ - test/functional/architecture_test.rb
395
+ - test/functional/associating_commands_test.rb
396
+ - test/functional/audit_test.rb
392
397
  - test/functional/auth_source_test.rb
398
+ - test/functional/bookmark_test.rb
393
399
  - test/functional/commands/list_test.rb
400
+ - test/functional/compute_attribute_test.rb
401
+ - test/functional/compute_profile_test.rb
402
+ - test/functional/compute_resource_test.rb
403
+ - test/functional/domain/create_test.rb
404
+ - test/functional/domain/update_test.rb
405
+ - test/functional/filter_test.rb
406
+ - test/functional/host_test.rb
394
407
  - test/functional/hostgroup/create_test.rb
395
408
  - test/functional/hostgroup/update_test.rb
396
- - test/functional/architecture_test.rb
397
- - test/functional/compute_attribute_test.rb
398
- - test/functional/ping_test.rb
399
- - test/functional/user_test.rb
400
- - test/functional/ssh_keys_test.rb
401
- - test/functional/subnet/update_test.rb
402
- - test/functional/subnet/create_test.rb
403
- - test/functional/test_helper.rb
409
+ - test/functional/http_proxy_test.rb
404
410
  - test/functional/location_test.rb
411
+ - test/functional/mail_notification_test.rb
405
412
  - test/functional/media_test.rb
413
+ - test/functional/model_test.rb
414
+ - test/functional/operating_system_test.rb
415
+ - test/functional/organization_test.rb
406
416
  - test/functional/partition_table_test.rb
407
417
  - test/functional/personal_access_token_test.rb
418
+ - test/functional/ping_test.rb
419
+ - test/functional/realm_test.rb
420
+ - test/functional/registration_test.rb
408
421
  - test/functional/report_template_test.rb
422
+ - test/functional/role_test.rb
409
423
  - test/functional/settings_test.rb
424
+ - test/functional/ssh_keys_test.rb
410
425
  - test/functional/status_test.rb
426
+ - test/functional/subnet/create_test.rb
427
+ - test/functional/subnet/update_test.rb
428
+ - test/functional/table_preference_test.rb
429
+ - test/functional/template_test.rb
430
+ - test/functional/test_helper.rb
411
431
  - test/functional/user_mail_notification_test.rb
412
- - test/functional/compute_resource_test.rb
413
- - test/functional/compute_profile_test.rb
414
- - test/functional/realm_test.rb
432
+ - test/functional/user_test.rb
415
433
  - test/functional/usergroup_test.rb
416
- - test/functional/organization_test.rb
417
434
  - test/functional/virtual_machine_test.rb
418
- - test/functional/domain/create_test.rb
419
- - test/functional/domain/update_test.rb
420
- - test/functional/filter_test.rb
421
- - test/functional/host_test.rb
422
- - test/functional/http_proxy_test.rb
423
- - test/functional/mail_notification_test.rb
424
- - test/functional/operating_system_test.rb
425
- - test/functional/template_test.rb
426
- - test/functional/associating_commands_test.rb
427
- - test/functional/audit_test.rb
428
- - test/functional/role_test.rb
429
- - test/functional/bookmark_test.rb
430
- - test/functional/model_test.rb
431
- - test/functional/registration_test.rb
432
- - test/functional/table_preference_test.rb
433
- - test/unit/api/void_auth_test.rb
434
- - test/unit/api/interactive_basic_auth_test.rb
435
+ - test/test_helper.rb
435
436
  - test/unit/api/oauth/oauth_authentication_code_grant_test.rb
436
437
  - test/unit/api/oauth/oauth_password_grant_test.rb
437
438
  - test/unit/api/session_authenticator_wrapper_test.rb
438
- - test/unit/test_output_adapter.rb
439
- - test/unit/host_test.rb
439
+ - test/unit/api/void_auth_test.rb
440
+ - test/unit/api/interactive_basic_auth_test.rb
441
+ - test/unit/api_test.rb
442
+ - test/unit/apipie_resource_mock.rb
443
+ - test/unit/architecture_test.rb
444
+ - test/unit/audit_test.rb
445
+ - test/unit/auth_source_external.rb
440
446
  - test/unit/auth_source_ldap_test.rb
441
- - test/unit/config_report_test.rb
447
+ - test/unit/bookmark_test.rb
448
+ - test/unit/commands_test.rb
449
+ - test/unit/common_parameter_test.rb
450
+ - test/unit/compute_profile_test.rb
442
451
  - test/unit/compute_resource_test.rb
452
+ - test/unit/config_report_test.rb
443
453
  - test/unit/data/test_api.json
444
454
  - test/unit/defaults_test.rb
445
- - test/unit/id_resolver_test.rb
455
+ - test/unit/dependency_resolver_test.rb
456
+ - test/unit/domain_test.rb
457
+ - test/unit/exception_handler_test.rb
446
458
  - test/unit/external_usergroup_test.rb
447
459
  - test/unit/fact_test.rb
460
+ - test/unit/filter_test.rb
461
+ - test/unit/helpers/command.rb
448
462
  - test/unit/helpers/fake_searchables.rb
449
463
  - test/unit/helpers/resource_disabled.rb
450
- - test/unit/helpers/command.rb
464
+ - test/unit/host_test.rb
465
+ - test/unit/hostgroup_test.rb
466
+ - test/unit/id_resolver_test.rb
451
467
  - test/unit/image_test.rb
452
468
  - test/unit/location_test.rb
453
- - test/unit/messages_test.rb
454
469
  - test/unit/mail_notification_test.rb
470
+ - test/unit/media_test.rb
471
+ - test/unit/messages_test.rb
472
+ - test/unit/model_test.rb
473
+ - test/unit/operating_system_test.rb
474
+ - test/unit/option_builders_test.rb
455
475
  - test/unit/option_sources/id_params_test.rb
456
476
  - test/unit/option_sources/ids_params_test.rb
457
477
  - test/unit/organization_test.rb
458
478
  - test/unit/output/formatters_test.rb
459
- - test/unit/common_parameter_test.rb
479
+ - test/unit/param_filters_test.rb
480
+ - test/unit/partition_table_test.rb
460
481
  - test/unit/realm_test.rb
482
+ - test/unit/role_test.rb
483
+ - test/unit/sessions_test.rb
461
484
  - test/unit/settings_test.rb
462
- - test/unit/usergroup_test.rb
485
+ - test/unit/smart_proxy_test.rb
463
486
  - test/unit/subnet_test.rb
487
+ - test/unit/template_test.rb
464
488
  - test/unit/test_helper.rb
489
+ - test/unit/test_output_adapter.rb
465
490
  - test/unit/user_test.rb
466
- - test/unit/param_filters_test.rb
467
- - test/unit/role_test.rb
468
- - test/unit/model_test.rb
469
- - test/unit/operating_system_test.rb
470
- - test/unit/option_builders_test.rb
471
- - test/unit/architecture_test.rb
472
- - test/unit/commands_test.rb
473
- - test/unit/audit_test.rb
474
- - test/unit/auth_source_external.rb
475
- - test/unit/dependency_resolver_test.rb
476
- - test/unit/exception_handler_test.rb
477
- - test/unit/filter_test.rb
478
- - test/unit/media_test.rb
479
- - test/unit/sessions_test.rb
480
- - test/unit/bookmark_test.rb
481
- - test/unit/hostgroup_test.rb
482
- - test/unit/api_test.rb
483
- - test/unit/apipie_resource_mock.rb
484
- - test/unit/compute_profile_test.rb
485
- - test/unit/partition_table_test.rb
486
- - test/unit/template_test.rb
487
- - test/unit/smart_proxy_test.rb
488
- - test/unit/domain_test.rb
489
- - test/test_helper.rb
491
+ - test/unit/usergroup_test.rb