Code Monkey home page Code Monkey logo

cat-and-rcl's Introduction

cat-and-rcl

Storage bucket for misc useful RightScale SelfService things.

bundle install

mkdir -p ~/.right_api_client
cp login.yml.example ~/.right_api_client/login.yml

# Edit login.yml accordingly

rake -T

git s

API Requests

There are rake tasks for specific API calls

cloudapp_list

List all your running CloudApps

rake cloudapp_list
Logging into RightScale API 1.5 @ https://us-4.rightscale.com
Logging into self service @ https://selfservice-4.rightscale.com
[
  {
    "kind": "self_service#execution",
    "id": "546e780a1aad6a37a900001c",
    "name": "foo",
    "href": "/api/manager/projects/44134/executions/546e780a1aad6a37a900001c",
    "description": "This is not an empty string",
    "status": "running",
    "cost": {
      "value": "0.00",
      "unit": "$",
      "updated_at": null
    },
    "deployment": "/api/deployments/504781004",
    "created_by": {
      "id": 42138,
      "name": "Ryan Geyer",
      "email": "[email protected]"
    },
    "timestamps": {
      "created_at": "2014-11-20T23:23:54+00:00",
      "launched_at": "2014-11-20T23:23:54+00:00",
      "terminated_at": null
    },
    "links": {
      "running_operations": {
        "href": "/api/manager/projects/44134/operations?filter[]=execution_id==546e780a1aad6a37a900001c&filter[]=status==running"
      },
      "latest_notifications": {
        "href": "/api/manager/projects/44134/notifications?filter[]=execution_id==546e780a1aad6a37a900001c"
      }
    }
  }
]

template_compile

Preprocesses the CAT, then compiles it. On success, it's pretty quiet.

rake "template_compile[tests/definitions/server_template_tests.cat.rb]"
Logging into RightScale API 1.5 @ https://us-4.rightscale.com
Logging into self service @ https://selfservice-4.rightscale.com
Uploading template to SS compile_template
Template compiled successfully

If compile fails, you'll know why.

rake "template_compile[tests/parsefail.cat.rb]"
Logging into RightScale API 1.5 @ https://us-4.rightscale.com
Logging into self service @ https://selfservice-4.rightscale.com
Uploading template to SS compile_template
Failed to compile template
[
  {
    "origin": "template: template.cat, line: 236",
    "problem": "Undefined variable or method",
    "summary": "'error' is undefined",
    "resolution": "Review the list of built-in methods at http://support.rightscale.com"
  },
  {
    "origin": "template: template.cat, line: 0",
    "problem": "Missing short description",
    "summary": "Template source is missing 'short_description' declaration",
    "resolution": "Please add a 'short_description' declaration, e.g. short_description \"My CloudApp\""
  },
  {
    "origin": "template: template.cat, line: 0",
    "problem": "Missing engine version",
    "summary": "Template source is missing 'rs_ca_ver' declaration",
    "resolution": "Please add a 'rs_ca_ver' declaration, e.g. rs_ca_ver \"20121202\""
  }
]

template_list

Lists all the available templates, no options, though some would likely be useful

rake template_list                                                                    *[master][ruby-1.9.3-p545@cat-and-rcl]
Logging into RightScale API 1.5 @ https://us-4.rightscale.com
Logging into self service @ https://selfservice-4.rightscale.com
[
  {
    "kind": "self_service#template",
    "id": "546e77cea20be70e1e00007e",
    "name": "server_template_tests",
    "filename": "server_template_tests20141120-41959-1gwp7xc.cat.rb",
    "href": "/api/designer/collections/44134/templates/546e77cea20be70e1e00007e",
    "short_description": "This is not an empty string",
    "created_by": {
      "id": 42138,
      "name": "Ryan Geyer",
      "email": "[email protected]"
    },
    "timestamps": {
      "created_at": "2014-11-20T23:22:54+00:00",
      "updated_at": "2014-11-20T23:22:54+00:00",
      "published_at": null
    }
  }
]

template_upsert

Creates or updates a template based on the CAT name, just like the UI

rake "template_upsert[tests/definitions/server_template_tests.cat.rb]"
Logging into RightScale API 1.5 @ https://us-4.rightscale.com
Logging into self service @ https://selfservice-4.rightscale.com
Template upserted. HREF: /api/designer/collections/44134/templates/546e77cea20be70e1e00007e

#Tests

You can run tests with the "test" rake task.

rake test

By default the test task runs all tests found in tests/**/*.cat.rb, but you can specify your own glob (relative to tests/)

rake "test[system/*.cat.rb]"

Test types

There are three types of tests you can run.

Compile Only

If you have a CAT you expect to compile successfully you can use the tag test:compile_only=true

#test:compile_only=true

name "UTF-8 Test"
rs_ca_ver 20131202
short_description "Caché"

parameter "foo" do
  type "string"
  label "Foo"
  default "Caché"
  operations "launch"
end

If you expect it to compile successfully but it doesn't due to system issues you'd use the test:desired_state=running tag.

#test:compile_only=true
#test:desired_state=running

name "UTF-8 Test"
rs_ca_ver 20131202
short_description "Caché"

parameter "foo" do
  type "string"
  label "Foo"
  default "Caché"
  operations "launch"
end

If you expect it to fail to compile, you'd use the test:expected_state=failed tag.

#test:compile_only=true
#test:expected_state=failed

name "UTF-8 Test"
rs_ca_ver 20131202
short_description "Caché"

parameter "foo" do
end

# Should fail to compile because parameter "foo" has no parameters

CloudApp Executes

If you expect a CloudApp to execute successfully, you don't need to specify anything at all.

name "foo"
rs_ca_ver 20131202
short_description "empty, but successful"

If you expect a CloudApp to execute successfully, or fail, it doesn't reach that state due to a system issue, you want to specify the test:desired_state=(running|failed) tag.

#test:desired_state=running

name "foo"
rs_ca_ver 20131202
short_description "foo"

operation "launch" do
  description "Test arithmetic"
  definition "launch"
end

define launch() do
  $result = 1 + 1
  if $result != 2
    raise "RCL Can't do math"
  end
end

If you expect a CloudApp to execute and fail, you'll want to specify the test:expected_state=failed tag.

#test:expected_state=failed

name "foo"
rs_ca_ver 20131202
short_description "foo"

operation "launch" do
  description "Raise an error, failing the cloud app"
  definition "launch"
end

define launch() do
  raise "This oughta do it."
end

Special Operations Execute

You can also create a single CAT with many special operations which will act as test cases.

#test_operation:success_one=completed
#test_operation:success_two=completed
#test_operation:fail_one=failed

name "op tests"
rs_ca_ver 20131202
short_description "This is not an empty string"

operation "success_one" do
  description "Not empty"
  definition "success_one"
end

operation "success_two" do
  description "Not empty"
  definition "success_two"
end

operation "fail_one" do
  description "Not empty"
  definition "fail_one"
end

define success_one() do
end

define success_two() do
end

define fail_one() do
  raise "Fail"
end

Results

Green - Test completed successfully and with the expected result Yellow - Test completed successfully but did not have the tag:desired_state Blue - Test completed successfully and did have the tag:desired_state Red - Test did not complete successfully, or the tag:expected_state was not matched

Results Image

Test Tags

Simple tagging to identify what to test, and what the desired result is.

test:compile_only=true

This tag indicates that simply being able to "compile" this test file represents success.

test:expected_state=(failed|running)

Cause sometimes it's easier to let the test "fail" or throw an exception than to create the logic to allow it to finish.

test:desired_state=(failed|running)

This tag implies that under normal circumstances the test would complete with the specified state. However, it's expected that the test won't complete with that state due to system bugs or other things.

When a test with this tag completes in a state other than the specified state it will be marked Yellow.

When a test with this tag completes in the specified state it will be marked Green

test_operation:=(completed|failed)

You might wanna have a single CAT with multiple test cases. If so, create the CAT and create one special operation for each test case. Use this tag to specify the operation name to run, and the expected outcome.

cat-and-rcl's People

Contributors

nathan-rightscale avatar rgeyer avatar ryanoleary avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.