oats 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (181) hide show
  1. data/.gitignore +6 -0
  2. data/Gemfile +15 -0
  3. data/README.txt +165 -0
  4. data/Rakefile +2 -0
  5. data/bin/agent +204 -0
  6. data/bin/oats +10 -0
  7. data/bin/occ +29 -0
  8. data/bin/results_cleanup +6 -0
  9. data/doc/COPYING +55 -0
  10. data/doc/LICENSE +55 -0
  11. data/doc/OATS_Framework.doc +0 -0
  12. data/doc/classes/ApplicationLogs.html +239 -0
  13. data/doc/classes/Campaign.html +843 -0
  14. data/doc/classes/CommandlineOptions.html +131 -0
  15. data/doc/classes/Driver.html +182 -0
  16. data/doc/classes/Hash.html +137 -0
  17. data/doc/classes/Ide.html +194 -0
  18. data/doc/classes/MapSelenium.html +197 -0
  19. data/doc/classes/Net.html +107 -0
  20. data/doc/classes/Oats/OatsFilterError.html +119 -0
  21. data/doc/classes/Oats.html +998 -0
  22. data/doc/classes/OatsAssertError.html +119 -0
  23. data/doc/classes/OatsBadInput.html +119 -0
  24. data/doc/classes/OatsData.html +290 -0
  25. data/doc/classes/OatsError.html +117 -0
  26. data/doc/classes/OatsExit.html +117 -0
  27. data/doc/classes/OatsLock.html +254 -0
  28. data/doc/classes/OatsMain.html +182 -0
  29. data/doc/classes/OatsMysqlError.html +113 -0
  30. data/doc/classes/OatsMysqlMissingInput.html +113 -0
  31. data/doc/classes/OatsReportError.html +113 -0
  32. data/doc/classes/OatsSetupError.html +119 -0
  33. data/doc/classes/OatsTestError.html +119 -0
  34. data/doc/classes/OatsTestExit.html +119 -0
  35. data/doc/classes/OatsTestLocateError.html +120 -0
  36. data/doc/classes/OatsVerifyError.html +119 -0
  37. data/doc/classes/Ragent.html +397 -0
  38. data/doc/classes/Rclient.html +236 -0
  39. data/doc/classes/Report.html +368 -0
  40. data/doc/classes/Reports.html +244 -0
  41. data/doc/classes/RestApi.html +333 -0
  42. data/doc/classes/RhttpClient.html +236 -0
  43. data/doc/classes/Rimap.html +170 -0
  44. data/doc/classes/Rmysql.html +176 -0
  45. data/doc/classes/Roptions.html +131 -0
  46. data/doc/classes/Rselenium.html +233 -0
  47. data/doc/classes/Rssh.html +138 -0
  48. data/doc/classes/Runnable.html +174 -0
  49. data/doc/classes/SFTriggers.html +206 -0
  50. data/doc/classes/Selenium/Client/Driver.html +211 -0
  51. data/doc/classes/Selenium/Client.html +107 -0
  52. data/doc/classes/Selenium.html +107 -0
  53. data/doc/classes/SystemCapture.html +304 -0
  54. data/doc/classes/TestCase.html +418 -0
  55. data/doc/classes/TestData.html +235 -0
  56. data/doc/classes/TestList.html +264 -0
  57. data/doc/classes/Tools.html +244 -0
  58. data/doc/classes/Util.html +201 -0
  59. data/doc/classes/Variation.html +206 -0
  60. data/doc/fr_class_index.html +92 -0
  61. data/doc/fr_method_index.html +465 -0
  62. data/doc/index.html +23 -0
  63. data/doc/oats_httpd.conf +32 -0
  64. data/doc/oats_user.yml +25 -0
  65. data/doc/rdoc-style.css +208 -0
  66. data/lib/deep_merge/.gitignore +2 -0
  67. data/lib/deep_merge/core.rb +195 -0
  68. data/lib/deep_merge/deep_merge.rb +1 -0
  69. data/lib/deep_merge/deep_merge_hash.rb +28 -0
  70. data/lib/deep_merge/rails_compat.rb +27 -0
  71. data/lib/oats/application_logs.rb +163 -0
  72. data/lib/oats/build_id.rb +58 -0
  73. data/lib/oats/commandline_options.rb +128 -0
  74. data/lib/oats/diff.rb +278 -0
  75. data/lib/oats/driver.rb +492 -0
  76. data/lib/oats/ide.rb +227 -0
  77. data/lib/oats/keywords.rb +67 -0
  78. data/lib/oats/log4r_init.rb +14 -0
  79. data/lib/oats/mysql.rb +97 -0
  80. data/lib/oats/oats.rb +637 -0
  81. data/lib/oats/oats_data.rb +400 -0
  82. data/lib/oats/oats_exceptions.rb +25 -0
  83. data/lib/oats/oats_lock.rb +261 -0
  84. data/lib/oats/oats_selenium_api.rb +639 -0
  85. data/lib/oats/oselenium.rb +189 -0
  86. data/lib/oats/ossh.rb +36 -0
  87. data/lib/oats/patches_for_eventmachine_12.10.rb +66 -0
  88. data/lib/oats/ragent.rb +321 -0
  89. data/lib/oats/rclient.rb +42 -0
  90. data/lib/oats/report.rb +207 -0
  91. data/lib/oats/roptions.rb +88 -0
  92. data/lib/oats/test_case.rb +510 -0
  93. data/lib/oats/test_data.rb +98 -0
  94. data/lib/oats/test_list.rb +141 -0
  95. data/lib/oats/unixdiff.rb +75 -0
  96. data/lib/oats/util.rb +125 -0
  97. data/lib/oats/version.rb +3 -0
  98. data/lib/oats.rb +36 -0
  99. data/nbproject/configs/agent.properties +0 -0
  100. data/nbproject/configs/gr.properties +0 -0
  101. data/nbproject/project.properties +10 -0
  102. data/nbproject/project.xml +17 -0
  103. data/oats.gemspec +42 -0
  104. data/oats_ini.yml +258 -0
  105. data/oats_tests/Gemfile +18 -0
  106. data/oats_tests/aut_ini.yml +30 -0
  107. data/oats_tests/bin/oats +8 -0
  108. data/oats_tests/environments/qa.yml +4 -0
  109. data/oats_tests/environments/qa_chrome.yml +4 -0
  110. data/oats_tests/examples/core/coreExamples.yml +8 -0
  111. data/oats_tests/examples/core/expectedException.rb +39 -0
  112. data/oats_tests/examples/core/ok_verify.rb +2 -0
  113. data/oats_tests/examples/core/ok_verify.rb_ok/out/myfile.txt +1 -0
  114. data/oats_tests/examples/core/ok_verify.rb_ok/out/myfile2.txt +1 -0
  115. data/oats_tests/examples/core/ok_verify.rb_ok/rats_test.log +2 -0
  116. data/oats_tests/examples/core/unexpectedException.rb +30 -0
  117. data/oats_tests/examples/examples.yml +13 -0
  118. data/oats_tests/examples/gui/guiExamples.yml +7 -0
  119. data/oats_tests/examples/gui/seleniumGoogle.rb +10 -0
  120. data/oats_tests/examples/gui/webdriverGoogle.rb +9 -0
  121. data/oats_tests/examples/keywords/SampleXlList-1.xls +0 -0
  122. data/oats_tests/examples/keywords/SampleXlList-2.xls +0 -0
  123. data/oats_tests/examples/keywords/SampleXlLists.xls +0 -0
  124. data/oats_tests/examples/keywords/keywordsDriver.rb +1 -0
  125. data/oats_tests/examples/keywords/keywordsExamples.yml +8 -0
  126. data/oats_tests/examples/keywords/keywordsTC1.yml +5 -0
  127. data/oats_tests/examples/keywords/keywordsTestlist.yml +16 -0
  128. data/oats_tests/examples/needsWork/addTestDynamically.rb +4 -0
  129. data/oats_tests/examples/needsWork/emailVerify.rb +34 -0
  130. data/oats_tests/examples/needsWork/testSql/rtest.sql +6 -0
  131. data/oats_tests/examples/needsWork/testSql/rtest.yml +11 -0
  132. data/oats_tests/examples/occTest/occTest.rb +13 -0
  133. data/oats_tests/examples/occTest/occTest_1.rb +1 -0
  134. data/oats_tests/examples/occTest/occTest_1_1.rb +1 -0
  135. data/oats_tests/examples/occTest/occTest_1_2.rb +1 -0
  136. data/oats_tests/examples/occTest/occTest_1_3.rb +1 -0
  137. data/oats_tests/examples/occTest/occTest_1_4.rb +1 -0
  138. data/oats_tests/examples/occTest/occTest_2.rb +1 -0
  139. data/oats_tests/examples/occTest/occTest_2_1.rb +1 -0
  140. data/oats_tests/examples/occTest/occTest_2_2.rb +1 -0
  141. data/oats_tests/examples/occTest/occTest_2_3.rb +1 -0
  142. data/oats_tests/examples/occTest/occTest_2_4.rb +1 -0
  143. data/oats_tests/examples/occTest/occTest_3.rb +1 -0
  144. data/oats_tests/examples/occTest/occTest_3_1.rb +1 -0
  145. data/oats_tests/examples/occTest/occTest_3_2.rb +1 -0
  146. data/oats_tests/examples/occTest/occTest_3_3.rb +1 -0
  147. data/oats_tests/examples/occTest/occTest_3_4.rb +1 -0
  148. data/oats_tests/examples/occTest/occTest_4.rb +1 -0
  149. data/oats_tests/examples/occTest/occTestlist.yml +9 -0
  150. data/oats_tests/examples/occTest/occTestlist_1.yml +9 -0
  151. data/oats_tests/examples/occTest/occTestlist_2.yml +9 -0
  152. data/oats_tests/examples/occTest/occTestlist_3.yml +9 -0
  153. data/oats_tests/examples/occTest/variation1.yml +4 -0
  154. data/oats_tests/examples/occTest/variation2.yml +4 -0
  155. data/oats_tests/examples/testFileLocationUnitTests/extn_driver.rb +4 -0
  156. data/oats_tests/examples/testFileLocationUnitTests/folder/oats.yml +3 -0
  157. data/oats_tests/examples/testFileLocationUnitTests/folder/t1.rb +2 -0
  158. data/oats_tests/examples/testFileLocationUnitTests/folder1/t1.yml +2 -0
  159. data/oats_tests/examples/testFileLocationUnitTests/folder1/t1_1.yml +3 -0
  160. data/oats_tests/examples/testFileLocationUnitTests/folder2/oats.yml +3 -0
  161. data/oats_tests/examples/testFileLocationUnitTests/folder2/t1.rb +2 -0
  162. data/oats_tests/examples/testFileLocationUnitTests/folder2/t1.yml +2 -0
  163. data/oats_tests/examples/testFileLocationUnitTests/no_yaml.rb +3 -0
  164. data/oats_tests/examples/testFileLocationUnitTests/post_yaml.rb +1 -0
  165. data/oats_tests/examples/testFileLocationUnitTests/t1.rb +4 -0
  166. data/oats_tests/examples/testFileLocationUnitTests/t1.yml +2 -0
  167. data/oats_tests/examples/testFileLocationUnitTests/t1_1.yml +3 -0
  168. data/oats_tests/examples/testFileLocationUnitTests/testDir/oats.yml +3 -0
  169. data/oats_tests/examples/testFileLocationUnitTests/testDir/t1.rb +2 -0
  170. data/oats_tests/examples/testFileLocationUnitTests/testDir/t1.yml +2 -0
  171. data/oats_tests/examples/testFileLocationUnitTests/testDir2/t1.rb +2 -0
  172. data/oats_tests/examples/testFileLocationUnitTests/testDir2/t1.yml +2 -0
  173. data/oats_tests/examples/testFileLocationUnitTests/unitTestList.yml +36 -0
  174. data/oats_tests/examples/testFileLocationUnitTests/yml_driver.rb +2 -0
  175. data/oats_tests/lib/business.rb +28 -0
  176. data/oats_tests/lib/sample_xl_lists.rb +37 -0
  177. data/test/common_test_unit_setup.rb +21 -0
  178. data/test/test_basic.rb +16 -0
  179. data/test/test_selenium.rb +16 -0
  180. data/test/test_xl_lists.rb +16 -0
  181. metadata +291 -0
data/.gitignore ADDED
@@ -0,0 +1,6 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ /nbproject/private/
6
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,15 @@
1
+ source 'http://rubygems.org'
2
+
3
+ unless defined?(OATS_GEM_IS_ALREADY_INCLUDED)
4
+ OATS_GEM_IS_ALREADY_INCLUDED = true
5
+
6
+ gemspec
7
+ # Include Gemfile from dir_tests
8
+ unless ENV['OATS_TESTS']
9
+ ENV['OATS_TESTS'] = File.expand_path('oats_tests', File.dirname(__FILE__) )
10
+ puts "Undefined OATS_TESTS Environment variable, assuming: " + ENV['OATS_TESTS']
11
+ end
12
+ test_gemfile = $oats_execution['options'][ "_:gemfile"] if $oats_execution and $oats_execution['options']
13
+ test_gemfile ||= ENV['OATS_TESTS'] + '/Gemfile'
14
+ eval(IO.read(test_gemfile), binding) if File.exist?(test_gemfile)
15
+ end
data/README.txt ADDED
@@ -0,0 +1,165 @@
1
+ == Welcome to OATS
2
+
3
+ The goal of the Automated Testing Project is to implement the tools,
4
+ environment, and processes that will enable a QA team to create system
5
+ integration regression test cases which can be executed by QA, Development
6
+ teams, or build scripts in a simple or automated fashion.
7
+
8
+
9
+ == License
10
+
11
+ OATS is copyright 2012 Levent Atasoy and contributors. It is licensed under the
12
+ Ruby license and the GPL. See the included LICENSE file in doc folder for
13
+ details.
14
+
15
+
16
+ == OATS Installation
17
+
18
+ - Install
19
+ - Ruby Ruby
20
+ - Ruby Bundler
21
+ - gem install oats
22
+
23
+ - On Windows_NT, some operations need handle.exe and psexec.exe to be in the
24
+ PATH. These are found in PsTools Suite from
25
+ http://technet.microsoft.com/en-us/sysinternals
26
+
27
+ - Recommended to also install Netbeans (or another IDE of your choice)
28
+
29
+
30
+ == Configuring OATS
31
+
32
+ OATS_HOME below refers to the oats gem installation folder
33
+ - Set the HOME variable C:\myDirectory
34
+ - Set USER PATH for ..\ruby\bin; C:\myDirectory\oats\bin
35
+ At this point you should be able to type 'oats' in commandline and see the
36
+ execution of a sample test.
37
+ - See OATS_HOME/doc/oats_ini.yml for customizable properties.
38
+ - Copy sample OATS_HOME/oats_tests folder to <yourTestFolder> and start adding your
39
+ own tests.
40
+ - Copy sample OATS_HOME/doc/oats-user.yml to HOME, and set 'dir_tests' to
41
+ your <yourTestFolder>
42
+
43
+
44
+ == Using OATS with NetBeans
45
+
46
+ - Download NetBeans from http://netbeans.org/downloads
47
+ * NetBeans 7.1.2 or higher is not recommended, as the Ruby debugger seems
48
+ to have issues on it as of 05/04/2012
49
+ * If you install NetBeans 7/0-7.1.1, you'll need to install Ruby Plug-ins manually
50
+ For using only Ruby with these versions download smallest footprint of
51
+ NetBeans, e.g. NetBeans C/C++).
52
+ To install NBMs:
53
+ 1. Download
54
+ http://jruby.org.s3.amazonaws.com/downloads/community-ruby/community-ruby_7_1_preview1.zip
55
+ 2. Select Tools->Plugins from menu
56
+ 3. Select Downloaded tab
57
+ 4. Press Add Plugins...
58
+ 5. Navigate to where you unzipped the nbms files
59
+ 6. Select all files which end in .nbms (you can do this all in one selection
60
+ but if you include any non-nbms file it greys out the open button)
61
+ 7. Accept and install
62
+
63
+ - Create a new Ruby project in NetBeans for OATS Framework
64
+ * Select "Ruby Application with Existing Sources"
65
+ * Use project name 'oats'.
66
+ * Add Folder 'lib' under the cloned 'oats' folder into 'Existing Sources'
67
+ * Add Folder 'oats_tests' under the cloned 'oats' folder into 'Test Folders'
68
+ * Add Folder <yourTestFolder> into 'Test Folders'.
69
+ * Select oats Project Properties -> Run
70
+ - Ensure your Ruby Platform is shown on the drop down list.
71
+ - For Main Script, select 'oats_main.rb'
72
+
73
+
74
+ == Additional Ruby Installation Guidance For Windows
75
+
76
+ http://rubyinstaller.org/downloads/
77
+ https://github.com/oneclick/rubyinstaller/wiki/development-kit
78
+ 1. Install ruby 1.8.7
79
+ - 1.9.x doesn't build ruby-debug-ide19
80
+ - gem install --pre ruby-debug-base19x for base only
81
+ 2. Unzip the rubydev kit and copy all bin files into ..\ruby\bin
82
+ 3. copy the devkit directory into ...\ruby
83
+ 4. Left double-click the self-extracting executable (SFX) downloaded and
84
+ choose a directory to install the DevKit artifacts into.
85
+ For example, C:\DevKit
86
+ 5. cd <DEVKIT_INSTALL_DIR>
87
+ example: cd Devkit
88
+ 6. ruby dk.rb init to generate the config.yml
89
+ 7. check the config file for correct version of ruby.
90
+ 8. finally, ruby dk.rb install to DevKit enhance your installed Rubies.
91
+
92
+
93
+ == LibCurl Installation (Needed only if your tests would use LibCurl)
94
+
95
+ - Darwin (Mac)
96
+ - Install Xcode to get the headers
97
+
98
+ - Windows
99
+
100
+ http://beginrescue.blogspot.com/2010/07/installing-curb-with-ruby-191-in.html
101
+ http://www.gknw.de/mirror/curl/win32/old_releases/
102
+
103
+ 1. gem install oauth (from command line)
104
+ 2. download libcurl make sure to get the one for mingw32 and that you
105
+ get libcurl and not plain-old curl.
106
+ or get libcurl from \\opfiler\qa\oatsSetup (curl-7.21.1-devel-mingw32)
107
+ 3. copy or extract files in C drive
108
+ 4. copy bin files to ..\ruby\bin
109
+ 5. gem install curb -- --with-curl-lib=C:\curl-7.21.1-devel-mingw32\bin \
110
+ --with-curl-include=C:\curl-7.21.1-devel-mingw32\include
111
+ 6. Add '...\curl-7.21.1-devel-mingw32\bin' to USER PATH
112
+
113
+
114
+
115
+ == Ruby 1.9.X IDE Debug setup
116
+ To use IDE debugger with 1.9.X, you will need to install 'ruby-debug19' instead
117
+ of 'ruby-debug' gem and follow the instructions found in:
118
+ http://noteslog.com/post/netbeans-6-9-1-ruby-1-9-2-rails-3-0-0-debugging
119
+ It instructs you to apply the following patch to:
120
+ (Ruby folder)/lib/ruby/gems/1.9.1/gems/ruby-debug-ide19-0.4.12/bin/rdebug-ide.rb
121
+ # noteslog.com, 2010-09-17 -> !!!
122
+ # 78 Debugger::PROG_SCRIPT = ARGV.shift
123
+ script = ARGV.shift
124
+ Debugger::PROG_SCRIPT = (script =~ /script([\\\/])rails/ ? Dir.pwd + $1 : '') + script
125
+
126
+
127
+ == Selenium IDE
128
+
129
+ Though not required for OATS execution you need to download and install the
130
+ latest Selenium IDE plug- in from http://seleniumhq.org/download/, or from the
131
+ list of Firefox plugins in order to create and run tests via the Selenium IDE on
132
+ Firefox. Read the IDE documentation at http://seleniumhq.org to learn about IDE
133
+ usage.
134
+ To use Chrome with Webdriver, download and put the chromedriver applicable to
135
+ your machine in the PATH for OATS.
136
+
137
+
138
+ == MySQL Client
139
+
140
+ If your tests interact with MySQL, then you need to install a MySQL client which
141
+ is the default DB interface provided by OATS. Many of the OATS tests require
142
+ interaction with the various RL applicaton MySQL databases. In order to
143
+ interact with the MySQL databases on various environments, OATS expects to find
144
+ the MySQL client in the PATH. To verify this, open a Windows CMD window and type
145
+ 'mysql \--help'. If you see an error message instead of MySQL help, make sure
146
+ MySQL is installed on your system and that the bin directory of MySQL is
147
+ included in the PATH.
148
+
149
+
150
+ == Putty and Pageant (For Windows-OCC and Windows-Agent Installations)
151
+
152
+ Installation of PuTTY, Pageant, Puttygen, and Plink are necessary if your tests
153
+ require access to systems via ssh. For Linux systems the default methods used by
154
+ OATS to interrogate logs or execute scripts on remote is via Plink, using ssh.
155
+ Pageant is also useful to install if you are using tortoise to access SVN setup
156
+ with SSH.
157
+
158
+ 1. Download and install PuTTY, Pageant, Puttygen, and Plink from
159
+ http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html. These are
160
+ standalone executables, so you can install them wherever you'd like.
161
+ 2. Once the PUTTY is installed, append <putty-installation-dir>/PuTTY to
162
+ the user environment variable PATH (create it if it does not exist.)
163
+ 3. Use PuTTYgen to Generate Public and Private Keys, and incorporate them
164
+ in your appropriate authorized_keys files and .ssh folders
165
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'rubygems'
2
+ require "bundler/gem_tasks"
data/bin/agent ADDED
@@ -0,0 +1,204 @@
1
+ #!/bin/bash
2
+ # This script is used to start OATS in agent mode and communicate with OCC.
3
+
4
+ [ "$OS" ] || export OS=$(uname)
5
+ if [ "$OS" == "Windows_NT" ]; then
6
+ export PATH="$PATH:/cygdrive/c/apps/cygwin/bin"
7
+ [ "$HOSTNAME" ] || HOSTNAME="$COMPUTERNAME"
8
+ else
9
+ [ "$HOSTNAME" ] || HOSTNAME=`hostname`
10
+ fi
11
+ export HOSTNAME
12
+ [ "$OATS_AGENT_NICKNAME" ] || OATS_AGENT_NICKNAME=${HOSTNAME/.*}
13
+ doc="
14
+ Starts OATS agent to be used with OCC
15
+
16
+ USAGE: agent [-k[ill]] [-n[ickname] OATS_AGENT_NICKNAME] [ -p[ort] OATS_AGENT_PORT ]
17
+ [ -r[epo] OATS_REPOSITORY_VERSION ] [ -u OATS_USER]
18
+
19
+ Parameters: (also can be passed in via environment variables
20
+ -n OATS_AGENT_NICKNAME OCC ID of the agent.
21
+ -p OATS_AGENT_PORT Agent port to communicate with OCC. Default is port previously
22
+ used for OATS_AGENT_NICKNAME.
23
+ -u OATS_USER who started the agent. Used for logging purposes only.
24
+ -r OATS_REPOSITORY_VERSION Required to update the agent.
25
+ -k kill the agent, or set OATS_KILL_AGENT
26
+ -d DISPLAY_NUM Number of the VNC Display, for Linux only
27
+
28
+ Example:
29
+ /home/occadmin/oats/bin/agent -p 3011 -n occ_1 -r 403cc620c265db84dbd3fb7d7cce4d57416bff09
30
+
31
+ The agent script should be in the path so that ssh from occ can pick it up.
32
+ Git requires definition of OATS_GIT_REPOSITORY environment variable.
33
+ "
34
+ input_pars="$@"
35
+ while [ "$1" ]; do
36
+ case $1 in
37
+ -p*) shift; OATS_AGENT_PORT="$1" ;;
38
+ -n*) shift; OATS_AGENT_NICKNAME="$1" ;;
39
+ -u*) shift; OATS_USER="$1" ;;
40
+ -k*) OATS_KILL_AGENT='OATS_KILL_AGENT' ;;
41
+ -r*) shift; OATS_REPOSITORY_VERSION="$1" ;;
42
+ -d*) shift; DISPLAY_NUM="$1" ;;
43
+ *) echo "Unrecognized parameter: $1" ;
44
+ echo "$doc"
45
+ exit ;;
46
+ esac
47
+ shift
48
+ done
49
+
50
+ function agent_echo {
51
+ echo "$(date +'%m/%d/%H:%M:%S') $*"
52
+ }
53
+ function fkill {
54
+ agent_echo "Killing PID: $each_pid"
55
+ if [ "$OS" == "Windows_NT" ]; then
56
+ pskill $1
57
+ else
58
+ kill -9 $1
59
+ fi
60
+ }
61
+
62
+ {
63
+ agent_echo "$0 $input_pars"
64
+
65
+ if [ -n "$(echo "$GEM_HOME" | grep ruby-1.9.2)" ]; then
66
+ # If spawned from OCC, running 1.9.2, we need to switch to 1.8 since
67
+ # can't run oauth in 1.9.2. Assume RVM is installed and the system ruby is 1.8.X
68
+ if [ -n "$(echo "$rvm_ruby_global_gems_path" | grep ruby-1.9.2)" ] && [[ -s "$HOME/.rvm/scripts/rvm" ]]; then
69
+ source "$HOME/.rvm/scripts/rvm" # Load RVM function
70
+ rvm system
71
+ fi
72
+ fi
73
+ # Need these off when called by OCC
74
+ unset BUNDLE_BIN_PATH BUNDLE_GEMFILE GEM_HOME GEM_PATH MY_RUBY_HOME # RAILS_ENV
75
+ unset RUBYOPT
76
+ if [ -z "$OATS_HOME" ]; then
77
+ cd $(dirname $(type -p $0))/..
78
+ OATS_HOME=$PWD
79
+ fi
80
+ [ "$OATS_GIT_REPOSITORY" ] && OATS_HOME="$HOME/results_archive/$OATS_AGENT_NICKNAME"/oats
81
+ export OATS_HOME
82
+ export OATS_AGENT_LOGFILE="$logFile"
83
+ oats_bin="$OATS_HOME/bin"
84
+ # [ "$OS" == "Windows_NT" ] && oats_bin=$(cygpath -w $oats_bin)
85
+ # ruby_com="$oats_bin/oats -n $OATS_AGENT_NICKNAME -p $OATS_AGENT_PORT"
86
+ ruby_com="oats -n $OATS_AGENT_NICKNAME -p $OATS_AGENT_PORT"
87
+ export PATH="$PATH:$OATS_HOME/bin:$OATS_HOME/bin/$OS"
88
+ if [ -e "$config_agent_file" ]; then
89
+ line=$(grep "^$OATS_AGENT_NICKNAME" "$config_agent_file")
90
+ read nickname PREV_OATS_AGENT_PORT pid display<<< $line
91
+ [ "$OATS_AGENT_PORT" ] || OATS_AGENT_PORT=$PREV_OATS_AGENT_PORT
92
+ [ "$PID" ] || PID=$pid
93
+ if [ -z "$DISPLAY_NUM" ]; then
94
+ if [ "$display" ]; then
95
+ DISPLAY_NUM=$(echo "$display" | sed -e 's/.*:\(.\).*/\1/')
96
+ [ "$DISPLAY_NUM" ] || DISPLAY_NUM="$display"
97
+ else
98
+ DISPLAY_NUM='0'
99
+ fi
100
+ fi
101
+ fi
102
+ if [ -z "$OATS_AGENT_PORT" ]; then
103
+ agent_echo "$0: Must specify a port, exiting..." >&2
104
+ exit 1
105
+ fi
106
+
107
+ [ "$OATS_AGENT_PORT" == "$PREV_OATS_AGENT_PORT" ] && PREV_OATS_AGENT_PORT=''
108
+ for OATS_AGENT_PORT_VAR in $PREV_OATS_AGENT_PORT $OATS_AGENT_PORT; do
109
+ skip_port=''
110
+ if [ "$PID" -a "$OATS_AGENT_PORT_VAR" == "$PREV_OATS_AGENT_PORT" ]; then
111
+ agent_echo "Attempting to kill agent $OATS_AGENT_NICKNAME with PID: $PID"
112
+ fkill $PID
113
+ [ $? == 0 ] && skip_port=skip_port
114
+ fi
115
+ if [ -z "$skip_port" ]; then
116
+ # agent_echo "Attempting to kill process holding on to port $OATS_AGENT_PORT_VAR"
117
+ if [ "$OS" == Darwin ]; then
118
+ lines=$(ps -ef|grep "$ruby_com"|grep -v grep)
119
+ PID=$(echo $(cut -c 6-11 <<< "$lines"))
120
+ else
121
+ if [ "$OS" == Windows_NT ]; then # Killing the top level bash process doesn't cut it
122
+ lines=$(netstat -a -o 2>/dev/null| grep "$OATS_AGENT_PORT_VAR .* LISTEN" )
123
+ else
124
+ lines=$(netstat -n -p -l 2>/dev/null| grep "$OATS_AGENT_PORT_VAR .* LISTEN" )
125
+ fi
126
+ PID=$(echo "$line" | sed 's/.* LISTEN[^ ]* *//;s/.ruby .*//')
127
+ [ "$PID" -a "$PID" != "$line" ] || PID=''
128
+ fi
129
+ if [ "$PID" ]; then
130
+ agent_echo "PS line(s): $lines"
131
+ for each_pid in $PID; do
132
+ fkill $each_pid
133
+ done
134
+ # else
135
+ # agent_echo "No agent is found on port $OATS_AGENT_PORT_VAR"
136
+ fi
137
+ fi
138
+ done
139
+ [ "$OATS_KILL_AGENT" ] && return
140
+
141
+ if [ "$OATS_GIT_REPOSITORY" ]; then
142
+ [ -d $OATS_HOME ] || git clone $OATS_GIT_REPOSITORY $OATS_HOME
143
+ cd $OATS_HOME
144
+ origin="$OATS_GIT_REPOSITORY"
145
+ [ "$origin" ] || origin=origin
146
+ if [ "$OATS_REPOSITORY_VERSION" ]; then
147
+ for i in 1 2; do
148
+ out=$(git checkout $OATS_REPOSITORY_VERSION 2>&1) && break # may detach HEAD, but it is OK
149
+ if [ "$out" == "fatal: reference is not a tree: $OATS_REPOSITORY_VERSION" ]; then
150
+ echo -n "Need to pull requested version: $OATS_REPOSITORY_VERSION "
151
+ else
152
+ echo "$out"
153
+ fi
154
+ git pull $origin master # fast-forward master from origin
155
+ done
156
+ else
157
+ git pull $origin master # fast-forward master from origin
158
+ fi
159
+ OATS_CODE_VERSION=$(git rev-list HEAD -1) # last commit in checked out version
160
+ if [ "${OATS_CODE_VERSION##$OATS_REPOSITORY_VERSION*}" ]; then
161
+ agent_echo "Could not update the code version $OATS_CODE_VERSION to $OATS_REPOSITORY_VERSION" >&2
162
+ return 2
163
+ fi
164
+ [ "$OATS_REPOSITORY_VERSION" ] || agent_echo "Using OATS code version: $OATS_CODE_VERSION"
165
+ elif [ -d .svn ]; then
166
+ COUNTER=0
167
+ [ "$OATS_REPOSITORY_VERSION" ] && agent_echo "Requested OATS Version: $OATS_REPOSITORY_VERSION"
168
+ while [ $COUNTER -lt 5 ]; do
169
+ let COUNTER=COUNTER+1
170
+ OATS_CODE_VERSION=$(svn info $OATS_HOME | sed -n 's/Last Changed Rev: *//p')
171
+ [ "$OATS_REPOSITORY_VERSION" ] || break
172
+ [ "$OATS_CODE_VERSION" -ge "$OATS_REPOSITORY_VERSION" ] && break
173
+ [ $COUNTER -eq 1 ] || sleep 3
174
+ svn update $OATS_HOME 2>&1
175
+ done
176
+ if [ $COUNTER -eq 5 ]; then
177
+ agent_echo "Could not update the code version $OATS_CODE_VERSION to $OATS_REPOSITORY_VERSION" >&2
178
+ return 2
179
+ fi
180
+ agent_echo "Current OATS code version: $OATS_CODE_VERSION"
181
+ else
182
+ OATS_CODE_VERSION=$OATS_REPOSITORY_VERSION
183
+ [ "$OATS_CODE_VERSION" ] && agent_echo "Setting OATS code version to the requested version: $OATS_CODE_VERSION]" # This is not set for development/debug
184
+ fi
185
+ export OATS_CODE_VERSION
186
+ # echo "$OATS_AGENT_NICKNAME $OATS_AGENT_PORT" >| $config_agent_file
187
+ if [ "$OS" == "Linux" ]; then # Do this with VNC displays
188
+ # Allocate 2x as display. VNC takes 592x, vino takes next available from 59++
189
+ # vnc_num="2$(echo $OATS_AGENT_PORT | cut -c 4)"
190
+ vnc_num="$DISPLAY_NUM"
191
+ [ "$vnc_num" ] || vnc_num="1"
192
+ pgrep -fl "Xvnc4 :$vnc_num" >/dev/null || vncserver :$vnc_num -SecurityTypes=None -geometry 1900x1060
193
+ export DISPLAY=":$vnc_num.0"
194
+ agent_echo "Setting DISPLAY to $DISPLAY"
195
+ fi
196
+ cd $OATS_HOME # Needed for bundler
197
+ agent_echo "Starting agent $OATS_AGENT_NICKNAME on port $OATS_AGENT_PORT"
198
+ $ruby_com
199
+ } >> $LOGFILE 2>&1 &
200
+
201
+ PID=$(jobs -p)
202
+ echo "Initiated PID: $PID" >> $LOGFILE
203
+ echo "$PID"
204
+ echo "$OATS_AGENT_NICKNAME $OATS_AGENT_PORT $PID $DISPLAY_NUM" >| $CONFIG_FILE
data/bin/oats ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ dir = File.dirname(__FILE__)
4
+ $:.push File.expand_path('../lib', dir )
5
+ require 'oats'
6
+ if $oats_execution['options']["_:agent"]
7
+ Oats::Driver.agent
8
+ else
9
+ Oats.run
10
+ end
data/bin/occ ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This script is used to start OCC
4
+
5
+ #[ "$RAILS_ENV" ] || export RAILS_ENV="production"
6
+ occ_home = ENV['OATS_OCC_HOME']
7
+ unless occ_home
8
+ pwd = Dir.pwd
9
+ occ_home = pwd if File.basename(pwd) == 'occ'
10
+ end
11
+ occ_home = ENV['HOME'] + '/occ' unless occ_home
12
+ occ_home = ENV['HOME'] + '/NetBeansProjects/occ' unless File.directory?(occ_home)
13
+
14
+ raise "Must define OCC_HOME or be in occ directory to run this command." unless occ_home
15
+
16
+ Dir.chdir(occ_home)
17
+ exec 'ruby script/rails server mongrel' # -p 4000
18
+
19
+ # By pass the following unless using distributed agents
20
+ # if [ "$OS" != "Windows_NT" ]; then
21
+ # if [ -z "$SSH_AGENT_PID" ] || ! ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null ; then
22
+ # echo "Should start_agent for SSH first"
23
+ # # exit 1
24
+ # fi
25
+ # ssh-add -l || echo "*** WARNING *** Please add your ssh keys ssh-add"
26
+ # fi
27
+
28
+
29
+ #mongrel_rails start -e production -p 3000 --log log\production.log
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+ rm -fr ~/results
3
+ cd ~/results_archive
4
+ rm -fr */8* # Cleanup older dated results
5
+ rm -f */agent_logs/ag*_*.log # cleanup old agent logs
6
+ rm -fr incomplete
data/doc/COPYING ADDED
@@ -0,0 +1,55 @@
1
+ Open Automated Testing System (OATS) is copyrighted free software by Levent Atasoy
2
+ <Levent.Atasoy at gmail dot com> and contributors. You can redistribute it
3
+ and/or modify it under either the terms of the GPL or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise make them
13
+ Freely Available, such as by posting said modifications to Usenet or an
14
+ equivalent medium, or by allowing the author to include your
15
+ modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) rename any non-standard executables so the names do not conflict with
21
+ standard executables, which must also be provided.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or executable
26
+ form, provided that you do at least ONE of the following:
27
+
28
+ a) distribute the executables and library files of the software,
29
+ together with instructions (in the manual page or equivalent) on where
30
+ to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of the
33
+ software.
34
+
35
+ c) give non-standard executables non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under this terms.
43
+
44
+ 5. The scripts and library files supplied as input to or produced as
45
+ output from the software do not automatically fall under the
46
+ copyright of the software, but belong to whomever generated them,
47
+ and may be sold commercially, and may be aggregated with this
48
+ software.
49
+
50
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
51
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
52
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
53
+ PURPOSE.
54
+
55
+
data/doc/LICENSE ADDED
@@ -0,0 +1,55 @@
1
+ Open Automated Testing System (OATS) is copyrighted free software by Levent Atasoy
2
+ <Levent.Atasoy at gmail dot com> and contributors. You can redistribute it
3
+ and/or modify it under either the terms of the GPL or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise make them
13
+ Freely Available, such as by posting said modifications to Usenet or an
14
+ equivalent medium, or by allowing the author to include your
15
+ modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) rename any non-standard executables so the names do not conflict with
21
+ standard executables, which must also be provided.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or executable
26
+ form, provided that you do at least ONE of the following:
27
+
28
+ a) distribute the executables and library files of the software,
29
+ together with instructions (in the manual page or equivalent) on where
30
+ to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of the
33
+ software.
34
+
35
+ c) give non-standard executables non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under this terms.
43
+
44
+ 5. The scripts and library files supplied as input to or produced as
45
+ output from the software do not automatically fall under the
46
+ copyright of the software, but belong to whomever generated them,
47
+ and may be sold commercially, and may be aggregated with this
48
+ software.
49
+
50
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
51
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
52
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
53
+ PURPOSE.
54
+
55
+
Binary file