I was looking for a way to restart jenkins on Mac when it hung when installing some plugin. The following worked 🙂
http://www.luscarpa.com/snippets/jenkins/start-stop-jenkins-daemon-on-mac-os-x/
Start Jenkins:
Stop Jenkins:
I was looking for a way to restart jenkins on Mac when it hung when installing some plugin. The following worked 🙂
http://www.luscarpa.com/snippets/jenkins/start-stop-jenkins-daemon-on-mac-os-x/
Start Jenkins:
Stop Jenkins:
$ brew update
$ brew install rbenv
$ brew install ruby-build
rbenv install 1.9.3-p392
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#To use 1.9.3-p392 as default rbenv global 1.9.3-p392
gem update --system # Update the latest ruby gems version
#Sample rake file
require ‘cucumber/rake/task’
require ‘rdoc/task’
desc ‘generate API documentation to doc/rdocs/index.html’
RDoc::Task.new do |rd|
rd.rdoc_dir = ‘doc/rdocs’
rd.options << “–all”
rd.options << ‘–inline-source’
rd.options << ‘–line-numbers’
rd.options << ‘–all’
rd.options << ‘–fileboxes’
rd.options << ‘–diagram’
end
Cucumber::Rake::Task.new :features do |t|
t.cucumber_opts = [
“*/*.feature”,
# ‘–tags’, ‘~@smoke’, # Exclude tests with @smoke tag
‘–tags’, ‘@smoke,@wip’,
“–format progress -o log/features.log”,
“–format junit -o log/”,
“–format html -o log/features.html”,
“–format pretty” ]
t.fork=true
end
To run the Rakefile:
rake features # This will execute the feature files
rake rdoc # This will execute the documentation
Download DevKit-xx-32-4.7.2-20130224-1151-sfx.exe
unzip to Downloads\rubydevkit\ directory
run “devkitvars.bat”
gem install rspec
gem env # lists the sources etc…
sudo apt-get install irb1.9
sudo apt-get install git
sudo ln -s /usr/bin/ruby1.9.x /usr/bin/ruby
rvm install rubygems latest
gem install cucumber
rvm gemset use global && gem install bundler
gem install rspec
gem env # lists the sources etc…
calabash-android gen (refer to https://github.com/calabash/calabash-android)
In this skeleton you find all the predefined steps that comes with calabash. Try to take a look my_first.feature
and change it to fit your app. Also, there will be sample step_definitions created for youjarsigner.exe -sigalg MD5withRSA -digestalg SHA1 -keystore debug.keystore <myapp.apk> androiddebugkey
When it asks for password enter “android”
Or
jarsigner.exe” -sigalg MD5withRSA -digestalg SHA1 -signedjar <myapp>.apk -storepass android -keystore debug.keystore mytest.apk androiddebugkey
source 'https://rubygems.org' gem 'calabash-android', "~> 0.4.4" gem 'json', "~> 1.7.7" gem 'rspec'
Feature: Adding Cameras As a user able to connect a camera Scenario: Given I am on the Welcome Screen When I press Add button And I press Connect to a camera And I enter IP, Camera name, username and password And I press Connect button Then I should see rotate for fullscreen view
# features/step_definitions/addcamera_steps.rb require 'rspec/expectations' require 'calabash-android/operations' extend Calabash::Android::Operations Given(/^I am on the Welcome Screen$/) do wait_for(25) do sleep(25) end end When(/^I press Add button$/) do touch("webView css:'#ext-gen1084'") end When(/^I press Connect to a camera$/) do # To find the id of the button to touch, check the Running test # from Console below touch("webView css: '#ext-gen1160'") end When(/^I enter IP, Camera name, username and password$/) do touch("webView css:'#ext-gen1197'") set_text("webView css:'#ext-gen1197'", '10.220.x.x') end
> bundle exec calabash-android run mytest.apk
# start the emulator on a command window: > android # Make sure Android SDK Tools, Platform Tools and Build Tools # are installed # Create an emulator and start the emulator # Tools > Manage AVDs # Create New and select the profile that you need. # If you want verbose on add -v at the end of the foll. command > calabash-android console mytest.apk
* Connect the device with usb * In the AndroidManifest.xml file, add android:debuggable="true" to the <application> element. * Enable USB debugging on your device. * On most devices running Android 3.2 or older, you can find the option under Settings > Applications > Development. * On Android 4.0 and newer, it's in Settings > Developer options. * You might have to do “adb kill-server” and “adb start-server” to see the device in “adb devices”
# calabash-android console <myapp.apk> # This starts the test server and you should be able to see your app # running on the emulator or the device whichever is connected # and online irb(main):001:0> start_test_server_in_background # The following commands work for application developed with # PhoneGap (webview) and not with native code > query("webView css:'div'").find{|x| x["textContent"] == "Add"} { "id" => "ext-comp-1297", "textContent" => "Add", "nodeName" => "DIV", "class" => "x-button x-button-plain x-iconalign-left", "html" => "<div id=\"ext-comp-1297\" class=\"x-button x-button-plain x-iconalign-left\" style=\"padding-top: 13px; padding-right: 13px; padding-botto m: 13px; padding-left: 13px; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; height: 44px; \"><span class=\"x-button-label\" id=\"ext- gen1084\">Add</span><img src=\"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH 5BAEAAAAALAAAAAABAAEAAAICRAEAOw==\" class=\"toolbar_add x-icon-mask\" id=\"ext-g en1085\"></div>", "rect" => { "center_y" => 1134.0, "center_x" => 84.0, "height" => 44, "width" => 74, "bottom" => 564, "left" => 5, "right" => 79, "y" => 1040.0, "x" => 10.0, "top" => 520 }, "nodeType" => "ELEMENT_NODE", "webView" => nil } # The above gives you the id for "Add" button which is "ext-gen1084" # Now you can click the "Add" button with the id > touch("webView css: '#ext-gen1084'") # Note: This id changes from emulator to emulator. Dev has to provide an id for each element to make it easier I think
Unpack the .zip file and remove the META-INF folder
Zip the folder again and rename it to .apk (zip -r <xxx.apk> *)
Sign the apk:
Paste it into your android workspace having gen, res, src folder. eg., ~/.android
Navigate to new path and again run apk file.
Now, Test server will create inside your calabash folder.
To create AndroidManifest.xml file: where should this be?
calabash-android extract-manifest Downloads\mytest.apk
adb kill-server adb start-server adb devices
gem ‘rspec’
adb shell pm list instrumentation
adb shell pm list packages
calabash-android run mytest.apk --format html --out reports.html
adb logcat
http://blog.lesspainful.com/2012/03/07/Calabash-Android/ – Intro
https://github.com/calabash/calabash-android
http://blog.lesspainful.com/2012/03/07/Calabash-iOS/ -intro
https://github.com/calabash/calabash-ios
http://blog.lesspainful.com/2012/03/07/Calabash/#LessPainful – Test execution Service
1. When running the test fails when touching the “Add” button with the foll. error “An existing connection was forcibly closed by the remote host. (Errno::ECONNRESET)”
2. wake_up doesn’t unlock the emulator
Setting up roles (based on Diablo/Essex release):
Keystone:
1. create roles with keystone
keystone-manage -c <keystone.conf> role add <role>
2. Assign role to a user
keystone-manage -c <keystone.conf> role grant <role> <user> <tenant>
3. If not using default policy.json file:
nova.conf file should be set with “–policy_file=FILENAME”
4. If using the default /opt/stack/nova/etc/nova/policy.json file:
1. Sample policy.json file
Line #1 {
Line #2 “admin_or_owner”: [[“role:admin”], [“project_id:%(project_id)s”]],
Line #3 “sysadmin_or_owner”: [[“role:sysadmin”], [“project_id:%(project_id)s”]],
Line #4 “compute:create”: [[“rule:admin_or_owner”]],
Line #5 “compute:create:attach_network”: [[“rule:admin_or_owner”]],
Line #6 “compute:create:attach_volume”: [[“rule:admin_or_owner”]],
Line #7 “compute:get”: [[“rule:admin_or_owner”]],
Line #8 “compute:get_all” :[],
…..
…..
“compute:pause”: [[“rule:admin_or_owner”], [“rule:sysadmin_or_owner”]],
Line #40 “network:get_dns_entries_by_name”: []
Line #41 }
Explanation:
The contents of the file are a JSON-encoded hash in the from of:
RULE : MATCH_LIST
The MATCH_LIST can be:
rule:*
role:*
KEY:%(CONTEXT_KEY)s
RULE will be in the form of the following for specific checks.
COMPONENT:ACTION
When a MATCH_LIST for a rule:* is found, it acts as a link to the other rule
to perform checking.
When a MATCH_LIST for a role:* is found, the auth context of the request is
checked and made sure it contains the named role.
When a KEY:%(CONTEXT_KEY)s check is found, the KEY for the checked object
(an instnace model, a network address, a volume, etc) is compared to the
CONTEXT_KEY from the checked context. The admin_or_owner uses this type
of check for project_id matching between the context and the checked object.
Line #1:
RULE can be a custom name that is referenced by a MATCH_LIST.
“admin_or_owner”: [[“role:admin”], [“project_id:%(project_id)s”]]
“admin_or_owner” is just a RULE name
The rule defines that if the user has admin role OR he is the owner of the project
Note the box separating the role admin and the project id, that shows that it’s OR”
If you want to set a rule saying if the user is a member AND owner of the project
“admin_and_owner”: [[“role:admin”, “project_id:%(project_id)s”]], “admin_and_owner” is the rule name
Note there is no box separation between role member and project id that shows that it’s AND”
Line #4:
“compute:create”: [[“rule:admin_or_owner”]],
“compute:create:attach_network”: [[“rule:admin_or_owner”]],
This implies that an admin or owner can attach network.
“compute:get_all” :[],
All users can list instances
5. When users are created through dashboard, they default to a tenant. So, always a user would be a member of a project.
6. mysql > keystone> users table:
a. If users table has the tenant_id set to “NULL” and if the user has roles set in the keystone, then still would be able to do whatever that role is allowed to do
b. If users table has the tenant_id set to a tenant for eg., 1 or 2…, and if no role or object is set, still the user would be able to do the actions which are set as []
c. There is no concept of project manager by default as we had in bexar. Owner doesn’t mean that the user is the project manager of the project, it just means that the user is a member of the project.
config_drive for server is a Nova (Openstack) API extension (from Piston Cloud). It can be issued as a parameter when creating a server. It builds a separate partition/volume on the local disk.
Note: As of Jan 20th 2012, there is no nova client support for this.
config_drive takes 2 values. “true” or “image UUID”.
If the value is set to “true”, it builds a 64MB vfat volume and attaches it to the server.
If the value is set to “image-UUID”, it builds a volume from the image and attaches it.
JSON request – config_drive with imageref:
curl -i -X POST -d ‘{“server” : {“config_drive”:”<image_UUID>”, “name” : “<name>”, “imageRef” : “<image_ref>”,”flavorRef”: “<flavor_id>”,”key_name”:”<keypair_name>”}}’ http://<ip>:8774/v2/1/servers -H “Content-Type:application/json” -H “X-Auth-Token: <token>”
JSON request – config_drive with “true”:
curl -i -X POST -d ‘{“server” : {“config_drive”:true, “name” : “<name>”, “imageRef” : “<image_ref>”,”flavorRef”: “<flavor_id>”,”key_name”:”<keypair_name>”}}’ http://<ip>:8774/v2/1/servers -H “Content-Type:application/json” -H “X-Auth-Token: <token>”
To verify from host:
If instance gets launched successfully, on the host, instances directory, you should see a file called “disk.config” created.
“libvirt.xml” under the instances directory (/opt/stack/nova/instances/instance-xxxxx) should contain the following:
<disk type=’file’>
<driver type=’raw’ />
<source file=’/opt/stack/nova/nova/..//instances/instance-xxxxxx/disk.config’ />
<target dev=’vdz’ bus=’virtio’ />
</disk>
To verify from the instance:
drive created eg., /dev/vdx
The drive is not mounted automatically.
Now, it can me mounted.