class Fog::OracleCloud::Java::Mock

Public Class Methods

data() click to toggle source
# File lib/fog/oraclecloud/java.rb, line 103
def self.data 
  @data ||= {
    :instances => {},
    :servers => {},
    :access_rules => {},
    :maintenance_at => {},
    :deleted_at => {},
    :created_at => {}
  }
end
new(options={}) click to toggle source
# File lib/fog/oraclecloud/java.rb, line 84
def initialize(options={})
  @username = options[:oracle_username]
  @password = options[:oracle_password]
  @identity_domain   = options[:oracle_domain]
  @region_url = options[:oracle_region] == 'emea' ? 'https://jcs.emea.oraclecloud.com' : 'https://jaas.oraclecloud.com'
end
reset() click to toggle source
# File lib/fog/oraclecloud/java.rb, line 114
def self.reset
  @data = nil
end

Public Instance Methods

create_access_rule(service_name, params) click to toggle source
# File lib/fog/oraclecloud/requests/java/create_access_rule.rb, line 16
def create_access_rule(service_name, params)
  response = Excon::Response.new
  params.delete(:service_name)
  self.data[:access_rules][service_name] << params.collect{|k,v| [k.to_s, v]}.to_h

  response.status = 202
  response
end
create_instance(config, options) click to toggle source
# File lib/fog/oraclecloud/requests/java/create_instance.rb, line 32
def create_instance(config, options)
  response = Excon::Response.new

  ip = '192.168.1.1'
  data = {
    'status' => 'In Progress',
    'compute_site_name' => 'EM002_Z11',
    'content_url' => "http://#{ip}",
    'created_by' => @username,
    'creation_job_id' => Random.rand(100000),
    'creation_time'=> Time.now.strftime('%Y-%b-%dT%H:%M:%S'),
    'db_info' => "#{options[:dbServiceName]}:1521/#{options[:pdbName] || 'PDB1'}.#{@identity_domain}.oraclecloud.internal",
    'deletion_job_id' => 0,
    'domainMode'=>'DEVELOPMENT',
    'fmw_control_url'=> "https://#{ip}:#{options[:adminPort] || 7002}/em",
    'last_modified_time'=> Time.now.strftime('%Y-%b-%dT%H:%M:%S'),
    'num_ip_reservations'=> 2, # Can't rely on this number in mocking mode
    'num_nodes'=>options[:managedServerCount],
    'otd_provisioned'=>options[:provisionOTD] || 'no',
    'psm_plugin_version'=>"16.3.5-532",
    'secure_content_url' => "https://#{ip}",
    'service_type'=>'jaas',
    'service_uri'=>"#{@region_url}/paas/service/dbcs/api/v1.1/instances/#{@identity_domain}/#{config[:serviceName]}",
    'wls_admin_url'=> "https://#{ip}:#{options[:adminPort] || 7002}/console",
    'wls_deployment_channel_port' => options[:deploymentChannelPort] || 9001,
    'wlsVersion'=>'12.2.1.0.160419'
  }
    .merge(config.select {|key, value| [:serviceName, :description, :level, :subscriptionType].include?(key) })
    .merge(options.select {|key, value| [:clusterName, :dbServiceName, :edition, :shape, :version].include?(key) }).collect{|k,v| [k.to_s, v]}.to_h

  if data['clusterName'].nil? then data['clusterName'] = data['serviceName'][0,8] + "_cluster" end
  if data['domainName'].nil? then data['domainName'] = data['serviceName'][0,8] + "_domain" end
  self.data[:instances][config[:serviceName]] = data
  self.data[:created_at][config[:serviceName]] = Time.now

  server = {
    "clusterName": data['clusterName'] || data['serviceName'][0,8] + "_cluster",
    "name": "#{data['serviceName'][0,8]}_server_1",
    "shape": data['shape'],
    "nodeType": "WLS",
    "isAdmin": true,
    "hostname": ip,
    "status": "Ready",
    "storageAllocated": 74752,
    "creationDate": Time.now.strftime('%Y-%b-%dT%H:%M:%S')
  }
  self.data[:servers][data['serviceName']] = {}
  self.data[:servers][data['serviceName']][server[:name]] = server


  # Add default access rules
  access_rules = [{
    "ruleName" => "sys_ms2db_dblistener",
    "description"=> "DO NOT MODIFY=> Permit listener connection to database from managed servers",
    "status"=> "enabled",
    "source"=> "WLS_MANAGED_SERVER",
    "destination"=> "dbaas=>nbnws=>DB",
    "ports"=> "1521",
    "protocol"=> "tcp",
    "ruleType"=> "SYSTEM"
  },{
    "ruleName"=> "sys_ms2db_ssh",
    "description"=> "DO NOT MODIFY=> Permit managed servers to ssh to db",
    "status"=> "enabled",
    "source"=> "WLS_MANAGED_SERVER",
    "destination"=> "dbaas=>nbnws=>DB",
    "port"=> "22",
    "portocol"=> "tcp",
    "ruleType"=> "SYSTEM"
  },{
    "ruleName"=> "ora_p2admin_ssh",
    "description"=> "DO NOT MODIFY=> Permit public ssh to admin server",
    "status"=> "enabled",
    "source"=> "PUBLIC-INTERNET",
    "destination"=> "WLS_ADMIN_SERVER",
    "port"=> "22",
    "portocol"=> "tcp",
    "ruleType"=> "DEFAULT"
  },{
    "ruleName"=> "ora_p2admin_ahttps",
    "description"=> "DO NOT MODIFY=> Permit public to https to admin server",
    "status"=> "enabled",
    "source"=> "PUBLIC-INTERNET",
    "destination"=> "WLS_ADMIN_SERVER",
    "port"=> "7002",
    "portocol"=> "tcp",
    "ruleType"=> "DEFAULT"
  },{
    "ruleName"=> "sys_infra2admin_ssh",
    "description"=> "DO NOT MODIFY=> Permit PSM to ssh to admin server",
    "status"=> "enabled",
    "source"=> "PAAS-INFRA",
    "destination"=> "WLS_ADMIN_SERVER",
    "port"=> "22",
    "portocol"=> "tcp",
    "ruleType"=> "DEFAULT"
  },{
    "ruleName"=> "ora_p2ms_chttp",
    "description"=> "Permit http connection to managed servers from public",
    "status"=> "enabled",
    "source"=> "PUBLIC-INTERNET",
    "destination"=> "WLS_ADMIN_SERVER",
    "port"=> "80",
    "portocol"=> "tcp",
    "ruleType"=> "DEFAULT"
  },{
    "ruleName"=> "ora_p2ms_chttps",
    "description"=> "Permit https connection to managed servers from public",
    "status"=> "enabled",
    "source"=> "PUBLIC-INTERNET",
    "destination"=> "WLS_MANAGED_SERVER",
    "port"=> "443",
    "portocol"=> "tcp",
    "ruleType"=> "DEFAULT"
  }]

  self.data[:access_rules][data['serviceName']] = access_rules

  response.status = 202
  response
end
data() click to toggle source
# File lib/fog/oraclecloud/java.rb, line 118
def data 
  self.class.data
end
delete_access_rule(service_name, rule_name) click to toggle source
# File lib/fog/oraclecloud/requests/java/delete_access_rule.rb, line 21
def delete_access_rule(service_name, rule_name)
  response = Excon::Response.new
  rule = self.data[:access_rules][service_name].detect { |r| r['ruleName'] === rule_name }
  rule['status'] = 'disabled'
  self.data[:access_rules][service_name].delete_if { |r| r['ruleName'] === rule_name }
  response.body = {
    'rule' => rule
  }
  response.status = 202
  response
end
delete_instance(name, dba_name, dba_password, options={}) click to toggle source
# File lib/fog/oraclecloud/requests/java/delete_instance.rb, line 27
def delete_instance(name, dba_name, dba_password, options={})
  response = Excon::Response.new
  self.data[:instances][name]['status'] = 'Terminating'
  self.data[:deleted_at][name] = Time.now
  response.status = 204
  response
end
enable_access_rule(service_name, rule_name) click to toggle source
# File lib/fog/oraclecloud/requests/java/enable_access_rule.rb, line 22
def enable_access_rule(service_name, rule_name)
  response = Excon::Response.new
  rule = self.data[:access_rules][service_name].detect { |r| r['ruleName'] === rule_name }
  rule['status'] = 'enabled'
  response.body = rule
  response.status = 200
  response
end
get_instance(name) click to toggle source
# File lib/fog/oraclecloud/requests/java/get_instance.rb, line 17
def get_instance(name)
  response = Excon::Response.new

  if instance = self.data[:instances][name]
    case instance['status']
    when 'Terminating'
      if Time.now - self.data[:deleted_at][name] >= Fog::Mock.delay
        self.data[:deleted_at].delete(name)
        self.data[:instances].delete(name)
      end
    when 'In Progress'
      if Time.now - self.data[:created_at][name] >= Fog::Mock.delay
        self.data[:instances][name]['status'] = 'Running'
        instance = self.data[:instances][name]
        self.data[:created_at].delete(name)
      end
    end
    response.status = 200
    response.body = instance
    response
  else
    raise Fog::OracleCloud::Java::NotFound.new("Java #{name} does not exist");
  end
end
get_server(service_name, server_name) click to toggle source
# File lib/fog/oraclecloud/requests/java/get_server.rb, line 17
def get_server(service_name, server_name)
  response = Excon::Response.new

  if server = self.data[:servers][service_name][server_name]
    case server[:status]
    when 'Maintenance'
      info = self.data[:maintenance_at][server_name]
      if Time.now - info['time'] >= Fog::Mock.delay
        self.data[:servers][service_name][server_name][:status] = 'Ready'
        self.data[:servers][service_name][server_name][info['attribute']] = info['value']
        self.data[:maintenance_at].delete(server_name)
      end
    end
    
    response.status = 200           
    response.body =  {
      'servers' => self.data[:servers][service_name].values
    }
    response
  else
    raise Fog::OracleCloud::Java::NotFound.new("Java Server #{name} does not exist");
  end
end
list_access_rules(service_name) click to toggle source
# File lib/fog/oraclecloud/requests/java/list_access_rules.rb, line 16
def list_access_rules(service_name)
  response = Excon::Response.new

  rules = self.data[:access_rules][service_name]

  response.body =  {
    'accessRules' => rules
  }

  response
end
list_instances() click to toggle source
# File lib/fog/oraclecloud/requests/java/list_instances.rb, line 16
def list_instances
  response = Excon::Response.new

  instances = self.data[:instances].values

  response.body = {
    'services' => instances
  }
  response
end
list_servers(db_name) click to toggle source
# File lib/fog/oraclecloud/requests/java/list_servers.rb, line 16
def list_servers(db_name)
  response = Excon::Response.new

  servers = self.data[:servers][db_name]

  response.body =  {
    'servers' => servers.values
  }

  response
end
password() click to toggle source
# File lib/fog/oraclecloud/java.rb, line 95
def password
  @password
end
region_url() click to toggle source
# File lib/fog/oraclecloud/java.rb, line 99
def region_url
  @region_url
end
scale_a_node(service_name, server_name, options={}) click to toggle source
# File lib/fog/oraclecloud/requests/java/scale_a_node.rb, line 28
def scale_a_node(service_name, server_name, options={})
  response = Excon::Response.new

  response.status = 202
  self.data[:servers][service_name][server_name][:status] = 'Ready'
  self.data[:servers][service_name][server_name][:shape] = options[:shape]
  response.body = {
    "status" => "New", 
    "details" => {
      "message" => "scaleup.job.submitted", 
      "jobId" => rand(10000).to_s
    }
  }
  response
end
scale_in_a_cluster(service_name, server_name) click to toggle source
# File lib/fog/oraclecloud/requests/java/scale_in_a_cluster.rb, line 20
def scale_in_a_cluster(service_name, server_name)
  response = Excon::Response.new

  response.status = 202
  response.body = {
    "status" => "New", 
    "details" => {
      "message" => "JAAS-SCALING-044: Scaling in Job (ID: 20) server name [ExampleI_server_4] submitted for service [ExampleInstance]", 
      "jobId" => "20"
    }
  }
  response
end
scale_out_a_cluster(service_name, cluster_name, create_cluster_if_missing) click to toggle source
# File lib/fog/oraclecloud/requests/java/scale_out_a_cluster.rb, line 23
def scale_out_a_cluster(service_name, cluster_name, create_cluster_if_missing)
        response = Excon::Response.new

  response.status = 202
  response.body = {
    "status" => "New", 
    "details" => {
      "message" => "JASS-SCALING-037: Scale out Job (ID: 17) for service [ExampleInstance] in cluster [ExampleI_cluster] submitted", 
      "jobId" => "17"
    }
  }
  response
end
username() click to toggle source
# File lib/fog/oraclecloud/java.rb, line 91
def username
  @username
end