PageRenderTime 22ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/ec2deploy/src/test/groovy/net/chrisrichardson/ec2deployer/applications/WebAppTest.groovy

http://cloudtools.googlecode.com/
Groovy | 269 lines | 175 code | 47 blank | 47 comment | 0 complexity | 13b3c68cebd20a99bc4c581c84310eda MD5 | raw file
Possible License(s): Apache-2.0
  1. package net.chrisrichardson.ec2deployer.applications
  2. import net.chrisrichardson.ec2deployer.applications.WebApp
  3. import groovy.mock.interceptor.MockFor
  4. import net.chrisrichardson.ec2deployer.core.EC2Server
  5. import net.chrisrichardson.ec2deployer.core.S3Synchronizer
  6. import net.chrisrichardson.ec2deployer.core.AWSProperties
  7. class WebAppTest extends GroovyTestCase {
  8. MockFor mockTomcatServer
  9. MockFor mockEc2Server
  10. MockFor mockS3Synchronizer
  11. public void setUp() {
  12. mockTomcatServer = new MockFor(TomcatServer)
  13. mockEc2Server = new MockFor(EC2Server)
  14. mockS3Synchronizer = new MockFor(S3Synchronizer)
  15. }
  16. public void testS3BucketOfNonS3Url() {
  17. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "foo")
  18. assertEquals "foo-tmp-war", webApp.s3Bucket
  19. }
  20. public void testS3BucketOfS3UrlWithoutPath() {
  21. WebApp webApp = new WebApp("s3://myBucket", "foo")
  22. assertEquals "myBucket", webApp.s3Bucket
  23. }
  24. public void testS3BucketOfS3UrlWithPath() {
  25. WebApp webApp = new WebApp("s3://myBucket/somepath", "foo")
  26. assertEquals "myBucket", webApp.s3Bucket
  27. }
  28. public void testSubDirectoryOfNonS3Url() {
  29. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "foo")
  30. assertEquals "/myWebApp", webApp.subDirectory
  31. }
  32. public void testSubDirectoryOfNonS3UrlOnWindows() {
  33. WebApp webApp = new WebApp("c:\\home\\users\\foo\\myWebApp", "foo")
  34. assertEquals "/myWebApp", webApp.subDirectory
  35. }
  36. public void testSubDirectoryOfS3UrlWithoutPath() {
  37. WebApp webApp = new WebApp("s3://myBucket", "foo")
  38. assertEquals "", webApp.subDirectory
  39. }
  40. public void testSubDirectoryOfS3UrlWithPath() {
  41. WebApp webApp = new WebApp("s3://myBucket/somepath", "foo")
  42. assertEquals "/somepath", webApp.subDirectory
  43. }
  44. /*
  45. public void testUpdateWarRootNonS3Url() {
  46. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "ROOT")
  47. mockEc2Server.demand.getAwsProperties { new AWSProperties(new Properties())}
  48. mockS3Synchronizer.demand.downloadFromS3 {host, String bucketPrefix, String bucket, String dir ->
  49. assertEquals "ROOT-tmp-war", bucket
  50. assertEquals "/tmp/ROOT-tmp-war", dir
  51. }
  52. mockEc2Server.demand.ssh {cmd ->
  53. assertEquals "mkdir -p /usr/catalina.home/deployments/ROOT /usr/catalina.home.other/conf/Catalina/localhost", cmd
  54. }
  55. mockEc2Server.demand.ssh {cmd ->
  56. assertEquals "rsync --del -u -v -r /tmp/ROOT-tmp-war/myWebApp/ /usr/catalina.home/deployments/ROOT", cmd
  57. }
  58. mockEc2Server.demand.ssh {cmd, input ->
  59. assertEquals "cat > /usr/catalina.home.other/conf/Catalina/localhost/ROOT.xml", cmd
  60. assertEquals """
  61. <Context docBase="/usr/catalina.home/deployments/ROOT">
  62. </Context>
  63. """, input
  64. }
  65. mockEc2Server.demand.ssh {cmd ->
  66. assertEquals "rm -fr /usr/catalina.home.other/webapps/ROOT", cmd
  67. }
  68. mockEc2Server.use {
  69. EC2Server ec2Server = new EC2Server()
  70. mockTomcatServer.demand.getHost { ec2Server }
  71. mockTomcatServer.demand.getCatalinaHome { "/usr/catalina.home" }
  72. mockTomcatServer.demand.getCatalinaHomeOther { "/usr/catalina.home.other" }
  73. mockTomcatServer.demand.getCatalinaHomeOther { "/usr/catalina.home.other" }
  74. mockTomcatServer.demand.getCatalinaHomeOther { "/usr/catalina.home.other" }
  75. mockS3Synchronizer.use {
  76. mockTomcatServer.use {
  77. TomcatServer tomcatServer = new TomcatServer()
  78. webApp.updateTomcat(tomcatServer, "")
  79. }
  80. }
  81. }
  82. }
  83. */
  84. public void testUpdateWarRootNonS3Url() {
  85. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "ROOT")
  86. mockEc2Server.demand.getAwsProperties { new AWSProperties(new Properties())}
  87. mockS3Synchronizer.demand.downloadFromS3 {host, String bucketPrefix, String bucket, String dir ->
  88. assertEquals "ROOT-tmp-war", bucket
  89. assertEquals "/tmp/ROOT-tmp-war", dir
  90. }
  91. mockEc2Server.demand.ssh {cmd ->
  92. assertEquals "rsync --del -u -v -r /tmp/ROOT-tmp-war/myWebApp/ /usr/catalina.home/webapps/ROOT", cmd
  93. }
  94. mockEc2Server.use {
  95. EC2Server ec2Server = new EC2Server()
  96. mockTomcatServer.demand.getHost { ec2Server }
  97. mockTomcatServer.demand.supportsExplodedWars { true }
  98. mockTomcatServer.demand.getDeploymentDirectory { "/usr/catalina.home/webapps" }
  99. mockS3Synchronizer.use {
  100. mockTomcatServer.use {
  101. TomcatServer tomcatServer = new TomcatServer()
  102. webApp.updateTomcat(tomcatServer, "")
  103. }
  104. }
  105. }
  106. }
  107. public void testUpdateWarNoRootExplodedS3Url() {
  108. WebApp webApp = new WebApp("s3://mybucket/myWebApp", "mycontext")
  109. mockEc2Server.demand.getAwsProperties { new AWSProperties(new Properties())}
  110. mockS3Synchronizer.demand.downloadFromS3 {host, bucketPrefix, bucket, dir ->
  111. assertEquals "mybucket", bucket
  112. assertEquals "/tmp/mybucket", dir
  113. }
  114. mockEc2Server.demand.ssh {cmd ->
  115. assertEquals "rsync --del -u -v -r /tmp/mybucket/myWebApp/ /usr/catalina.home/webapps/mycontext", cmd
  116. }
  117. mockEc2Server.use {
  118. EC2Server ec2Server = new EC2Server()
  119. mockTomcatServer.demand.getHost { ec2Server }
  120. mockTomcatServer.demand.supportsExplodedWars { true }
  121. mockTomcatServer.demand.getDeploymentDirectory { "/usr/catalina.home/webapps" }
  122. mockS3Synchronizer.use {
  123. mockTomcatServer.use {
  124. TomcatServer tomcatServer = new TomcatServer()
  125. webApp.updateTomcat(tomcatServer, "")
  126. }
  127. }
  128. }
  129. }
  130. public void testUpdateUnexplodedWarS3Url() {
  131. Properties properties = new Properties()
  132. properties.setProperty("accessKey", "MyAccessKey")
  133. properties.setProperty("secretKey", "MySecretKey")
  134. AWSProperties awsProperties = new AWSProperties(properties)
  135. WebApp webApp = new WebApp("s3://mybucket/mywar.war", "foobar")
  136. 2.times { mockEc2Server.demand.getAwsProperties { awsProperties } }
  137. mockEc2Server.demand.ssh {cmd, input ->
  138. assertEquals "rm -f .awssecret ; cat > .awssecret; chmod 0600 .awssecret", cmd
  139. assertEquals "MyAccessKey MySecretKey", input
  140. }
  141. mockEc2Server.demand.ssh {cmd ->
  142. assertEquals "s3get mybucket/mywar.war /usr/catalina.home/webapps/foobar.war", cmd
  143. }
  144. mockEc2Server.use {
  145. EC2Server ec2Server = new EC2Server()
  146. mockTomcatServer.demand.getHost { ec2Server }
  147. mockTomcatServer.demand.getDeploymentDirectory { "/usr/catalina.home/webapps" }
  148. mockS3Synchronizer.use {
  149. mockTomcatServer.use {
  150. TomcatServer tomcatServer = new TomcatServer()
  151. webApp.updateTomcat(tomcatServer, "")
  152. }
  153. }
  154. }
  155. }
  156. public void testUpdateWarNonS3Url() {
  157. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "foo")
  158. mockEc2Server.demand.getAwsProperties { new AWSProperties(new Properties())}
  159. mockS3Synchronizer.demand.downloadFromS3 {host, bucketPrefix, bucket, dir ->
  160. assertEquals "somePrefix", bucketPrefix
  161. assertEquals "foo-tmp-war", bucket
  162. assertEquals "/tmp/foo-tmp-war", dir
  163. }
  164. mockEc2Server.demand.ssh {cmd ->
  165. assertEquals "rsync --del -u -v -r /tmp/foo-tmp-war/myWebApp/ /usr/catalina.home/webapps/foo", cmd
  166. }
  167. mockEc2Server.use {
  168. EC2Server ec2Server = new EC2Server()
  169. mockTomcatServer.demand.getHost { ec2Server }
  170. mockTomcatServer.demand.supportsExplodedWars { true }
  171. mockTomcatServer.demand.getDeploymentDirectory { "/usr/catalina.home/webapps" }
  172. mockS3Synchronizer.use {
  173. mockTomcatServer.use {
  174. TomcatServer tomcatServer = new TomcatServer()
  175. webApp.updateTomcat(tomcatServer, "somePrefix")
  176. }
  177. }
  178. }
  179. }
  180. public void testUpdateWarNonS3UrlAsUnexplodedWar() {
  181. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "foo")
  182. mockEc2Server.demand.getAwsProperties { new AWSProperties(new Properties())}
  183. mockS3Synchronizer.demand.downloadFromS3 {host, bucketPrefix, bucket, dir ->
  184. assertEquals "somePrefix", bucketPrefix
  185. assertEquals "foo-tmp-war", bucket
  186. assertEquals "/tmp/foo-tmp-war", dir
  187. }
  188. mockEc2Server.demand.ssh {cmd ->
  189. assertEquals "cd /tmp/foo-tmp-war/myWebApp; jar cf /tmp/foo.war . ; cp /tmp/foo.war /usr/catalina.home/webapps", cmd
  190. }
  191. mockEc2Server.use {
  192. EC2Server ec2Server = new EC2Server()
  193. mockTomcatServer.demand.getHost { ec2Server }
  194. mockTomcatServer.demand.supportsExplodedWars { false }
  195. mockTomcatServer.demand.getDeploymentDirectory { "/usr/catalina.home/webapps" }
  196. mockS3Synchronizer.use {
  197. mockTomcatServer.use {
  198. TomcatServer tomcatServer = new TomcatServer()
  199. webApp.updateTomcat(tomcatServer, "somePrefix")
  200. }
  201. }
  202. }
  203. }
  204. public void testUploadToS3() {
  205. WebApp webApp = new WebApp("/home/users/foo/myWebApp", "foo")
  206. mockS3Synchronizer.demand.uploadToS3 { wars, bucketPrefix, bucket ->
  207. assertEquals "myPrefix", bucketPrefix
  208. assertEquals (["/home/users/foo/myWebApp"], wars)
  209. assertEquals "foo-tmp-war", bucket
  210. }
  211. mockS3Synchronizer.use {
  212. webApp.uploadToS3(new AWSProperties(new Properties()), "myPrefix")
  213. }
  214. }
  215. }