Add rocky config to keystone and update tests

Change-Id: I626aa02b2d3047a368b74017386bc3ad5487bebf
Related-Prod: PROD-23724 (PROD:23724)
diff --git a/tests/integration/rocky/single/config_spec.rb b/tests/integration/rocky/single/config_spec.rb
new file mode 100644
index 0000000..25f5219
--- /dev/null
+++ b/tests/integration/rocky/single/config_spec.rb
@@ -0,0 +1,251 @@
+ssl_enabled = attribute("ssl", default: false)
+
+keystone_oslo_messaging_default = {
+  'transport_url' => 'rabbit://openstack:password@127.0.0.1:5672//openstack',
+}
+
+keystone_oslo_messaging_default_ssl = {
+  'transport_url' => 'rabbit://openstack:password@127.0.0.1:5671//openstack'
+}
+
+keystone_default = {
+  'log_config_append'         => '/etc/keystone/logging.conf',
+  'debug'                     => 'false',
+  'log_file'                  => 'keystone.log',
+  'log_dir'                   => '/var/log/keystone',
+  'use_syslog'                => 'false',
+  'syslog_log_facility'       => 'LOG_USER',
+  'notification_format'       => 'cadf',
+  'executor_thread_pool_size' => '64',
+  'rpc_response_timeout'      => '60',
+  'control_exchange'          => 'keystone',
+}
+
+keystone_assignment = {
+  'driver' => 'sql'
+}
+
+keystone_auth = {
+  'methods' => 'password,token',
+  'oidc'    => 'keystone.auth.plugins.mapped.Mapped',
+  'saml2'   => 'keystone.auth.plugins.mapped.Mapped',
+}
+
+#hardcod in config
+keystone_catalog = {
+  'template_file' => 'default_catalog.templates',
+  'driver'        => 'sql',
+}
+
+keystone_credential = {
+  'key_repository' => '/var/lib/keystone/credential-keys'
+}
+
+keystone_fernet_tokens = {
+  'key_repository'  => '/var/lib/keystone/fernet-keys',
+  'max_active_keys' => '3',
+}
+
+#hardcod in config
+keystone_identity = {
+  'driver'                          => 'sql',
+  'default_domain_id'               => 'default',
+  'domain_specific_drivers_enabled' => 'True',
+  'domain_config_dir'               => '/etc/keystone/domains',
+}
+
+#hardcod in config
+keystone_policy = {
+  'driver' => 'sql'
+}
+
+keystone_token = {
+  'expiration'     => '86400',
+  'provider'       => 'fernet',
+  'caching'        => 'false',
+  'hash_algorithm' => 'sha256',
+}
+
+keystone_cache = {
+  'backend'          => 'oslo_cache.memcache_pool',
+  'enabled'          => 'True',
+  'memcache_servers' => '127.0.0.1:11211',
+}
+
+#hardcod in config
+keystone_oslo_messaging_rabbit = {
+  'rabbit_qos_prefetch_count'   => '64',
+  'heartbeat_timeout_threshold' => '0',
+  'heartbeat_rate'              => '2',
+}
+
+keystone_database_ssl = {
+  'connection'              => 'mysql+pymysql://keystone:passw0rd@127.0.0.1/keystone?charset=utf8&ssl_ca=/etc/keystone/ssl/mysql/ca-cert.pem&ssl_cert=/etc/keystone/ssl/mysql/client-cert.pem&ssl_key=/etc/keystone/ssl/mysql/client-key.pem',
+}
+
+keystone_database = {
+  'connection'              => 'mysql+pymysql://keystone:passw0rd@127.0.0.1/keystone?charset=utf8&ssl_ca=/etc/ssl/certs/ca-certificates.crt',
+  'max_pool_size'           => '10',
+  'max_retries'             => '-1',
+  'max_overflow'            => '30',
+  'connection_recycle_time' => '3600',
+}
+
+keystone_oslo_middleware = {
+  'max_request_body_size'        => '114688',
+  'enable_proxy_headers_parsing' => 'True',
+}
+
+keystone_cors = {
+  'allowed_origin'    => 'https://horizon.example.com',
+  'allow_credentials' => 'True',
+  'expose_headers'    => 'X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token',
+  'max_age'           => '3600',
+  'allow_methods'     => 'GET,PUT,POST,DELETE,PATCH',
+  'allow_headers'     => 'X-Auth-Token,X-Openstack-Request-Id,X-Subject-Token,X-Project-Id,X-Project-Name,X-Project-Domain-Id,X-Project-Domain-Name,X-Domain-Id,X-Domain-Name',
+}
+
+keystone_healthcheck = {
+  'path' => '/healthcheck'
+}
+
+keystone_profiler = {
+  'enabled' => 'True',
+}
+
+keystone_oslo_policy = {
+  'policy_file' => 'policy.json'
+}
+
+keystone_oidc = {
+  'remote_id_attribute' => 'HTTP_OIDC_ISS'
+}
+
+keystone_saml2 = {
+  'remote_id_attribute' => 'HTTP_OIDC_ISS'
+}
+
+keystone_federation = {
+  'driver'                       => 'sql',
+  'federated_domain_name'        => 'Federated',
+  'trusted_dashboard'            => 'https://acme.example.com/auth/websso',
+  'cache_group_membership_in_db' => 'true',
+}
+
+keystone_resource = {
+  'admin_project_domain_name' => 'project',
+  'admin_project_name'        => 'projectname',
+}
+
+control 'Keystone' do
+
+  describe parse_config_file('/etc/keystone/keystone.conf') do
+
+    describe 'Keystone messaging' do
+
+      if ssl_enabled
+        keystone_oslo_messaging_rabbit.merge!(keystone_oslo_messaging_rabbit_ssl)
+        keystone_oslo_messaging_default.merge!(keystone_oslo_messaging_default_ssl)
+        describe 'SSL' do
+          its('DEFAULT') {
+            should include(keystone_oslo_messaging_default)
+          }
+          its('oslo_messaging_rabbit') {
+            should include(keystone_oslo_messaging_rabbit)
+          }
+        end
+      else
+        describe 'non SSL' do
+          its('DEFAULT') {
+            should include(keystone_oslo_messaging_default)
+          }
+          its('oslo_messaging_rabbit') {
+            should include(keystone_oslo_messaging_rabbit)
+          }
+        end
+      end
+
+    end
+
+    describe 'Keystone database' do
+
+      if ssl_enabled
+        keystone_database.merge!(keystone_database_ssl)
+        describe 'SSL' do
+          its('database') {
+            should include(keystone_database)
+          }
+        end
+      else
+        describe 'non SSL' do
+          its('database') {
+            should include(keystone_database)
+          }
+        end
+      end
+
+    end
+
+    describe 'Keystone config' do
+
+      its('DEFAULT') {
+        should include(keystone_default)
+      }
+      its('assignment') {
+        should include(keystone_assignment)
+      }
+      its('auth') {
+        should include(keystone_auth)
+      }
+      its('catalog') {
+        should include(keystone_catalog)
+      }
+      its('credential') {
+        should include(keystone_credential)
+      }
+      its('fernet_tokens') {
+        should include(keystone_fernet_tokens)
+      }
+      its('identity') {
+        should include(keystone_identity)
+      }
+      its('policy') {
+        should include(keystone_policy)
+      }
+      its('token') {
+        should include(keystone_token)
+      }
+      its('oslo_messaging_rabbit') {
+        should include(keystone_oslo_messaging_rabbit)
+      }
+      its('database') {
+        should include(keystone_database)
+      }
+      its('cors') {
+        should include(keystone_cors)
+      }
+      its('healthcheck') {
+        should include(keystone_healthcheck)
+      }
+      its('profiler') {
+        should include(keystone_profiler)
+      }
+      its('oslo_policy') {
+        should include(keystone_oslo_policy)
+      }
+      its('oidc') {
+        should include(keystone_oidc)
+      }
+      its('saml2') {
+        should include(keystone_saml2)
+      }
+      its('federation') {
+        should include(keystone_federation)
+      }
+      its('resource') {
+        should include(keystone_resource)
+      }
+
+    end
+  end
+end