virtualmonkey 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 (178) hide show
  1. data/.document +5 -0
  2. data/LICENSE +20 -0
  3. data/README.rdoc +77 -0
  4. data/Rakefile +51 -0
  5. data/VERSION +1 -0
  6. data/bin/grinder +102 -0
  7. data/bin/mcicp +46 -0
  8. data/bin/monkey +12 -0
  9. data/bin/vary_instance_types +59 -0
  10. data/config/cloud_variables/all_clouds.json +30 -0
  11. data/config/cloud_variables/east.json +9 -0
  12. data/config/cloud_variables/rackspace.json +7 -0
  13. data/config/cloud_variables/west.json +9 -0
  14. data/config/common_inputs/apache_haproxy.json +27 -0
  15. data/config/common_inputs/base.json +5 -0
  16. data/config/common_inputs/ebs_toolbox.json +10 -0
  17. data/config/common_inputs/haproxy.json +15 -0
  18. data/config/common_inputs/lamp.json +30 -0
  19. data/config/common_inputs/mysql.json +24 -0
  20. data/config/common_inputs/none.json +4 -0
  21. data/config/common_inputs/php.json +25 -0
  22. data/config/common_inputs/php_aio_trial_chef_alpha.json +3 -0
  23. data/config/common_inputs/php_app_fe_chef.json +12 -0
  24. data/config/common_inputs/php_elb.json +12 -0
  25. data/config/common_inputs/qstart.json +5 -0
  26. data/config/common_inputs/rails.json +31 -0
  27. data/config/common_inputs/rails_aio_demo_chef_alpha.json +3 -0
  28. data/config/common_inputs/rails_aio_developer_chef_alpha.json +10 -0
  29. data/config/common_inputs/rsgrid.json +10 -0
  30. data/config/common_inputs/tomcat.json +15 -0
  31. data/config/common_inputs/windows_blog_engine.json +3 -0
  32. data/config/common_inputs/windows_net_aio.json +14 -0
  33. data/config/troop/11H1/backup/base.json +10 -0
  34. data/config/troop/11H1/backup/lamp_mysql_50.json +10 -0
  35. data/config/troop/11H1/backup/lamp_mysql_51.json +10 -0
  36. data/config/troop/11H1/backup/loadbalancer-php.json +13 -0
  37. data/config/troop/11H1/backup/loadbalancer.json +14 -0
  38. data/config/troop/11H1/backup/loadbalancer_rails.json +13 -0
  39. data/config/troop/11H1/backup/loadbalancer_tomcat6.json +13 -0
  40. data/config/troop/11H1/backup/mysql50.json +11 -0
  41. data/config/troop/11H1/backup/mysql50_toolbox.json +12 -0
  42. data/config/troop/11H1/backup/mysql51.json +11 -0
  43. data/config/troop/11H1/backup/mysql51_toolbox.json +12 -0
  44. data/config/troop/11H1/backup/php_elb.json +11 -0
  45. data/config/troop/11H1/base.json +10 -0
  46. data/config/troop/11H1/ebs_toolbox.json +12 -0
  47. data/config/troop/11H1/lamp_mysql_50.json +10 -0
  48. data/config/troop/11H1/lamp_mysql_51.json +10 -0
  49. data/config/troop/11H1/loadbalancer-php.json +13 -0
  50. data/config/troop/11H1/loadbalancer.json +17 -0
  51. data/config/troop/11H1/loadbalancer_rails.json +13 -0
  52. data/config/troop/11H1/loadbalancer_tomcat6.json +13 -0
  53. data/config/troop/11H1/mysql50.json +11 -0
  54. data/config/troop/11H1/mysql50_toolbox.json +12 -0
  55. data/config/troop/11H1/mysql51.json +11 -0
  56. data/config/troop/11H1/mysql51_awsdns.json +11 -0
  57. data/config/troop/11H1/mysql51_debug.json +11 -0
  58. data/config/troop/11H1/mysql51_toolbox.json +12 -0
  59. data/config/troop/11H1/php.json +13 -0
  60. data/config/troop/11H1/php_elb.json +11 -0
  61. data/config/troop/11H1/rails.json +13 -0
  62. data/config/troop/11H1/tomcat6.json +13 -0
  63. data/config/troop/chef_quickstart.json +10 -0
  64. data/config/troop/just_elb +10 -0
  65. data/config/troop/lamp_v4.json +10 -0
  66. data/config/troop/patch_test.json +10 -0
  67. data/config/troop/rightlink.json +10 -0
  68. data/config/troop/simple_fail.json +11 -0
  69. data/config/troop/simple_pass.json +11 -0
  70. data/config/troop/windows_blog_engine.json +10 -0
  71. data/config/troop/windows_net_aio.json +10 -0
  72. data/config/troop/windows_quick_start.json +10 -0
  73. data/features/base.rb +31 -0
  74. data/features/db_toolbox.rb +59 -0
  75. data/features/ebs_toolbox.rb +62 -0
  76. data/features/lamp.rb +33 -0
  77. data/features/lb-apache-haproxy.rb +49 -0
  78. data/features/mysql_5.x_v2_v4_from_scratch.rb +71 -0
  79. data/features/mysql_5.x_v2_v4_from_scratch_awsdns.rb +71 -0
  80. data/features/mysql_5.x_v2_v4_from_scratch_dyndns.rb +71 -0
  81. data/features/mysql_v1_upgrade_v2.rb +54 -0
  82. data/features/old_cuke_features/Rakefile +121 -0
  83. data/features/old_cuke_features/Steps-TODO +31 -0
  84. data/features/old_cuke_features/app_state.feature +25 -0
  85. data/features/old_cuke_features/app_test.feature +24 -0
  86. data/features/old_cuke_features/base.feature +16 -0
  87. data/features/old_cuke_features/chef_quickstart.feature +11 -0
  88. data/features/old_cuke_features/db_toolbox.feature +38 -0
  89. data/features/old_cuke_features/ebs_toolbox.feature +39 -0
  90. data/features/old_cuke_features/elb_create_delete.feature +41 -0
  91. data/features/old_cuke_features/elb_generic.feature +27 -0
  92. data/features/old_cuke_features/fe_app_checks.feature +21 -0
  93. data/features/old_cuke_features/just-start.feature +13 -0
  94. data/features/old_cuke_features/lamp.feature +15 -0
  95. data/features/old_cuke_features/lb-apache-haproxy.feature +27 -0
  96. data/features/old_cuke_features/mysql_5.x_v2_v4_from_scratch.feature +33 -0
  97. data/features/old_cuke_features/mysql_5.x_v2_v4_from_scratch_awsdns.feature +33 -0
  98. data/features/old_cuke_features/mysql_5.x_v2_v4_from_scratch_dyndns.feature +33 -0
  99. data/features/old_cuke_features/mysql_chef_premium.feature +27 -0
  100. data/features/old_cuke_features/mysql_chef_premium_from_scratch.feature +37 -0
  101. data/features/old_cuke_features/mysql_v1_upgrade_v2.feature +42 -0
  102. data/features/old_cuke_features/php.feature +27 -0
  103. data/features/old_cuke_features/php_aio_trial_chef_alpha.feature +11 -0
  104. data/features/old_cuke_features/php_chef.feature +21 -0
  105. data/features/old_cuke_features/php_elb.feature +41 -0
  106. data/features/old_cuke_features/rails.feature +26 -0
  107. data/features/old_cuke_features/rails_aio_developer_chef.feature +17 -0
  108. data/features/old_cuke_features/reboot.feature +23 -0
  109. data/features/old_cuke_features/rightlink.feature +19 -0
  110. data/features/old_cuke_features/rsgrid.feature +19 -0
  111. data/features/old_cuke_features/simple.feature +8 -0
  112. data/features/old_cuke_features/simple_fail.feature +9 -0
  113. data/features/old_cuke_features/start-stop.feature +13 -0
  114. data/features/old_cuke_features/step_definitions/app.rb +21 -0
  115. data/features/old_cuke_features/step_definitions/deployment_steps.rb +112 -0
  116. data/features/old_cuke_features/step_definitions/ebs.rb +36 -0
  117. data/features/old_cuke_features/step_definitions/elb.rb +35 -0
  118. data/features/old_cuke_features/step_definitions/lb.rb +22 -0
  119. data/features/old_cuke_features/step_definitions/mysql_steps.rb +84 -0
  120. data/features/old_cuke_features/terminate.feature +7 -0
  121. data/features/old_cuke_features/tomcat6-tests-TODO +29 -0
  122. data/features/old_cuke_features/tomcat6.feature +27 -0
  123. data/features/patch_test.rb +33 -0
  124. data/features/php.rb +54 -0
  125. data/features/php_elb.rb +78 -0
  126. data/features/rails.rb +54 -0
  127. data/features/start_only.rb +26 -0
  128. data/features/tomcat6.rb +54 -0
  129. data/lib/virtualmonkey.rb +28 -0
  130. data/lib/virtualmonkey/application.rb +75 -0
  131. data/lib/virtualmonkey/application_frontend.rb +42 -0
  132. data/lib/virtualmonkey/command.rb +39 -0
  133. data/lib/virtualmonkey/command/clone.rb +50 -0
  134. data/lib/virtualmonkey/command/create.rb +21 -0
  135. data/lib/virtualmonkey/command/destroy.rb +51 -0
  136. data/lib/virtualmonkey/command/list.rb +10 -0
  137. data/lib/virtualmonkey/command/run.rb +76 -0
  138. data/lib/virtualmonkey/command/troop.rb +146 -0
  139. data/lib/virtualmonkey/cuke_monk.rb +184 -0
  140. data/lib/virtualmonkey/deployment_monk.rb +132 -0
  141. data/lib/virtualmonkey/deployment_runner.rb +333 -0
  142. data/lib/virtualmonkey/ebs.rb +161 -0
  143. data/lib/virtualmonkey/ebs_runner.rb +59 -0
  144. data/lib/virtualmonkey/elb_runner.rb +194 -0
  145. data/lib/virtualmonkey/fe_app_runner.rb +7 -0
  146. data/lib/virtualmonkey/file_locations.rb +7 -0
  147. data/lib/virtualmonkey/frontend.rb +124 -0
  148. data/lib/virtualmonkey/http_checks.rb +33 -0
  149. data/lib/virtualmonkey/index.html.erb +109 -0
  150. data/lib/virtualmonkey/lamp_runner.rb +29 -0
  151. data/lib/virtualmonkey/mysql.rb +172 -0
  152. data/lib/virtualmonkey/mysql_runner.rb +108 -0
  153. data/lib/virtualmonkey/mysql_toolbox_runner.rb +51 -0
  154. data/lib/virtualmonkey/patch_runner.rb +46 -0
  155. data/lib/virtualmonkey/php_aio_trial_chef_runner.rb +6 -0
  156. data/lib/virtualmonkey/php_chef_runner.rb +69 -0
  157. data/lib/virtualmonkey/rails_aio_developer_chef_runner.rb +8 -0
  158. data/lib/virtualmonkey/shared_dns.rb +67 -0
  159. data/lib/virtualmonkey/simple.rb +5 -0
  160. data/lib/virtualmonkey/simple_runner.rb +6 -0
  161. data/lib/virtualmonkey/test_case_interface.rb +151 -0
  162. data/lib/virtualmonkey/unified_application.rb +40 -0
  163. data/spec/bug3518.rb +16 -0
  164. data/spec/concurrent_writes_spec.rb +26 -0
  165. data/spec/cuke_job_spec.rb +26 -0
  166. data/spec/ek.rb +28 -0
  167. data/spec/little_ruby.rb +20 -0
  168. data/spec/mini.rb +25 -0
  169. data/spec/monitoring.rb +13 -0
  170. data/spec/release_aws_dns.rb +5 -0
  171. data/spec/release_dns.rb +5 -0
  172. data/spec/release_dyndns.rb +5 -0
  173. data/spec/shared_resources_spec.rb +25 -0
  174. data/spec/spec.opts +1 -0
  175. data/spec/spec_helper.rb +11 -0
  176. data/spec/virtualmonkey_spec.rb +7 -0
  177. data/virtualmonkey.gemspec +265 -0
  178. metadata +428 -0
@@ -0,0 +1,62 @@
1
+ #@ebs
2
+ #Feature: EBS toolbox tests
3
+ # Tests the RightScale premium ServerTemplate
4
+ #
5
+ # Scenario: Run all EBS toolbox operational scripts
6
+ ##
7
+ ## PHASE 1) Launch a toolbox server and create an EBS stripe with "interesting" data on it.
8
+ ## How many servers do we need? Launch them all and figure it out later.
9
+ ##
10
+ # Given A EBS Toolbox deployment
11
+ @runner = VirtualMonkey::EBSRunner.new(ENV['DEPLOYMENT'])
12
+
13
+ # Then I should set a variation lineage
14
+ @runner.set_var(:set_variation_lineage)
15
+
16
+ # Then I should set a variation stripe count of "3"
17
+ @runner.set_var(:set_variation_stripe_count, 3)
18
+
19
+ # Then I should set a variation volume size "3"
20
+ @runner.set_var(:set_variation_volume_size, 3)
21
+
22
+ # Then I should set a variation mount point "/mnt/ebs"
23
+ @runner.set_var(:set_variation_mount_point, "/mnt/ebs")
24
+
25
+ # Then I should stop the servers
26
+ @runner.behavior(:stop_all)
27
+
28
+ # Then I should launch all servers
29
+ @runner.behavior(:launch_all)
30
+
31
+ # Then I should wait for the state of "all" servers to be "operational"
32
+ @runner.behavior(:wait_for_all, "operational")
33
+
34
+ # Then I should create a new EBS stripe
35
+ @runner.behavior(:create_stripe)
36
+
37
+ ##
38
+ ## PHASE 2) Run checks for the basic scripts
39
+ ##
40
+ # Then I should test the backup script operations
41
+ @runner.behavior(:test_backup_script_operations)
42
+
43
+ ##
44
+ ## PHASE 3) restore the snapshot on another server
45
+ ##
46
+ # Then I should backup the volume
47
+ @runner.behavior(:create_backup)
48
+
49
+ # Then I should test the restore operations
50
+ @runner.behavior(:test_restore)
51
+
52
+ ##
53
+ ## PHASE 4) Do the grow EBS tests
54
+ ##
55
+ # Then I should test the restore grow operations
56
+ @runner.behavior(:test_restore_grow)
57
+
58
+ # Then I should test reboot operations on the deployment
59
+ @runner.behavior(:run_reboot_operations)
60
+
61
+ # Then I should stop the servers
62
+ @runner.behavior(:stop_all)
@@ -0,0 +1,33 @@
1
+ #@lamp_test
2
+ #
3
+ #Feature: LAMP Server Template Test
4
+ # Tests the deployment
5
+ #
6
+ #Scenario: LAMP Server Template Test
7
+ #
8
+ # Given A LAMP deployment
9
+ @runner = VirtualMonkey::LampRunner.new(ENV['DEPLOYMENT'])
10
+
11
+ # Then I should stop the servers
12
+ @runner.behavior(:stop_all)
13
+
14
+ # Then I should launch all servers
15
+ @runner.behavior(:launch_all)
16
+
17
+ # Then I should wait for the state of "all" servers to be "operational"
18
+ @runner.behavior(:wait_for_all, "operational")
19
+
20
+ # Then I should run LAMP checks
21
+ @runner.behavior(:run_lamp_checks)
22
+
23
+ # Then I should run mysql checks
24
+ @runner.behavior(:run_checks)
25
+
26
+ ## Then I should run mysqlslap stress test
27
+ # @runner.behavior(:run_mysqlslap_check)
28
+ #
29
+ # Then I should check that ulimit was set correctly
30
+ @runner.probe(".*", "su - mysql -s /bin/bash -c \"ulimit -n\"") { |s| s.to_i > 1024 }
31
+
32
+ # Then I should check that monitoring is enabled
33
+ @runner.behavior(:check_monitoring)
@@ -0,0 +1,49 @@
1
+ #@lb_test
2
+ #
3
+ #Feature: LB Server Test
4
+ # Tests the LB servers
5
+ #
6
+ #Scenario: LB server test
7
+ #
8
+ # Given An Apache with HAproxy deployment
9
+ @runner = VirtualMonkey::FeAppRunner.new(ENV['DEPLOYMENT'])
10
+
11
+ # Then I should stop the servers
12
+ @runner.behavior(:stop_all)
13
+
14
+ # Then I should set a variation for connecting to shared database host
15
+ @runner.set_var(:set_master_db_dnsname)
16
+
17
+ # When I launch the "Load Balancer" servers
18
+ @runner.behavior(:launch_set, "Load Balancer")
19
+
20
+ # Then I should wait for the state of "Load Balancer" servers to be "operational"
21
+ @runner.behavior(:wait_for_set, "Load Balancer", "operational")
22
+
23
+ # Then I should set a variation LB_HOSTNAME
24
+ @runner.set_var(:set_lb_hostname)
25
+
26
+ # When I launch the "App Server" servers
27
+ @runner.behavior(:launch_set, "App Server")
28
+
29
+ # Then I should wait for the state of "App Server" servers to be "operational"
30
+ @runner.behavior(:wait_for_set, "App Server", "operational")
31
+
32
+ # Then I should run unified application checks on app servers
33
+ @runner.behavior(:run_unified_application_checks, @runner.send(:app_servers))
34
+
35
+ # Then I should run frontend checks
36
+ @runner.behavior(:frontend_checks)
37
+
38
+ # Then I should run log rotation checks
39
+ @runner.behavior(:log_rotation_checks)
40
+
41
+ ## TODO?
42
+ ## When I restart apache
43
+ #
44
+ #
45
+ ## Then apache status should be good
46
+ #
47
+ #
48
+ # Then I should test reboot operations on the deployment
49
+ @runner.behavior(:run_reboot_operations)
@@ -0,0 +1,71 @@
1
+ #@mysql_5.x
2
+ #Feature: mysql 5.x v2 or v4 promote operations test
3
+ # Tests the RightScale premium ServerTemplate
4
+ #
5
+ # Scenario: Setup 2 server deployment and run basic cluster failover operations
6
+ #
7
+ # PHASE 1) Bootstrap and test promote
8
+ #
9
+ # Given A MySQL deployment
10
+ @runner = VirtualMonkey::MysqlRunner.new(ENV['DEPLOYMENT'])
11
+
12
+ # Then I should stop the servers
13
+ @runner.behavior(:stop_all)
14
+
15
+ # Then I should set a variation lineage
16
+ @runner.set_var(:set_variation_lineage)
17
+
18
+ # Then I should set a variation stripe count of "1"
19
+ @runner.set_var(:set_variation_stripe_count, 1)
20
+
21
+ # Then I should set a variation MySQL DNS
22
+ @runner.set_var(:setup_dns, "virtualmonkey_shared_resources") # DNSMadeEasy
23
+
24
+ # Then I should launch all servers
25
+ @runner.behavior(:launch_all)
26
+
27
+ # Then I should wait for the state of "all" servers to be "booting"
28
+ @runner.behavior(:wait_for_all, "booting")
29
+
30
+ # Then I should wait for the state of "all" servers to be "operational"
31
+ @runner.behavior(:wait_for_all, "operational")
32
+
33
+ # Then I should test promotion operations on the deployment
34
+ @runner.behavior(:run_promotion_operations)
35
+
36
+ # Then I should run mysql checks
37
+ @runner.behavior(:run_checks)
38
+
39
+ # Then I should run mysqlslap stress test
40
+ # @runner.behavior(:run_mysqlslap_check)
41
+
42
+ # Then I should check that ulimit was set correctly
43
+ # @runner.behavior(:ulimit_check)
44
+ @runner.probe(".*", "su - mysql -s /bin/bash -c \"ulimit -n\"") { |s| s.to_i > 1024 }
45
+
46
+ # Then I should check that monitoring is enabled
47
+ @runner.behavior(:check_monitoring)
48
+
49
+ #
50
+ # PHASE 2) Reboot
51
+ #
52
+
53
+ # Then I should test reboot operations on the deployment
54
+ @runner.behavior(:run_reboot_operations)
55
+
56
+ #
57
+ # PHASE 3) Additional Tests
58
+ #
59
+
60
+ # Then I should run a restore using OPT_DB_RESTORE_TIMESTAMP_OVERRIDE
61
+ @runner.behavior(:run_restore_with_timestamp_override)
62
+
63
+ #
64
+ # PHASE 4) Terminate
65
+ #
66
+
67
+ # Then I should terminate the servers
68
+ @runner.behavior(:stop_all, true)
69
+
70
+ # Then I should release the DNS
71
+ @runner.behavior(:release_dns)
@@ -0,0 +1,71 @@
1
+ #@mysql_5.x
2
+ #Feature: mysql 5.x v2 or v4 promote operations test
3
+ # Tests the RightScale premium ServerTemplate
4
+ #
5
+ # Scenario: Setup 2 server deployment and run basic cluster failover operations
6
+ #
7
+ # PHASE 1) Bootstrap and test promote
8
+ #
9
+ # Given A MySQL deployment
10
+ @runner = VirtualMonkey::MysqlRunner.new(ENV['DEPLOYMENT'])
11
+
12
+ # Then I should stop the servers
13
+ @runner.behavior(:stop_all)
14
+
15
+ # Then I should set a variation lineage
16
+ @runner.set_var(:set_variation_lineage)
17
+
18
+ # Then I should set a variation stripe count of "1"
19
+ @runner.set_var(:set_variation_stripe_count, 1)
20
+
21
+ # Then I should set a variation MySQL DNS
22
+ @runner.set_var(:setup_dns, "virtualmonkey_awsdns") # AWSDNS
23
+
24
+ # Then I should launch all servers
25
+ @runner.behavior(:launch_all)
26
+
27
+ # Then I should wait for the state of "all" servers to be "booting"
28
+ @runner.behavior(:wait_for_all, "booting")
29
+
30
+ # Then I should wait for the state of "all" servers to be "operational"
31
+ @runner.behavior(:wait_for_all, "operational")
32
+
33
+ # Then I should test promotion operations on the deployment
34
+ @runner.behavior(:run_promotion_operations)
35
+
36
+ # Then I should run mysql checks
37
+ @runner.behavior(:run_checks)
38
+
39
+ # Then I should run mysqlslap stress test
40
+ # @runner.behavior(:run_mysqlslap_check)
41
+
42
+ # Then I should check that ulimit was set correctly
43
+ # @runner.behavior(:ulimit_check)
44
+ @runner.probe(".*", "su - mysql -s /bin/bash -c \"ulimit -n\"") { |s| s.to_i > 1024 }
45
+
46
+ # Then I should check that monitoring is enabled
47
+ @runner.behavior(:check_monitoring)
48
+
49
+ #
50
+ # PHASE 2) Reboot
51
+ #
52
+
53
+ # Then I should test reboot operations on the deployment
54
+ @runner.behavior(:run_reboot_operations)
55
+
56
+ #
57
+ # PHASE 3) Additional Tests
58
+ #
59
+
60
+ # Then I should run a restore using OPT_DB_RESTORE_TIMESTAMP_OVERRIDE
61
+ @runner.behavior(:run_restore_with_timestamp_override)
62
+
63
+ #
64
+ # PHASE 4) Terminate
65
+ #
66
+
67
+ # Then I should terminate the servers
68
+ @runner.behavior(:stop_all, true)
69
+
70
+ # Then I should release the DNS
71
+ @runner.behavior(:release_dns)
@@ -0,0 +1,71 @@
1
+ #@mysql_5.x
2
+ #Feature: mysql 5.x v2 or v4 promote operations test
3
+ # Tests the RightScale premium ServerTemplate
4
+ #
5
+ # Scenario: Setup 2 server deployment and run basic cluster failover operations
6
+ #
7
+ # PHASE 1) Bootstrap and test promote
8
+ #
9
+ # Given A MySQL deployment
10
+ @runner = VirtualMonkey::MysqlRunner.new(ENV['DEPLOYMENT'])
11
+
12
+ # Then I should stop the servers
13
+ @runner.behavior(:stop_all)
14
+
15
+ # Then I should set a variation lineage
16
+ @runner.set_var(:set_variation_lineage)
17
+
18
+ # Then I should set a variation stripe count of "1"
19
+ @runner.set_var(:set_variation_stripe_count, 1)
20
+
21
+ # Then I should set a variation MySQL DNS
22
+ @runner.set_var(:setup_dns, "virtualmonkey_awsdns") # DNSMadeEasy
23
+
24
+ # Then I should launch all servers
25
+ @runner.behavior(:launch_all)
26
+
27
+ # Then I should wait for the state of "all" servers to be "booting"
28
+ @runner.behavior(:wait_for_all, "booting")
29
+
30
+ # Then I should wait for the state of "all" servers to be "operational"
31
+ @runner.behavior(:wait_for_all, "operational")
32
+
33
+ # Then I should test promotion operations on the deployment
34
+ @runner.behavior(:run_promotion_operations)
35
+
36
+ # Then I should run mysql checks
37
+ @runner.behavior(:run_checks)
38
+
39
+ # Then I should run mysqlslap stress test
40
+ # @runner.behavior(:run_mysqlslap_check)
41
+
42
+ # Then I should check that ulimit was set correctly
43
+ # @runner.behavior(:ulimit_check)
44
+ @runner.probe(".*", "su - mysql -s /bin/bash -c \"ulimit -n\"") { |s| s.to_i > 1024 }
45
+
46
+ # Then I should check that monitoring is enabled
47
+ @runner.behavior(:check_monitoring)
48
+
49
+ #
50
+ # PHASE 2) Reboot
51
+ #
52
+
53
+ # Then I should test reboot operations on the deployment
54
+ @runner.behavior(:run_reboot_operations)
55
+
56
+ #
57
+ # PHASE 3) Additional Tests
58
+ #
59
+
60
+ # Then I should run a restore using OPT_DB_RESTORE_TIMESTAMP_OVERRIDE
61
+ @runner.behavior(:run_restore_with_timestamp_override)
62
+
63
+ #
64
+ # PHASE 4) Terminate
65
+ #
66
+
67
+ # Then I should terminate the servers
68
+ @runner.behavior(:stop_all, true)
69
+
70
+ # Then I should release the DNS
71
+ @runner.behavior(:release_dns)
@@ -0,0 +1,54 @@
1
+ #@mysql_5.x
2
+ #Feature: mysql 5.x v1 to v2 upgrade tests
3
+ # Tests the RightScale premium ServerTemplate
4
+ #
5
+ # Scenario: Follow the steps in the v1 to v2 upgrade guide. Then run the mysql checks.
6
+ # http://support.rightscale.com/03-Tutorials/02-AWS/02-Website_Edition/2.1_MySQL_Setup/MySQL_Setup_Migration%3a__EBS_to_EBS_Stripe
7
+ #
8
+ # PHASE 1) Launch a v1 master from a known hardcoded snapshot.
9
+ # TODO - add the steps to create the v1 master from scratch. The upgrade is the major
10
+ # concern so lets get that done first.
11
+ # Prerequisite: A Deployment with a running MySQL EBS Master-DB server
12
+ # (launched using a revision of the "MySQL EBS v1" ServerTemplate)
13
+ # Old school hand crafted deployment: https://my.rightscale.com/deployments/49925. Make sure
14
+ # The one server is still up and running as master DB.
15
+ #
16
+ # Given A MySQL deployment
17
+ @runner = VirtualMonkey::MysqlRunner.new(ENV['DEPLOYMENT'])
18
+
19
+ # Then I should stop the servers
20
+ @runner.behavior(:stop_all)
21
+
22
+ # Then I should set a variation lineage
23
+ @runner.behavior(:set_variation_lineage)
24
+
25
+ # Then I should set a variation stripe count of "3"
26
+ @runner.behavior(:set_variation_stripe_count, 3)
27
+
28
+ #
29
+ # PHASE 2) Launch a new v2 server and migrate from v1
30
+ #
31
+ # Then I should launch all servers
32
+ @runner.behavior(:launch_all)
33
+
34
+ # Then I should wait for the state of "all" servers to be "operational"
35
+ @runner.behavior(:wait_for_all, "operational")
36
+
37
+ # Then I should create the migration script
38
+ @runner.behavior(:create_migration_script)
39
+
40
+ # Then I should migrate a new slave
41
+ @runner.behavior(:migrate_slave)
42
+
43
+ #
44
+ # PHASE 3) Initialize additional slave from v2 snapshots
45
+ #
46
+ # Then I should init a new v2 slave
47
+ @runner.behavior(:launch_v2_slave)
48
+
49
+ # Then I should test the new v2 slave
50
+ @runner.behavior(:run_checks)
51
+
52
+ # Then I should check that ulimit was set correctly
53
+ @runner.behavior(:ulimit_check)
54
+
@@ -0,0 +1,121 @@
1
+ require 'rubygems'
2
+ require 'rest_connection'
3
+ require 'yaml'
4
+ require 'fileutils'
5
+ require 'sqlite3'
6
+ require File.join(File.dirname(__FILE__), "..", "vmonk", "lib", "cuke_monk")
7
+
8
+ def cached_deployments()
9
+ if File.exists?("deployments.cache.yaml")
10
+ puts "Loading deployments from cache.."
11
+ deployments = YAML::load(IO.read("deployments.cache.yaml"))
12
+ else
13
+ deployments = Deployment.find_by(:nickname) { |nick| nick.include?(ENV['DEPLOYMENTS_TAG']) }
14
+ File.open("deployments.cache.yaml", "w") {|f| f.write(deployments.to_yaml)}
15
+ end
16
+ deployments
17
+ end
18
+
19
+ desc "Release MySQL DNS records for reuse"
20
+ task :release_dns do
21
+ raise "Please setup DEPLOYMENT environment variable" unless ENV['DEPLOYMENT']
22
+ SQLite3::Database.new("shared.db") do |db|
23
+ q = db.query("UPDATE mysql_dns SET owner=NULL where owner='#{ENV['DEPLOYMENT']}'")
24
+ q.close
25
+ db.query("SELECT * FROM mysql_dns") do |result|
26
+ puts result.entries
27
+ end
28
+ end
29
+ end
30
+
31
+ desc "Release ALL MySQL DNS records for reuse"
32
+ task :release_all_dns do
33
+ SQLite3::Database.new("shared.db") do |db|
34
+ q = db.query("UPDATE mysql_dns SET owner=NULL")
35
+ q.close
36
+ db.query("SELECT * FROM mysql_dns") do |result|
37
+ puts result.entries
38
+ end
39
+ end
40
+ end
41
+
42
+ desc "Run Parallel Cucumber Features and post results"
43
+ task :run_parallel_features do
44
+ raise "FATAL: please setup $FEATURE environment variable with the filename of Cuke feature test." unless ENV['FEATURE']
45
+ raise "FATAL: please setup DEPLOYMENTS_TAG environment variable, for finding your set of deployments" unless ENV['DEPLOYMENTS_TAG']
46
+
47
+ cm = CukeMonk.new
48
+ set = Deployment.find_by(:nickname) { |nick| nick.include?(ENV['DEPLOYMENTS_TAG']) }
49
+ puts "Found: #{set.size} deployments matching #{ENV['DEPLOYMENTS_TAG']}"
50
+ feature_name = ENV["FEATURE"]
51
+ FileUtils.mkdir_p("log")
52
+ ENV['REST_CONNECTION_LOG'] = "log/rest_connection.log"
53
+ deployment_nicknames = set.map &:nickname
54
+ cm.run_tests(deployment_nicknames, feature_name)
55
+ cm.generate_reports
56
+ end
57
+
58
+ desc "Parallel Cuke test on a set of deployments"
59
+ task :run_parallel_features_old do
60
+ raise "FATAL: please setup $FEATURE environment variable with the filename of Cuke feature test." unless ENV['FEATURE']
61
+ raise "FATAL: please setup DEPLOYMENTS_TAG environment variable, for finding your set of deployments" unless ENV['DEPLOYMENTS_TAG']
62
+ set = Deployment.find_by(:nickname) { |nick| nick.include?(ENV['DEPLOYMENTS_TAG']) }
63
+ puts "Found: #{set.size} deployments matching #{ENV['DEPLOYMENTS_TAG']}"
64
+ feature_name = ENV["FEATURE"]
65
+ FileUtils.mkdir_p("log")
66
+ children = []
67
+ set.each do |dep|
68
+ ENV['DEPLOYMENT'] = dep.nickname
69
+ ENV['REST_CONNECTION_LOG'] = "log/rest_connection.#{ENV['DEPLOYMENT']}-#{dep.nickname}.log"
70
+ children << Process.fork {
71
+ cmd = "cucumber #{feature_name} --out 'log/#{ENV['DEPLOYMENT']}-#{dep.nickname}.log'"
72
+ puts "RUNNING: #{cmd}"
73
+ success = system(cmd)
74
+ if success
75
+ FileUtils.mv("log/#{ENV['DEPLOYMENT']}-#{dep.nickname}.log","log/COMPLETED-#{ENV['DEPLOYMENT']}-#{dep.nickname}.log")
76
+ else
77
+ FileUtils.mv("log/#{ENV['DEPLOYMENT']}-#{dep.nickname}.log","log/FAILED-#{ENV['DEPLOYMENT']}-#{dep.nickname}.log")
78
+ end
79
+ }
80
+ end
81
+
82
+ Signal.trap("SIGINT") do
83
+ puts "Caught CTRL-C, killing children.."
84
+ children.each {|c| Process.kill("INT", c)}
85
+ sleep 1
86
+ children.each {|c| Process.kill("INT", c)}
87
+ end
88
+
89
+ children.each {|c| Process.wait2(c)}
90
+ puts "Run finished"
91
+
92
+ end
93
+
94
+ desc "TERMINATE all servers in all deployments specified by DEPLOYMENTS_TAG"
95
+ task :kill_all do
96
+ raise "FATAL: please setup DEPLOYMENTS_TAG environment variable, for finding your set of deployments" unless ENV['DEPLOYMENTS_TAG']
97
+ set = cached_deployments
98
+ set.each {|n| STDOUT.puts n.nickname}
99
+ STDOUT.puts "10 seconds till ..TERMINATING all servers in these deployments ^^^^. CTRL-C to abort."
100
+ sleep 10
101
+ set.each do |deploy|
102
+ servers = deploy.servers
103
+ servers.each { |s| s.stop }
104
+ end
105
+ end
106
+
107
+ desc "RELAUNCH all *running servers in deployments specified by DEPLOYMENTS_TAG"
108
+ task :relaunch_all do
109
+ raise "FATAL: please setup DEPLOYMENTS_TAG environment variable, for finding your set of deployments" unless ENV['DEPLOYMENTS_TAG']
110
+ set = cached_deployments
111
+ set.each {|n| STDOUT.puts n.nickname}
112
+ STDOUT.puts "10 seconds till ..RELAUNCHING all servers in these deployments ^^^^. CTRL-C to abort."
113
+ sleep 10
114
+ set.each do |deploy|
115
+ my_servers = deploy.servers
116
+ my_servers.each do |s|
117
+ s.relaunch
118
+ end
119
+ end
120
+ end
121
+