hammer_cli_foreman 3.5.0 → 3.5.1

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.
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