oats 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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