install-plugins.bats 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #!/usr/bin/env bats
  2. SUT_IMAGE=bats-jenkins
  3. load 'test_helper/bats-support/load'
  4. load 'test_helper/bats-assert/load'
  5. load test_helpers
  6. @test "build image" {
  7. cd $BATS_TEST_DIRNAME/..
  8. docker_build -t $SUT_IMAGE .
  9. }
  10. @test "plugins are installed with plugins.sh" {
  11. run docker build -t $SUT_IMAGE-plugins $BATS_TEST_DIRNAME/plugins
  12. assert_success
  13. # replace DOS line endings \r\n
  14. run bash -c "docker run --rm $SUT_IMAGE-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
  15. assert_success
  16. assert_line 'maven-plugin.jpi'
  17. assert_line 'maven-plugin.jpi.pinned'
  18. assert_line 'ant.jpi'
  19. assert_line 'ant.jpi.pinned'
  20. }
  21. @test "plugins are installed with install-plugins.sh" {
  22. run docker build -t $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
  23. assert_success
  24. refute_line --partial 'Skipping already bundled dependency'
  25. # replace DOS line endings \r\n
  26. run bash -c "docker run --rm $SUT_IMAGE-install-plugins ls --color=never -1 /var/jenkins_home/plugins | tr -d '\r'"
  27. assert_success
  28. assert_line 'maven-plugin.jpi'
  29. assert_line 'maven-plugin.jpi.pinned'
  30. assert_line 'ant.jpi'
  31. assert_line 'ant.jpi.pinned'
  32. assert_line 'credentials.jpi'
  33. assert_line 'credentials.jpi.pinned'
  34. assert_line 'mesos.jpi'
  35. assert_line 'mesos.jpi.pinned'
  36. # optional dependencies
  37. refute_line 'metrics.jpi'
  38. refute_line 'metrics.jpi.pinned'
  39. # plugins bundled but under detached-plugins, so need to be installed
  40. assert_line 'javadoc.jpi'
  41. assert_line 'javadoc.jpi.pinned'
  42. assert_line 'mailer.jpi'
  43. assert_line 'mailer.jpi.pinned'
  44. }
  45. @test "plugins are installed with install-plugins.sh even when already exist" {
  46. run docker build -t $SUT_IMAGE-install-plugins-update --no-cache $BATS_TEST_DIRNAME/install-plugins/update
  47. assert_success
  48. assert_line "Using provided plugin: ant"
  49. refute_line --partial 'Skipping already bundled dependency'
  50. # replace DOS line endings \r\n
  51. run bash -c "docker run --rm $SUT_IMAGE-install-plugins-update unzip -p /var/jenkins_home/plugins/maven-plugin.jpi META-INF/MANIFEST.MF | tr -d '\r'"
  52. assert_success
  53. assert_line 'Plugin-Version: 2.13'
  54. }
  55. @test "plugins are getting upgraded but not downgraded" {
  56. # Initial execution
  57. run docker build -t $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
  58. assert_success
  59. local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work"
  60. mkdir -p $work
  61. # Image contains maven-plugin 2.7.1 and ant-plugin 1.3
  62. run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins true"
  63. assert_success
  64. run unzip_manifest maven-plugin.jpi $work
  65. assert_line 'Plugin-Version: 2.7.1'
  66. run unzip_manifest ant.jpi $work
  67. assert_line 'Plugin-Version: 1.3'
  68. # Upgrade to new image with different plugins
  69. run docker build -t $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
  70. assert_success
  71. # Images contains maven-plugin 2.13 and ant-plugin 1.2
  72. run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
  73. assert_success
  74. run unzip_manifest maven-plugin.jpi $work
  75. assert_success
  76. # Should be updated
  77. assert_line 'Plugin-Version: 2.13'
  78. run unzip_manifest ant.jpi $work
  79. # 1.2 is older than the existing 1.3, so keep 1.3
  80. assert_line 'Plugin-Version: 1.3'
  81. }
  82. @test "clean work directory" {
  83. run bash -c "rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work"
  84. }
  85. @test "do not upgrade if plugin has been manually updated" {
  86. run docker build -t $SUT_IMAGE-install-plugins $BATS_TEST_DIRNAME/install-plugins
  87. assert_success
  88. local work; work="$BATS_TEST_DIRNAME/upgrade-plugins/work"
  89. mkdir -p $work
  90. # Image contains maven-plugin 2.7.1 and ant-plugin 1.3
  91. run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-install-plugins curl --connect-timeout 20 --retry 5 --retry-delay 0 --retry-max-time 60 -s -f -L https://updates.jenkins.io/download/plugins/maven-plugin/2.12.1/maven-plugin.hpi -o /var/jenkins_home/plugins/maven-plugin.jpi"
  92. assert_success
  93. run unzip_manifest maven-plugin.jpi $work
  94. assert_line 'Plugin-Version: 2.12.1'
  95. run docker build -t $SUT_IMAGE-upgrade-plugins $BATS_TEST_DIRNAME/upgrade-plugins
  96. assert_success
  97. # Images contains maven-plugin 2.13 and ant-plugin 1.2
  98. run bash -c "docker run -u $UID -v $work:/var/jenkins_home --rm $SUT_IMAGE-upgrade-plugins true"
  99. assert_success
  100. run unzip_manifest maven-plugin.jpi $work
  101. assert_success
  102. # Shouldn't be updated
  103. refute_line 'Plugin-Version: 2.13'
  104. }
  105. @test "clean work directory" {
  106. run bash -c "rm -rf $BATS_TEST_DIRNAME/upgrade-plugins/work"
  107. }