You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sm...@apache.org on 2015/12/17 06:44:59 UTC

[1/2] ambari git commit: AMBARI-14391. Add a test to verify Role Based Access Control for a non-admin user (Nahappan Somasundaram via smohanty)

Repository: ambari
Updated Branches:
  refs/heads/trunk 4fb0f6ec0 -> f2e797abd


http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
new file mode 100644
index 0000000..0e534b7
--- /dev/null
+++ b/ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql
@@ -0,0 +1,1533 @@
+--
+-- Licensed to the Apache Software Foundation (ASF) under one
+-- or more contributor license agreements.  See the NOTICE file
+-- distributed with this work for additional information
+-- regarding copyright ownership.  The ASF licenses this file
+-- to you under the Apache License, Version 2.0 (the
+-- "License"); you may not use this file except in compliance
+-- with the License.  You may obtain a copy of the License at
+--
+--     http://www.apache.org/licenses/LICENSE-2.0
+--
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+--
+
+------create tables and grant privileges to db user---------
+CREATE TABLE stack(
+  stack_id BIGINT NOT NULL,
+  stack_name VARCHAR(255) NOT NULL,
+  stack_version VARCHAR(255) NOT NULL,
+  PRIMARY KEY (stack_id)
+);
+
+CREATE TABLE clusters (
+  cluster_id BIGINT NOT NULL,
+  resource_id BIGINT NOT NULL,
+  cluster_info VARCHAR(255) NOT NULL,
+  cluster_name VARCHAR(100) NOT NULL UNIQUE,
+  provisioning_state VARCHAR(255) NOT NULL DEFAULT 'INIT',
+  security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
+  desired_cluster_state VARCHAR(255) NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  PRIMARY KEY (cluster_id)
+);
+
+CREATE TABLE clusterconfig (
+  config_id BIGINT NOT NULL,
+  version_tag VARCHAR(255) NOT NULL,
+  version BIGINT NOT NULL,
+  type_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  config_data VARCHAR(3000) NOT NULL,
+  config_attributes VARCHAR(3000),
+  create_timestamp BIGINT NOT NULL,
+  PRIMARY KEY (config_id)
+);
+
+CREATE TABLE clusterconfigmapping (
+  cluster_id BIGINT NOT NULL,
+  type_name VARCHAR(255) NOT NULL,
+  version_tag VARCHAR(255) NOT NULL,
+  create_timestamp BIGINT NOT NULL,
+  selected INTEGER NOT NULL DEFAULT 0,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  PRIMARY KEY (cluster_id, type_name, create_timestamp));
+
+CREATE TABLE serviceconfig (
+  service_config_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  version BIGINT NOT NULL,
+  create_timestamp BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  group_id BIGINT,
+  note VARCHAR(3000),
+  PRIMARY KEY (service_config_id)
+);
+
+CREATE TABLE serviceconfighosts (
+  service_config_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  PRIMARY KEY(service_config_id, host_id));
+
+CREATE TABLE serviceconfigmapping (
+  service_config_id BIGINT NOT NULL,
+  config_id BIGINT NOT NULL,
+  PRIMARY KEY(service_config_id, config_id));
+
+CREATE TABLE clusterservices (
+  service_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  service_enabled INTEGER NOT NULL,
+  PRIMARY KEY (service_name, cluster_id));
+
+CREATE TABLE clusterstate (
+  cluster_id BIGINT NOT NULL,
+  current_cluster_state VARCHAR(255) NOT NULL,
+  current_stack_id BIGINT NOT NULL,
+  PRIMARY KEY (cluster_id)
+);
+
+CREATE TABLE cluster_version (
+  id BIGINT NOT NULL,
+  repo_version_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  state VARCHAR(32) NOT NULL,
+  start_time BIGINT NOT NULL,
+  end_time BIGINT,
+  user_name VARCHAR(32),
+  PRIMARY KEY (id));
+
+CREATE TABLE hostcomponentdesiredstate (
+  cluster_id BIGINT NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_state VARCHAR(255) NOT NULL,
+  host_id BIGINT NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  admin_state VARCHAR(32),
+  maintenance_state VARCHAR(32) NOT NULL,
+  security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
+  restart_required SMALLINT NOT NULL DEFAULT 0,
+  PRIMARY KEY (cluster_id, component_name, host_id, service_name)
+);
+
+CREATE TABLE hostcomponentstate (
+  id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  component_name VARCHAR(255) NOT NULL,
+  version VARCHAR(32) NOT NULL DEFAULT 'UNKNOWN',
+  current_stack_id BIGINT NOT NULL,
+  current_state VARCHAR(255) NOT NULL,
+  host_id BIGINT NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  upgrade_state VARCHAR(32) NOT NULL DEFAULT 'NONE',
+  security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
+  CONSTRAINT pk_hostcomponentstate PRIMARY KEY (id)
+);
+
+CREATE INDEX idx_host_component_state on hostcomponentstate(host_id, component_name, service_name, cluster_id);
+
+CREATE TABLE hosts (
+  host_id BIGINT NOT NULL,
+  host_name VARCHAR(255) NOT NULL,
+  cpu_count INTEGER NOT NULL,
+  ph_cpu_count INTEGER,
+  cpu_info VARCHAR(255) NOT NULL,
+  discovery_status VARCHAR(2000) NOT NULL,
+  host_attributes VARCHAR(20000) NOT NULL,
+  ipv4 VARCHAR(255),
+  ipv6 VARCHAR(255),
+  public_host_name VARCHAR(255),
+  last_registration_time BIGINT NOT NULL,
+  os_arch VARCHAR(255) NOT NULL,
+  os_info VARCHAR(1000) NOT NULL,
+  os_type VARCHAR(255) NOT NULL,
+  rack_info VARCHAR(255) NOT NULL,
+  total_mem BIGINT NOT NULL,
+  PRIMARY KEY (host_id));
+
+CREATE TABLE hoststate (
+  agent_version VARCHAR(255) NOT NULL,
+  available_mem BIGINT NOT NULL,
+  current_state VARCHAR(255) NOT NULL,
+  health_status VARCHAR(255),
+  host_id BIGINT NOT NULL,
+  time_in_state BIGINT NOT NULL,
+  maintenance_state VARCHAR(512),
+  PRIMARY KEY (host_id));
+
+CREATE TABLE host_version (
+  id BIGINT NOT NULL,
+  repo_version_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  state VARCHAR(32) NOT NULL,
+  PRIMARY KEY (id));
+
+CREATE TABLE servicecomponentdesiredstate (
+  component_name VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  PRIMARY KEY (component_name, cluster_id, service_name)
+);
+
+CREATE TABLE servicedesiredstate (
+  cluster_id BIGINT NOT NULL,
+  desired_host_role_mapping INTEGER NOT NULL,
+  desired_stack_id BIGINT NOT NULL,
+  desired_state VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  maintenance_state VARCHAR(32) NOT NULL,
+  security_state VARCHAR(32) NOT NULL DEFAULT 'UNSECURED',
+  PRIMARY KEY (cluster_id, service_name)
+);
+
+CREATE TABLE users (
+  user_id INTEGER,
+  principal_id BIGINT NOT NULL,
+  ldap_user INTEGER NOT NULL DEFAULT 0,
+  user_name VARCHAR(255) NOT NULL,
+  user_type VARCHAR(255) NOT NULL DEFAULT 'LOCAL',
+  create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
+  user_password VARCHAR(255),
+  active INTEGER NOT NULL DEFAULT 1,
+  active_widget_layouts VARCHAR(1024) DEFAULT NULL,
+  PRIMARY KEY (user_id));
+
+CREATE TABLE groups (
+  group_id INTEGER,
+  principal_id BIGINT NOT NULL,
+  group_name VARCHAR(255) NOT NULL,
+  ldap_group INTEGER NOT NULL DEFAULT 0,
+  PRIMARY KEY (group_id),
+  UNIQUE (ldap_group, group_name));
+
+CREATE TABLE members (
+  member_id INTEGER,
+  group_id INTEGER NOT NULL,
+  user_id INTEGER NOT NULL,
+  PRIMARY KEY (member_id),
+  UNIQUE(group_id, user_id));
+
+CREATE TABLE execution_command (
+  command BLOB,
+  task_id BIGINT NOT NULL,
+  PRIMARY KEY (task_id));
+
+CREATE TABLE host_role_command (
+  task_id BIGINT NOT NULL,
+  attempt_count SMALLINT NOT NULL,
+  retry_allowed SMALLINT DEFAULT 0 NOT NULL,
+  event VARCHAR(32000) NOT NULL,
+  exitcode INTEGER NOT NULL,
+  host_id BIGINT,
+  last_attempt_time BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  role VARCHAR(255),
+  stage_id BIGINT NOT NULL,
+  start_time BIGINT NOT NULL,
+  end_time BIGINT,
+  status VARCHAR(255),
+  auto_skip_on_failure SMALLINT DEFAULT 0 NOT NULL,
+  std_error BLOB,
+  std_out BLOB,
+  output_log VARCHAR(255),
+  error_log VARCHAR(255),
+  structured_out BLOB,
+  role_command VARCHAR(255),
+  command_detail VARCHAR(255),
+  custom_command_name VARCHAR(255),
+  PRIMARY KEY (task_id));
+
+CREATE TABLE role_success_criteria (
+  role VARCHAR(255) NOT NULL,
+  request_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
+  success_factor FLOAT NOT NULL,
+  PRIMARY KEY (role, request_id, stage_id));
+
+CREATE TABLE stage (
+  stage_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  skippable SMALLINT DEFAULT 0 NOT NULL,
+  supports_auto_skip_failure SMALLINT DEFAULT 0 NOT NULL,  
+  log_info VARCHAR(255) NOT NULL,
+  request_context VARCHAR(255),
+  cluster_host_info BLOB NOT NULL,
+  command_params BLOB,
+  host_params BLOB,
+  PRIMARY KEY (stage_id, request_id));
+
+CREATE TABLE request (
+  request_id BIGINT NOT NULL,
+  cluster_id BIGINT,
+  command_name VARCHAR(255),
+  create_time BIGINT NOT NULL,
+  end_time BIGINT NOT NULL,
+  exclusive_execution SMALLINT NOT NULL DEFAULT 0,
+  inputs BLOB,
+  request_context VARCHAR(255),
+  request_type VARCHAR(255),
+  request_schedule_id BIGINT,
+  start_time BIGINT NOT NULL,
+  status VARCHAR(255),
+  PRIMARY KEY (request_id));
+
+CREATE TABLE requestresourcefilter (
+  filter_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  service_name VARCHAR(255),
+  component_name VARCHAR(255),
+  hosts BLOB,
+  PRIMARY KEY (filter_id));
+
+CREATE TABLE requestoperationlevel (
+  operation_level_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  level_name VARCHAR(255),
+  cluster_name VARCHAR(255),
+  service_name VARCHAR(255),
+  host_component_name VARCHAR(255),
+  host_id BIGINT DEFAULT 0,
+  PRIMARY KEY (operation_level_id));
+
+CREATE TABLE ClusterHostMapping (
+  cluster_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  PRIMARY KEY (cluster_id, host_id));
+
+CREATE TABLE key_value_store (
+  "key" VARCHAR(255),
+  "value" VARCHAR(20000),
+  PRIMARY KEY ("key"));
+
+CREATE TABLE hostconfigmapping (
+  cluster_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  type_name VARCHAR(255) NOT NULL,
+  version_tag VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255),
+  create_timestamp BIGINT NOT NULL,
+  selected INTEGER NOT NULL DEFAULT 0,
+  user_name VARCHAR(255) NOT NULL DEFAULT '_db',
+  PRIMARY KEY (cluster_id, host_id, type_name, create_timestamp));
+
+CREATE TABLE metainfo (
+  "metainfo_key" VARCHAR(255),
+  "metainfo_value" VARCHAR(20000),
+  PRIMARY KEY ("metainfo_key"));
+
+CREATE TABLE ambari_sequences (
+  sequence_name VARCHAR(255) PRIMARY KEY,
+  sequence_value BIGINT NOT NULL);
+
+CREATE TABLE configgroup (
+  group_id BIGINT,
+  cluster_id BIGINT NOT NULL,
+  group_name VARCHAR(255) NOT NULL,
+  tag VARCHAR(1024) NOT NULL,
+  description VARCHAR(1024),
+  create_timestamp BIGINT NOT NULL,
+  service_name VARCHAR(255),
+  PRIMARY KEY(group_id));
+
+CREATE TABLE confgroupclusterconfigmapping (
+  config_group_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  config_type VARCHAR(255) NOT NULL,
+  version_tag VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) DEFAULT '_db',
+  create_timestamp BIGINT NOT NULL,
+  PRIMARY KEY(config_group_id, cluster_id, config_type));
+
+CREATE TABLE configgrouphostmapping (
+  config_group_id BIGINT NOT NULL,
+  host_id BIGINT NOT NULL,
+  PRIMARY KEY(config_group_id, host_id));
+
+CREATE TABLE requestschedule (
+  schedule_id bigint,
+  cluster_id bigint NOT NULL,
+  description varchar(255),
+  status varchar(255),
+  batch_separation_seconds smallint,
+  batch_toleration_limit smallint,
+  create_user varchar(255),
+  create_timestamp bigint,
+  update_user varchar(255),
+  update_timestamp bigint,
+  minutes varchar(10),
+  hours varchar(10),
+  days_of_month varchar(10),
+  month varchar(10),
+  day_of_week varchar(10),
+  yearToSchedule varchar(10),
+  startTime varchar(50),
+  endTime varchar(50),
+  last_execution_status varchar(255),
+  PRIMARY KEY(schedule_id));
+
+CREATE TABLE requestschedulebatchrequest (
+  schedule_id bigint,
+  batch_id bigint,
+  request_id bigint,
+  request_type varchar(255),
+  request_uri varchar(1024),
+  request_body BLOB,
+  request_status varchar(255),
+  return_code smallint,
+  return_message varchar(20000),
+  PRIMARY KEY(schedule_id, batch_id));
+
+CREATE TABLE blueprint (
+  blueprint_name VARCHAR(255) NOT NULL,
+  security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
+  security_descriptor_reference VARCHAR(255),
+  stack_id BIGINT NOT NULL,
+  PRIMARY KEY(blueprint_name)
+);
+
+CREATE TABLE hostgroup (
+  blueprint_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  cardinality VARCHAR(255) NOT NULL,
+  PRIMARY KEY(blueprint_name, name));
+
+CREATE TABLE hostgroup_component (
+  blueprint_name VARCHAR(255) NOT NULL,
+  hostgroup_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  PRIMARY KEY(blueprint_name, hostgroup_name, name));
+
+CREATE TABLE blueprint_configuration (
+  blueprint_name varchar(255) NOT NULL,
+  type_name varchar(255) NOT NULL,
+  config_data VARCHAR(3000) NOT NULL,
+  config_attributes VARCHAR(3000),
+  PRIMARY KEY(blueprint_name, type_name));
+
+CREATE TABLE hostgroup_configuration (
+  blueprint_name VARCHAR(255) NOT NULL,
+  hostgroup_name VARCHAR(255) NOT NULL,
+  type_name VARCHAR(255) NOT NULL,
+  config_data VARCHAR(3000) NOT NULL,
+  config_attributes VARCHAR(3000),
+  PRIMARY KEY(blueprint_name, hostgroup_name, type_name));
+
+CREATE TABLE viewmain (
+  view_name VARCHAR(255) NOT NULL,
+  label VARCHAR(255),
+  description VARCHAR(2048),
+  version VARCHAR(255),
+  build VARCHAR(128),
+  resource_type_id INTEGER NOT NULL,
+  icon VARCHAR(255),
+  icon64 VARCHAR(255),
+  archive VARCHAR(255),
+  mask VARCHAR(255),
+  system_view SMALLINT NOT NULL DEFAULT 0,
+  PRIMARY KEY(view_name));
+
+CREATE TABLE viewinstancedata (
+  view_instance_id BIGINT,
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  PRIMARY KEY(view_instance_id, name, user_name));
+
+CREATE TABLE viewinstance (
+  view_instance_id BIGINT,
+  resource_id BIGINT NOT NULL,
+  view_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  label VARCHAR(255),
+  description VARCHAR(2048),
+  visible CHAR(1),
+  icon VARCHAR(255),
+  icon64 VARCHAR(255),
+  xml_driven CHAR(1),
+  alter_names SMALLINT NOT NULL DEFAULT 1,
+  cluster_handle VARCHAR(255),
+  PRIMARY KEY(view_instance_id));
+
+CREATE TABLE viewinstanceproperty (
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  value VARCHAR(2000),
+  PRIMARY KEY(view_name, view_instance_name, name));
+
+CREATE TABLE viewparameter (
+  view_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  description VARCHAR(2048),
+  label VARCHAR(255),
+  placeholder VARCHAR(255),
+  default_value VARCHAR(2000),
+  cluster_config VARCHAR(255),
+  required CHAR(1),
+  masked CHAR(1),
+  PRIMARY KEY(view_name, name));
+
+CREATE TABLE viewresource (
+  view_name VARCHAR(255) NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  plural_name VARCHAR(255),
+  id_property VARCHAR(255),
+  subResource_names VARCHAR(255),
+  provider VARCHAR(255),
+  service VARCHAR(255),
+  resource VARCHAR(255),
+  PRIMARY KEY(view_name, name));
+
+CREATE TABLE viewentity (
+  id BIGINT NOT NULL,
+  view_name VARCHAR(255) NOT NULL,
+  view_instance_name VARCHAR(255) NOT NULL,
+  class_name VARCHAR(255) NOT NULL,
+  id_property VARCHAR(255),
+  PRIMARY KEY(id));
+
+CREATE TABLE adminresourcetype (
+  resource_type_id INTEGER NOT NULL,
+  resource_type_name VARCHAR(255) NOT NULL,
+  PRIMARY KEY(resource_type_id));
+
+CREATE TABLE adminresource (
+  resource_id BIGINT NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  PRIMARY KEY(resource_id));
+
+CREATE TABLE adminprincipaltype (
+  principal_type_id INTEGER NOT NULL,
+  principal_type_name VARCHAR(255) NOT NULL,
+  PRIMARY KEY(principal_type_id));
+
+CREATE TABLE adminprincipal (
+  principal_id BIGINT NOT NULL,
+  principal_type_id INTEGER NOT NULL,
+  PRIMARY KEY(principal_id));
+
+CREATE TABLE adminpermission (
+  permission_id BIGINT NOT NULL,
+  permission_name VARCHAR(255) NOT NULL,
+  resource_type_id INTEGER NOT NULL,
+  permission_label VARCHAR(255),
+  PRIMARY KEY(permission_id));
+
+CREATE TABLE roleauthorization (
+  authorization_id VARCHAR(100) NOT NULL,
+  authorization_name VARCHAR(255) NOT NULL,
+  PRIMARY KEY(authorization_id));
+
+CREATE TABLE permission_roleauthorization (
+  permission_id BIGINT NOT NULL,
+  authorization_id VARCHAR(100) NOT NULL,
+  PRIMARY KEY(permission_id, authorization_id));
+
+CREATE TABLE adminprivilege (
+  privilege_id BIGINT,
+  permission_id BIGINT NOT NULL,
+  resource_id BIGINT NOT NULL,
+  principal_id BIGINT NOT NULL,
+  PRIMARY KEY(privilege_id));
+
+
+CREATE TABLE repo_version (
+  repo_version_id BIGINT NOT NULL,
+  stack_id BIGINT NOT NULL,
+  version VARCHAR(255) NOT NULL,
+  display_name VARCHAR(128) NOT NULL,
+  repositories VARCHAR(3000) NOT NULL,
+  PRIMARY KEY(repo_version_id)
+);
+
+CREATE TABLE widget (
+  id BIGINT NOT NULL,
+  widget_name VARCHAR(255) NOT NULL,
+  widget_type VARCHAR(255) NOT NULL,
+  metrics VARCHAR(3000),
+  time_created BIGINT NOT NULL,
+  author VARCHAR(255),
+  description VARCHAR(2048),
+  default_section_name VARCHAR(255),
+  scope VARCHAR(255),
+  widget_values VARCHAR(3000),
+  properties VARCHAR(3000),
+  cluster_id BIGINT NOT NULL,
+  PRIMARY KEY(id)
+);
+
+CREATE TABLE widget_layout (
+  id BIGINT NOT NULL,
+  layout_name VARCHAR(255) NOT NULL,
+  section_name VARCHAR(255) NOT NULL,
+  scope VARCHAR(255) NOT NULL,
+  user_name VARCHAR(255) NOT NULL,
+  display_name VARCHAR(255),
+  cluster_id BIGINT NOT NULL,
+  PRIMARY KEY(id)
+);
+
+CREATE TABLE widget_layout_user_widget (
+  widget_layout_id BIGINT NOT NULL,
+  widget_id BIGINT NOT NULL,
+  widget_order smallint,
+  PRIMARY KEY(widget_layout_id, widget_id)
+);
+
+CREATE TABLE artifact (
+  artifact_name VARCHAR(255) NOT NULL,
+  artifact_data VARCHAR(3000) NOT NULL,
+  foreign_keys VARCHAR(255) NOT NULL,
+  PRIMARY KEY (artifact_name, foreign_keys));
+
+CREATE TABLE topology_request (
+  id BIGINT NOT NULL,
+  action VARCHAR(255) NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  bp_name VARCHAR(100) NOT NULL,
+  cluster_properties VARCHAR(3000),
+  cluster_attributes VARCHAR(3000),
+  description VARCHAR(1024),
+  PRIMARY KEY (id)
+);
+
+CREATE TABLE topology_hostgroup (
+  id BIGINT NOT NULL,
+  name VARCHAR(255) NOT NULL,
+  group_properties VARCHAR(3000),
+  group_attributes VARCHAR(3000),
+  request_id BIGINT NOT NULL,
+  PRIMARY KEY (id)
+);
+
+CREATE TABLE topology_host_info (
+  id BIGINT NOT NULL,
+  group_id BIGINT NOT NULL,
+  fqdn VARCHAR(255),
+  host_count INTEGER,
+  predicate VARCHAR(2048),
+  PRIMARY KEY (id)
+);
+
+CREATE TABLE topology_logical_request (
+  id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  description VARCHAR(1024),
+  PRIMARY KEY (id)
+);
+
+CREATE TABLE topology_host_request (
+  id BIGINT NOT NULL,
+  logical_request_id BIGINT NOT NULL,
+  group_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
+  host_name VARCHAR(255),
+  PRIMARY KEY (id)
+);
+
+CREATE TABLE topology_host_task (
+  id BIGINT NOT NULL,
+  host_request_id BIGINT NOT NULL,
+  type VARCHAR(255) NOT NULL,
+  PRIMARY KEY (id)
+);
+
+CREATE TABLE topology_logical_task (
+  id BIGINT NOT NULL,
+  host_task_id BIGINT NOT NULL,
+  physical_task_id BIGINT,
+  component VARCHAR(255) NOT NULL,
+  PRIMARY KEY (id)
+);
+
+--------altering tables by creating unique constraints----------
+ALTER TABLE users ADD CONSTRAINT UNQ_users_0 UNIQUE (user_name, user_type);
+ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_tag UNIQUE (version_tag, type_name, cluster_id);
+ALTER TABLE clusterconfig ADD CONSTRAINT UQ_config_type_version UNIQUE (cluster_id, type_name, version);
+ALTER TABLE hosts ADD CONSTRAINT UQ_hosts_host_name UNIQUE (host_name);
+ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name UNIQUE (view_name, name);
+ALTER TABLE viewinstance ADD CONSTRAINT UQ_viewinstance_name_id UNIQUE (view_instance_id, view_name, name);
+ALTER TABLE serviceconfig ADD CONSTRAINT UQ_scv_service_version UNIQUE (cluster_id, service_name, version);
+ALTER TABLE adminpermission ADD CONSTRAINT UQ_perm_name_resource_type_id UNIQUE (permission_name, resource_type_id);
+ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_display_name UNIQUE (display_name);
+ALTER TABLE repo_version ADD CONSTRAINT UQ_repo_version_stack_id UNIQUE (stack_id, version);
+ALTER TABLE stack ADD CONSTRAINT unq_stack UNIQUE (stack_name, stack_version);
+
+--------altering tables by creating foreign keys----------
+-- Note, Oracle has a limitation of 32 chars in the FK name, and we should use the same FK name in all DB types.
+ALTER TABLE members ADD CONSTRAINT FK_members_group_id FOREIGN KEY (group_id) REFERENCES groups (group_id);
+ALTER TABLE members ADD CONSTRAINT FK_members_user_id FOREIGN KEY (user_id) REFERENCES users (user_id);
+ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE clusterservices ADD CONSTRAINT FK_clusterservices_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE clusterconfigmapping ADD CONSTRAINT clusterconfigmappingcluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE clusterstate ADD CONSTRAINT FK_clusterstate_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE cluster_version ADD CONSTRAINT FK_cluster_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
+ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcdesiredstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT hstcmpnntdesiredstatecmpnntnme FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name);
+ALTER TABLE hostcomponentstate ADD CONSTRAINT hstcomponentstatecomponentname FOREIGN KEY (component_name, cluster_id, service_name) REFERENCES servicecomponentdesiredstate (component_name, cluster_id, service_name);
+ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hostcomponentstate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE hoststate ADD CONSTRAINT FK_hoststate_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE host_version ADD CONSTRAINT FK_host_version_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE host_version ADD CONSTRAINT FK_host_version_repovers_id FOREIGN KEY (repo_version_id) REFERENCES repo_version (repo_version_id);
+ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT srvccmponentdesiredstatesrvcnm FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
+ALTER TABLE servicedesiredstate ADD CONSTRAINT servicedesiredstateservicename FOREIGN KEY (service_name, cluster_id) REFERENCES clusterservices (service_name, cluster_id);
+ALTER TABLE execution_command ADD CONSTRAINT FK_execution_command_task_id FOREIGN KEY (task_id) REFERENCES host_role_command (task_id);
+ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
+ALTER TABLE host_role_command ADD CONSTRAINT FK_host_role_command_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE role_success_criteria ADD CONSTRAINT role_success_criteria_stage_id FOREIGN KEY (stage_id, request_id) REFERENCES stage (stage_id, request_id);
+ALTER TABLE stage ADD CONSTRAINT FK_stage_request_id FOREIGN KEY (request_id) REFERENCES request (request_id);
+ALTER TABLE request ADD CONSTRAINT FK_request_schedule_id FOREIGN KEY (request_schedule_id) REFERENCES requestschedule (schedule_id);
+ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clhostmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE ClusterHostMapping ADD CONSTRAINT FK_clusterhostmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE hostconfigmapping ADD CONSTRAINT FK_hostconfmapping_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE configgroup ADD CONSTRAINT FK_configgroup_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters (cluster_id);
+ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_confg FOREIGN KEY (version_tag, config_type, cluster_id) REFERENCES clusterconfig (version_tag, type_name, cluster_id);
+ALTER TABLE confgroupclusterconfigmapping ADD CONSTRAINT FK_cgccm_gid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
+ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_cgid FOREIGN KEY (config_group_id) REFERENCES configgroup (group_id);
+ALTER TABLE configgrouphostmapping ADD CONSTRAINT FK_cghm_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE requestschedulebatchrequest ADD CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) REFERENCES requestschedule (schedule_id);
+ALTER TABLE hostgroup ADD CONSTRAINT FK_hg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
+ALTER TABLE hostgroup_component ADD CONSTRAINT FK_hgc_blueprint_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
+ALTER TABLE blueprint_configuration ADD CONSTRAINT FK_cfg_blueprint_name FOREIGN KEY (blueprint_name) REFERENCES blueprint(blueprint_name);
+ALTER TABLE hostgroup_configuration ADD CONSTRAINT FK_hg_cfg_bp_hg_name FOREIGN KEY (blueprint_name, hostgroup_name) REFERENCES hostgroup (blueprint_name, name);
+ALTER TABLE requestresourcefilter ADD CONSTRAINT FK_reqresfilter_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
+ALTER TABLE requestoperationlevel ADD CONSTRAINT FK_req_op_level_req_id FOREIGN KEY (request_id) REFERENCES request (request_id);
+ALTER TABLE viewparameter ADD CONSTRAINT FK_viewparam_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
+ALTER TABLE viewresource ADD CONSTRAINT FK_viewres_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
+ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinst_view_name FOREIGN KEY (view_name) REFERENCES viewmain(view_name);
+ALTER TABLE viewinstanceproperty ADD CONSTRAINT FK_viewinstprop_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
+ALTER TABLE viewinstancedata ADD CONSTRAINT FK_viewinstdata_view_name FOREIGN KEY (view_instance_id, view_name, view_instance_name) REFERENCES viewinstance(view_instance_id, view_name, name);
+ALTER TABLE viewentity ADD CONSTRAINT FK_viewentity_view_name FOREIGN KEY (view_name, view_instance_name) REFERENCES viewinstance(view_name, name);
+ALTER TABLE adminresource ADD CONSTRAINT FK_resource_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
+ALTER TABLE adminprincipal ADD CONSTRAINT FK_principal_principal_type_id FOREIGN KEY (principal_type_id) REFERENCES adminprincipaltype(principal_type_id);
+ALTER TABLE adminpermission ADD CONSTRAINT FK_permission_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
+ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_pid FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
+ALTER TABLE permission_roleauthorization ADD CONSTRAINT FK_permission_roleauth_aid FOREIGN KEY (authorization_id) REFERENCES roleauthorization(authorization_id);
+ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_permission_id FOREIGN KEY (permission_id) REFERENCES adminpermission(permission_id);
+ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
+ALTER TABLE viewmain ADD CONSTRAINT FK_view_resource_type_id FOREIGN KEY (resource_type_id) REFERENCES adminresourcetype(resource_type_id);
+ALTER TABLE viewinstance ADD CONSTRAINT FK_viewinstance_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
+ALTER TABLE adminprivilege ADD CONSTRAINT FK_privilege_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
+ALTER TABLE users ADD CONSTRAINT FK_users_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
+ALTER TABLE groups ADD CONSTRAINT FK_groups_principal_id FOREIGN KEY (principal_id) REFERENCES adminprincipal(principal_id);
+ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
+ALTER TABLE serviceconfigmapping ADD CONSTRAINT FK_scvm_config FOREIGN KEY (config_id) REFERENCES clusterconfig(config_id);
+ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_scv FOREIGN KEY (service_config_id) REFERENCES serviceconfig(service_config_id);
+ALTER TABLE serviceconfighosts ADD CONSTRAINT FK_scvhosts_host_id FOREIGN KEY (host_id) REFERENCES hosts(host_id);
+ALTER TABLE clusters ADD CONSTRAINT FK_clusters_resource_id FOREIGN KEY (resource_id) REFERENCES adminresource(resource_id);
+ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_layout_id FOREIGN KEY (widget_layout_id) REFERENCES widget_layout(id);
+ALTER TABLE widget_layout_user_widget ADD CONSTRAINT FK_widget_id FOREIGN KEY (widget_id) REFERENCES widget(id);
+ALTER TABLE topology_request ADD CONSTRAINT FK_topology_request_cluster_id FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id);
+ALTER TABLE topology_hostgroup ADD CONSTRAINT FK_hostgroup_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
+ALTER TABLE topology_host_info ADD CONSTRAINT FK_hostinfo_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
+ALTER TABLE topology_logical_request ADD CONSTRAINT FK_logicalreq_req_id FOREIGN KEY (request_id) REFERENCES topology_request(id);
+ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_logicalreq_id FOREIGN KEY (logical_request_id) REFERENCES topology_logical_request(id);
+ALTER TABLE topology_host_request ADD CONSTRAINT FK_hostreq_group_id FOREIGN KEY (group_id) REFERENCES topology_hostgroup(id);
+ALTER TABLE topology_host_task ADD CONSTRAINT FK_hosttask_req_id FOREIGN KEY (host_request_id) REFERENCES topology_host_request (id);
+ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hosttask_id FOREIGN KEY (host_task_id) REFERENCES topology_host_task (id);
+ALTER TABLE topology_logical_task ADD CONSTRAINT FK_ltask_hrc_id FOREIGN KEY (physical_task_id) REFERENCES host_role_command (task_id);
+ALTER TABLE clusters ADD CONSTRAINT FK_clusters_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
+ALTER TABLE clusterconfig ADD CONSTRAINT FK_clusterconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
+ALTER TABLE serviceconfig ADD CONSTRAINT FK_serviceconfig_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
+ALTER TABLE clusterstate ADD CONSTRAINT FK_cs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
+ALTER TABLE hostcomponentdesiredstate ADD CONSTRAINT FK_hcds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
+ALTER TABLE hostcomponentstate ADD CONSTRAINT FK_hcs_current_stack_id FOREIGN KEY (current_stack_id) REFERENCES stack(stack_id);
+ALTER TABLE servicecomponentdesiredstate ADD CONSTRAINT FK_scds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
+ALTER TABLE servicedesiredstate ADD CONSTRAINT FK_sds_desired_stack_id FOREIGN KEY (desired_stack_id) REFERENCES stack(stack_id);
+ALTER TABLE blueprint ADD CONSTRAINT FK_blueprint_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
+ALTER TABLE repo_version ADD CONSTRAINT FK_repoversion_stack_id FOREIGN KEY (stack_id) REFERENCES stack(stack_id);
+
+-- Kerberos
+CREATE TABLE kerberos_principal (
+  principal_name VARCHAR(255) NOT NULL,
+  is_service SMALLINT NOT NULL DEFAULT 1,
+  cached_keytab_path VARCHAR(255),
+  PRIMARY KEY(principal_name)
+);
+
+CREATE TABLE kerberos_principal_host (
+  principal_name VARCHAR(255) NOT NULL,
+  host_id BIGINT NOT NULL,
+  PRIMARY KEY(principal_name, host_id)
+);
+
+CREATE TABLE kerberos_descriptor
+(
+   kerberos_descriptor_name   VARCHAR(255) NOT NULL,
+   kerberos_descriptor        VARCHAR(3000) NOT NULL,
+   PRIMARY KEY (kerberos_descriptor_name)
+);
+
+ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_id FOREIGN KEY (host_id) REFERENCES hosts (host_id);
+ALTER TABLE kerberos_principal_host ADD CONSTRAINT FK_krb_pr_host_principalname FOREIGN KEY (principal_name) REFERENCES kerberos_principal (principal_name);
+-- Kerberos (end)
+
+-- Alerting Framework
+CREATE TABLE alert_definition (
+  definition_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  definition_name VARCHAR(255) NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  component_name VARCHAR(255),
+  scope VARCHAR(255) DEFAULT 'ANY' NOT NULL,
+  label VARCHAR(255),
+  description VARCHAR(3000),
+  enabled SMALLINT DEFAULT 1 NOT NULL,
+  schedule_interval INTEGER NOT NULL,
+  source_type VARCHAR(255) NOT NULL,
+  alert_source VARCHAR(3000) NOT NULL,
+  hash VARCHAR(64) NOT NULL,
+  ignore_host SMALLINT DEFAULT 0 NOT NULL,
+  PRIMARY KEY (definition_id),
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
+  CONSTRAINT uni_alert_def_name UNIQUE(cluster_id,definition_name)
+);
+
+CREATE TABLE alert_history (
+  alert_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  alert_definition_id BIGINT NOT NULL,
+  service_name VARCHAR(255) NOT NULL,
+  component_name VARCHAR(255),
+  host_name VARCHAR(255),
+  alert_instance VARCHAR(255),
+  alert_timestamp BIGINT NOT NULL,
+  alert_label VARCHAR(1024),
+  alert_state VARCHAR(255) NOT NULL,
+  alert_text VARCHAR(3000),
+  PRIMARY KEY (alert_id),
+  FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)
+);
+
+CREATE TABLE alert_current (
+  alert_id BIGINT NOT NULL,
+  definition_id BIGINT NOT NULL,
+  history_id BIGINT NOT NULL UNIQUE,
+  maintenance_state VARCHAR(255) NOT NULL,
+  original_timestamp BIGINT NOT NULL,
+  latest_timestamp BIGINT NOT NULL,
+  latest_text VARCHAR(3000),
+  PRIMARY KEY (alert_id),
+  FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
+  FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
+);
+
+CREATE TABLE alert_group (
+  group_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  group_name VARCHAR(255) NOT NULL,
+  is_default SMALLINT NOT NULL DEFAULT 0,
+  service_name VARCHAR(255),
+  PRIMARY KEY (group_id),
+  CONSTRAINT uni_alert_group_name UNIQUE(cluster_id,group_name)
+);
+
+CREATE TABLE alert_target (
+  target_id BIGINT NOT NULL,
+  target_name VARCHAR(255) NOT NULL UNIQUE,
+  notification_type VARCHAR(64) NOT NULL,
+  properties VARCHAR(3000),
+  description VARCHAR(1024),
+  is_global SMALLINT NOT NULL DEFAULT 0,
+  PRIMARY KEY (target_id)
+);
+
+CREATE TABLE alert_target_states (
+  target_id BIGINT NOT NULL,
+  alert_state VARCHAR(255) NOT NULL,
+  FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
+);
+
+CREATE TABLE alert_group_target (
+  group_id BIGINT NOT NULL,
+  target_id BIGINT NOT NULL,
+  PRIMARY KEY (group_id, target_id),
+  FOREIGN KEY (group_id) REFERENCES alert_group(group_id),
+  FOREIGN KEY (target_id) REFERENCES alert_target(target_id)
+);
+
+CREATE TABLE alert_grouping (
+  definition_id BIGINT NOT NULL,
+  group_id BIGINT NOT NULL,
+  PRIMARY KEY (group_id, definition_id),
+  FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id),
+  FOREIGN KEY (group_id) REFERENCES alert_group(group_id)
+);
+
+CREATE TABLE alert_notice (
+  notification_id BIGINT NOT NULL,
+  target_id BIGINT NOT NULL,
+  history_id BIGINT NOT NULL,
+  notify_state VARCHAR(255) NOT NULL,
+  uuid VARCHAR(64) NOT NULL UNIQUE,
+  PRIMARY KEY (notification_id),
+  FOREIGN KEY (target_id) REFERENCES alert_target(target_id),
+  FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
+);
+
+CREATE INDEX idx_alert_history_def_id on alert_history(alert_definition_id);
+CREATE INDEX idx_alert_history_service on alert_history(service_name);
+CREATE INDEX idx_alert_history_host on alert_history(host_name);
+CREATE INDEX idx_alert_history_time on alert_history(alert_timestamp);
+CREATE INDEX idx_alert_history_state on alert_history(alert_state);
+CREATE INDEX idx_alert_group_name on alert_group(group_name);
+CREATE INDEX idx_alert_notice_state on alert_notice(notify_state);
+
+-- upgrade tables
+CREATE TABLE upgrade (
+  upgrade_id BIGINT NOT NULL,
+  cluster_id BIGINT NOT NULL,
+  request_id BIGINT NOT NULL,
+  from_version VARCHAR(255) DEFAULT '' NOT NULL,
+  to_version VARCHAR(255) DEFAULT '' NOT NULL,
+  direction VARCHAR(255) DEFAULT 'UPGRADE' NOT NULL,
+  upgrade_package VARCHAR(255) NOT NULL,
+  upgrade_type VARCHAR(32) NOT NULL,
+  skip_failures SMALLINT DEFAULT 0 NOT NULL,
+  skip_sc_failures SMALLINT DEFAULT 0 NOT NULL,
+  downgrade_allowed SMALLINT DEFAULT 1 NOT NULL,
+  PRIMARY KEY (upgrade_id),
+  FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id),
+  FOREIGN KEY (request_id) REFERENCES request(request_id)
+);
+
+CREATE TABLE upgrade_group (
+  upgrade_group_id BIGINT NOT NULL,
+  upgrade_id BIGINT NOT NULL,
+  group_name VARCHAR(255) DEFAULT '' NOT NULL,
+  group_title VARCHAR(1024) DEFAULT '' NOT NULL,
+  PRIMARY KEY (upgrade_group_id),
+  FOREIGN KEY (upgrade_id) REFERENCES upgrade(upgrade_id)
+);
+
+CREATE TABLE upgrade_item (
+  upgrade_item_id BIGINT NOT NULL,
+  upgrade_group_id BIGINT NOT NULL,
+  stage_id BIGINT NOT NULL,
+  state VARCHAR(255) DEFAULT 'NONE' NOT NULL,
+  hosts VARCHAR(3000),
+  tasks VARCHAR(3000),
+  item_text VARCHAR(1024),
+  PRIMARY KEY (upgrade_item_id),
+  FOREIGN KEY (upgrade_group_id) REFERENCES upgrade_group(upgrade_group_id)
+);
+
+---------inserting some data-----------
+-- In order for the first ID to be 1, must initialize the ambari_sequences table with a sequence_value of 0.
+-- BEGIN;
+INSERT INTO ambari_sequences (sequence_name, sequence_value)
+  SELECT 'cluster_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 'host_id_seq', 0 FROM SYSIBM.SYSDUMMY1	
+  UNION ALL
+  SELECT 'user_id_seq', 2 FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 'group_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 'member_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 'host_role_command_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'configgroup_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'requestschedule_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'resourcefilter_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'viewentity_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'operation_level_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'view_instance_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'resource_type_id_seq', 4 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'resource_id_seq', 2 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'principal_type_id_seq', 3 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'principal_id_seq', 2 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'permission_id_seq', 5 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'privilege_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'alert_definition_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'alert_group_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'alert_target_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'alert_history_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'alert_notice_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'alert_current_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'config_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'repo_version_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'cluster_version_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'host_version_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'service_config_id_seq', 1 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'upgrade_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'upgrade_group_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'widget_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'widget_layout_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'upgrade_item_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'stack_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_host_info_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_host_request_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_host_task_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_logical_request_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_logical_task_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_request_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'topology_host_group_id_seq', 0 FROM SYSIBM.SYSDUMMY1
+  union all
+  select 'hostcomponentstate_id_seq', 0  FROM SYSIBM.SYSDUMMY1;
+
+INSERT INTO adminresourcetype (resource_type_id, resource_type_name)
+  SELECT 1, 'AMBARI' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 2, 'CLUSTER' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 3, 'VIEW' FROM SYSIBM.SYSDUMMY1;
+
+INSERT INTO adminresource (resource_id, resource_type_id)
+  SELECT 1, 1 FROM SYSIBM.SYSDUMMY1;
+
+INSERT INTO adminprincipaltype (principal_type_id, principal_type_name)
+  SELECT 1, 'USER' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 2, 'GROUP' FROM SYSIBM.SYSDUMMY1;
+
+INSERT INTO adminprincipal (principal_id, principal_type_id)
+  SELECT 1, 1 FROM SYSIBM.SYSDUMMY1;
+
+INSERT INTO Users (user_id, principal_id, user_name, user_password)
+  SELECT 1, 1, 'admin', '538916f8943ec225d97a9a86a2c6ec0818c1cd400e09e03b660fdaaec4af29ddbb6f2b1033b81b00' FROM SYSIBM.SYSDUMMY1;
+
+insert into adminpermission(permission_id, permission_name, resource_type_id, permission_label)
+  SELECT 1, 'AMBARI.ADMINISTRATOR', 1, 'Administrator' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 2, 'CLUSTER.USER', 2, 'Cluster User' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 3, 'CLUSTER.ADMINISTRATOR', 2, 'Cluster Administrator' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 4, 'VIEW.USER', 3, 'View User' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 5, 'CLUSTER.OPERATOR', 2, 'Cluster Operator' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 6, 'SERVICE.ADMINISTRATOR', 2, 'Service Administrator' FROM SYSIBM.SYSDUMMY1
+  UNION ALL
+  SELECT 7, 'SERVICE.OPERATOR', 2, 'Service Operator' FROM SYSIBM.SYSDUMMY1;
+
+INSERT INTO roleauthorization(authorization_id, authorization_name)
+  SELECT 'VIEW.USE', 'Use View' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.VIEW_METRICS', 'View metrics' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.VIEW_STATUS_INFO', 'View status information' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.VIEW_CONFIGS', 'View configurations' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.COMPARE_CONFIGS', 'Compare configurations' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.VIEW_ALERTS', 'View service alerts' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.START_STOP', 'Start/Stop/Restart Service' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.DECOMMISSION_RECOMMISSION', 'Decommission/recommission' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.RUN_SERVICE_CHECK', 'Run service checks' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.TOGGLE_MAINTENANCE', 'Turn on/off maintenance mode' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.RUN_CUSTOM_COMMAND', 'Perform service-specific tasks' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.MODIFY_CONFIGS', 'Modify configurations' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.MANAGE_CONFIG_GROUPS', 'Manage configuration groups' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.MOVE', 'Move to another host' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.ENABLE_HA', 'Enable HA' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.TOGGLE_ALERTS', 'Enable/disable service alerts' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'SERVICE.ADD_DELETE_SERVICES', 'Add Service to cluster' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'HOST.VIEW_METRICS', 'View metrics' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'HOST.VIEW_STATUS_INFO', 'View status information' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'HOST.VIEW_CONFIGS', 'View configuration' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'HOST.TOGGLE_MAINTENANCE', 'Turn on/off maintenance mode' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'HOST.ADD_DELETE_COMPONENTS', 'Install components' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'HOST.ADD_DELETE_HOSTS', 'Add/Delete hosts' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.VIEW_METRICS', 'View metrics' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.VIEW_STATUS_INFO', 'View status information' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.VIEW_CONFIGS', 'View configuration' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.VIEW_STACK_DETAILS', 'View stack version details' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.VIEW_ALERTS', 'View alerts' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.MANAGE_CREDENTIALS', 'Manage external credentials' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.MODIFY_CONFIGS', 'Modify cluster configurations' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.MANAGE_CONFIG_GROUPS', 'Manage cluster config groups' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.TOGGLE_ALERTS', 'Enable/disable alerts' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.TOGGLE_KERBEROS', 'Enable/disable Kerberos' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'CLUSTER.UPGRADE_DOWNGRADE_STACK', 'Upgrade/downgrade stack' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.ADD_DELETE_CLUSTERS', 'Create new clusters' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.SET_SERVICE_USERS_GROUPS', 'Set service users and groups' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.RENAME_CLUSTER', 'Rename clusters' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.MANAGE_USERS', 'Manage users' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.MANAGE_GROUPS', 'Manage groups' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.MANAGE_VIEWS', 'Manage Ambari Views' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.ASSIGN_ROLES', 'Assign roles' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.MANAGE_STACK_VERSIONS', 'Manage stack versions' FROM SYSIBM.SYSDUMMY1 UNION ALL
+  SELECT 'AMBARI.EDIT_STACK_REPOS', 'Edit stack repository URLs'  FROM SYSIBM.SYSDUMMY1;
+
+-- Set authorizations for View User role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'VIEW.USE' FROM adminpermission WHERE permission_name='VIEW.USER';
+
+-- Set authorizations for Cluster User role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'SERVICE.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'SERVICE.COMPARE_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STACK_DETAILS' FROM adminpermission WHERE permission_name='CLUSTER.USER'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.USER'   ;
+
+-- Set authorizations for Service Operator role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'SERVICE.VIEW_METRICS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.COMPARE_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_ALERTS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.START_STOP' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.DECOMMISSION_RECOMMISSION' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_SERVICE_CHECK' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_CUSTOM_COMMAND' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_METRICS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_METRICS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STACK_DETAILS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_ALERTS' FROM adminpermission WHERE permission_name='SERVICE.OPERATOR'   ;
+
+-- Set authorizations for Service Administrator role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'SERVICE.VIEW_METRICS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.COMPARE_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_ALERTS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.START_STOP' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.DECOMMISSION_RECOMMISSION' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_SERVICE_CHECK' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_CUSTOM_COMMAND' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MODIFY_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MOVE' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.ENABLE_HA' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_ALERTS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_METRICS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_METRICS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STACK_DETAILS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_ALERTS' FROM adminpermission WHERE permission_name='SERVICE.ADMINISTRATOR'   ;
+
+-- Set authorizations for Cluster Operator role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'SERVICE.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.COMPARE_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.START_STOP' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.DECOMMISSION_RECOMMISSION' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_SERVICE_CHECK' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_CUSTOM_COMMAND' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MODIFY_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MOVE' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.ENABLE_HA' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.ADD_DELETE_COMPONENTS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'HOST.ADD_DELETE_HOSTS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STACK_DETAILS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.OPERATOR'   ;
+
+-- Set authorizations for Cluster Administrator role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'SERVICE.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.COMPARE_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.START_STOP' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.DECOMMISSION_RECOMMISSION' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_SERVICE_CHECK' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_CUSTOM_COMMAND' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MODIFY_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MOVE' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.ENABLE_HA' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.ADD_DELETE_SERVICES' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.ADD_DELETE_COMPONENTS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.ADD_DELETE_HOSTS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_METRICS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STACK_DETAILS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MANAGE_CREDENTIALS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MODIFY_CONFIGS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.TOGGLE_ALERTS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.TOGGLE_KERBEROS' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.UPGRADE_DOWNGRADE_STACK' FROM adminpermission WHERE permission_name='CLUSTER.ADMINISTRATOR'   ;
+
+-- Set authorizations for Administrator role
+INSERT INTO permission_roleauthorization(permission_id, authorization_id)
+  SELECT permission_id, 'VIEW.USE' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_METRICS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.COMPARE_CONFIGS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.VIEW_ALERTS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.START_STOP' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.DECOMMISSION_RECOMMISSION' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_SERVICE_CHECK' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.RUN_CUSTOM_COMMAND' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MODIFY_CONFIGS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.MOVE' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.ENABLE_HA' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.TOGGLE_ALERTS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'SERVICE.ADD_DELETE_SERVICES' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_METRICS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.TOGGLE_MAINTENANCE' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.ADD_DELETE_COMPONENTS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'HOST.ADD_DELETE_HOSTS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_METRICS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STATUS_INFO' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_CONFIGS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_STACK_DETAILS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.VIEW_ALERTS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MANAGE_CREDENTIALS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MODIFY_CONFIGS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.MANAGE_CONFIG_GROUPS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.TOGGLE_ALERTS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.TOGGLE_KERBEROS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'CLUSTER.UPGRADE_DOWNGRADE_STACK' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.ADD_DELETE_CLUSTERS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.SET_SERVICE_USERS_GROUPS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.RENAME_CLUSTER' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.MANAGE_USERS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.MANAGE_GROUPS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.MANAGE_VIEWS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.ASSIGN_ROLES' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.MANAGE_STACK_VERSIONS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'  UNION ALL
+  SELECT permission_id, 'AMBARI.EDIT_STACK_REPOS' FROM adminpermission WHERE permission_name='AMBARI.ADMINISTRATOR'   ;
+
+INSERT INTO adminprivilege (privilege_id, permission_id, resource_id, principal_id)
+  SELECT 1, 1, 1, 1 FROM SYSIBM.SYSDUMMY1 ;
+
+INSERT INTO metainfo ("metainfo_key", "metainfo_value")
+  SELECT 'version', '${ambariVersion}' FROM SYSIBM.SYSDUMMY1;
+--COMMIT;
+
+-- Quartz tables
+
+CREATE TABLE qrtz_job_details
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  JOB_NAME  VARCHAR(200) NOT NULL,
+  JOB_GROUP VARCHAR(200) NOT NULL,
+  DESCRIPTION VARCHAR(250) DEFAULT NULL,
+  JOB_CLASS_NAME   VARCHAR(250) NOT NULL,
+  IS_DURABLE BOOLEAN NOT NULL,
+  IS_NONCONCURRENT BOOLEAN NOT NULL,
+  IS_UPDATE_DATA BOOLEAN NOT NULL,
+  REQUESTS_RECOVERY BOOLEAN NOT NULL,
+  JOB_DATA BLOB,
+  PRIMARY KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
+);
+
+CREATE TABLE qrtz_triggers
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  TRIGGER_NAME VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  JOB_NAME  VARCHAR(200) NOT NULL,
+  JOB_GROUP VARCHAR(200) NOT NULL,
+  DESCRIPTION VARCHAR(250),
+  NEXT_FIRE_TIME BIGINT,
+  PREV_FIRE_TIME BIGINT,
+  PRIORITY INTEGER,
+  TRIGGER_STATE VARCHAR(16) NOT NULL,
+  TRIGGER_TYPE VARCHAR(8) NOT NULL,
+  START_TIME BIGINT NOT NULL,
+  END_TIME BIGINT,
+  CALENDAR_NAME VARCHAR(200),
+  MISFIRE_INSTR SMALLINT,
+  JOB_DATA BLOB DEFAULT NULL,
+  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME,JOB_NAME,JOB_GROUP)
+  REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME,JOB_NAME,JOB_GROUP)
+);
+
+CREATE TABLE qrtz_simple_triggers
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  TRIGGER_NAME VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  REPEAT_COUNT BIGINT NOT NULL,
+  REPEAT_INTERVAL BIGINT NOT NULL,
+  TIMES_TRIGGERED BIGINT NOT NULL,
+  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+);
+
+CREATE TABLE qrtz_cron_triggers
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  TRIGGER_NAME VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  CRON_EXPRESSION VARCHAR(120) NOT NULL,
+  TIME_ZONE_ID VARCHAR(80),
+  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+);
+
+CREATE TABLE qrtz_simprop_triggers
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  TRIGGER_NAME VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  STR_PROP_1 VARCHAR(512),
+  STR_PROP_2 VARCHAR(512),
+  STR_PROP_3 VARCHAR(512),
+  INT_PROP_1 INT,
+  INT_PROP_2 INT,
+  LONG_PROP_1 BIGINT,
+  LONG_PROP_2 BIGINT,
+  DEC_PROP_1 NUMERIC(13,4),
+  DEC_PROP_2 NUMERIC(13,4),
+  BOOLEAN_PROP_1 BOOLEAN,
+  BOOLEAN_PROP_2 BOOLEAN,
+  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+);
+
+CREATE TABLE qrtz_blob_triggers
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  TRIGGER_NAME VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  BLOB_DATA BLOB,
+  PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),
+  FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+  REFERENCES QRTZ_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)
+);
+
+CREATE TABLE qrtz_calendars
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  CALENDAR_NAME  VARCHAR(200) NOT NULL,
+  CALENDAR BLOB NOT NULL,
+  PRIMARY KEY (SCHED_NAME,CALENDAR_NAME)
+);
+
+
+CREATE TABLE qrtz_paused_trigger_grps
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  TRIGGER_GROUP  VARCHAR(200) NOT NULL,
+  PRIMARY KEY (SCHED_NAME,TRIGGER_GROUP)
+);
+
+CREATE TABLE qrtz_fired_triggers
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  ENTRY_ID VARCHAR(95) NOT NULL,
+  TRIGGER_NAME VARCHAR(200) NOT NULL,
+  TRIGGER_GROUP VARCHAR(200) NOT NULL,
+  INSTANCE_NAME VARCHAR(200) NOT NULL,
+  FIRED_TIME BIGINT NOT NULL,
+  SCHED_TIME BIGINT NOT NULL,
+  PRIORITY INTEGER NOT NULL,
+  STATE VARCHAR(16) NOT NULL,
+  JOB_NAME VARCHAR(200) DEFAULT NULL,
+  JOB_GROUP VARCHAR(200) DEFAULT NULL,
+  IS_NONCONCURRENT BOOLEAN,
+  REQUESTS_RECOVERY BOOLEAN,
+  PRIMARY KEY (SCHED_NAME,ENTRY_ID)
+);
+
+CREATE TABLE qrtz_scheduler_state
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  INSTANCE_NAME VARCHAR(200) NOT NULL,
+  LAST_CHECKIN_TIME BIGINT NOT NULL,
+  CHECKIN_INTERVAL BIGINT NOT NULL,
+  PRIMARY KEY (SCHED_NAME,INSTANCE_NAME)
+);
+
+CREATE TABLE qrtz_locks
+(
+  SCHED_NAME VARCHAR(120) NOT NULL,
+  LOCK_NAME  VARCHAR(40) NOT NULL,
+  PRIMARY KEY (SCHED_NAME,LOCK_NAME)
+);
+
+create index idx_qrtz_j_req_recovery on qrtz_job_details(SCHED_NAME,REQUESTS_RECOVERY);
+create index idx_qrtz_j_grp on qrtz_job_details(SCHED_NAME,JOB_GROUP);
+
+create index idx_qrtz_t_j on qrtz_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
+create index idx_qrtz_t_jg on qrtz_triggers(SCHED_NAME,JOB_GROUP);
+create index idx_qrtz_t_c on qrtz_triggers(SCHED_NAME,CALENDAR_NAME);
+create index idx_qrtz_t_g on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP);
+create index idx_qrtz_t_state on qrtz_triggers(SCHED_NAME,TRIGGER_STATE);
+create index idx_qrtz_t_n_state on qrtz_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP,TRIGGER_STATE);
+create index idx_qrtz_t_n_g_state on qrtz_triggers(SCHED_NAME,TRIGGER_GROUP,TRIGGER_STATE);
+create index idx_qrtz_t_next_fire_time on qrtz_triggers(SCHED_NAME,NEXT_FIRE_TIME);
+create index idx_qrtz_t_nft_st on qrtz_triggers(SCHED_NAME,TRIGGER_STATE,NEXT_FIRE_TIME);
+create index idx_qrtz_t_nft_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME);
+create index idx_qrtz_t_nft_st_misfire on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_STATE);
+create index idx_qrtz_t_nft_st_misfire_grp on qrtz_triggers(SCHED_NAME,MISFIRE_INSTR,NEXT_FIRE_TIME,TRIGGER_GROUP,TRIGGER_STATE);
+
+create index idx_qrtz_ft_trig_inst_name on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME);
+create index idx_qrtz_ft_inst_job_req_rcvry on qrtz_fired_triggers(SCHED_NAME,INSTANCE_NAME,REQUESTS_RECOVERY);
+create index idx_qrtz_ft_j_g on qrtz_fired_triggers(SCHED_NAME,JOB_NAME,JOB_GROUP);
+create index idx_qrtz_ft_jg on qrtz_fired_triggers(SCHED_NAME,JOB_GROUP);
+create index idx_qrtz_ft_t_g on qrtz_fired_triggers(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
+create index idx_qrtz_ft_tg on qrtz_fired_triggers(SCHED_NAME,TRIGGER_GROUP);
+
+-- ambari log4j DDL
+
+CREATE TABLE workflow (
+  workflowId       VARCHAR(3000), workflowName VARCHAR(3000),
+  parentWorkflowId VARCHAR(3000),
+  workflowContext  VARCHAR(3000), userName VARCHAR(3000),
+  startTime        BIGINT, lastUpdateTime BIGINT,
+  numJobsTotal     INTEGER, numJobsCompleted INTEGER,
+  inputBytes       BIGINT, outputBytes BIGINT,
+  duration         BIGINT,
+  PRIMARY KEY (workflowId),
+  FOREIGN KEY (parentWorkflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
+);
+
+CREATE TABLE job (
+  jobId        VARCHAR(3000), workflowId VARCHAR(3000), jobName VARCHAR(3000), workflowEntityName VARCHAR(3000),
+  userName     VARCHAR(3000), queue VARCHAR(3000), acls VARCHAR(3000), confPath VARCHAR(3000),
+  submitTime   BIGINT, launchTime BIGINT, finishTime BIGINT,
+  maps         INTEGER, reduces INTEGER, status VARCHAR(3000), priority VARCHAR(3000),
+  finishedMaps INTEGER, finishedReduces INTEGER,
+  failedMaps   INTEGER, failedReduces INTEGER,
+  mapsRuntime  BIGINT, reducesRuntime BIGINT,
+  mapCounters  VARCHAR(3000), reduceCounters VARCHAR(3000), jobCounters VARCHAR(3000),
+  inputBytes   BIGINT, outputBytes BIGINT,
+  PRIMARY KEY (jobId),
+  FOREIGN KEY (workflowId) REFERENCES workflow (workflowId) ON DELETE CASCADE
+);
+
+CREATE TABLE task (
+  taskId        VARCHAR(3000), jobId VARCHAR(3000), taskType VARCHAR(3000), splits VARCHAR(3000),
+  startTime     BIGINT, finishTime BIGINT, status VARCHAR(3000), error VARCHAR(3000), counters VARCHAR(3000),
+  failedAttempt VARCHAR(3000),
+  PRIMARY KEY (taskId),
+  FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE
+);
+
+CREATE TABLE taskAttempt (
+  taskAttemptId VARCHAR(3000), taskId VARCHAR(3000), jobId VARCHAR(3000), taskType VARCHAR(3000), taskTracker VARCHAR(3000),
+  startTime     BIGINT, finishTime BIGINT,
+  mapFinishTime BIGINT, shuffleFinishTime BIGINT, sortFinishTime BIGINT,
+  locality      VARCHAR(3000), avataar VARCHAR(3000),
+  status        VARCHAR(3000), error VARCHAR(3000), counters VARCHAR(3000),
+  inputBytes    BIGINT, outputBytes BIGINT,
+  PRIMARY KEY (taskAttemptId),
+  FOREIGN KEY (jobId) REFERENCES job (jobId) ON DELETE CASCADE,
+  FOREIGN KEY (taskId) REFERENCES task (taskId) ON DELETE CASCADE
+);
+
+CREATE TABLE hdfsEvent (
+  timestamp   BIGINT,
+  userName    VARCHAR(3000),
+  clientIP    VARCHAR(3000),
+  operation   VARCHAR(3000),
+  srcPath     VARCHAR(3000),
+  dstPath     VARCHAR(3000),
+  permissions VARCHAR(3000)
+);
+
+CREATE TABLE mapreduceEvent (
+  timestamp   BIGINT,
+  userName    VARCHAR(3000),
+  clientIP    VARCHAR(3000),
+  operation   VARCHAR(3000),
+  target      VARCHAR(3000),
+  result      VARCHAR(3000),
+  description VARCHAR(3000),
+  permissions VARCHAR(3000)
+);
+
+CREATE TABLE clusterEvent (
+  timestamp BIGINT,
+  service   VARCHAR(3000), status VARCHAR(3000),
+  error     VARCHAR(3000), data VARCHAR(3000),
+  host      VARCHAR(3000), rack VARCHAR(3000)
+);


[2/2] ambari git commit: AMBARI-14391. Add a test to verify Role Based Access Control for a non-admin user (Nahappan Somasundaram via smohanty)

Posted by sm...@apache.org.
AMBARI-14391. Add a test to verify Role Based Access Control for a non-admin user (Nahappan Somasundaram via smohanty)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f2e797ab
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f2e797ab
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f2e797ab

Branch: refs/heads/trunk
Commit: f2e797abd9ce6db53995085c6693ed16d278f185
Parents: 4fb0f6e
Author: Sumit Mohanty <sm...@hortonworks.com>
Authored: Wed Dec 16 21:42:42 2015 -0800
Committer: Sumit Mohanty <sm...@hortonworks.com>
Committed: Wed Dec 16 21:42:42 2015 -0800

----------------------------------------------------------------------
 .../java/org/apache/ambari/funtest/AppTest.java |   55 -
 .../ambari/funtest/server/AmbariUserRole.java   |   68 +
 .../funtest/server/LocalAmbariServer.java       |    7 -
 .../api/cluster/DeleteClusterWebRequest.java    |   60 +
 .../api/cluster/SetUserPrivilegeWebRequest.java |   96 ++
 .../server/api/user/CreateUserWebRequest.java   |   95 ++
 .../server/api/user/DeleteUserWebRequest.java   |   56 +
 .../funtest/server/tests/DeleteServiceTest.java |   12 +-
 .../funtest/server/tests/GetStacksTest.java     |  102 ++
 .../funtest/server/tests/LocalAmbariServer.java |   99 --
 .../tests/RoleBasedAccessControlBasicTest.java  |  249 +++
 .../funtest/server/tests/ServerTestBase.java    |  169 +-
 .../server/tests/StartStopServerTest.java       |  104 --
 .../funtest/server/utils/ClusterUtils.java      |  128 +-
 .../src/test/resources/log4j.properties         |    4 +-
 .../main/resources/Ambari-DDL-Derby-CREATE.sql  | 1533 ++++++++++++++++++
 16 files changed, 2521 insertions(+), 316 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/AppTest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/AppTest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/AppTest.java
deleted file mode 100644
index e7fd76f..0000000
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/AppTest.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.ambari.funtest;
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-/**
- * Unit test for simple App.
- */
-public class AppTest 
-    extends TestCase
-{
-    /**
-     * Create the test case
-     *
-     * @param testName name of the test case
-     */
-    public AppTest( String testName )
-    {
-        super( testName );
-    }
-
-    /**
-     * @return the suite of tests being tested
-     */
-    public static Test suite()
-    {
-        return new TestSuite( AppTest.class );
-    }
-
-    /**
-     * Rigourous Test :-)
-     */
-    public void testApp()
-    {
-        assertTrue( true );
-    }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/AmbariUserRole.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/AmbariUserRole.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/AmbariUserRole.java
new file mode 100644
index 0000000..b5d8b34
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/AmbariUserRole.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server;
+
+/**
+ * Ambari role-based access controls
+ */
+public enum AmbariUserRole {
+    NONE,
+
+    CLUSTER_USER {
+        @Override
+        public String toString() {
+            return "CLUSTER.USER";
+        }
+    },
+
+    SERVICE_OPERATOR {
+        @Override
+        public String toString() {
+            return "SERVICE.OPERATOR";
+        }
+    },
+
+    SERVICE_ADMINISTRATOR {
+        @Override
+        public String toString() {
+            return "SERVICE.ADMINISTRATOR";
+        }
+    },
+
+    CLUSTER_OPERATOR {
+        @Override
+        public String toString() {
+            return "CLUSTER.OPERATOR";
+        }
+    },
+
+    CLUSTER_ADMINISTRATOR {
+        @Override
+        public String toString() {
+            return "CLUSTER.ADMINISTRATOR";
+        }
+    },
+
+    AMBARI_ADMINISTRATOR {
+        @Override
+        public String toString() {
+            return "AMBARI.ADMINISTRATOR";
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/LocalAmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/LocalAmbariServer.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/LocalAmbariServer.java
index 3698027..31f0ee1 100644
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/LocalAmbariServer.java
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/LocalAmbariServer.java
@@ -19,9 +19,7 @@
 package org.apache.ambari.funtest.server;
 
 import com.google.inject.Inject;
-import com.google.inject.persist.PersistService;
 import org.apache.ambari.server.controller.AmbariServer;
-import org.apache.ambari.server.orm.GuiceJpaInitializer;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import com.google.inject.Injector;
@@ -68,7 +66,6 @@ public class LocalAmbariServer implements Runnable {
       LOG.info("Attempting to start ambari server...");
 
       AmbariServer.setupProxyAuth();
-      injector.getInstance(GuiceJpaInitializer.class);
       ambariServer = injector.getInstance(AmbariServer.class);
       ambariServer.initViewRegistry();
       ambariServer.run();
@@ -91,9 +88,5 @@ public class LocalAmbariServer implements Runnable {
     if (ambariServer != null) {
       ambariServer.stop();
     }
-
-    if (injector != null) {
-        injector.getInstance(PersistService.class).stop();
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/DeleteClusterWebRequest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/DeleteClusterWebRequest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/DeleteClusterWebRequest.java
new file mode 100644
index 0000000..a5530f1
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/DeleteClusterWebRequest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server.api.cluster;
+
+import org.apache.ambari.funtest.server.AmbariHttpWebRequest;
+import org.apache.ambari.funtest.server.ConnectionParams;
+
+/**
+ * Deletes the specified cluster.
+ */
+public class DeleteClusterWebRequest extends AmbariHttpWebRequest {
+    private final String clusterName;
+    private static String pathFormat = "/api/v1/clusters/%s";
+
+    /**
+     * Deletes a cluster
+     *
+     * @param params - Ambari server connection information
+     * @param clusterName - Cluster to be deleted.
+     */
+    public DeleteClusterWebRequest(ConnectionParams params, String clusterName) {
+        super(params);
+        this.clusterName = clusterName;
+    }
+
+    public String getClusterName() {
+        return this.clusterName;
+    }
+
+    @Override
+    public String getHttpMethod() {
+        return "DELETE";
+    }
+
+    /**
+     * Get REST API path fragment for construction full URI.
+     *
+     * @return - REST API path
+     */
+    @Override
+    protected String getApiPath() {
+        return String.format(pathFormat, clusterName);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/SetUserPrivilegeWebRequest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/SetUserPrivilegeWebRequest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/SetUserPrivilegeWebRequest.java
new file mode 100644
index 0000000..0cc749b
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/cluster/SetUserPrivilegeWebRequest.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server.api.cluster;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import org.apache.ambari.funtest.server.AmbariHttpWebRequest;
+import org.apache.ambari.funtest.server.AmbariUserRole;
+import org.apache.ambari.funtest.server.ConnectionParams;
+
+/**
+ * Adds an existing configuration, identified by it's type and tag, to a cluster.
+ */
+public class SetUserPrivilegeWebRequest extends AmbariHttpWebRequest {
+    private final String clusterName;
+    private final String userName;
+    private final String principalType;
+    private final AmbariUserRole userRole;
+    private static String pathFormat = "/api/v1/clusters/%s/privileges";
+
+    /**
+     *
+     * @param serverParams - Ambari server connection information
+     * @param clusterName
+     * @param userName
+     * @param userRole
+     * @param principalType - USER or GROUP. Use PrincipalTypeEntity.USER_PRINCIPAL_TYPE_NAME or
+     *                      PrincipalTypeEntity.GROUP_PRINCIPAL_TYPE_NAME
+     */
+    public SetUserPrivilegeWebRequest(ConnectionParams serverParams, String clusterName, String userName,
+                                      AmbariUserRole userRole, String principalType) {
+
+        super(serverParams);
+        this.clusterName = clusterName;
+        this.userName = userName;
+        this.principalType = principalType;
+        this.userRole = userRole;
+    }
+
+    /**
+     * Gets the REST API method.
+     *
+     * @return - PUT.
+     */
+    @Override
+    public String getHttpMethod() {
+        return "POST";
+    }
+
+    /**
+     * Get REST API path fragment for construction full URI.
+     *
+     * @return - REST API path
+     */
+    @Override
+    protected String getApiPath() {
+        return String.format(pathFormat, clusterName);
+    }
+
+    /**
+     * Gets the request data.
+     *
+     * @return - Request data.
+     */
+    @Override
+    protected String getRequestData() {
+        /**
+         * { "PrivilegeInfo" : {"permission_name": userRole, "principal_name": userName, "principal_type": principalType}}
+         */
+        JsonObject jsonObject;
+        JsonObject jsonPrivilegeInfo = new JsonObject();
+
+        jsonPrivilegeInfo.addProperty("permission_name", userRole.toString());
+        jsonPrivilegeInfo.addProperty("principal_name", userName);
+        jsonPrivilegeInfo.addProperty("principal_type", principalType);
+        jsonObject = createJsonObject("PrivilegeInfo", jsonPrivilegeInfo);
+        Gson gson = new Gson();
+        return gson.toJson(jsonObject);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/CreateUserWebRequest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/CreateUserWebRequest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/CreateUserWebRequest.java
new file mode 100644
index 0000000..c0b4cab
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/CreateUserWebRequest.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server.api.user;
+
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import org.apache.ambari.funtest.server.AmbariHttpWebRequest;
+import org.apache.ambari.funtest.server.ConnectionParams;
+
+/**
+ * Creates a new user.
+ */
+public class CreateUserWebRequest extends AmbariHttpWebRequest {
+    private final String userName;
+    private final String password;
+    private final boolean isActive;
+    private final boolean isAdmin;
+    private static String pathFormat = "/api/v1/users/%s";
+
+    public enum ActiveUser {
+        FALSE,
+        TRUE
+    }
+
+    public enum AdminUser {
+        FALSE,
+        TRUE
+    }
+
+    /**
+     * Adds the specified service component to the specified service.
+     *
+     * @param params - Ambari server connection information.
+     * @param userName - User name.
+     * @param password - Password in clear text.
+     * @param activeUser - Specifies whether the user is active or not.
+     * @param adminUser - Specifies whether the user is an administrator or not.
+     */
+    public CreateUserWebRequest(ConnectionParams params, String userName, String password,
+                             ActiveUser activeUser, AdminUser adminUser) {
+        super(params);
+        this.userName = userName;
+        this.password = password;
+        this.isActive = (activeUser == ActiveUser.TRUE);
+        this.isAdmin = (adminUser == AdminUser.TRUE);
+    }
+
+    @Override
+    public String getHttpMethod() {
+        return "POST";
+    }
+
+    /**
+     * Get REST API path fragment for construction full URI.
+     *
+     * @return - REST API path
+     */
+    @Override
+    protected String getApiPath() {
+        return String.format(pathFormat, userName);
+    }
+
+    @Override
+    protected String getRequestData() {
+        /**
+         * { "Users" : {"active": true/false, "admin": true/false, "password": password } }
+         */
+        JsonObject jsonObject;
+        JsonObject jsonUserInfo = new JsonObject();
+
+        jsonUserInfo.addProperty("active", isActive);
+        jsonUserInfo.addProperty("admin", isAdmin);
+        jsonUserInfo.addProperty("password", password);
+
+        jsonObject = createJsonObject("Users", jsonUserInfo);
+        Gson gson = new Gson();
+        return gson.toJson(jsonObject);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/DeleteUserWebRequest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/DeleteUserWebRequest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/DeleteUserWebRequest.java
new file mode 100644
index 0000000..755119a
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/api/user/DeleteUserWebRequest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server.api.user;
+
+import org.apache.ambari.funtest.server.AmbariHttpWebRequest;
+import org.apache.ambari.funtest.server.ConnectionParams;
+
+/**
+ * Deletes the specified user.
+ */
+public class DeleteUserWebRequest extends AmbariHttpWebRequest {
+    private final String userName;
+    private static String pathFormat = "/api/v1/users/%s";
+
+    /**
+     * Deletes a user
+     *
+     * @param params - Ambari server connection information
+     * @param userName - User to be deleted.
+     */
+    public DeleteUserWebRequest(ConnectionParams params, String userName) {
+        super(params);
+        this.userName = userName;
+    }
+
+    @Override
+    public String getHttpMethod() {
+        return "DELETE";
+    }
+
+    /**
+     * Get REST API path fragment for construction full URI.
+     *
+     * @return - REST API path
+     */
+    @Override
+    protected String getApiPath() {
+        return String.format(pathFormat, userName);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/DeleteServiceTest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/DeleteServiceTest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/DeleteServiceTest.java
index 3f38acf..472bdc4 100644
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/DeleteServiceTest.java
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/DeleteServiceTest.java
@@ -22,6 +22,7 @@ import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import org.apache.ambari.funtest.server.ConnectionParams;
 import org.apache.ambari.funtest.server.WebResponse;
+import org.apache.ambari.funtest.server.api.cluster.DeleteClusterWebRequest;
 import org.apache.ambari.funtest.server.api.service.DeleteServiceWebRequest;
 import org.apache.ambari.funtest.server.api.service.GetServiceWebRequest;
 import org.apache.ambari.funtest.server.api.service.StopServiceWebRequest;
@@ -43,7 +44,8 @@ import org.apache.ambari.server.state.State;
 
 import org.apache.commons.httpclient.HttpStatus;
 
-import org.junit.Ignore;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.junit.Test;
 
 import java.util.List;
@@ -56,8 +58,10 @@ import static org.junit.Assert.assertTrue;
  * Simple test that starts the local ambari server,
  * tests it's status and shuts down the server.
  */
-@Ignore
 public class DeleteServiceTest extends ServerTestBase {
+
+    private static Log LOG = LogFactory.getLog(DeleteServiceTest.class);
+
     /**
      * Set up a test cluster with a service, a host and a few components.
      * Attempt to delete the service. Verify the state of the DB.
@@ -193,5 +197,9 @@ public class DeleteServiceTest extends ServerTestBase {
          */
         hostComponentDesiredStateEntities = hostComponentDesiredStateDAO.findAll();
         assertEquals(hostComponentDesiredStateEntities.size(), 0);
+
+        jsonResponse = RestApiUtils.executeRequest(new DeleteClusterWebRequest(params, clusterName));
+
+        LOG.info(jsonResponse);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/GetStacksTest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/GetStacksTest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/GetStacksTest.java
new file mode 100644
index 0000000..4f316b5
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/GetStacksTest.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server.tests;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.methods.GetMethod;
+
+import java.io.StringReader;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonParser;
+import com.google.gson.stream.JsonReader;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonArray;
+
+import java.io.IOException;
+
+import org.apache.http.HttpStatus;
+
+/**
+ * Simple test to get the list of stacks. Does not touch the DB.
+ */
+public class GetStacksTest extends ServerTestBase {
+  /**
+   * Waits for the ambari server to startup and then checks it's
+   * status by querying /api/v1/stacks (does not touch the DB)
+   */
+  @Test
+  public void testServerStatus() throws IOException {
+    /**
+     * Query the ambari server for the list of stacks.
+     * A successful GET returns the list of stacks.
+     * We should get a json like:
+     * {
+     *   "href" : "http://localhost:9995/api/v1/stacks",
+     *   "items" : [
+     *   {
+     *     "href" : "http://localhost:9995/api/v1/stacks/HDP",
+     *     "Stacks" : {
+     *     "stack_name" : "HDP"
+     *     }
+     *   }
+     *  ]
+     * }
+     */
+
+    /**
+     * Test URL for GETting the status of the ambari server
+     */
+    String stacksPath = "/api/v1/stacks";
+    String stacksUrl = String.format(SERVER_URL_FORMAT, serverPort) + stacksPath;
+    HttpClient httpClient = new HttpClient();
+    GetMethod getMethod = new GetMethod(stacksUrl);
+
+    try {
+      getMethod.addRequestHeader("Authorization", getBasicAdminAuthentication());
+      getMethod.addRequestHeader("X-Requested-By", "ambari");
+      int statusCode = httpClient.executeMethod(getMethod);
+
+      assertEquals(HttpStatus.SC_OK, statusCode); // HTTP status code 200
+
+      String responseBody = getMethod.getResponseBodyAsString();
+
+      assertTrue(responseBody != null); // Make sure response body is valid
+
+      JsonElement jsonElement = new JsonParser().parse(new JsonReader(new StringReader(responseBody)));
+
+      assertTrue (jsonElement != null); // Response was a JSON string
+
+      JsonObject jsonObject = jsonElement.getAsJsonObject();
+
+      assertTrue (jsonObject.has("items"));  // Should have "items" entry
+
+      JsonArray stacksArray = jsonObject.get("items").getAsJsonArray();
+
+      assertTrue (stacksArray.size() > 0); // Should have at least one stack
+
+    } finally {
+      getMethod.releaseConnection();
+    }
+  }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/LocalAmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/LocalAmbariServer.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/LocalAmbariServer.java
deleted file mode 100644
index 24b4ccf..0000000
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/LocalAmbariServer.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.server.functionaltests.server;
-
-import com.google.inject.Inject;
-import com.google.inject.persist.PersistService;
-import org.apache.ambari.server.controller.AmbariServer;
-import org.apache.ambari.server.orm.GuiceJpaInitializer;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import com.google.inject.Injector;
-
-/**
-* Wrap AmbariServer as a testable unit.
-*/
-public class LocalAmbariServer implements Runnable {
-
-  private static Log LOG = LogFactory.getLog(AmbariServer.class);
-
-  /**
-   * Actual ambari server instance.
-   */
-  private AmbariServer ambariServer = null;
-
-  @Inject
-  private Injector injector;
-
-  public LocalAmbariServer() {}
-
-  /**
-   * Thread entry point.
-   */
-  @Override
-  public void run(){
-    try {
-      startServer();
-    }
-    catch (Exception ex) {
-      LOG.info("Exception received ", ex);
-      throw new RuntimeException(ex);
-    }
-  }
-
-  /**
-   * Configures the Guice injector to use the in-memory test DB
-   * and attempts to start an instance of AmbariServer.
-   *
-   * @throws Exception
-   */
-  private void startServer() throws Exception {
-    try {
-      LOG.info("Attempting to start ambari server...");
-
-      AmbariServer.setupProxyAuth();
-      injector.getInstance(GuiceJpaInitializer.class);
-      ambariServer = injector.getInstance(AmbariServer.class);
-      ambariServer.initViewRegistry();
-      ambariServer.run();
-    } catch (InterruptedException ex) {
-      LOG.info(ex);
-    } catch (Throwable t) {
-      LOG.error("Failed to run the Ambari Server", t);
-      stopServer();
-      throw t;
-    }
-  }
-
-  /**
-   * Attempts to stop the test AmbariServer instance.
-   * @throws Exception
-   */
-  public void stopServer() throws Exception {
-    LOG.info("Stopping ambari server...");
-
-    if (ambariServer != null) {
-      ambariServer.stop();
-    }
-
-    if (injector != null) {
-        injector.getInstance(PersistService.class).stop();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/RoleBasedAccessControlBasicTest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/RoleBasedAccessControlBasicTest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/RoleBasedAccessControlBasicTest.java
new file mode 100644
index 0000000..947cfd0
--- /dev/null
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/RoleBasedAccessControlBasicTest.java
@@ -0,0 +1,249 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.funtest.server.tests;
+
+
+import com.google.gson.JsonElement;
+import org.apache.ambari.funtest.server.AmbariUserRole;
+import org.apache.ambari.funtest.server.ClusterConfigParams;
+import org.apache.ambari.funtest.server.ConnectionParams;
+import org.apache.ambari.funtest.server.WebRequest;
+import org.apache.ambari.funtest.server.WebResponse;
+import org.apache.ambari.funtest.server.api.cluster.CreateClusterWebRequest;
+import org.apache.ambari.funtest.server.api.cluster.CreateConfigurationWebRequest;
+import org.apache.ambari.funtest.server.api.cluster.DeleteClusterWebRequest;
+import org.apache.ambari.funtest.server.api.cluster.GetAllClustersWebRequest;
+import org.apache.ambari.funtest.server.api.user.DeleteUserWebRequest;
+import org.apache.ambari.funtest.server.utils.ClusterUtils;
+import org.apache.ambari.funtest.server.utils.RestApiUtils;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.junit.Test;
+
+import java.util.HashMap;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Tests operations with users with different levels of privileges
+ */
+public class RoleBasedAccessControlBasicTest extends ServerTestBase {
+
+    private String clusterName = "c1";
+    private String hostName = "host1";
+    private String clusterVersion = "HDP-2.2.0";
+
+    private static Log LOG = LogFactory.getLog(RoleBasedAccessControlBasicTest.class);
+
+    @Override
+    public void setup() throws Exception {
+        super.setup();
+        setupCluster();
+    }
+
+    @Override
+    public void teardown() throws Exception {
+        teardownCluster();
+        super.teardown();
+    }
+
+    /**
+     * Creates an anonymous user (user with no role). Attempts to get the list of clusters
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testGetClustersAsAnonUser() throws Exception {
+        JsonElement jsonResponse;
+        ConnectionParams adminConnectionParams = createAdminConnectionParams();
+        String anonUserName = "nothing";
+        String anonUserPwd = "nothing";
+
+        /**
+         * Create a new user (non-admin)
+         */
+        ClusterUtils.createUser(adminConnectionParams, clusterName, anonUserName, anonUserPwd, AmbariUserRole.NONE);
+
+        /**
+         * Attempt to query all the clusters using this user's privilege. Right now we should be
+         * able to get the list of clusters, though this user should not be able to. But this is
+         * required for UI to display the clusters.
+         *
+         * todo: Fix this when UI is fixed.
+         */
+        ConnectionParams anonUserParams = createConnectionParams(anonUserName, anonUserPwd);
+        jsonResponse = RestApiUtils.executeRequest(new GetAllClustersWebRequest(anonUserParams));
+
+        assertFalse(jsonResponse.isJsonNull());
+
+        /**
+         * Delete the user
+         */
+        jsonResponse = RestApiUtils.executeRequest(new DeleteUserWebRequest(adminConnectionParams, anonUserName));
+        LOG.info(jsonResponse);
+    }
+
+    /**
+     * Creates an anonymous user and uses the user to add a cluster configuration.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testAddClusterConfigAsAnonUser() throws Exception {
+        ConnectionParams adminConnectionParams = createAdminConnectionParams();
+        String anonUserName = "nothing";
+        String anonUserPwd = "nothing";
+
+        /**
+         * Create a new user (non-admin)
+         */
+        ClusterUtils.createUser(adminConnectionParams, clusterName, anonUserName, anonUserPwd, AmbariUserRole.NONE);
+
+        /**
+         * Create and add a configuration to our cluster using the new user's privilege
+         */
+
+        String configType = "test-hadoop-env";
+        String configTag = "version1";
+        ClusterConfigParams configParams = new ClusterConfigParams();
+        configParams.setClusterName(clusterName);
+        configParams.setConfigType(configType);
+        configParams.setConfigTag(configTag);
+        configParams.setProperties(new HashMap<String, String>() {{
+            put("fs.default.name", "localhost:9995");
+        }});
+
+        /**
+         * Attempting to create the configuration should fail with 403
+         */
+        ConnectionParams anonUserParams = createConnectionParams(anonUserName, anonUserPwd);
+        WebRequest webRequest = new CreateConfigurationWebRequest(anonUserParams, configParams);
+        WebResponse webResponse = webRequest.getResponse();
+        assertEquals(HttpStatus.SC_FORBIDDEN, webResponse.getStatusCode());
+
+        /**
+         * Delete the user
+         */
+        JsonElement jsonResponse = RestApiUtils.executeRequest(new DeleteUserWebRequest(adminConnectionParams, "nothing"));
+        LOG.info(jsonResponse);
+    }
+
+    /**
+     * Creates a user with cluster administrator privilege and adds a cluster configuration.
+     *
+     * @throws Exception
+     */
+    @Test
+    public void testAddClusterConfigAsClusterAdmin() throws Exception {
+        ConnectionParams adminConnectionParams = createAdminConnectionParams();
+
+        String clusterAdminName = "clusterAdmin";
+        String clusterAdminPwd = "clusterAdmin";
+
+        /**
+         * Create a user with cluster admin role
+         */
+        ClusterUtils.createUserClusterAdministrator(adminConnectionParams, clusterName,
+                clusterAdminName, clusterAdminPwd);
+
+        /**
+         * Create and add a configuration to our cluster using the new user's privilege
+         */
+
+        String configType = "test-hadoop-env";
+        String configTag = "version1";
+        ClusterConfigParams configParams = new ClusterConfigParams();
+        configParams.setClusterName(clusterName);
+        configParams.setConfigType(configType);
+        configParams.setConfigTag(configTag);
+        configParams.setProperties(new HashMap<String, String>() {{
+            put("fs.default.name", "localhost:9995");
+        }});
+
+        /**
+         * This user has enough privilege to create the cluster configuration. Should succeed with 201.
+         */
+        ConnectionParams userConnectionParams = createConnectionParams(clusterAdminName, clusterAdminPwd);
+        WebRequest webRequest = new CreateConfigurationWebRequest(userConnectionParams, configParams);
+        WebResponse webResponse = webRequest.getResponse();
+        assertEquals(HttpStatus.SC_CREATED, webResponse.getStatusCode());
+
+        /**
+         * Delete the user
+         */
+        RestApiUtils.executeRequest(new DeleteUserWebRequest(adminConnectionParams, clusterAdminName));
+    }
+
+    /**
+     * Create a cluster with name "c1". Does not have any hosts.
+     *
+     * @throws Exception
+     */
+    private void setupCluster() throws Exception {
+        JsonElement jsonResponse;
+        ConnectionParams params = createAdminConnectionParams();
+
+        /**
+         * Create a cluster as admin:admin
+         */
+        jsonResponse = RestApiUtils.executeRequest(new CreateClusterWebRequest(params, clusterName, clusterVersion));
+
+        LOG.info(jsonResponse);
+    }
+
+    private void teardownCluster() throws Exception {
+        JsonElement jsonResponse;
+        ConnectionParams params = createAdminConnectionParams();
+
+        jsonResponse = RestApiUtils.executeRequest(new DeleteClusterWebRequest(params, clusterName));
+
+        LOG.info(jsonResponse);
+    }
+
+    /**
+     * Helper method to create administrator connection parameters to the server.
+     *
+     * @return
+     */
+    private ConnectionParams createAdminConnectionParams() {
+        return createConnectionParams(getAdminUserName(), getAdminPassword());
+    }
+
+    /**
+     * Helper method to create connection parameters to the server based on the
+     * specified user credentials.
+     *
+     * @param userName
+     * @param password
+     * @return
+     */
+    private ConnectionParams createConnectionParams(String userName, String password) {
+        ConnectionParams params = new ConnectionParams();
+
+        params.setServerName("localhost");
+        params.setServerApiPort(serverPort);
+        params.setServerAgentPort(serverAgentPort);
+        params.setUserName(userName);
+        params.setPassword(password);
+
+        return params;
+    }
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
index b915977..7b9600f 100644
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/ServerTestBase.java
@@ -20,32 +20,43 @@ package org.apache.ambari.funtest.server.tests;
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
+import com.google.inject.persist.PersistService;
 import org.apache.ambari.funtest.server.LocalAmbariServer;
 import org.apache.ambari.server.configuration.Configuration;
-import org.apache.ambari.funtest.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.controller.ControllerModule;
+import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
 
+import java.io.File;
 import java.io.IOException;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+import java.sql.SQLNonTransientConnectionException;
 import java.util.Properties;
 
 /**
  * Base test infrastructure.
  */
 public class ServerTestBase {
+    private static Log LOG = LogFactory.getLog(ServerTestBase.class);
+
     /**
      * Run the ambari server on a thread.
      */
-    protected Thread serverThread = null;
+    protected static Thread serverThread = null;
 
     /**
      * Instance of the local ambari server, which wraps the actual
      * ambari server with test configuration.
      */
-    protected LocalAmbariServer server = null;
+    protected static LocalAmbariServer server = null;
 
     /**
      * Server port
@@ -60,7 +71,7 @@ public class ServerTestBase {
     /**
      * Guice injector using an in-memory DB.
      */
-    protected Injector injector = null;
+    protected static Injector injector = null;
 
     /**
      * Server URL
@@ -68,36 +79,55 @@ public class ServerTestBase {
     protected static String SERVER_URL_FORMAT = "http://localhost:%d";
 
     /**
-     * Start our local server on a thread so that it does not block.
-     *
+     * Initialize the AmbariServer and database once for the entire
+     * duration of the tests since AmbariServer is a singleton.
+     */
+    private static boolean isInitialized;
+
+    /**
+     * Create and populate the DB. Start the AmbariServer.
      * @throws Exception
      */
-    @Before
-    public void setup() throws Exception {
-        InMemoryDefaultTestModule testModule = new InMemoryDefaultTestModule();
-        Properties properties = testModule.getProperties();
-        properties.setProperty(Configuration.AGENT_USE_SSL, "false");
-        properties.setProperty(Configuration.CLIENT_API_PORT_KEY, Integer.toString(serverPort));
-        properties.setProperty(Configuration.SRVR_ONE_WAY_SSL_PORT_KEY, Integer.toString(serverAgentPort));
-        String tmpDir = System.getProperty("java.io.tmpdir");
-        testModule.getProperties().setProperty(Configuration.SRVR_KSTR_DIR_KEY, tmpDir);
-        injector = Guice.createInjector(testModule);
-        server = injector.getInstance(LocalAmbariServer.class);
-        serverThread = new Thread(server);
-        serverThread.start();
-        waitForServer();
-    }
+    @BeforeClass
+    public static void setupTest() throws Exception {
+        if (!isInitialized) {
+            Properties properties = new Properties();
+            properties.setProperty(Configuration.SERVER_PERSISTENCE_TYPE_KEY, "remote");
+            properties.setProperty(Configuration.SERVER_JDBC_URL_KEY, Configuration.JDBC_IN_MEMORY_URL);
+            properties.setProperty(Configuration.SERVER_JDBC_DRIVER_KEY, Configuration.JDBC_IN_MEMROY_DRIVER);
+            properties.setProperty(Configuration.METADATA_DIR_PATH, "src/test/resources/stacks");
+            properties.setProperty(Configuration.SERVER_VERSION_FILE, "src/test/resources/version");
+            properties.setProperty(Configuration.OS_VERSION_KEY, "centos6");
+            properties.setProperty(Configuration.SHARED_RESOURCES_DIR_KEY, "src/test/resources/");
 
-    private String getUserName() {
-        return "admin";
-    }
+            properties.setProperty(Configuration.AGENT_USE_SSL, "false");
+            properties.setProperty(Configuration.CLIENT_API_PORT_KEY, Integer.toString(serverPort));
+            properties.setProperty(Configuration.SRVR_ONE_WAY_SSL_PORT_KEY, Integer.toString(serverAgentPort));
+            String tmpDir = System.getProperty("java.io.tmpdir");
+            properties.setProperty(Configuration.SRVR_KSTR_DIR_KEY, tmpDir);
 
-    private String getPassword() {
-        return "admin";
+            ControllerModule testModule = new ControllerModule(properties);
+
+            injector = Guice.createInjector(testModule);
+            injector.getInstance(PersistService.class).start();
+            initDB();
+
+            server = injector.getInstance(LocalAmbariServer.class);
+            serverThread = new Thread(server);
+            serverThread.start();
+            waitForServer();
+
+            isInitialized = true;
+        }
     }
 
-    protected String getBasicAuthentication() {
-        String authString = getUserName() + ":" + getPassword();
+    /**
+     * Creates the basic authentication string for admin:admin
+     *
+     * @return
+     */
+    protected static String getBasicAdminAuthentication() {
+        String authString = getAdminUserName() + ":" + getAdminPassword();
         byte[] authEncBytes = Base64.encodeBase64(authString.getBytes());
         String authStringEnc = new String(authEncBytes);
 
@@ -105,11 +135,70 @@ public class ServerTestBase {
     }
 
     /**
+     * Creates the DB and populates it.
+     *
+     * @throws IOException
+     * @throws SQLException
+     */
+    protected static void initDB() throws IOException, SQLException {
+        createSourceDatabase();
+    }
+
+    /**
+     * Drops the Derby DB.
+     *
+     * @throws ClassNotFoundException
+     * @throws SQLException
+     */
+    protected static void dropDatabase() throws ClassNotFoundException, SQLException {
+        String DROP_DERBY_URL = "jdbc:derby:memory:myDB/ambari;drop=true";
+        Class.forName(Configuration.JDBC_IN_MEMROY_DRIVER);
+        try {
+            DriverManager.getConnection(DROP_DERBY_URL);
+        } catch (SQLNonTransientConnectionException ignored) {
+            LOG.info("Database dropped ", ignored); //error 08006 expected
+        }
+    }
+
+    /**
+     * Executes Ambari-DDL-Derby-CREATE.sql
+     *
+     * @throws IOException
+     * @throws SQLException
+     */
+    private static void createSourceDatabase() throws IOException, SQLException {
+        //create database
+        File projectDir = new File(System.getProperty("user.dir"));
+        File ddlFile = new File(projectDir.getParentFile(), "ambari-server/src/main/resources/Ambari-DDL-Derby-CREATE.sql");
+        String ddlFilename = ddlFile.getPath();
+        DBAccessor dbAccessor = injector.getInstance(DBAccessor.class);
+        dbAccessor.executeScript(ddlFilename);
+    }
+
+    /**
+     * Gets the default administration user name
+     *
+     * @return
+     */
+    protected static String getAdminUserName() {
+        return "admin";
+    }
+
+    /**
+     * Gets the default administrator password
+     *
+     * @return
+     */
+    protected static String getAdminPassword() {
+        return "admin";
+    }
+
+    /**
      * Waits for the local server until it is ready to accept requests.
      *
      * @throws Exception
      */
-    private void waitForServer() throws Exception {
+    private static void waitForServer() throws Exception {
         int count = 1;
 
         while (!isServerUp()) {
@@ -126,7 +215,7 @@ public class ServerTestBase {
      * @return - True if the local server is responsive to queries.
      *           False, otherwise.
      */
-    private boolean isServerUp() {
+    private static boolean isServerUp() {
         String apiPath = "/api/v1/stacks";
 
         String apiUrl = String.format(SERVER_URL_FORMAT, serverPort) + apiPath;
@@ -134,7 +223,7 @@ public class ServerTestBase {
         GetMethod getMethod = new GetMethod(apiUrl);
 
         try {
-            getMethod.addRequestHeader("Authorization", getBasicAuthentication());
+            getMethod.addRequestHeader("Authorization", getBasicAdminAuthentication());
             getMethod.addRequestHeader("X-Requested-By", "ambari");
             int statusCode = httpClient.executeMethod(getMethod);
             String response = getMethod.getResponseBodyAsString();
@@ -150,17 +239,21 @@ public class ServerTestBase {
     }
 
     /**
-     * Shut down the local server.
+     * Perform common initialization for each test case.
+     *
+     * @throws Exception
+     */
+    @Before
+    public void setup() throws Exception {
+
+    }
+
+    /**
+     * Perform common clean up for each test case.
      *
      * @throws Exception
      */
     @After
     public void teardown() throws Exception {
-        if (serverThread != null) {
-            serverThread.interrupt();
-        }
-        if (server != null) {
-            server.stopServer();
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/StartStopServerTest.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/StartStopServerTest.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/StartStopServerTest.java
deleted file mode 100644
index 37b1123..0000000
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/tests/StartStopServerTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ambari.funtest.server.tests;
-
-import org.apache.commons.codec.binary.Base64;
-import org.junit.Test;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertEquals;
-
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.methods.GetMethod;
-
-import java.io.StringReader;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonParser;
-import com.google.gson.stream.JsonReader;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonArray;
-
-import java.io.IOException;
-
-import org.apache.http.HttpStatus;
-
-/**
- * Simple test that starts the local ambari server,
- * tests it's status and shuts down the server.
- */
-public class StartStopServerTest extends ServerTestBase {
-  /**
-   * Waits for the ambari server to startup and then checks it's
-   * status by querying /api/v1/stacks (does not touch the DB)
-   */
-  @Test
-  public void testServerStatus() throws IOException {
-    /**
-     * Query the ambari server for the list of stacks.
-     * A successful GET returns the list of stacks.
-     * We should get a json like:
-     * {
-     *   "href" : "http://localhost:9995/api/v1/stacks",
-     *   "items" : [
-     *   {
-     *     "href" : "http://localhost:9995/api/v1/stacks/HDP",
-     *     "Stacks" : {
-     *     "stack_name" : "HDP"
-     *     }
-     *   }
-     *  ]
-     * }
-     */
-
-    /**
-     * Test URL for GETting the status of the ambari server
-     */
-    String stacksPath = "/api/v1/stacks";
-    String stacksUrl = String.format(SERVER_URL_FORMAT, serverPort) + stacksPath;
-    HttpClient httpClient = new HttpClient();
-    GetMethod getMethod = new GetMethod(stacksUrl);
-
-    try {
-      getMethod.addRequestHeader("Authorization", getBasicAuthentication());
-      getMethod.addRequestHeader("X-Requested-By", "ambari");
-      int statusCode = httpClient.executeMethod(getMethod);
-
-      assertEquals(HttpStatus.SC_OK, statusCode); // HTTP status code 200
-
-      String responseBody = getMethod.getResponseBodyAsString();
-
-      assertTrue(responseBody != null); // Make sure response body is valid
-
-      JsonElement jsonElement = new JsonParser().parse(new JsonReader(new StringReader(responseBody)));
-
-      assertTrue (jsonElement != null); // Response was a JSON string
-
-      JsonObject jsonObject = jsonElement.getAsJsonObject();
-
-      assertTrue (jsonObject.has("items"));  // Should have "items" entry
-
-      JsonArray stacksArray = jsonObject.get("items").getAsJsonArray();
-
-      assertTrue (stacksArray.size() > 0); // Should have at least one stack
-
-    } finally {
-      getMethod.releaseConnection();
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/utils/ClusterUtils.java
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/utils/ClusterUtils.java b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/utils/ClusterUtils.java
index 9799892..8cf09c2 100644
--- a/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/utils/ClusterUtils.java
+++ b/ambari-funtest/src/test/java/org/apache/ambari/funtest/server/utils/ClusterUtils.java
@@ -23,6 +23,7 @@ import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
+import org.apache.ambari.funtest.server.AmbariUserRole;
 import org.apache.ambari.funtest.server.ClusterConfigParams;
 import org.apache.ambari.funtest.server.ConnectionParams;
 import org.apache.ambari.funtest.server.WebRequest;
@@ -31,6 +32,7 @@ import org.apache.ambari.funtest.server.api.cluster.AddDesiredConfigurationWebRe
 import org.apache.ambari.funtest.server.api.cluster.CreateClusterWebRequest;
 import org.apache.ambari.funtest.server.api.cluster.CreateConfigurationWebRequest;
 import org.apache.ambari.funtest.server.api.cluster.GetRequestStatusWebRequest;
+import org.apache.ambari.funtest.server.api.cluster.SetUserPrivilegeWebRequest;
 import org.apache.ambari.funtest.server.api.host.AddHostWebRequest;
 import org.apache.ambari.funtest.server.api.host.RegisterHostWebRequest;
 import org.apache.ambari.funtest.server.api.service.AddServiceWebRequest;
@@ -38,10 +40,15 @@ import org.apache.ambari.funtest.server.api.service.InstallServiceWebRequest;
 import org.apache.ambari.funtest.server.api.servicecomponent.AddServiceComponentWebRequest;
 import org.apache.ambari.funtest.server.api.servicecomponenthost.BulkAddServiceComponentHostsWebRequest;
 import org.apache.ambari.funtest.server.api.servicecomponenthost.BulkSetServiceComponentHostStateWebRequest;
+import org.apache.ambari.funtest.server.api.user.CreateUserWebRequest;
 import org.apache.ambari.server.actionmanager.HostRoleStatus;
+import org.apache.ambari.server.controller.AmbariServer;
+import org.apache.ambari.server.orm.entities.PrincipalTypeEntity;
 import org.apache.ambari.server.state.Clusters;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.State;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import java.util.Arrays;
 import java.util.HashMap;
@@ -49,6 +56,8 @@ import java.util.Map;
 
 public class ClusterUtils {
 
+    private static Log LOG = LogFactory.getLog(ClusterUtils.class);
+
     @Inject
     private Injector injector;
 
@@ -60,6 +69,11 @@ public class ClusterUtils {
         String clusterVersion = "HDP-2.2.0";
 
         /**
+         * Create a cluster
+         */
+        jsonResponse = RestApiUtils.executeRequest(new CreateClusterWebRequest(serverParams, clusterName, clusterVersion));
+
+        /**
          * Register a host
          */
         if (injector == null) {
@@ -81,11 +95,6 @@ public class ClusterUtils {
         }
 
         /**
-         * Create a cluster
-         */
-        jsonResponse = RestApiUtils.executeRequest(new CreateClusterWebRequest(serverParams, clusterName, clusterVersion));
-
-        /**
          * Add the registered host to the new cluster
          */
         jsonResponse =  RestApiUtils.executeRequest(new AddHostWebRequest(serverParams, clusterName, hostName));
@@ -145,8 +154,10 @@ public class ClusterUtils {
          */
         jsonResponse = RestApiUtils.executeRequest(new BulkSetServiceComponentHostStateWebRequest(serverParams,
                     clusterName, State.INIT, State.INSTALLED));
-        int requestId = parseRequestId(jsonResponse);
-        RequestStatusPoller.poll(serverParams, clusterName, requestId);
+        if (!jsonResponse.isJsonNull()) {
+            int requestId = parseRequestId(jsonResponse);
+            RequestStatusPoller.poll(serverParams, clusterName, requestId);
+        }
 
         /**
          * Start the service component hosts
@@ -154,8 +165,10 @@ public class ClusterUtils {
 
         jsonResponse = RestApiUtils.executeRequest(new BulkSetServiceComponentHostStateWebRequest(serverParams,
                 clusterName, State.INSTALLED, State.STARTED));
-        requestId = parseRequestId(jsonResponse);
-        RequestStatusPoller.poll(serverParams, clusterName, requestId);
+        if (!jsonResponse.isJsonNull()) {
+            int requestId = parseRequestId(jsonResponse);
+            RequestStatusPoller.poll(serverParams, clusterName, requestId);
+        }
 
         /**
          * Start the service
@@ -164,6 +177,103 @@ public class ClusterUtils {
     }
 
     /**
+     * Creates a user with the specified role.
+     *
+     * @param connectionParams
+     * @param clusterName
+     * @param userName
+     * @param password
+     * @param userRole
+     * @throws Exception
+     */
+    public static void createUser(ConnectionParams connectionParams, String clusterName,String userName,
+                                 String password, AmbariUserRole userRole ) throws Exception {
+        JsonElement jsonResponse;
+
+        jsonResponse = RestApiUtils.executeRequest(new CreateUserWebRequest(connectionParams, userName, password,
+                CreateUserWebRequest.ActiveUser.TRUE, CreateUserWebRequest.AdminUser.FALSE));
+
+        LOG.info(jsonResponse);
+
+        if (userRole != AmbariUserRole.NONE) {
+            jsonResponse = RestApiUtils.executeRequest(new SetUserPrivilegeWebRequest(connectionParams,
+                    clusterName, userName, userRole, PrincipalTypeEntity.USER_PRINCIPAL_TYPE_NAME));
+
+            LOG.info(jsonResponse);
+        }
+    }
+
+    /**
+     * Creates a user with CLUSTER.USER privilege.
+     *
+     * @param connectionParams
+     * @param clusterName
+     * @param userName
+     * @param password
+     * @throws Exception
+     */
+    public static void createUserClusterUser(ConnectionParams connectionParams, String clusterName,
+                                              String userName, String password) throws Exception {
+        createUser(connectionParams, clusterName, userName, password, AmbariUserRole.CLUSTER_USER);
+    }
+
+    /**
+     * Creates a user with SERVICE.OPERATOR privilege
+     *
+     * @param connectionParams
+     * @param clusterName
+     * @param userName
+     * @param password
+     * @throws Exception
+     */
+    public static void createUserServiceOperator(ConnectionParams connectionParams, String clusterName,
+                                              String userName, String password) throws Exception {
+        createUser(connectionParams, clusterName, userName, password, AmbariUserRole.SERVICE_OPERATOR);
+    }
+
+    /**
+     * Creates a user with SERVICE.ADMINISTRATOR privilege
+     *
+     * @param connectionParams
+     * @param clusterName
+     * @param userName
+     * @param password
+     * @throws Exception
+     */
+    public static void createUserServiceAdministrator(ConnectionParams connectionParams, String clusterName,
+                                              String userName, String password) throws Exception {
+        createUser(connectionParams, clusterName, userName, password, AmbariUserRole.SERVICE_ADMINISTRATOR);
+    }
+
+    /**
+     * Creates a user with CLUSTER.OPERATOR privilege
+     *
+     * @param connectionParams
+     * @param clusterName
+     * @param userName
+     * @param password
+     * @throws Exception
+     */
+    public static void createUserClusterOperator(ConnectionParams connectionParams, String clusterName,
+                                              String userName, String password) throws Exception {
+        createUser(connectionParams, clusterName, userName, password, AmbariUserRole.CLUSTER_OPERATOR);
+    }
+
+    /**
+     * Creates a user with CLUSTER.ADMINISTRATOR privilege.
+     *
+     * @param connectionParams
+     * @param clusterName
+     * @param userName
+     * @param password
+     * @throws Exception
+     */
+    public static void createUserClusterAdministrator(ConnectionParams connectionParams, String clusterName,
+                                              String userName, String password) throws Exception {
+        createUser(connectionParams, clusterName, userName, password, AmbariUserRole.CLUSTER_ADMINISTRATOR);
+    }
+
+    /**
      * Parses a JSON response string for  { "Requests" : { "id" : "2" } }
      *
      * @param jsonResponse

http://git-wip-us.apache.org/repos/asf/ambari/blob/f2e797ab/ambari-funtest/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/ambari-funtest/src/test/resources/log4j.properties b/ambari-funtest/src/test/resources/log4j.properties
index f6767d3..2590ab0 100644
--- a/ambari-funtest/src/test/resources/log4j.properties
+++ b/ambari-funtest/src/test/resources/log4j.properties
@@ -12,10 +12,10 @@
 
 # log4j configuration used during build and unit tests
 
-log4j.rootLogger=DEBUG,stdout
+log4j.rootLogger=INFO,stdout
 log4j.threshhold=ALL
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %-5p [%t] %c{2} (%F:%M(%L)) - %m%n
 
-log4j.logger.org.apache.ambari=DEBUG
+log4j.logger.org.apache.ambari=INFO