class State

The State class is a container for both global and per-test state. The test framework keeps one global State object (in $GLOBAL_STATE). A per-test State object is created for each test. The per-test object inherits all the global state but can override values if needed. Values set in the per-test class are not persisted beyond the lifetime of a single test.

Attributes

vars[RW]

Public Class Methods

new(baseobj = nil) click to toggle source
# File lib/State.rb, line 17
def initialize(baseobj = nil)
  @vars = Hash.new()
  @validations = Hash.new()

  @headers = Hash.new
  @headers['Content-Type'] = 'application/json'
  @headers['User-Agent'] = 'restest'

  @baseobj = baseobj
end

Public Instance Methods

get(name) click to toggle source
# File lib/State.rb, line 31
def get(name)
  if (@vars[name] != nil)
    return @vars[name]
  end

  if (@baseobj != nil)
    return @baseobj.get(name)
  end

  return nil
end
headers(mix = nil) click to toggle source
# File lib/State.rb, line 83
def headers(mix = nil)
  if (mix != nil)
    return @headers.merge(mix)
  else
    return @headers
  end
end
set(name, value) click to toggle source
# File lib/State.rb, line 47
def set(name, value)
  if (@baseobj != nil)
    @baseobj.set(name, value)
  else
    @vars[name] = value
  end
end
set_in_test(name, value) click to toggle source
# File lib/State.rb, line 69
def set_in_test(name, value)
  if (@baseobj != nil)
    @vars[name] = value
  else
    die("cannot set_in_test for top-level State (name=#{name}, value=#{value})")
  end
end
set_validate(name, value) click to toggle source
# File lib/State.rb, line 94
def set_validate(name, value)
  if (@baseobj != nil)
    @validations[name] =value
  else
    die("cannot set_validate for top-level State (name=#{name}, value=#{value})")
  end
end
to_s() click to toggle source
# File lib/State.rb, line 166
def to_s
  if (@baseobj == nil)
    s = "Base State: "
    @vars.each_key { |key|
      s += "#{key}='#{@vars[key]}' "
    }
  else
    s = "Test State: "
    @vars.each_key { |key|
      s += "#{key}='#{@vars[key]}' "
    }
    s += "(" + @baseobj.to_s + ")"
  end
  return s
end
unset(name) click to toggle source
# File lib/State.rb, line 58
def unset(name)
  if (@baseobj != nil)
    @baseobj.unset(name)
  else
    @vars.delete(name)
  end
end
validate(result) click to toggle source
# File lib/State.rb, line 108
def validate(result)
  @validations.each_key { |key|
    failed = false
    val = get(key)
    wanted = @validations[key]
    wanted =~ /(\S+) (.*)/
    op = $1
    target = $2
    out(1, "validating: [#{key}]: want: [#{op} #{target}], got [#{val}]")
    if (op == "=")
      failed = true if (target != val.to_s)

    elsif (op == "<")
      failed = true if (val.to_i >= target.to_i)

    elsif (op == ">")
      failed = true if (val.to_i <= target.to_i)

    elsif (op == "is")
      if (target == "set")
        failed = true if (val == nil || val.length == 0)
      elsif (target == "unset")
        failed = true if (val != nil && val.length > 0)
      else
        die("unknown directive for operation 'is': #{target}")
      end

    else
      die("unknown validate operation #{op}")
    end

    if (failed)
      result.error("For [#{key}] expected [#{op} #{target}] but got [#{val}].")
      $VALIDATIONS_FAIL += 1
    else
      $VALIDATIONS_OK += 1
    end
  }

  # This is Proofpoint specific and should not be in this class. There's not a good place to put it right
  # now that doesn't involve copying multiple times, so put it here for now.
  if (result.code == "500")
    if (result.body != nil)
      begin
        json = JSON.parse(result.body)
        if (json != nil && json['host'] != nil && json['message'] != nil)
          result.add_message("Server: [#{json['host']}] said: [#{json['message']}])")
        end
      rescue
      end
    end
  end

end